All pages

Lead types

Who is writing and what they want: free work for equity, no budget, a sales pitch. Discard the ones you do not want with a rule.

Every message and every conversation comes back with leads: what kind of lead is writing, scored per type from 0 to 1. It is for contact forms, inboxes and marketplaces that want to know who is on the other side before spending time on them, and to discard the ones they do not want with a rule.

{
  "decision": "block",
  "scores": {},
  "leads": {
    "free_work_for_equity": 0.9,
    "no_budget": 0.7,
    "scope_creep": 0.7
  }
}

The types

TypeWhat it looks like
free_work_for_equity
Free work for equity
"I have an idea, you build it and get a small share of the company, no pay for now."
no_budget
No budget
"We don't have a budget, could you do it for free? It would be good for your portfolio."
unrealistic_expectations
Unrealistic expectations
"An app like Uber, something simple, in a week."
free_consulting
Free consulting
A requirements document asking for the full architecture, estimates and total cost of ownership, with no budget given.
scope_creep
Scope creep
"It is an open proposal, it may change. We would also need this. Here are more documents."
no_show
Never turns up
"Sorry I missed the call, can we reschedule?", again and again.
sales_pitch
Sales pitch
An agency or vendor selling to you: services, a special offer, "book a call".
partnership_offer
Partnership offer
"We would like to become partners, there are synergies."
job_seeker
Job seeker
"Attached is my CV in case you have openings."
student_or_survey
Student or survey
"I'm a student writing my thesis, could you answer a few questions?"
support_request
Support request
"My invoice did not arrive, my order number is 1234."

How a type is scored

Each type is a few families of phrases, in English, Spanish, Portuguese, French, Italian, German, Catalan and Dutch. One family on its own is how honest people talk: "I have an idea" is how good projects start, and "free" is in every shop window. So one family scores 0.45, two score 0.70 and three or more score 0.90. A rule around 0.6 acts on the shape and not on a word.

A phrase does not have to be written the way the list writes it. Its meaningful words count when they appear close together, in any order and with any ending, so "you build it" is also found in "it would be built by you". Negations are never dropped: "no budget" is not found in "we have a budget".

  • Never turns up is counted per message, not per phrase: moving a call or apologising for missing one happens to everybody once, twice is a pattern, three times is somebody who never turns up. Only their own messages count, so being stood up yourself is not a lead type.
  • Several types at once. The same person is often more than one, and each type gets its own score.
  • The whole conversation. Send it to /v1/conversation and everything the author of the last message has said counts, because nobody asks for free work in one sentence. What the other side said is theirs.
  • What keeps it honest. "Salary plus equity" is a job, not free work for equity. A request for proposal that states a budget is a real one. A buyer asking what a website would cost is never a sales pitch.
  • Pressure counts. Years without pay, "you only care about money" or blaming earlier providers raise the two types about money when they are already there.

Discarding a type

A type decides nothing until you give it a line. On a policy, add a rule When: The lead is, pick the type, and choose block or review. Or send it with a call:

"rules": { "leads": { "free_work_for_equity": { "block": 0.6 }, "sales_pitch": { "review": 0.6 } } }

With the model

When the call uses the model ("ai": true), it reads the whole conversation, with who said what, and scores every type for the author of the last message, judged against the description of what your business does on the policy. Its scores and the phrases' are merged, and the higher one wins per type: the phrases catch what is said in their words, the model catches the rest. It is the same model call as the rest of the verdict, not a second one.

  • In a conversation the model reads when it adds something: when the free checks found something, when a type is half there (between 0.45 and 0.70), and every fifth message, when it reads the whole thread again. Every new message is a new call, and reading all of them would make a forty-message thread forty model calls. A single /v1/text call is read whenever you ask.
  • What is sent. The most recent part of the conversation goes to the model provider with the last message. Nothing of it is stored here.

A clean answer means "nothing recognisable", not "a good client". Without the model, a lead that asks for the same thing in words no list has scores lower.