A list with no total beside it looks complete. Listed from free sources by Codex, every company arrives with its domain, its source and the count.
A scraper, then LinkedIn, row by row. A directory scraped into a sheet. Every row opened on LinkedIn to check the title is still current. For a forty-person agency that is the founder at the kitchen table, checking domains one at a time.
By hand today
“I personally like running a Manta scraper and vetting results by hand with LinkedIn to confirm current titles”
bradleysmith, on Hacker News
That is the stage as most people run it. A directory is scraped, or exported from a paid seat, and the rows land in a spreadsheet. Then somebody opens each one to see whether the company still exists, whether the headcount is real, and whether the domain still resolves.
The hire who does this is measured on volume. The advert asks for hundreds of enriched, verified rows in the first month, and says nothing about the companies the search missed. A list with no total beside it looks complete, because nothing on the page says otherwise.
What it costs you each week
US$119.99 a month, for one seat on the search tool most teams buy for this stage, before anyone has typed a search. The hire who runs it is measured on verified rows a month, never on the companies missed.
Source: LinkedIn Sales Navigator Core, the published monthly price, read 7 September 2026
The seat is the visible cost. The list tools sit beside it at their own monthly prices, and the specialist who runs them sits beside those. No sourced figure exists for the hours a founder spends listing a market by hand.
The invisible cost is the list that stops early. An export capped at a page count, with no total, reads as the whole market, and every stage after it is planned from a number that was never true.
The build
Open Codex. Point it at the file. It lists from free sources, batch by batch, merging duplicates and marking dead domains rather than dropping them. What it cannot resolve for free, it reports. Nothing is bought. The list comes back with its total.
Open Codex in the engine folder, where market.yml from chapter 1 sits. Then say what you want:
Read market.yml. Using only free sources, list every company that fits its
edges: the free tier of a people-search API, public directories, and the
company websites themselves. For each company record the name, the domain,
the headcount as a band or a count and say which, the city, and the source
of each fact. Merge rows that are the same company under two names. Mark a
dead domain instead of dropping the row. Never spend a credit. Write
companies.csv and a run report: how many listed in total, how many carry a
domain, how many were merged, and every company you could not resolve for
free, with the reason.
What comes back is a short script and a run in batches. Codex reads the edges from the file, searches the free sources, and writes rows as it goes, so a rate limit or a dropped connection loses a batch and never the run. At the end it prints the report: the total, the domain count, the merges, and the unresolved list with a reason on each line.
Two files are saved beside market.yml. companies.csv is the list, with a source column on every fact. run-report.md is what you read: the counts, and the companies no free source could settle. Load the first into the CRM as companies. Keep the second, because the next run should shrink it.
The pattern is ArkOne’s own scout, .claude/agents/prospect-scout.md. It lists a hundred companies a run from the free tier of a people-search API and spends no credits at all (lines 3 and 48). A company that cannot be resolved for free stays unresolved and goes in the run report, rather than being guessed (line 106). The same free lane, given a list of domains and a headcount band, settles size and ownership for nothing: one run filtered 113 domains down to 34 in band at zero cost (.claude/skills/ceo-capture/SKILL.md line 67). Free sources go first; a paid call, if one ever happens, is a decision, never a default.
What it feeds
Filtering the companies. The next stage keeps the ones that fit and archives the rest, each with a written reason. The number to read: companies with a domain against companies listed. On our own book, 1,418 of 1,452.
The next stage reads every row and decides, with a reason, whether it stays. It can do that only because each row now carries a domain to fetch and a source to trust or doubt.
The number that proves this stage worked is the count of companies carrying a domain against the total listed, and the total must be printed beside the list every time it is shown. On ArkOne’s own address book that count was 1,418 of 1,452 (plans/linkedin-ads-build-day/LEARNINGS.md line 35). The gap between the two numbers is the first thing to read.
What stays with a person
Which sources count as every. Two directories disagree on headcount. A marketplace counts its sellers as staff. A company no free source resolves. A person decides whether to pay for that one row, or let it stay unresolved and say so.
Free sources disagree, and the tool will show you exactly where. Two directories give different headcounts for the same firm. A marketplace lists thousands of staff because it counted the people selling on it; ArkOne has seen a band wrong by twenty times for that reason (docs/crm-module.md line 176).
The ruling on what counts as “every” stays with a person. So does the decision to spend money on one stubborn row, or to leave it unresolved and write that down.
The tools you already pay for
Nothing new to buy.
CRM receives every company with its domain, the source of each fact and the run that found it, so a row can be traced back when it turns out wrong.
Spreadsheet holds the run report and nothing else. It is read once a batch and then closed.
Browser is driven by the tool, which opens the company site for the rows where two sources disagreed.
Every company in your market, listed from free sources, with a total beside it. Then the filter can run itself.
Ask: How many companies on your list today came with a total, so you knew what was missing?
The listing here is chapter 2 of twelve, after writing down the market and before keeping only the companies that fit. The book, Building a real outbound engine with Claude Code and Codex, end to end, runs the whole engine in order, one chapter per stage. A free starter edition for firms under fifty people is coming through the 100k programme.

