BANT vs MEDDIC vs custom criteria in production
EchoStack evaluations are manifest-driven: you declare frameworks or typed detectors once; every webhook, form, and n8n path uses the same rules. This guide is for RevOps and platform engineers picking BANT, MEDDIC, SPICED, CHAMP, or custom detectors before you wire production traffic.
Outcome
You can defend a single answer to “what does qualified mean here?” — and every channel returns the same status semantics for the same field presence.
Quick decision tree
Inbound SMB / self-serve motion?
└─ Yes → Start with BANT (budget, authority, need, timeline)
Enterprise / multi-stakeholder / complex procurement?
└─ Yes → MEDDIC or SPICED (metrics, economic buyer, decision process)
Non-standard signals (partner type, compliance tier, product line)?
└─ Yes → template: "custom" with typed custom_detectors
Same company, multiple motions (PLG + sales-assist)?
└─ Separate evaluation_id per motion — do not reuse one manifest
Framework packs (lead_qualification)
Create an evaluation with template: "lead_qualification" and set framework:
| Framework | Best when | You are optimizing for |
|---|---|---|
| bant | Clear budget/timeline questions on forms and calls | Speed-to-rep for inbound SMB |
| meddic | Committee deals, economic buyer, mutual plan | Forecast hygiene on enterprise |
| spiced | Pain-led discovery, critical event | Mid-market SaaS sales |
| champ | Challenger-style, compelling event | Competitive displacement |
The platform applies the detector pack for that framework. You do not maintain parallel prompts in Zapier.
See Eval API quickstart for the create payload.
What you get back (all frameworks)
Same response contract:
status— derived deterministically from which required fields were found (not a 0–100 score)extracted_fields— structured signalsmissing_fields— gaps forPARTIALroutingnext_action/next_instruction— when requested
Procedural fit: Two runs with the same manifest and the same field presence should yield the same status. That is intentional — it is how you avoid “looks qualified in CRM but failed BANT on audit.”
BANT in production
Use when:
- Demo request and contact forms include budget/timeline (even optional)
- Webhook → evaluate → assign AE (webhook guide)
Watchouts:
- Forms that omit budget always → chronic
PARTIAL(fix the form or accept nurture-only routing) - Branching only on “company size > 50” while ignoring
status→ procedural drift
MEDDIC / SPICED in production
Use when:
- Post-call transcripts include economic buyer and decision process (post-call guide)
- Reps already trained on MEDDIC; you want CRM stages aligned to extracted fields
Watchouts:
- Short webhooks without call context → many
PARTIALresults (expected — route to discovery call, not disqualify) - Expecting numeric MEDDIC “scores” — EchoStack returns field presence and status, not percentages
When to use template: "custom"
Use custom detectors when framework packs do not match your language:
- Partner referrals (
classification:partner|customer|unknown) - Regulatory tier (
presence:pci_scope_mentioned) - Product-line fit (
classificationwith fixed categories)
Rules from the quickstart still apply:
- Every detector needs examples (smoke-tested at create time)
classificationrequires categories; negatives use a catch-all category, notnon_examplespresencesupportsnon_examples
Changing detectors means creating a new evaluation (or versioning your internal config) — do not edit criteria in a Zapier prompt on the side.
One criteria definition, many channels
| Channel | Guide |
|---|---|
| Generic webhook | Webhook inbound qualification |
| HubSpot forms | HubSpot forms |
| n8n / Make / Zapier | n8n, Zapier & Make |
| Call transcripts | Post-call transcript scoring |
Same evaluation_id + esk_… everywhere — “qualified” does not mean one thing in HubSpot and another in n8n.
Anti-patterns
| Anti-pattern | Why it fails |
|---|---|
| GPT step in Zapier + EchoStack evaluate | Two definitions of qualified; outputs diverge |
Branch on extracted_fields.budget alone |
Field confidence varies; status is the contract |
| Numeric lead score in CRM from LLM | Implies precision; use status + explicit fields |
| One evaluation for PLG and enterprise | Mixed required fields → nonsense PARTIAL rates |
Changing framework later
- Create a new evaluation with the new
frameworkor custom detectors. - Point webhooks/n8n at the new
evaluation_id. - Compare Recent evaluations for a week before cutting over CRM branches.
- Keep the old evaluation read-only for audit if compliance asks.
Related guides
Verify before go-live
- Framework matches motion (tree above)
- Required form/call fields actually appear in webhook
content - Automation uses
statusfor owner assignment -
PARTIALhas a defined nurture path - Team agrees “qualified” = manifest required fields, not rep opinion