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.