← All posts
Ask AI • August 4, 2026 • 10 min read

How I Use Scraping, Enrichment, and AI in Outbound Campaigns

The full technical stack and, more usefully, where each piece belongs. AI upstream on qualification, humans downstream on copy, and measurement everywhere in between.

The three words in the title describe three different jobs, and most of the value comes from putting each one where it belongs. Here's the whole system.

Scraping: getting the raw universe

Scraping answers one question (who exists?) and I use a different tool depending on what shape the source is.

  • Apify for structured sites with an existing actor: review platforms, ad libraries, social follower lists, app stores, marketplace listings.
  • SerpAPI and Serper for search-engine-driven discovery. This is how you enumerate "every business of type X in city Y" across a long list of cities.
  • RapidAPI sources for specialized extractors, including a Google Maps extractor that handles roughly ten requests a second and returns name, phone, category tags, and domain per result. Local business discovery is a loop over business type × zip code.
  • Direct API integrations where the source has one: people-search and company-search providers, funding and firmographic databases, and an internal company database of several million records with tag-based filtering.
  • Similarity and lookalike expansion to grow a seed set of known-good companies into the broader market, once the base ICP gate has been validated against a source with obvious ground truth.
  • Bulk pre-scraped datasets when they exist, always checked first, and never trusted for completeness without a category-level coverage check.

Operationally: checkpoint constantly, insert candidates into the database early rather than waiting for a perfect filter, and make every long job resumable. Scrapes fail halfway through. Design for that instead of restarting.

Enrichment: turning rows into something you can say a sentence about

Enrichment has two purposes that people conflate. The first is reachability: emails, phones, LinkedIn URLs. The second is signal: the fact that makes the email relevant. The second one is what campaigns actually run on.

Reachability

A cost-ordered waterfall with per-contact short-circuiting: internal validated cache first (free), then unlimited-tier providers, then mid-cost providers, then the expensive high-coverage provider last, then a slow tail provider for the remainder. Every found address is validated before it counts, and cached addresses past a 45-day window get re-validated. I established that order by testing six providers head-to-head on the same 5,000 contacts and measuring net new contributed after the previous step, which is the only meaningful metric in a waterfall.

Signal

This is where campaigns are won. Depending on the market, the signal layer might include: review counts and recent review text, which platforms a business is listed on, competitor ranking for a target keyword, current ad activity, traffic trend, department-level headcount, funding recency, leadership tenure, open roles, pricing-page structure, detectable secondary sending domains, or a public filing about a transaction they just completed.

Each of these becomes a column, and each column can become a segment, a qualification gate, or a variable in the copy. Some are computed rather than looked up: estimated monthly revenue lost to a specific problem, nearest competitor, a composite fit score. Computed fields are the most persuasive because they're specific to that one business and can't be faked at scale by someone who didn't build the pipeline.

AI: where it genuinely earns its place

I use LLMs heavily, but almost never for the task people assume.

Qualification: the highest-value use

Filters can only see structured fields. An LLM can read a company's website and answer the question you actually care about: does this company really offer a free trial, is the pricing sales-led, do they serve the segment the thesis assumes, does this look like the pain we solve. On one campaign the entire targeting thesis rested on a model reading each site and confirming a free trial existed, because companies with trials have a conversion problem worth selling into, and no database field captures that.

My process for these prompts is deliberately boring: calibrate on ~20 companies with a human reviewing every output, validate on ~500, check the failure modes, and only then score the whole set in batches. An uncalibrated qualification prompt applied to 100,000 rows is a very efficient way to build a confidently wrong list.

Classification and inference

Inferring seniority where a source exposes no titles. Cleaning and normalizing company names so the brand survives into the copy. Categorizing replies into meaningful buckets (interested, meeting booked, meeting request, information request) so "positive reply rate" means something you can optimize. Scrubbing lists for entities that don't belong in the ICP at all, which on one agency-targeted list was about 30% of rows.

Copy assistance, with a short leash

AI drafts personalized first lines from enrichment data at scale, and it's good at it when the underlying fact is real. It's poor at inventing the angle, and it has tells (over-formal transitions, stacked adjectives, a certain enthusiastic register) that this audience recognizes instantly. So generated lines get constrained hard by rules and reviewed, and I run drafts through an adversarial review pass whose only job is to find the sentence that sounds like a machine.

Engineering

Claude Code and Cursor are how the pipelines themselves get built: scrapers, enrichment chains, validation jobs, upload scripts, monitoring agents, reporting. This is the compounding part. Every campaign leaves behind a script, and every repeated script eventually becomes a reusable skill, so the next build starts further along than the last one.

Where it all runs

Supabase for storage, Trigger.dev and GitHub Actions for scheduled jobs, Railway for hosted services, Clay when a visual table is the right tool for the client to own after handoff. Sequencers are Smartlead and Instantly. The infrastructure choice I care about most is that the client can inherit it. A pipeline only I can run isn't a deliverable, it's a dependency.

The principle underneath all of it

Scraping tells you who exists. Enrichment tells you which of them are worth talking to and what to say. AI decides which rows survive and drafts at scale. And a human decides the angle, because that's still the part that determines whether any of it works.

Want this built for your outbound?

Book a Call →
// KEEP READING