HubSpot to Google Sheets, contacts ready to share
You need a clean list of HubSpot contacts. Again. But instead of using the list you already pulled last week, you’re back to clicking filters, exporting CSVs, and fixing columns that somehow changed.
This HubSpot Sheets export automation hits marketing ops the hardest, honestly. A small business owner sending a partner list feels it too. And a consultant building weekly reports ends up doing the same copy-paste routine.
This workflow gives you an on-demand pull from HubSpot so you can reuse and share a consistent contact list. You’ll see what it does, what you need, and how to adapt it to your team’s version of “the list.”
How This Automation Works
The full n8n workflow, from trigger to final output:
n8n Workflow Template: HubSpot to Google Sheets, contacts ready to share
flowchart LR
subgraph sg0["Manual Execution Start Flow"]
direction LR
n0@{ icon: "mdi:play-circle", form: "rounded", label: "Manual Execution Start", pos: "b", h: 48 }
n1["<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 Contact Retrieval"]
n0 --> n1
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 n0 trigger
classDef customIcon fill:none,stroke:none
class n1 customIcon
The Problem: Contact exports turn into recurring busywork
Exporting contacts sounds simple until you do it more than once. HubSpot filters get tweaked, someone asks for “just one more field,” and your saved views don’t match the exact segment a stakeholder expects today. Then there’s the CSV cleanup: headings change, phone numbers get reformatted, lifecycle stages come through differently, and your sheet ends up with duplicates you don’t notice until someone complains. The worst part is the mental load. You stop trusting your own list.
It adds up fast. Here’s where it usually breaks down in real teams.
- You re-run the same export every week, which quietly eats about 1–2 hours once you include cleanup and reformatting.
- The “right” segment lives in someone’s browser filters, so results change depending on who pulls it.
- CSV files get emailed or shared in Slack, and now there are three versions with different timestamps.
- Manual exports invite mistakes, like missing unsubscribes or mixing regions, which can create awkward outreach fast.
The Solution: Pull HubSpot contacts on demand, then share a single sheet
This n8n workflow is built around one simple idea: when you need contacts, you should be able to pull them from HubSpot consistently, without rebuilding your export process every time. You manually run the workflow (so you stay in control), n8n calls HubSpot to retrieve contacts, and the results are prepared for a spreadsheet-friendly format. From there, you publish the output to Google Sheets so it’s easy to share, reuse, and reference later. No more “send me the latest CSV.” The sheet becomes the source your team points to.
The workflow starts with a manual trigger in n8n. HubSpot retrieval happens next, using your connected HubSpot account and the fields you decide matter. Finally, you push the list into Google Sheets so the output looks the same every time you run it.
What You Get: Automation vs. Results
| What This Workflow Automates | Results You’ll Get |
|---|---|
|
|
Example: What This Looks Like
Say you share a refreshed “Active Leads” list every Monday with sales and a partner. Manually, it’s usually 15 minutes to recreate filters, 10 minutes to export and download, then another 20 minutes cleaning the CSV and fixing columns, so about 45 minutes total. With this workflow, you open n8n, click run, and wait a minute or two for HubSpot to return contacts, then the sheet updates. Call it 5 minutes of effort instead of nearly an hour.
What You’ll Need
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- HubSpot for the contact database you’ll export from
- Google Sheets to store and share the exported list
- HubSpot private app token (get it from HubSpot Settings → Integrations → Private Apps)
Skill level: Beginner. You’ll connect accounts, choose fields, and test one manual run.
Don’t want to set this up yourself? Talk to an automation expert (free 15-minute consultation).
How It Works
You run it on demand. The workflow starts with a manual trigger inside n8n, so you can export whenever someone asks for a fresh list.
HubSpot retrieves the contacts. n8n connects to HubSpot and pulls contact records using the criteria you define (for example, lifecycle stage, list membership, or date ranges).
The data gets prepared for a sheet. Contacts are shaped into a predictable set of fields so your Google Sheet columns stay consistent from run to run. This is where you’d also handle things like “only export contacts with email” if your process needs it.
Google Sheets becomes the shared output. The final result is a sheet your team can bookmark, filter, and reuse without creating a new file every time.
You can easily modify which contact fields you export to match your reporting needs. See the full implementation guide below for customization options.
Step-by-Step Implementation Guide
Step 1: Configure the Manual Trigger
Set up the manual trigger so you can run the workflow on demand while testing.
- Add the Manual Execution Start node as your trigger.
- Leave the default settings in Manual Execution Start (no parameters required).
- Confirm the execution flow shows Manual Execution Start connected to HubSpot Contact Retrieval.
Step 2: Connect HubSpot
Configure HubSpot access and define the contact retrieval operation.
- Add the HubSpot Contact Retrieval node after Manual Execution Start.
- Set Resource to
contact. - Set Operation to
getAll. - Enable Return All by setting it to
true. - Credential Required: Connect your
hubspotApicredentials to HubSpot Contact Retrieval.
Step 3: Test and Activate Your Workflow
Run a manual test to confirm contacts are returned, then activate the workflow.
- Click Execute Workflow to run Manual Execution Start and trigger HubSpot Contact Retrieval.
- Verify the output of HubSpot Contact Retrieval contains a list of HubSpot contacts.
- If the results are correct, toggle the workflow Active to enable it for production use.
Common Gotchas
- HubSpot credentials can expire or need specific permissions. If things break, check your HubSpot Private App scopes and token in the n8n credential settings 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 20 minutes if your HubSpot access is ready.
No. You’ll connect HubSpot and Google Sheets, then choose what fields to pull. n8n handles the rest.
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 HubSpot access (your existing plan) since this workflow pulls from your CRM.
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 want to be deliberate about the filter rules so the sheet stays stable. In the HubSpot contact retrieval step, adjust the segment logic (for example, only “Marketing Qualified Lead” contacts, or only contacts updated in the last 30 days). You can also change which properties are returned so the sheet includes exactly what your stakeholders ask for. Common customizations include adding owner, lifecycle stage, and last activity date.
Usually it’s an expired or revoked private app token. Regenerate the token in HubSpot, then update the credential in n8n and run the workflow again. If it still fails, check that the private app has the right CRM scopes for reading contacts, and keep an eye on HubSpot API limits if you’re exporting large lists.
A few thousand contacts per run is normal, and bigger lists depend on your HubSpot API limits and your n8n plan.
Often, yes, if you care about repeatability and control. n8n is comfortable with more involved logic, and you can self-host it if you don’t want to pay per task when exports get frequent. Zapier and Make are fine for simple “send one contact to a sheet” flows, but bulk exports and shaping data usually get messy there. With n8n, you can keep one workflow as the standard and extend it later (notifications, validation, enrichment). Talk to an automation expert if you want help picking the simplest path.
Once this is in place, exporting contacts stops being a weekly chore and becomes a button you click when you need it. The workflow handles the repetitive stuff. You handle the decisions.
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.