DEV Community

Axel Freeman
Axel Freeman

Posted on Originally published at axelfreeman.com

I collected 6,032 B2B company domains in a day. Only 998 publish an address

I spent one working day collecting B2B company domains from public sources. Not "scraping the web" — 41 specific sources, each one a place where a company published its own link, and each row carrying the source it came from.

The file ended at 6,032 company domains. Of those, 998 publish a contact address of their own.

That ratio — one address per six companies — is the number nobody puts on a sales page, and it is the only one that decides whether a list is worth buying.

The yield of every source family

All numbers below are counted from the file, one row at a time.

Source family Domains Published an address Yield
Hacker News "Who is hiring?" threads (2024 → Sep 2026) 2,792 304 11%
Y Combinator open-source hiring directory 736 0 0%
remoteintech/remote-jobs public catalog 531 0 0%
GitHub repository homepage fields 330 0 0%
Agency directories (DAN, Semrush listings) 525 522 99%
Show HN launches — domain taken from the post URL 343 44 13%
dev.to posts whose canonical is a company domain 220 0 0%
npm and crates.io package homepage fields 190 0 0%
Job feeds (WeWorkRemotely, Jobicy, Arbeitnow, RemoteOK, Remotive, LaunchingNext) 182 0 0%
Reddit, Mastodon and HN signal threads 142 0 0%
Product Hunt launches 37 0 0%
Total 6,032 998 17%

Two readings matter more than the total.

The biggest family publishes almost no mailboxes. 2,792 rows came from hiring threads, and only 304 of them expose an address. A "Who is hiring?" post gives you the company and the role — it does not give you the inbox. That is not a flaw of the source, it is what the source is for.

The only family with near-total contact data is agencies. 522 of 525 rows carry an address, because an agency puts one on the page on purpose. Which also means: a list built only from job feeds is a list of companies, and a list built only from directories is a list of competitors.

Rule 1: the domain comes from the post, not from the text

On job feeds the employer's domain sits inside the body copy. When you pull it out of the text, roughly half the rows are wrong — the job board itself, an ATS (greenhouse.io, lever.co, ashbyhq.com), a link inside the ad, or the same company under two ccTLDs.

When the domain comes from a structured field or from the post's own URL — Show HN, package registries, dev.to canonicals — the reject rate falls from about 50% to somewhere between 5% and 12%.

That difference is the whole reason this file counts 41 sources instead of 4,000 scraped pages. Fewer sources, better rule.

Rule 2: a domain is not a company until it answers

Every host got a live request before it entered the file, and only pages that behave like a product were kept: pricing, sign-up, demo, integrations.

Skip that step and the file fills with university course pages, documentation sites and personal blogs. It happened on my first pass: 21 candidates reduced to 10 usable rows.

Rule 3: a published address is not a verified address

Of 6,032 rows, 998 expose an address. The rest are either SMTP-checked one by one, or left out of the send queue entirely.

In the agency pull, two addresses out of 35 were placeholder text (hello@world.com, johnsmith@yourbrand.com) and three belonged to a different domain than the page they sat on. Five rows out of 35 would have gone out as working data without a domain match.

What the list is actually for

The list is the cheap half of outbound. The expensive half is the sentence that earns a reply, and the reading of what came back.

Which is why the work is scoped as work, not as a spreadsheet:

  • $900 Sprint, one-off — segment and definition, the checked contact list, the first touches sent, and the measurement that says what the channel owns.
  • $1,900/month Engine — the loop keeps running: list refreshed, sends going out, replies worked to a booked conversation, a read-out each cycle.
  • $2,900 Full Build — offer, landing page, a free tool, distribution and measurement.

The first test is 100 verified contacts, so the list is judged before a month is committed to.

The full write-up, with the yield table and the source rules, is on my site: B2B lead list building.


If you have pulled a list from public sources recently, I would like to know which source gave you the best address-per-domain ratio — that number is the only one that survives contact with a real inbox.

Top comments (0)