source → enrich → outreach → book → close
Rented lead databases are someone else's pipeline.
CallHQ scrapes local businesses on your own infrastructure, enriches them through a waterfall that stops at the first hit, and runs email, SMS and dialer outreach behind a compliance firewall that fails closed. One system, from a scraped map to a closed deal — no per-credit lead tax, no rented database.
Sourced this morning — Google Maps · niche: plumbers, roofers, auto, dental
| Business | City | Score | Status |
|---|---|---|---|
| Riverside Plumbing Co. | Leeds | A | enriched |
| Bramwell & Sons Roofing | Manchester | A | enriched |
| Northgate Auto Repair | Bristol | B | enriching |
| Willow Lane Dental | Leeds | B | enriched |
| QuickFix Appliance Ltd | Bristol | C | queued |
Your next customer is already on Google Maps.
Self-hosted scrapers work Google Maps, OpenStreetMap, Companies House and Shopify — niche by niche, city by city, on a schedule. New rows dedupe into your warehouse automatically, so a re-run never doubles a business you already found.
Scheduled source runs
You pay for answers, not attempts.
A provider waterfall tries email finders in order and stops at the first hit — cost-accounted, never a flat per-row charge. Legal form gets resolved for PECR relevance, the whole site gets crawled for AI research columns, and phone intelligence tells you which numbers can legally take an SMS before you ever send one.
Email waterfall — Riverside Plumbing Co.
Ten gates stand between you and a bad send.
Every send — email, SMS, dialer — walks the same guard() chain: suppression, consent ledger with proof, jurisdiction and DNC/CTPS screening, line-type checks, footer requirements. First deny wins, and a gate that can't be evaluated denies by default rather than letting the send through. It runs identically whether a human clicks send or a cadence fires it.
guard() — before this send fires
A missed call is not a lost deal.
A browser-based dialer queues calls by priority; AI writes the call note and summary the moment you hang up. The same lead reaching back by text or email lands in one unified inbox thread, and a booked meeting goes straight onto a router with automated reminders — no lead falls through a channel switch.
Call ended — AI summary
Interested in the Q3 flat-roof backlog. Wants a quote by Friday. Booked a 20-min call Thu 10am.
Revenue remembers where it came from.
Every payment traces back to the search that found it. Pipeline funnel, per-source attribution and cadence analytics live in the same warehouse as the lead — you can tell your accountant exactly which Tuesday scrape run paid for itself.
Revenue by source
the feature index
All 60 of them. What each one does, and how it actually works.
Sourcing
/sourcing →- Google Maps niche scraping
- Finds every business in a niche + city combination.
- A self-hosted Botasaurus scraper drives real browser sessions, with a fallback scraper if Maps blocks it.
- Multi-source coverage
- Pulls from OpenStreetMap, Companies House and Shopify too, not just Maps.
- Each source has its own connector that normalizes results into the same lead shape before they reach your table.
- Scheduled source runs
- Reruns a niche × city combination on a cadence without you remembering to.
- A cron-scheduled job re-queues the same scrape parameters and dedupes the results in.
- Automatic dedupe
- A re-run never hands you the same business twice.
- Incoming rows are matched against the warehouse by name, address and phone before insert.
Enrichment
/data-hub →- Provider waterfall
- Tries the cheapest email finder first and stops at the first hit.
- A cost-accounted chain of providers runs in order; a hit short-circuits every provider after it.
- Legal-form resolution
- Tags each business as sole trader, limited company, etc.
- Cross-references Companies House and site content — PECR treats a sole trader's inbox like a consumer's.
- Full-site crawl
- Reads the business's own website, not just a directory listing.
- A crawler indexes the site so AI research columns have real text to ground answers in.
- Phone intelligence
- Knows which numbers can legally receive an SMS before you send one.
- A Telnyx line-type lookup classifies mobile vs. landline vs. VoIP ahead of the SMS-consent gate.
- Incremental re-enrichment
- Keeps stale records fresh without re-running the whole pipeline.
- A sweep re-checks only the fields that have passed their freshness window.
AI research columns
/claygents →- Grounded research columns
- Answers a plain-English question per row — e.g. "does this business already run ads?"
- The prompt runs against the crawled site content, not the model's imagination; answers cite what was actually found.
- CallHQ Agents
- Turns a natural-language instruction into a saved, reusable column.
- The instruction compiles once into a reusable research spec any lead in the table can re-run.
The grid
/leads →- Clay-style data table
- Sort, filter, saved views and inline edit on every lead.
- A virtualized table renders 10k+ rows smoothly; edits post straight through the row's own server action.
- Per-cell provenance
- Shows exactly which provider or run produced a value.
- Every enrichment write carries its source, surfaced in Data Hub on hover.
- Data Hub fill-rates
- Shows which fields are actually populated across your whole list, not one row.
- A field-by-field completeness report reads the same warehouse the grid does.
- Companies rollup
- Rolls many leads at one business up into a single account view with a score.
- Leads are grouped by resolved company identity and their signals aggregate into an account score.
Scoring & routing
/leads →- Deterministic scoring
- An A–D grade from firmographic and engagement rules you can audit.
- A rules engine reads the same enriched fields the grid shows — no black box.
- AI qualitative scoring
- A second, judgment-based score from unstructured signals.
- An AI pass reads the crawl and research columns and reasons about fit, distinct from the rules score.
- Routing pools
- Sends a lead to the right rep or queue automatically once scored.
- A routing rule matches score and attributes to a pool and assigns on write.
Signals & Flows
/signals →- Trigger rules
- "When X happens, do Y" — without a human watching for it.
- Signals like lead.enriched, reply.received or meeting.booked fire a flow that can enrich, score, route, enroll or notify.
- Flow automation layer
- Chains multiple actions off one trigger.
- A flow definition is a small ordered list of actions the signal engine executes in sequence.
Cadences
/campaigns →- Multi-step, multi-channel sequences
- Email, SMS and LinkedIn steps in one sequence.
- Each step carries its own channel, template and wait, executed by the outbox.
- Send windows
- Never sends outside business hours in the lead's timezone.
- A send-window check runs before the channel-specific guard() gates.
- Engagement auto-exit
- Stops emailing someone who already replied or booked.
- A reply or booking event flips the enrollment state so the next scheduled step never fires.
- A/B variants
- Tests two versions of a step without a manual split.
- Enrollment randomly assigns a variant; analytics report conversion by variant.
- Campaign caps + batching
- Won't blow through a day's send limit in one burst.
- The outbox throttles against the plan's daily send cap and batches the rest for tomorrow.
Unified inbox
/inbox →- Every channel, one thread
- An email reply and an SMS reply from the same lead show up together.
- Replies from each channel webhook into the same conversation record, keyed by lead.
- AI reply classification + drafts
- Tells you if a reply is interested, not-interested, or out-of-office — and drafts a response.
- A classifier reads the reply text; a draft generator proposes a response you can edit before sending.
- One-click guarded send
- Sending the draft still can't bypass compliance.
- The send button calls the identical guard() chain a cadence step calls.
Power dialer
/dialer →- Browser WebRTC dialer
- Call straight from the browser — no desk phone.
- Telnyx WebRTC handles the call leg; no PBX hardware required.
- Priority queue
- Dials your best leads first.
- The queue orders by the same score the grid shows.
- AI call notes + summaries
- A note and a summary appear the moment you hang up.
- The call recording and transcript feed a summarization pass tied to the lead record.
- Dispositions + follow-ups
- Logging an outcome can trigger the next step automatically.
- A disposition write can enroll the lead in a follow-up SMS or email step.
Booking
/appointments →- Self-serve booking pages
- A lead books a slot without a back-and-forth email.
- A public booking page reads real availability and writes an appointment on confirm.
- Meeting router
- Sends the booking to the right calendar or rep.
- A router rule matches the lead or account to an owner before the slot confirms.
- Automated reminders
- Fewer no-shows, with no human sending reminders.
- A scheduled job sends reminder messages ahead of the appointment time.
Compliance firewall
/compliance →- Ten fail-closed gates
- Every send is checked before it fires — not after.
- guard() runs suppression, consent, jurisdiction and channel checks in a fixed order; first deny wins, and an unevaluable gate denies too.
- Consent ledger with proof
- Consent isn't a checkbox a caller can assert — it's a record.
- A ledger is authoritative over any caller-supplied boolean; a gate reads consent from it, never from the request.
- TPS/CTPS + US DNC screening
- UK and US do-not-call registries are screened before every call.
- Jurisdiction resolves first, then the matching registry is checked, with a 28-day re-screen cadence.
- PECR sole-trader email block
- A UK sole trader's email is treated like a consumer's, not a business's.
- Legal-form resolution feeds the PECR gate, which blocks cold email to a resolved sole trader.
- CAN-SPAM footer + one-click unsubscribe
- Every outbound email carries identity, address and a working opt-out.
- The footer gate blocks a send missing required fields; unsubscribe writes straight to the suppression store.
- SMS mobile-only, consent-gated, 10DLC
- SMS never goes to a landline, never goes out cold, and US SMS carries registration.
- Line-type, consent and 10DLC are three separate gates in the SMS chain — any one can deny alone.
- No AI cold calls — ever
- An AI voice never opens a cold call.
- The ai-voiced-call gate is an unconditional, lead-independent deny — it runs before suppression even looks the lead up.
- DSAR erasure + retention sweeps
- A data-subject request can actually erase someone.
- An erasure job walks every table holding that person's data; a retention sweep ages out what's past policy.
Content engine
/content →- AI content studio with approval tiers
- Drafts content and lets you pick how much oversight each piece needs.
- Auto, veto and human tiers gate publish differently per content type.
- Content calendar
- Schedules what publishes when, across channels.
- A calendar view reads the same content pieces the studio creates.
- Faceless video renderingbring your own account
- Turns a script into a captioned video with voiceover.
- A script → voiceover + captions → mp4 render pipeline runs the job end to end.
- Multi-platform social schedulingbring your own account
- One post, scheduled across platforms.
- A Postiz/Blotato integration schedules the same content piece per platform (bring your own connected accounts).
pSEO factory
/sites →- Keyword-cell pipeline
- Turns a list of keywords into published pages.
- Keyword cells feed an AI page generator behind a quality gate before anything publishes.
- Minted subdomains per leadbring your own account
- Each generated site gets its own live subdomain.
- A subdomain is minted and DNS-wired per generated microsite (publish leg is founder-flag gated).
Analytics & attribution
/revenue →- Pipeline + revenue analytics
- See the funnel and the money in the same place.
- Pipeline funnel and revenue reports read off the same lead and deal records the grid uses.
- Per-source attribution
- Every payment traced to the search that found it.
- Revenue rows carry the sourcing run's niche, city and source back to the original scrape.
- Deliverability dashboard
- Know if your emails are landing before a campaign tanks.
- Bounce, complaint and spam-trap signals roll up per sending domain.
- Cadence analytics
- See which step or variant of a sequence actually converts.
- Enrollment and reply events aggregate by cadence step and A/B variant.
Platform
/settings/api-keys →- REST API + MCP server
- An agent — or your own script — can drive your table directly.
- The same actions the UI calls are exposed as REST endpoints and MCP tools.
- Outbound webhooks
- Push your own events to another system.
- A webhook subscription fires on the state changes you pick.
- Chrome extension
- Enrich or save a lead from any tab.
- The extension talks to the same enrichment API the app uses.
- CRM sync (Twenty) + CSV import
- Move leads in and out without a migration project.
- A sync connector and a CSV importer both write through the same lead-creation path.
- Multi-tenant, per-tenant credentials
- Separate teams, separate vendor keys.
- Every tenant's vendor credentials and data are scoped by tenant id at every query.
- RBAC teams + audit log
- Control who can do what, and see who did it.
- Role checks gate every action; every state change writes an audit log entry.
- PWA + self-hosted stack
- An installable app that runs entirely on your own infrastructure.
- A web manifest and service worker make it installable — the whole stack deploys to infrastructure you control. Your data on your box, no per-credit lead tax.
vs the tools you're comparing us to
Clay has more providers. We have the rest of the job.
| Capability | CallHQ | Clay | Apollo | Instantly |
|---|---|---|---|---|
| Data sourcing | Self-hosted scraping, no credit tax | 100+ premium providers (broader) | Own B2B database | — |
| AI research / agents | Grounded columns | Deepest agent tooling | Basic | — |
| Email sequences | Via your Instantly account | Export-to-tool | Built in | Built in (core product) |
| SMS cadences | Native, consent-gated | — | — | — |
| Power dialer | Native + AI call notes | — | Basic | — |
| Unified inbox | All channels, one thread | — | Partial | Email only |
| Compliance firewall | Fail-closed architecture | Manual | Partial | Partial |
| Content / social / pSEO | Built in | — | — | — |
| Self-hosted / own infra | Yes | No | No | No |
| Where they beat us | — | Provider marketplace depth | Database size | Inbox-warmup scale |
faq
Questions a founder actually asks before switching.
What does CallHQ cost?
Three plans — Starter ($0), Growth ($299/mo) and Scale ($999/mo) — each with real, enforced caps on sends, enrichments, renders and seats. Self-serve billing isn't switched on yet, so early accounts run free until it is; the limits shown are the ones the platform actually throttles against, not honor-system quotas.
What's live today vs. bring-your-own-account?
Sourcing, enrichment, the grid, scoring, signals/flows, the dialer, the unified inbox and the compliance firewall all run end to end on CallHQ's own infrastructure. Email sequences run through your own Instantly account and LinkedIn through your own HeyReach account — CallHQ orchestrates the sequence, you bring the sending account.
How does the compliance firewall actually stop a bad send?
Every send walks a fixed ten-gate chain — suppression, consent ledger, jurisdiction/DNC screening, line-type, footer requirements — before it fires, not after. The first gate to deny wins, and a gate that throws denies too rather than letting the send through. It's the same code path whether a human clicks send or a cadence fires automatically.
Where does our data actually live?
On infrastructure you control. CallHQ's scraping and enrichment services are self-hosted, so there's no per-credit lead tax and no vendor holding your list hostage. You can export everything through the REST API or a CSV export at any time.
We're on Clay/Apollo today — what does migration look like?
CSV import for existing lists, plus the REST API for anything scripted. There's no forced re-mapping step: a lead's shape is deliberately close to what both tools already export, and the grid's column config adapts to whatever fields arrive.
Does CallHQ cold-call with AI voices?
No — and it's not a policy, it's a hard gate. The ai-voiced-call check is an unconditional deny in the compliance chain, evaluated before the platform even looks up whether the lead is suppressed. There is no setting that turns this on.
What compliance regimes does it actually cover?
UK PECR (including the sole-trader email rule) and CAN-SPAM for email; UK TPS/CTPS and US DNC for calls, with a 28-day re-screen so a registry change doesn't go stale; US 10DLC registration plus consent for SMS. Coverage is enforced in code, not documented as a policy someone has to remember to follow.
What can the MCP server actually let an agent do?
The same actions the UI calls, exposed as typed MCP tools — read the grid, trigger enrichment, update a lead, check compliance status. An agent (yours, or a client's) can drive the table directly instead of you scripting against a REST client by hand.
How does sourcing avoid pulling in the same business twice?
Every incoming row is matched against the warehouse by name, address and phone before insert. A scheduled re-run of the same niche×city combination adds only what's genuinely new — it never doubles a business already in your table.
What roles can a team have?
RBAC-gated roles control who can send, who can only view, and who administers settings/billing/compliance — enforced on every action, not just hidden in the UI. Every state change also writes an audit log entry, so "who did this" is always answerable.
Deterministic scoring vs. AI scoring — what's the difference?
Deterministic scoring is an auditable A–D grade from firmographic and engagement rules you can read in the rules engine. AI qualitative scoring is a separate, judgment-based pass over the crawl and research columns — it complements the rules score, it doesn't replace it, and both are visible on the same row.
Can a compliance gate ever be skipped by mistake?
No — the gate chain is built from an explicit precedence list at boot, and it throws at startup if a registered gate is missing from that list or vice versa. A gate can't be silently appended or dropped by import order, and a gate that errors at evaluation time denies rather than getting skipped.
no credit card · cancel anytime