← Builds
Tooling

Build lead lists with checks before shipping

The agency's team filled in a form for every list they needed. Claude turned the form into a structured brief, a person approved it in Slack, and the pipeline sourced companies and found a decision-maker at each one. The first version delivered lists for seven of the agency's clients within three weeks. The checks were added as delivered lists came back with wrong names, and they decide what reaches the CRM file.

Works ifYour lead lists go straight into email campaigns and cold calls, and one wrong name costs you trust.

Built for · Lead-gen agency · Europe
Trigger.devNeonNotionSlackClaudeApifyApolloSerperPerplexityClayHubSpot
Get the prompt for your coding agent

The system

~/builds/lead-list-checks
01Intake

Request form

One row per list

Product, countries, target titles, cap.

Notion
Claude writes the brief, a person approves itapprove, reject or edit in the threadSlack
02Source

Local

Google Maps

Apify

Pattern

Apollo + Google search

ApolloSerper

Preloaded

The client's own list

Find the decision-makerApollo, Perplexity, LinkedIn searchPerplexity
03Check

Check 1

One person, one company

Cross-row duplicates suppressed.

Check 2

Country

Phone code must match, when the brief asks.

Check 3

Current employer

LinkedIn title + Apollo record.

matchwrong employeruncertain
Claude

Check 4

10% sample audit

Over 10% misses fails the list.

Rank and trim to the capfail = file with a warning, no Clay push
04Ship

CRM file

19-column HubSpot import

HubSpot

Email finding

Clay waterfall

Return filtered on domain, status and country.

Clay
A checked list, ready for a last human look before the CRM.

What it solves

A request from the team's form: the product, the countries, the target job titles and a cap on companies.

Why it matters

The lists go into email campaigns and cold calls. A wrong name, or three people mailed at the same company, looks careless or like spam and costs the agency trust with its own client.

How it works

01

Approve the brief before spending

Claude reads the form, its comments and notes and writes a brief: countries, target titles, company cap and people per company. The brief lands in Slack, where a person approves, rejects or edits it in the thread. Without a reaction in 30 minutes it goes ahead.

02

Source, then find the decision-maker

Companies come from Google Maps for local businesses, from Apollo and Google search for a pattern, or from a list the client already has. Apollo, Perplexity and a LinkedIn search propose the decision-maker. Google Places and a scrape of the company's own site add phones and emails.

03

Check every name that has a profile

One person cannot hold the top spot at two companies on the list. Phones must match the brief's country when the brief asks for it. Claude reads each person's LinkedIn result and Apollo record and returns match, wrong employer or uncertain. Then 10% of rows are re-checked with the team's own manual searches, and more than 10% misses fails the list.

04

Ship a file the CRM accepts

Rows are ranked and trimmed to the brief's cap and written as a 19-column HubSpot import file, posted to Slack. Only a list that passes goes to Clay for email finding. On the way back, emails on another domain, invalid emails and foreign mobiles are dropped.

Build notes

  • The first finder marked a person verified as soon as any LinkedIn profile with that name existed. The employer check was run outside the pipeline, list by list, five weeks in a row before it became a default step.
  • Rows carried over from an earlier delivery skipped the LinkedIn check. After rows were flagged on the delivered sheet, the lookup on the 11 carried-over rows found 7 pointing to the wrong person. The rule became: check every row, including rows from a previous list.
  • The maps data gave one fallback phone number to 29 different companies. The fix was to take the office phone from each company's own contact page, which had a number for 51 of 60.
  • A strict verified-only filter dropped all 119 rows on one small-business brief, because Apollo had no LinkedIn URLs for those owners.
  • Most deliveries ran as short per-list scripts on the same library, because the LinkedIn audit and the Clay return filters ran there and not in the scheduled flow.

Questions

Why check the employer when the tool already says the LinkedIn profile is verified?

That flag only means a profile with the name exists. The check reads Google's indexed LinkedIn title and Apollo's current employer for the person and asks whether they work at this company today. The first audit flagged 6 of 77 LinkedIn URLs as someone else.

What happens to a company where no name passes?

It ships without a name, with the company's general contact details, so the list still covers it. An earlier version dropped those rows silently and lost 8 of the 19 companies on the client's source list.

More builds

All builds →
Tooling

Find contacts at companies with 2 to 10 staff

Your buyers work at companies too small for contact databases to cover.

Open→
Public data

Detect 163 B2B tools from a company's website and DNS

Your product replaces, integrates with or sells to users of specific tools.

Open→
Your own data

Turn a vertical database into a 3-touch outbound engine

A vertical database already lists your buyers with contacts, and a founder will make the closing calls.

Open→

The next step

Let's get started.