WinnowedProspects, not padding.
◆ Free, with no account and nothing to sign up to

Build your own list

This is the whole method, written so you can actually follow it. The register is free and public. The filtering is a spreadsheet job. Two of the steps carry a real cost, one in money and one in hours, and this says plainly which two and what they come to, because a version that pretended it was all easy would waste your afternoon.

What this guide is for

Winnowed sells finished lists. It would be easy to keep the method vague and let that look like magic. It is not magic, it is arithmetic and patience, and anyone who wants to do it themselves should be able to.

By step 5 you will have every number required to work out what your own time costs. That is how to decide whether to build it or buy it.

STEP 01

Decide who you are actually selling to

The register records what a company does, not who works there. Getting this step right is most of the work, and it is the cheapest place to change your mind.

The 3 ways to describe a market

ByWhat it meansUse it when
Industry codeThe 5-digit code a company declares for its tradeYou know exactly which trades you want and need every company in them
Trade or industry namePlain words ("plumbers", "care homes") matched to the codes behind themYou know the trade but not the codes. This is how most people start.
Company numberA specific list of companies you already haveYou have a list of names and want the contact details filled in

What the codes are

Every company on the register declares at least one 5-digit Standard Industrial Classification code (SIC code) describing its trade. It is how the government classifies what a business does. The full list is published by the Office for National Statistics and there are just over 700 codes in active use.

A company picks its own codes when it registers and can declare up to 4. Nobody checks them, so they are a good guide and not a guarantee.

The mistake almost everyone makes first

A trade is often several codes, not one. "Accountants" looks like a single category and is actually 3, and picking only the obvious one loses you 28% of the market.

⚠ Then do not add them up. A company may declare up to 4 trade codes, and thousands of accountancy firms declare 2 of these 3. Adding the codes counts those firms twice: 72,995 against 54,208 real companies, 34.7% too many. Count the company numbers and deduplicate them: SELECT COUNT(DISTINCT CompanyNumber), not a sum of 3 counts. We published the summed figure ourselves until 28 September 2026.

CodeDescriptionCompanies
69201Accounting and auditing activities39,262
69202Bookkeeping activities22,247
69203Tax consultancy11,486
Added up⚠ wrong: it counts a firm once per code72,995
All 3, countedWhat most people mean by "accountants"54,208

Two more worked examples, so you can see the shape:

CodeTradeCompanies
43220Plumbing, heat and air-conditioning installation47,075
45112Sale of used cars and light motor vehicles32,965
45200Maintenance and repair of motor vehicles54,591

If your buyer is a job title

You can target "used car dealers" because that is a thing a company is. You cannot target "marketing directors" or "companies with more than 10 staff" directly, because the register holds neither.

That does not make this useless to you. The register is still the fastest way to get a complete, current list of the companies worth approaching: every active business in your trade, in your area, with its website. Finding the right person inside those companies is a second job, usually done on a professional network, and it is far easier once you have a defensible list of which companies to bother with.

Do this before anything else

Count your market before you build anything. If it comes back at 40,000, the question becomes which 2,000. That is a decision about geography or size, not about data. If it comes back at 400, that is small enough to work through by phone.

Even then the count is worth having: you almost certainly cannot name all 400, and the ones you cannot name are the ones nobody else is calling either. Our free count does this in a few seconds: type a trade, get the number, no account needed.

At this point you have
  • A market described as a trade, not a job title
  • Every code that describes it, not just the obvious one
  • A count, so you know whether a list is the right tool at all
STEP 02

Download the register

The whole United Kingdom company register is published free, in full, once a month. Most people do not know this, and it is the single most useful fact in this guide.

It is here: download.companieshouse.gov.uk/en_output.html

Take the single-file version. It is a zipped CSV of roughly 2.6GB unpacked, about 5.7 million rows, and it contains every company currently on the register: active, dormant, in liquidation and proposed for strike off. Dissolved companies have been removed and are not in it. It is a complete snapshot, not a list of changes, so you never need to stitch months together.

What is in it, and what is not

You getYou do not get
Company number and registered nameAny email address
Registered address, town and postcodeAny website
Up to 4 trade codesAny phone number
Company status and typeTurnover, headcount or any trading detail
Incorporation dateNames of staff below director level
This is the whole problem in one table

The register tells you who exists. It never tells you how to reach them. Everything from step 4 onwards exists to close that gap, and it is the reason list-building is a job rather than a download.

A note on the registered address

The address on the register is where the company is registered, which for a large number of small companies is their accountant's office. It is not necessarily where they trade. Treat it as a rough geography, useful for "within 25 miles of here" and not much more.

STEP 03

Filter it to your market

A spreadsheet will not open 5.7 million rows. Here is how to do it without one, and it is about 10 minutes if you have never done it before.

Load it into a database: the whole thing, 3 commands

SQLite comes preinstalled on macOS and most Linux systems and is a free download on Windows. From a terminal, in the folder with the unzipped CSV:

Type thisWhat it does
sqlite3 register.dbCreates an empty database and opens it
.mode csvTells it the file is comma-separated
.import BasicCompanyData.csv companiesLoads all 5.7 million rows into a table called companies. Takes a couple of minutes.

The columns you actually need

The file has over 50 columns and you will use 6 of them. They are named exactly like this, dots included:

The column that catches people out

The code columns are not codes. They hold the code and its description in one string ("69201 - Accounting and auditing activities"), so match on the start of the text rather than testing for equality.

The 4 kinds of company to remove first

  1. Anything not actively trading. Keep CompanyStatus = 'Active' only. Dissolved, liquidation and in-administration companies are all in the file and all a waste of a send.
  2. Dormant companies. They show as Active and trade nothing. They declare code 99999, and across the trades above they are roughly 7 to 10% of each code.
  3. Company types you cannot sell to. Limited Partnerships, and depending on your offer, companies limited by guarantee and community interest companies. That is CompanyCategory.
  4. Companies whose match is incidental. A company can declare 4 codes. One whose fourth code matches yours is probably not in your trade. Matching on codes 1 and 2 only is usually the right call.

The query, in full

For the 3 accountancy codes, active companies only, no dormant, in Dorset:

Paste this

SELECT CompanyName, CompanyNumber, "RegAddress.PostTown", "RegAddress.PostCode"
FROM companies
WHERE CompanyStatus = 'Active'
  AND ("SICCode.SicText_1" LIKE '6920%' OR "SICCode.SicText_2" LIKE '6920%')
  AND "SICCode.SicText_1" NOT LIKE '99999%'
  AND CompanyCategory LIKE '%Private Limited%'
  AND "RegAddress.PostCode" LIKE 'DT%';

Change 6920% for your own codes and DT% for your own postcode area. To write the result to a file, type .mode csv then .output mylist.csv before running it.

The thing that will cost you a day if you miss it

The register goes out of date while you are working on it. Measured across one 2-month gap on our own copy: 3.8% of in-scope companies had stopped being active (147,487 of them) and 3.3% were new. A list built on a file from March is a photograph of March. If you are going to reuse it, rebuild it at least quarterly.

At this point you have
  • A CSV of active, non-dormant companies in your trade codes
  • A row count you can sanity-check against the totals in step 1
  • A geography filter, if you need one
STEP 04

Find each company's website

This is the first of the 2 steps that stop being a spreadsheet job. There are 3 ways to do it and they differ by about a factor of a hundred in effort.

RouteWhat it costsSensible up to
By handAbout 20 seconds a company, searching and pasting~200 companies
Build itA day or so of code, then a few pounds per 2,000 in search feesany size
Use a toolOurs, or a competitor'sany size

200 companies by hand is about an hour and there is nothing wrong with it. Below that number, stop reading this step and just do it.

The obvious shortcut, and its ceiling

The obvious move is to guess: take the registered name, strip "LIMITED", remove the spaces, try .co.uk then .com. It is free and instant, and it works less often than anyone expects.

TradeGuessing the domain from the name
Sale of used cars and light motor vehicles7.5%
Accounting and auditing activities13.3%

Both figures are end-to-end (name in, working contactable website out), measured on real cohorts. VANSTOCK NORTHWEST LIMITED trades at vanstocknw.co.uk, and no rule working from the legal name arrives at that abbreviation.

Guessing does not just fail. It fails wrongly

A guesser that falls back to the first word of the name will hand you london.com for LONDON & ESSEX CONTRACTORS LIMITED. That is not a miss, it is a confident wrong answer, and it will sit in your list looking exactly like a correct one.

Whatever you build needs an ownership check, because a domain that looks like the name is not proof. Ours accepts a website only when the site prints the company's registered number, its full registered name or its registered postcode. In a test of 500 companies across 10 trades in October 2026, accepting a domain that looked like the name, unless the site printed another company's number, gave 38 of them a wrong website; the ownership check gave 3, and 3 of the 83 websites it delivered were wrong.

What actually works

Searching for the company by name plus town and reading the first page of results. It finds the sites guessing cannot, because it uses the same signal a human would. It is also the first thing in this process that costs money: a search API is roughly a seventh of a penny per company, so 2,000 companies is a couple of pounds.

The barrier is not the money. It is that this is one request per company, and you cannot do 2,000 of them in a spreadsheet.

Using an assistant for the judgement

Deciding whether a domain belongs to a company is the part a rule cannot do, and it is the part an assistant like Claude is good at. Paste in a batch of names with the candidate domains you found, and ask it to judge them. A prompt that works:

Paste this, with your rows underneath

For each row below I have a UK registered company name, its town, and a website I found by searching. Tell me for each whether the website belongs to that company.

Answer YES only if the site's own content confirms it: the trading name, the town, or the trade all matching. Answer NO if it is a directory listing, a domain-for-sale page, a different company with a similar name, or a national brand where I expected a local business. Answer UNSURE if you cannot tell from the name alone.

Give me one line per row: the company number, then YES, NO or UNSURE, then 6 words of reason. Do not guess, and do not fill in any website I have left blank.

What an assistant must not be asked to do

It is not a database. Ask it for "a list of plumbers in Bristol" and you will get something plausible and partly invented, with real-looking addresses for companies that do not exist. Use it to judge data you already have, never to produce data you do not. The register is the source of truth; the assistant reads what you fetched.

STEP 05

Get the contact details off the site

This is the step that needs code. There is no spreadsheet formula and no reliable no-code tool for it at volume, and pretending otherwise would waste your weekend.

If you do not write code

If you do not write code, there are exactly 3 sensible options: do it by hand for a few hundred companies, pay someone a day's rate to write the script once, or buy the finished file. Everything below is for the third of readers who will write it.

By hand is 30 to 40 seconds a company: open the site, find the contact page, copy the address. 200 companies is a couple of hours. 2,000 is a fortnight, which is where people stop.

What to build, in 6 lines

  1. Read robots.txt for the site, and stop if it disallows you.
  2. Fetch the home page.
  3. Find links whose text or URL contains contact, about or get in touch.
  4. Fetch at most 4 more pages from that list, never the whole site.
  5. Pull out every mailto: link and every string matching an email address.
  6. Keep the ones whose domain matches the site you are on. Throw the rest away.

In Python that is the requests library to fetch, BeautifulSoup to read the page, and the built-in re module for the address pattern. All 3 are free. It is roughly 80 lines, and the last of the 6 rules above is the one that matters most.

Rule 6 is not optional

Pages carry addresses that are not the company's: the web designer's in the footer, a trade body's, an image library's. If the address domain does not match the site domain, it is not theirs. Skipping this one check is how homemade lists end up mailing web designers.

How to fetch without getting blocked

What you are looking for, in order

  1. An address on a contact page whose domain matches the site you are on
  2. An address in the footer, which is usually the general enquiries one
  3. A phone number, which is worth keeping even when you find an email
Role addresses are not second best

info@ and sales@ get read, usually by the person whose job it is to read them. They are also a materially weaker personal-data case than a named individual's address. Mark them, keep them, and prefer them.

What it costs in time: the number that decides everything

Measured on a real run: 2,773 companies took 459.6 minutes end to end, with 8 workers running against different hosts and a 1-second-per-host limit. That is about 10 seconds a company, or about 360 companies an hour, and it does not get faster by adding workers, because the limit is politeness, not processing.

List sizeBy handRunning continuously
200 companies~2 hoursabout 33 minutes
2,000 companies~2 weeksabout 5.5 hours
10,000 companiesnot realisticabout 28 hours, more than a day

And what you end up with

Most of the companies you started with will not have an email address you can actually use. They publish a contact form, a phone number, or nothing at all, or nothing on their site proves the site is theirs.

That is not a failure of method. That is what the register looks like. Anyone quoting you a 90% contactable rate is quoting you something that was not measured.

STEP 06

What you owe the people on your list

The file is yours now, and so is the legal duty for it. Not your supplier's, not your sending tool's. And buying the list from somebody else does not move it.

Read this before you send anything

This is a plain-English summary of where the duty sits, not legal advice. If your list is large or your case is unusual, take advice. It is cheaper than the alternative.

  1. You are the data controller. You decided who to collect and why, so the responsibility is yours.
  2. A lawful basis is required, and it has to be written down. For business-to-business outreach that is normally legitimate interest, which means actually balancing your interest against theirs and keeping the reasoning, not simply asserting it. A paragraph in a file is enough. Nobody asks to see it until something goes wrong.
  3. Article 14 applies, because they did not give you the data. When details are collected from a third source there is a duty to tell people where they came from, and a time limit on doing it. In practice: one line in the first email and a privacy notice they can reach.
  4. A named individual's work address is personal data. jane.smith@firm.co.uk is a person. info@firm.co.uk is a weaker case, but weaker is not none.
  5. Sole traders and partnerships are individuals, whatever the register calls them, and they get the stronger protection.
  6. Keep a suppression list and honour it immediately. One unsubscribe removes that address from everything you will ever send, not from one campaign.
Where Winnowed stands on this

Our full position (how the crawler behaves, what it stores, and what we think the duty is on both sides) is on the sources page and in our terms. We would rather you read it and disagree than not read it.

AND THEN

Whether to build it or buy it

Every number required to decide is now in one place.

StepWhat it costs you
Finding your trade codesAn afternoon, once
Downloading the registerFree
Loading and filtering itAbout 10 minutes, with the commands in step 3
Finding the websitesA few pounds per 2,000, plus building the matcher
Fetching the contact detailsabout 5.5 hours per 2,000, about 28 for 10,000
Staying inside the lawYours either way. It does not transfer.

Most people who read this far will not do it, and that is a reasonable decision rather than a lazy one. The method is not difficult, it is just long, and the long part is the part a computer has to sit through.

If you want to do it yourself, everything you need is above and we are glad to have helped. If you would rather have the finished file, that is what we sell, and you now know exactly what you would be paying for.

Next

Part 2: Run the campaign covers the sending domain, deliverability, what the law requires of the message itself, sequencing, and the numbers worth watching.

Part 3: Make it worth replying to covers the 5 questions that decide whether anyone answers. A list is not the product. The offer is.