# The inbound qualification engine

> Every book-a-call form fills its own gaps, runs two stages of checks, and lands on one of three verdicts before anyone picks up the phone.

- Canonical page: https://warmup.ai/library/inbound-qualification-engine
- By Mike Hurley, founder of WarmUp. We built this for a company's book-a-call form. It is running as a pilot: it reads the CRM and writes nothing back yet.
- Version 1.0. Last updated 2026-10-01. About 7 minutes.
- Board: https://warmup.ai/library/inbound-qualification-engine.webp
- Full build guide: https://warmupai.notion.site/The-inbound-qualification-engine-3ecde1f21b8f811faf29df6f99dfb534

**A form with three fields to a verdict with its evidence, before anyone picks up the phone.**

How to read the board: Left to right, following the numbers: the form and the gaps it leaves, the engine, Stage 1 (is the pain there?), Stage 2 (is it big enough?), the verdict. The band at the bottom is the four places we chose to be strict.

## Why it helps

A short form gets filled in. Ask for a name, a company and an email and people book. Ask for a title, a website and a company size and fewer do. The cost of the short form lands on the rep, who opens the call knowing a name and an email address and spends the first ten minutes finding out whether the company is one you can help.

The engine does that finding out before the call. It turns the email into a company, finds the person's title, and runs five checks in two stages. The rep gets one of three answers with the evidence behind each check: call now, take a look first, or not a fit right now. A good account with the wrong person on the form is still flagged as a good account, with a note to reach someone else there.

What I cannot tell you yet is what it does to close rates. It is a pilot. The verdicts are being read by a person beside the calls that follow, and nothing is written to the CRM until the field names are approved.

## Why we built it this way

- **Every check has three answers.** Pass, fail or unknown, each with the evidence that produced it. A check that can only say yes or no has to guess when the lookup comes back empty, and the guess is invisible later.
- **Finding nothing is not a pass.** The definition we started from let "no tool detected" count as a pass. A lookup that finds nothing mostly proves the lookup is thin. We changed it: two independent sources must both come back clean, and one of them must find a sign of the manual process. Clean and silent is unknown.
- **Pain first, size second.** Stage 1 asks whether the problem exists at this company. Stage 2 asks whether the company is large enough for it to matter. A big company without the problem is not a lead.
- **Sizing is a soft gate.** Revenue and spend are estimates. Stage 2 passes on either check and fails only when both fail with confidence. An estimate alone never parks a lead.
- **There is a third verdict.** A free-mail address, a failed lookup or two sources that disagree all go to Needs review. A person taking a short look beats a confident wrong answer.
- **The person is checked after the account.** The job title is tested against the buyer personas once the account has its verdict, so a junior person at a strong account does not sink the account.
- **The company profile is bought once.** One enrichment feeds three checks. Your own map is read before anything is bought.

## How to build it

1. **Write the checks down before you build anything.** One file: each check, its sources, and what counts as pass, fail and unknown. The person who owns the definition of a good customer signs off on this file, not on the workflow.
2. **Fill the identity gaps first.** Email to company domain. A free-mail address stops here and goes to Needs review. Name and company to a public profile and a job title. A title already in the CRM wins.
3. **Read your own map before you spend.** If the company is already classified, reuse its segment. Otherwise buy one company profile (description, headcount, HQ) and use it for every check that needs it.
4. **Run Stage 1.** Three checks, each returning pass, fail or unknown with its evidence. The stage passes on two or more passes, fails on two or more fails, and is unknown otherwise.
5. **Run Stage 2 only when Stage 1 passes.** Revenue from enrichment, or implied by headcount with a range you have written down. Spend as a band with a confidence. A figure a rep confirms on a call replaces the estimate.
6. **Decide the verdict by rule.** Both stages pass: in ICP. A stage fails with confidence: not ICP. Anything else: needs review. Then check the person's title against your personas.
7. **Keep the write-back off at first.** Record the verdict, the five answers, the evidence and the persona in the workflow's own table. Have a person read them beside the real calls for a few weeks. Turn on the CRM write when the answers hold up and the field names are agreed.
8. **Give it a reader.** Someone looks at Needs review every morning. Every wrong call becomes a change to the checks file, never a hand edit to one row.

## Copy this: The checks file and the verdict rules

The shape of the file, with the thresholds taken out. Put your segments, your role titles and your ranges where the placeholders are.

```yaml
# checks.yaml: every check answers pass | fail | unknown and keeps its evidence
stage_1:   # is the pain there?   pass on 2+ passes, fail on 2+ fails, otherwise unknown
  - check:   problem_unsolved
    sources: [research agent, technology lookup]        # two, independent
    pass:    both find no tool in place AND one finds a sign of the manual process
    fail:    either finds a tool that already does the job
    unknown: both clean but no sign of the manual process, or a source errored
  - check:   right_kind_of_company
    sources: [your own map, else a research agent]      # into one fixed list of segments
    pass:    a segment you sell to
    fail:    a segment you have ruled out
    unknown: unclassified, or thin evidence
  - check:   enough_people_feel_it
    sources: [count of public profiles by job title]    # your list of role titles
    pass:    3 or more
    fail:    a number below 3
    unknown: the lookup returned nothing
stage_2:   # is it big enough?   soft gate: pass on either, fail only when both fail with confidence
  - check:   revenue_in_range
    sources: [revenue enrichment, else headcount x your revenue-per-employee range]
    pass:    the right type of business AND revenue or the headcount band in range
    fail:    the wrong type, or both revenue and headcount outside the range
    unknown: no revenue figure and no headcount
  - check:   spend_in_range
    sources: [research estimate as a band with a confidence, replaced by a rep-confirmed figure]
    pass:    above your floor at high or medium confidence, or confirmed
    fail:    well below the floor at high or medium confidence, or confirmed below
    unknown: low confidence, the middle band, or no band
verdict:
  in_icp:        stage_1 passes and stage_2 passes
  not_icp:       stage_1 fails, or stage_2 fails
  needs_review:  anything else, and always for a free-mail address, a failed lookup, or sources that disagree
person:      title -> one of your personas, checked after the account verdict; no match = fail
write_back:  off until the field names are approved
```

## Words we use

- **Check:** One question asked of a company or a person, with three possible answers: pass, fail or unknown. Every check keeps the evidence behind its answer.
- **Unknown:** The answer a check gives when it cannot tell. An unknown is never counted as a pass. It waits for a person or for a missing fact.
- **Verdict:** What a workflow decides after its checks, with the reasons. A person can always see why.
- **The map:** One table of companies, keyed on domain, with a status, a segment, a tier and a reason for each. Nothing is deleted from it. A status changes when a fact does.

## Talk to a person

Want your form qualified before the call? WarmUp builds these systems for companies, or places a verified GTM engineer to run them: https://warmup.ai/gtm-systems and https://warmup.ai/hire. WarmUp publishes no pricing.
