omni/leads
EN
Log in Start free

ICP→ discovery→ enrichment→ score

Your next 500 customers,
already listed.

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.

Start free See how it works No credit card. Bring your own API keys.
discovery.log — google_places · apollo live
waiting for results

sample data — real leads look exactly like this

Google Places· Apollo· Hunter.io· Saleshandy· Evolution API· n8n· Make· Google Places· Apollo· Hunter.io· Saleshandy· Evolution API· n8n· Make·

01 / How it works

ICP is data, not code.

  1. 01

    Define the ICP

    Segment, keywords, regions, job titles and signals. Manually, or paste the JSON your AI agent returns.

    icps.criteria → jsonb

  2. 02

    Discover

    Each driver maps the ICP to its own query grid. Places by city, Apollo by title, registries by activity code.

    queue: discovery

  3. 03

    Enrich

    Free first: the website. Then Hunter for email, Evolution to validate WhatsApp. Every raw payload is kept.

    queue: enrichment

  4. 04

    Score & act

    Weighted score 0–100 against your criteria. Qualified leads hit your webhook or your WhatsApp.

    queue: scoring

02 / Ask AI

Zero tokens billed.

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.

  • ✓ Works with ChatGPT, Claude, Gemini, whatever
  • ✓ JSON Schema validation with human errors
  • ✓ Switch to manual at any step

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

0/100
  • ✓ Country within ICP US +20
  • ✓ Has its own website bellaaesthetics.com +20
  • ✓ ≥ 20 reviews 120 reviews +15
  • ✓ Rating ≥ 4.3 rating 4.8 +15
  • ✓ Email found [email protected] +15
  • — Valid WhatsApp not verified +15

03 / Scoring

Every lead gets a number.

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

signals

0–100

normalized

100%

raw payload kept

04 / Outbound

Built to leave the spreadsheet.

POST · X-OmniLeads-Signature: sha256=…

Signed webhooks

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

WhatsApp, first touch

Validated number, templated message, one click. The lead is marked as contacted on delivery.

schedule · hourly

Re-runs itself

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

Or just export

Filtered, selected, one click. Opens clean in Excel and Numbers.

config · cost_per_request

Know what it costs

Every API request is counted per ICP. Estimated spend sits next to the funnel.

Stop scraping.
Start selecting.