B2B inbound lead fit
Sort inbound demo requests, contact-form messages and trial sign-up notes for a B2B product into qualified now, nurture later, existing-customer expansion, not a fit, or unclear, so founders and small sales teams spend calls on the right people.
F@fLimits to keep in mind
This only sorts the lead. It does not reply, book meetings, or update a CRM.
Fit rules change as the company learns; review the ideal customer profile regularly.
Problem
Early-stage B2B companies get a mix of inbound leads: serious buyers with a deadline, curious researchers, existing customers wanting more, students, job seekers and vendors disguised as prospects. Founders end up booking calls with everyone or letting good leads wait days.
Goal
Label each inbound lead so qualified buyers get a fast call, future prospects go into a nurture sequence, expansion requests go to the account owner, poor fits get a polite self-serve reply, and vague messages get one clarifying question, with a human reviewing borderline cases.
Input / state
The inbound lead message plus any known company details and your ideal customer profile.
- lead_message
- The demo request, contact form text or trial sign-up note, as written by the lead.
- company_info
- What is known about the sender: company name, size, industry, role, and whether they are already a customer.
- ideal_customer_profile
- A short description of who the product is for (industry, company size, use case).
Decision question
lead_fitHow should this inbound B2B lead be handled? Use qualified_now when the sender matches the ideal customer profile and states a current need, timeline or budget. Use nurture_later when they fit but are only researching or planning far ahead. Use expansion_existing when an existing customer asks for more seats, plans, teams or add-ons. Use not_a_fit for companies outside the profile, unsupported use cases, students, job seekers and vendor pitches. Use unclear when the message is too vague to tell who they are or what they need.
Options
qualified_nowMatches the ideal customer profile and shows a real current need, budget or timeline, and a person who can decide or influence the purchase.nurture_laterA plausible future customer with no active need, budget or timeline yet, such as early research or next-year planning.expansion_existingAn existing customer asking about more seats, a higher plan, another team, or an add-on.not_a_fitOutside the target market, wants something the product does not do, is a student or job seeker, or is a vendor pitch rather than a buyer.unclearThe message is too short or vague to tell who they are or what they want.
Allowed outcomes
Decided in your code from the answer and its confidence. Thresholds are yours to set and test.
- Founder reviews itConfidence is below your threshold: probability is spread across options.
- Book a call this weekChoice is qualified_now and confidence meets your threshold.
- Add to nurtureChoice is nurture_later and confidence meets your threshold.
- Route to account ownerChoice is expansion_existing and confidence meets your threshold.
- Send self-serve replyChoice is not_a_fit and confidence meets your threshold.
- Ask one questionChoice is unclear and confidence meets your threshold.
Example scenarios
Predefined demonstrations. No model is called; the outcome shown is an illustrative judgment.
Example state
{
"company_info": "BrightSmile Dental Group, 140 staff, not a customer",
"lead_message": "We run 12 dental clinics and need a shared scheduling tool live before our new booking line opens in January. Can we see a demo next week? I'm the operations director.",
"ideal_customer_profile": "Multi-location healthcare practices with 5-50 sites"
}Outcome
IllustrativeChoice is qualified_now and confidence meets your threshold.
Why
Fits the profile with a current need, deadline and a decision-maker.
Using it well
- Judge fit against the ideal_customer_profile given in the input, not against your own idea of a good customer.
- Company size or a famous brand alone does not make a lead qualified_now; there must be a current need or timeline.
- Prefer expansion_existing over qualified_now whenever company_info says they are already a customer.
- Vendors offering services (agencies, outsourcing, SEO, lead lists) are not_a_fit even if they ask for a demo.
- Do not guess budget or authority that the message does not mention.
Request definition
POST https://api.typesafe.ai/v1/systemone{
"model": "jev-latest",
"state": {
"lead_message": "<lead_message>",
"company_info": "<company_info>",
"ideal_customer_profile": "<ideal_customer_profile>"
},
"questions": {
"lead_fit": {
"type": "choice",
"instructions": "How should this inbound B2B lead be handled? Use qualified_now when the sender matches the ideal customer profile and states a current need, timeline or budget. Use nurture_later when they fit but are only researching or planning far ahead. Use expansion_existing when an existing customer asks for more seats, plans, teams or add-ons. Use not_a_fit for companies outside the profile, unsupported use cases, students, job seekers and vendor pitches. Use unclear when the message is too vague to tell who they are or what they need.",
"criteria": {
"qualified_now": "Matches the ideal customer profile and shows a real current need, budget or timeline, and a person who can decide or influence the purchase.",
"nurture_later": "A plausible future customer with no active need, budget or timeline yet, such as early research or next-year planning.",
"expansion_existing": "An existing customer asking about more seats, a higher plan, another team, or an add-on.",
"not_a_fit": "Outside the target market, wants something the product does not do, is a student or job seeker, or is a vendor pitch rather than a buyer.",
"unclear": "The message is too short or vague to tell who they are or what they want."
}
}
}
}Request shape from the System One API reference; a Kev server accepts the same body. Replace the placeholder state with your data. Requests need your own API key or server.
Version History
Initial version