ICP→ discovery→ enrichment→ score
Describe who you sell to. Omni Leads turns it into searches across Google Places, Apollo and public registries, enriches every business with email and WhatsApp, and scores them against your ICP.
sample data — real leads look exactly like this
01 / How it works
Every source plugs into the same pipeline. Add a driver, not a rewrite.
Segment, keywords, regions, job titles and signals. Manually, or paste the JSON your AI agent returns.
icps.criteria → jsonb
Each driver maps the ICP to its own query grid. Places by city, Apollo by title, registries by activity code.
queue: discovery
Free first: the website. Then Hunter for email, Evolution to validate WhatsApp. Every raw payload is kept.
queue: enrichment
Weighted score 0–100 against your criteria. Qualified leads hit your webhook or your WhatsApp.
queue: scoring
02 / Ask AI
We do not call an LLM. We write the prompt, you paste it into the agent you already pay for, and bring the JSON back. Fences, stray commas, single quotes: the parser cleans it and validates against a schema.
prompt.txt
You are an expert in defining ICPs.
Product context:
- Product: Online scheduling with WhatsApp reminders…
- Problem it solves: No-shows that hurt revenue…
Answer ONLY with a valid JSON:
{ "industry", "keywords", "countries",
"regions", "company_size", "job_titles",
"signals": { … } }
answer.jsonvalid ✓
{
"industry": "aesthetics",
"keywords": ["med spa", "day spa"],
"countries": ["US", "CA"],
"regions": ["Texas", "Ontario"],
"company_size": "1-10",
"job_titles": ["owner", "founder"],
"signals": {
"has_website": true,
"min_reviews": 20,
"min_rating": 4.3
}
}
Bella Aesthetics Studio
bellaaesthetics.com · Austin, US · google_places + apollo
03 / Scoring
Six weighted signals, normalized over what your ICP actually asks for. Above the threshold the lead is qualified and your webhook fires. Weights live in config, not in a deploy.
6
signals0–100
normalized100%
raw payload kept04 / Outbound
POST · X-OmniLeads-Signature: sha256=…
lead.qualified, lead.contacted, lead.enriched, search.finished. HMAC-signed, five retries with backoff, auto-pause after repeated failures. n8n and Make just work.
{
"event": "lead.qualified",
"data": { "id": 4812, "company_name": "Bella Aesthetics Studio",
"score": 85, "email": "hello@…", "whatsapp_valid": true }
}
evolution · sendText
Validated number, templated message, one click. The lead is marked as contacted on delivery.
schedule · hourly
Every 7, 14 or 30 days the ICP searches again. New businesses show up, duplicates merge by tax ID, domain, phone or email.
export · csv ; utf-8
Filtered, selected, one click. Opens clean in Excel and Numbers.
config · cost_per_request
Every API request is counted per ICP. Estimated spend sits next to the funnel.