← Builds
Your own data

Build lists from data you already own

The brief was a list of companies in one industry, with the people in one function. The plan was an 8-script scrape of a company register and an industry directory. Then we checked the client's own database: 1,490 of those companies were already there, 381 of them already scored. The contact search took 38 minutes.

Works ifYou have a CRM or database you have never fully worked.

Built for · B2B SaaS · Europe
PythonNeonRapidAPILusha
Get the prompt for your coding agent

The system

~/builds/db-first-tam
01Check first

Own database

Already there

A directory scrape already in the DB.

Neon
1,490 companies
Only the 381 already scoredskip 3 of 8 scripts
02Contacts

People search

Target roles, batched

Batches of five, no retries.

RapidAPI
163 contacts
Pay per hitLinkedIn lookups onlyLusha
03Deliver

Column

Role 1

59

Column

Role 2

3

Column

Role 3

32
A ready list without buying a company list.

The signal

Companies the client already had and had already scored.

Why it predicts a purchase

Before buying or scraping anything, the question is what is already sitting in your database. Here it was 1,490 companies, with domains for almost all of them.

How it works

01

Look before you scrape

The daily sync question was simple: do we already have this? The client's database held 1,490 companies in the segment, 1,419 with a domain. Three of the eight planned scripts were no longer needed.

02

Spend credits on the likeliest buyers

381 companies already had a maturity score. Contact search ran on those only. Smaller companies rarely have a dedicated role for that function anyway.

03

Batch, do not retry

A batch that returns zero usually means the companies are not on LinkedIn. Retrying one by one would have taken 8+ hours. Batches of five without retries took 38 minutes.

04

Deliver in the shape they use

Contacts land in one column per role instead of Contact 1, 2, 3, because which roles are filled is itself the signal.

Build notes

  • One enrichment endpoint was dead mid-run (404 for every domain). Employee counts were dropped rather than blocking the delivery.
  • The contact provider is blocked from local machines by its CDN, so calls went through a small server-side proxy.
  • The remaining 1,109 unscored companies were left as a documented expansion: 3 to 4 hours and 100 to 150 credits if the client wants more volume.

Questions

What should I check before buying or scraping a list?

Count what is already in your CRM and warehouse, and what you already know about each account. Here 1,490 companies were already there, 381 of them scored.

How do you keep enrichment costs down?

Only pay for contacts at the accounts most likely to buy, and only for hits: 94 emails for 94 credits.

More builds

All builds →
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→
Your own data

Turn website visitors into qualified leads

You already identify companies visiting your site.

Open→
Your own data

Put every signal in one table

You run more than one signal source and want one view per account.

Open→

The next step

Let's get started.