Hey everyone,
Cold outreach has one line item that quietly eats your budget: enrichment credits. You buy them by the thousand, spend one to reveal an email, and most of those emails belong to businesses that were never going to buy from you.
I have built this same cold-lead pipeline for a couple of businesses now, and paying to reveal emails on leads that were obviously a bad fit got old fast. So I fixed the ordering and packaged it up as an importable n8n workflow to share.
The idea is simple: Apollo gives you a lot for free. You can enrich a company from its domain and pull decision-maker contacts (name, title, LinkedIn) for free. The email comes back masked. The only thing that actually costs a credit is revealing that email. So the workflow does all the free work first, scores every business against my ideal customer profile using signals that cost nothing, and spends a reveal credit only on the leads that clear the bar.
What it does
When an Apify Google Maps Scraper run finishes, it calls the workflow's webhook. From there:
- It pulls that run's dataset and dedups against a ledger, so a business I have already seen is never enriched or contacted twice.
- It stores the raw rows, then for each new business with a domain it hits Apollo's free org-enrich and people-search endpoints.
- It scores each business against my ICP: rating, review count, has-a-website, target region, category match. Five signals, twenty points each. No email needed, so a lead can clear the bar for free.
- The reveal gate spends one Apollo credit only when a lead passes all three of: score at or above my threshold, a decision-maker title, and I am still under my monthly credit cap.
Everything else lands in the table unrevealed, with the reason it was skipped, ready for a manual reveal later if I decide one is worth it.
How it is built
Four labeled sections, each documented with a sticky on the canvas:
- Intake. Webhook, ack 200, a Config node, and a check that the scrape actually succeeded (else the run is marked failed).
- Per-place fan-out. Fetch the dataset, normalize each place, dedup against the
seen_leadsledger (the dedup key is domain plus place id), insert only new rows, skip anything with no domain. - Apollo enrich (free) plus ICP score. Org enrich by domain, people search for decision-maker titles, then the score. Rows are inserted with
email_status = 'unrevealed'. - Reveal gate (spends a credit). Read the month's usage, gate on score and title and cap, reveal the email for the winners, and note the skip reason for the rest.
The two nodes you edit are Config (your monthly cap and your score threshold) and Score ICP, which has a clearly marked block at the top for your target regions, your target categories, and your quality floors.
The part I care about most: this is a cold-lead table, not a CRM
I want to flag this because it is where a lot of outreach setups go wrong. The output of this workflow is a staging table of unqualified cold leads. These businesses never asked to hear from me. If you pour that straight into your CRM, you pollute your contact list and your pipeline reporting stops meaning anything.
The pattern that keeps it clean: outbound reads from the cold-lead table and logs the sends there. A lead becomes a real CRM contact only when they reply. That is the moment they stop being cold. The workflow writes to its own Postgres schema and never assumes a CRM on the other end, so you wire the reply-to-CRM promotion however your stack does it.
Why the free-first ordering matters
If you score after revealing, you have already spent the credit. The whole trick is that everything the score depends on is free, so a lead reaches a 60 out of 100 without costing anything, and only then does the gate decide it is worth an email. Add a hard monthly cap on top and you physically cannot overspend, even on a huge scrape. On a run of a few thousand businesses it spends a couple dozen credits, on the few dozen contacts actually worth contacting.
Setup
The repo ships the workflow JSON, a schema.sql that stands up all four Postgres tables in one run, and an AI-SETUP-PROMPT.md you can paste into any reasoning LLM to have it interview you through writing your ICP (your regions, your customer type, your thresholds) from what you actually sell. No credentials are bundled; you attach your own Apify, Apollo, and Postgres.
Open source (MIT): github.com/Mfrostbutter/n8n-workflow-templates
If you want me to go deeper on any piece (the dedup ledger, the ICP scoring, the reveal gate and cap logic, or wiring the Apify run-finished webhook), say the word in the thread and I will break it down.
Cheers,
Michael
