Finding new customers

Build a local prospect list in n8n from Companies House

The usual version of this scrapes Google Maps into a spreadsheet, which the Maps Platform terms do not allow you to keep. Companies House gives you the same list, for free, from a source built to be queried.

Build time
An afternoon
Difficulty
Beginner
Template
7 nodes

What you need before you start

  • An n8n instance. Cloud trial or self-hosted both work.
  • A free Companies House API key. Register at developer.company-information.service.gov.uk, create an application, take the key.
  • A Google account, for Sheets.
  • The SIC code for the trade you are after. Search the Companies House SIC list, or take it off a competitor's filing.

Search for a lead generation automation and you will land on the same build about forty times. Scrape Google Maps, write the results to a spreadsheet, get on with your day. It is the most copied workflow in n8n’s public library by a distance, and the three most popular versions of it have been viewed over 275,000 times between them.

Almost none of those guides mention the terms.

The part everyone leaves out

Google’s Maps Platform terms are specific about what you may do with the data that comes back. Caching is allowed, but it has to be “temporary (and in no event more than 30 calendar days)”. The same section says you will not use the service “in a manner that gives you or a third party access to mass downloads or bulk feeds” of the content.

A prospect list is a permanent store. That is the whole reason you are building one.

There is one exception worth knowing: the place ID is exempt from the caching rules, so you can keep that forever and use it to look a business up again when you need to. Everything else, the name, the address, the phone number, is meant to be transient.

Third-party scrapers get round this by not touching the API at all. They scrape the page. That moves you from breaking a specific API term to breaking Google’s general terms, and it hands your prospecting to a vendor whose access can disappear on a Tuesday with no warning.

None of this is a reason to give up on the list. It is a reason to get it from somewhere else.

What we are building instead

Companies House holds every company registered in the UK. It publishes a free API, on purpose, for exactly this kind of query. You can filter by location and by SIC code, which is the industry classification every company picks when it registers.

So: pick an area, pick a trade, get back every registered company that matches, with the company number, the registered address, the status and the date it was incorporated. Write one row each into a sheet. Run it again next month and only the new ones get added.

What you get out of it is a list you own, from an official source, that nobody can switch off.

What you do not get is contact details. Companies House does not hold a phone number, a website or an email address. That gap is real and I would rather say so now than let you find out at step six. Filling it is the next build in this category.

Getting the key

Go to developer.company-information.service.gov.uk, sign in with a Companies House account, and create an application. Choose the live environment. It gives you a key immediately.

Authentication is HTTP Basic, with a twist that trips people up: the key goes in as the username, and the password is left empty. In n8n you set this up once as a Basic Auth credential and forget about it.

Rate limit is 600 requests per five minutes. You will not come near it.

The SIC code

This is the only fiddly part, and it is worth two minutes of your time because it decides everything the workflow returns.

SIC codes are five digits. Plumbing is 43220, which officially covers “plumbing, heat and air-conditioning installation”. Electrical installation is 43210. General building work is 41200. If you cannot find yours, look up a competitor on the Companies House website and read the SIC codes off their filing history. That is faster than the official list and more accurate, because it tells you what businesses like the ones you want actually pick.

You can pass more than one, comma separated.

The build, seven nodes

1. Schedule Trigger. Set it to run monthly. During the build, click Execute Workflow by hand instead and leave the schedule off.

2. Set node, called Search. Put your parameters here rather than in the URL, so changing the area later is one field rather than a hunt through an expression. Three values: location, sicCodes, size.

3. HTTP Request. This is the one that does the work.

GET https://api.company-information.service.gov.uk/advanced-search/companies
  ?location={{ $json.location }}
  &sic_codes={{ $json.sicCodes }}
  &company_status=active
  &size={{ $json.size }}

Authentication: Generic Credential Type, Basic Auth, the credential you made earlier.

company_status=active matters more than it looks. Leave it off and you get dissolved companies mixed in, and there is nothing quite like writing to a business that stopped trading in 2019.

4. Split Out. The response arrives as one item with an items array inside it. This node turns that array into one n8n item per company, which is what every node after it expects. Field to split out: items.

5. Set node, called Shape. Flatten what you want into the columns you want, and nothing else:

company        {{ $json.company_name }}
number         {{ $json.company_number }}
status         {{ $json.company_status }}
type           {{ $json.company_type }}
incorporated   {{ $json.date_of_creation }}
town           {{ $json.registered_office_address.locality }}
postcode       {{ $json.registered_office_address.postal_code }}
address        {{ $json.registered_office_address.address_line_1 }}
profile        https://find-and-update.company-information.service.gov.uk/company/{{ $json.company_number }}

That last one is worth adding. One click from the sheet to the official record beats copying a number into a search box every time you look at a row.

6. Remove Duplicates. Compare on number, and set it to keep items across executions. This is what makes the monthly rerun safe. Without it you get the same 400 companies again every month and a sheet nobody trusts.

7. Google Sheets, Append. Point it at your sheet, map the columns, done.

Check it worked

Run it once and look at the sheet, not at the green ticks in n8n. Three things tell you it is right.

Every row has a postcode in the county you asked for. If half of them are somewhere else, location matched a street name rather than a town, and you want a more specific string.

The company names read like the trade you asked for. If they do not, the SIC code is wrong. Go and check a competitor’s filing.

Run it a second time straight away. The sheet should not grow. If it does, the Remove Duplicates node is not set to keep history across executions, and that is the setting to fix before you leave this alone for a month.

Before you email any of it

Two rules, and the second one catches people out.

Under PECR you can send marketing email to a corporate subscriber without asking first, as long as every message has a working opt-out. Limited companies and LLPs are corporate subscribers. Almost everything on a Companies House list falls into that group, which is a genuine advantage of building it this way.

Sole traders and most partnerships are treated as individuals. They need consent, or the soft opt-in if they have bought something similar from you before. They will not appear in an advanced search of registered companies, but they turn up fast once you start adding contacts by hand, so keep the company type column and look at it.

Separately, UK GDPR still applies to anything that identifies a named person, including a named director or a work email address with somebody’s name in it. You need a lawful basis, a note of where the data came from, and a way to delete a record when somebody asks. A dated column saying “Companies House advanced search, 28 August 2026” costs you nothing and answers the question if it is ever asked.

What this build cannot do

It cannot tell you a business is worth approaching. It gives you everyone matching a filter, and a proportion of them will be dormant, tiny, or already using somebody. Sorting that out is the enrichment and scoring step, which is deliberately a separate job.

It cannot find you unregistered sole traders, who are a large slice of most trades. For those, the map search is genuinely the better source, used live and not stored.

And it will not write to anybody, which is on purpose. A scraped list plus a mail merge produces the messages everyone deletes. The list tells you who to think about. A person still writes the first message, because the first message is the only part that decides anything.

Published 28 August 2026. Written by the people who run this sort of thing for clients, on n8n, including our own lead pipeline.

Next in finding new customers: The prospect list that enriches and scores itself. Or go back to all 4 in this category.

Questions about this build

Is it legal to scrape Google Maps for business leads in the UK?

Scraping and keeping the results is the part that causes trouble. If you use the official Places API, Google's Maps Platform terms allow only temporary caching, and in no event more than 30 calendar days, and they forbid using the service for mass downloads or bulk feeds. A permanent spreadsheet is neither temporary nor small. Third-party scrapers sidestep the API terms by scraping the site instead, which puts you on the wrong side of Google's general terms and leaves you dependent on a vendor whose access can stop overnight. Companies House data has none of these problems.

Is the Companies House API free?

Yes. The Public Data API is free to use and the key takes about five minutes to get. You register an application on the developer portal and it issues a key straight away. The published rate limit is 600 requests in any five minute window, which is roughly two a second and far more than a prospect list needs.

Can I email everyone on a list built this way?

Not everyone, no. Under PECR, limited companies and LLPs count as corporate subscribers, so you can email them marketing without prior consent as long as every message carries a working opt-out. Sole traders and most partnerships are treated as individuals and need consent or the soft opt-in first. Companies House only lists registered companies, so the list you build here is mostly corporate subscribers, but check the company type column before you send anything.

Why does the registered office address not match where the business actually is?

Because a lot of small companies register at their accountant's office. You will see the same address repeat across dozens of unrelated firms, which is a decent way to spot it. For a trade where the registered address is usually the yard or the shop it matters less. Where it matters, treat the registered address as a filter for the right county rather than a place to turn up at.

How often should this run?

Monthly is plenty. Company registrations are not a fast-moving feed, and the deduplication step means a rerun only ever adds what is new. Running it weekly gives you the same rows with a fresher timestamp and more chance of hitting your own rate limit for nothing.

The next step

Stop losing leads.Let's fix it this week.

Tell us what keeps slipping and we'll scope something around it. You'll be talking to Max, who runs the work, not a sales team. Most clients are live within 48–72 hours of that first conversation.

30-day rolling retainers. No lock-in. Cancel anytime.