HubSpot + Google Sheets: lookalike leads, deduped
Your best customers are sitting in HubSpot, but turning them into a fresh list of lookalike prospects usually means exporting, cleaning columns, hunting for domains, and praying you don’t spam the same company twice.
This HubSpot Sheets automation hits GTM leads first, but growth marketers and small sales teams feel it too. You get a deduped, outreach-ready Google Sheet built from Closed Won companies, without the weekly spreadsheet ritual.
Below you’ll see how the workflow runs, what it produces, and where the real time savings come from (it’s more than you think).
How This Automation Works
The full n8n workflow, from trigger to final output:
n8n Workflow Template: HubSpot + Google Sheets: lookalike leads, deduped
flowchart LR
subgraph sg0["Schedule Flow"]
direction LR
n0["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/hubspot.svg' width='40' height='40' /></div><br/>HubSpot Get Companies"]
n1@{ icon: "mdi:code-braces", form: "rounded", label: "Extract Domain", pos: "b", h: 48 }
n2["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>HTTP Request"]
n3@{ icon: "mdi:swap-vertical", form: "rounded", label: "Loop Over Items", pos: "b", h: 48 }
n4@{ icon: "mdi:swap-vertical", form: "rounded", label: "Split Out", pos: "b", h: 48 }
n5@{ icon: "mdi:swap-vertical", form: "rounded", label: "Edit Fields1", pos: "b", h: 48 }
n6@{ icon: "mdi:database", form: "rounded", label: "Append or update row in sheet", pos: "b", h: 48 }
n7@{ icon: "mdi:play-circle", form: "rounded", label: "Schedule Trigger", pos: "b", h: 48 }
n8@{ icon: "mdi:code-braces", form: "rounded", label: "Filter Best", pos: "b", h: 48 }
n4 --> n5
n8 --> n1
n5 --> n6
n2 --> n4
n1 --> n3
n3 --> n2
n7 --> n0
n0 --> n8
n6 --> n3
end
%% Styling
classDef trigger fill:#e8f5e9,stroke:#388e3c,stroke-width:2px
classDef ai fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
classDef aiModel fill:#e8eaf6,stroke:#3f51b5,stroke-width:2px
classDef decision fill:#fff8e1,stroke:#f9a825,stroke-width:2px
classDef database fill:#fce4ec,stroke:#c2185b,stroke-width:2px
classDef api fill:#fff3e0,stroke:#e65100,stroke-width:2px
classDef code fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
classDef disabled stroke-dasharray: 5 5,opacity: 0.5
class n7 trigger
class n6 database
class n2 api
class n1,n8 code
classDef customIcon fill:none,stroke:none
class n0,n2 customIcon
The Problem: Lookalike prospecting turns into spreadsheet work
“We should go after more companies like our best customers” is a great strategy right up until the moment someone has to build the list. You pull Closed Won companies from HubSpot, then you realize half the records have messy domains, different naming, or duplicates you didn’t notice last time. You run an enrichment tool, get a pile of similar companies back, and then spend the rest of the afternoon formatting rows so your team can actually use it. Next week, you do it again. And you still don’t fully trust the list.
The friction compounds. Here’s where it breaks down in real life.
- Exports drift from reality, so your outreach list is outdated before you even start calling.
- Domains are inconsistent in HubSpot records, which makes “similar companies” results noisy.
- Duplicates creep in across runs, and now the team argues about which row is the “real” one.
- Someone has to normalize fields for campaigns, and it quietly steals a few hours every week.
The Solution: Turn Closed Won companies into deduped lookalikes
This n8n workflow runs on a schedule (weekly by default) and uses your Closed Won customer base as “seeds” for new prospect discovery. It pulls companies from HubSpot, filters down to your top performers (based on a revenue percentile), and extracts each company’s website domain. Those domains get sent to the CompanyEnrich Similar Companies API, which returns a list of businesses that closely match your best customers. Then the workflow cleans and normalizes the enriched data, and writes it into a Google Sheet. The sheet is structured to use the domain as the “unique key,” so repeated runs update existing rows instead of piling on duplicates.
The workflow starts with a scheduled run, then HubSpot becomes the source of truth for “who counts as a great customer.” CompanyEnrich generates the lookalikes, and Google Sheets becomes the clean, always-current list your team can actually work from.
What You Get: Automation vs. Results
| What This Workflow Automates | Results You’ll Get |
|---|---|
|
|
Example: What This Looks Like
Say you pick your top 50 Closed Won companies as seeds and aim to generate 10 similar companies per seed. Manually, you might spend about 20 minutes exporting, cleaning domains, and pasting results per seed, which is roughly 15 hours of fiddly work across the week. With this workflow, you set the schedule once, let it run, and then you only review the Google Sheet after it finishes. That review is usually 10–15 minutes, because the rows are already normalized and deduped by domain.
What You’ll Need
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- HubSpot to fetch Closed Won company records
- Google Sheets to store a deduped prospect list
- CompanyEnrich API key (get it from your CompanyEnrich dashboard)
Skill level: Intermediate. You’ll connect accounts, paste an API key, and confirm your sheet has a domain column for upserts.
Don’t want to set this up yourself? Talk to an automation expert (free 15-minute consultation).
How It Works
A scheduled run kicks things off. The workflow runs weekly by default, but you can make it daily or on-demand when you’re launching a new campaign.
HubSpot companies get pulled and ranked. n8n fetches your company records, then a filter function selects the “top” slice based on a revenue percentile so you’re seeding lookalikes from what’s actually working.
Domains are extracted and sent to CompanyEnrich. The workflow derives a clean website domain per company, then calls the Similar Companies endpoint in batches so you can scale without babysitting it.
Results are cleaned, then upserted into Sheets. Similar companies are expanded into individual rows, normalized into consistent output fields, and written into Google Sheets using the domain column as the dedupe key.
You can easily modify the top-percentage filter to match your sales motion based on your needs. See the full implementation guide below for customization options.
Step-by-Step Implementation Guide
Step 1: Configure the Scheduled Trigger
Set up the workflow to run on a scheduled interval so it can pull and process companies automatically.
- Add and open Scheduled Run Trigger.
- Set the schedule rule to
weeksin Rule → Interval. - Confirm the connection from Scheduled Run Trigger to Retrieve HubSpot Firms.
Step 2: Connect HubSpot and Select Top Firms
Pull all companies from HubSpot and rank them by annual revenue to keep only the top percentage.
- Open Retrieve HubSpot Firms and set Resource to
company. - Set Operation to
getAlland Return All totrue. - Credential Required: Connect your hubspotAppToken credentials.
- Open Select Top Companies and keep the function code to filter the top
5% byannualrevenue.
Step 3: Derive Domains and Enrich with CompanyEnrich
Extract the website domain, iterate through batches, and call the CompanyEnrich API to find similar companies.
- Open Derive Website Domain and keep the function code that maps
properties.domainorproperties.websiteinto adomainfield. - Open Iterate Batches and keep default batch settings (no options required).
- Open CompanyEnrich API Call and set URL to
https://api.companyenrich.com/companies/similar. - Set Method to
POST, Body to={{ "domain": "{{$json.domain}}" } }}, and Headers to{ "Authorization": "Bearer [CONFIGURE_YOUR_TOKEN]", "Content-Type": "application/json", "Accept": "application/json" }.
⚠️ Common Pitfall: Replace [CONFIGURE_YOUR_TOKEN] with your real CompanyEnrich API token, or the request will fail.
Step 4: Format Output and Upsert to Google Sheets
Split the API response into items, normalize fields, and append/update rows in Google Sheets.
- Open Expand Items and set Field to Split Out to
items. - Open Format Output Fields and keep Mode as
rawwith the existing JSON Output expression. - Open Upsert Sheet Row and set Operation to
appendOrUpdate. - Set Document to
[YOUR_ID]and Sheet to[YOUR_ID]. - Credential Required: Connect your googleSheetsOAuth2Api credentials.
Tip: Keep Matching Columns set to domain to avoid duplicate company rows.
Step 5: Test and Activate Your Workflow
Run a manual test to validate data flow from HubSpot to CompanyEnrich and into Google Sheets, then activate for production.
- Click Execute Workflow to run a manual test from Scheduled Run Trigger.
- Confirm that Retrieve HubSpot Firms returns companies and Select Top Companies outputs a filtered list.
- Verify that CompanyEnrich API Call returns similar company data and Upsert Sheet Row writes rows to your sheet.
- Turn the workflow Active to allow weekly runs on the configured schedule.
Common Gotchas
- HubSpot credentials can expire or need specific permissions. If things break, check the HubSpot connected app settings and the n8n credential test first.
- If you’re using Wait nodes or external rendering, processing times vary. Bump up the wait duration if downstream nodes fail on empty responses.
- Default prompts in AI nodes are generic. Add your brand voice early or you’ll be editing outputs forever.
Frequently Asked Questions
About 30 minutes if your HubSpot, Sheets, and API key are ready.
No. You’ll mostly be connecting accounts and tweaking a couple of filter values. The “hard part” is just making sure your companies have valid domains.
Yes. n8n has a free self-hosted option and a free trial on n8n Cloud. Cloud plans start at $20/month for higher volume. You’ll also need to factor in CompanyEnrich API credits based on how many similar companies you pull each run.
Two options: n8n Cloud (managed, easiest setup) or self-hosting on a VPS. For self-hosting, Hostinger VPS is affordable and handles n8n well. Self-hosting gives you unlimited executions but requires basic server management.
Yes, but you’ll do it in two places. You can tighten the seed list by adjusting the “Select Top Companies” filter logic (for example, only specific lifecycle stages or regions), and you can refine what gets written to Sheets by editing the “Format Output Fields” mapping. Common tweaks include changing the Top_Percent value, filtering by employee size, and keeping only certain countries before the upsert.
Usually it’s expired credentials or missing company-read permissions in the connected HubSpot app.
It depends on your execution limits and your API credits. On n8n Cloud Starter, you’re working within your monthly execution allowance, which is fine for most weekly list builds. If you self-host, there’s no execution cap, so you’re mostly constrained by server resources and how aggressively you batch requests. Practically, teams often start with a few dozen seed companies and scale up once they see the Sheet quality. If you ask for thousands of lookalikes in one run, expect longer runtimes and higher CompanyEnrich credit usage.
Often, yes, because this kind of workflow needs batching, filtering, and upserts that get awkward (and expensive) in simpler tools. n8n also makes it easier to control the “top companies” logic in one place, so your seed criteria doesn’t get scattered across multiple zaps or scenarios. If you want a basic “HubSpot to Sheet” sync, Zapier or Make can be quick. For lookalikes plus dedupe plus normalization, n8n is usually the calmer choice. Talk to an automation expert if you want help picking the simplest setup that still works.
Once this is running, your lookalike list stops being a “project” and becomes a weekly asset. The workflow handles the repetitive cleanup so you can focus on outreach that actually converts.
Need Help Setting This Up?
Our automation experts can build and customize this workflow for your specific needs. Free 15-minute consultation—no commitment required.