

How to Export HubSpot Contacts to Google Sheets with N8n
Automatically export HubSpot contacts matching specific criteria to a Google Sheet on a scheduled basis.
Steps and UI details are based on platform versions at time of writing — check each platform for the latest interface.
Best for
Teams needing custom data transformation or complex filtering when exporting HubSpot contacts to sheets.
Not ideal for
Simple daily exports without custom logic where Zapier's straightforward interface works better.
Sync type
scheduledUse case type
exportReal-World Example
A 25-person B2B marketing agency uses this to export qualified leads to Google Sheets for their monthly client reports. Before automation, they manually exported contacts and spent 2 hours reformatting data and filtering by lead source. Now the sheet updates automatically every morning with properly formatted contact data, custom property values, and calculated fields showing lead quality scores.
What Will This Cost?
Drag the slider to your expected monthly volume.
Each platform counts differently — Zapier: 1 task per trigger. Make: 1 operation per module per record. n8n: 1 execution per run.





Prices shown for annual billing. Based on published pricing as of April 2026.
Estimated ROI
1000
min saved/mo
$583
labor value/mo
Free
no platform cost
Based on ~2 min manual effort per operation at $35/hr fully loaded labor cost.
Implementation
Import this workflow directly into n8n
Copy the pre-built n8n blueprint and paste it straight into n8n. All modules, filters, and field mappings are already configured — you just need to connect your accounts.
Before You Start
Make sure you have everything ready.
Field Mapping
Map these fields between your apps.
| Field | API Name | |
|---|---|---|
| Required | ||
| Email Address | properties.email.value | |
| First Name | properties.firstname.value | |
| Last Name | properties.lastname.value | |
3 optional fields▸ show
| Company Name | properties.company.value |
| Lead Status | properties.hs_lead_status.value |
| Created Date | properties.createdate.value |
Step-by-Step Setup
Editor > + > Triggers > Schedule Trigger
Create New Workflow
Start a new N8n workflow and add a Schedule trigger. This will run your export at regular intervals without manual intervention.
- 1Click the '+' button in the top-left corner
- 2Select 'Schedule Trigger' from the trigger node list
- 3Set the interval to your desired frequency (daily, weekly, etc.)
Schedule Trigger > Parameters
Configure Schedule Settings
Set your export frequency and timing. Most teams run this daily at night to avoid API rate limits during business hours.
- 1Select 'Days' from the Mode dropdown
- 2Set 'Hour' to a non-business time like 2 AM
- 3Choose which days to run the export
Editor > + > Regular Nodes > HubSpot
Add HubSpot Node
Connect to HubSpot to fetch your contacts. You'll need to authenticate and configure the contact search parameters.
- 1Click the '+' icon after the Schedule trigger
- 2Search for and select 'HubSpot'
- 3Choose 'Contact' as the resource
- 4Set operation to 'Get Many'
HubSpot Node > Credential
Authenticate HubSpot Connection
Create your HubSpot API connection using either OAuth2 or API key. OAuth2 is more secure for production workflows.
- 1Click 'Create New Credential' in the credential dropdown
- 2Choose 'HubSpot OAuth2 API' for production or 'HubSpot API Key' for testing
- 3Follow the authentication flow to connect your account
HubSpot Node > Additional Fields > Filters
Configure Contact Filters
Set up filters to export only the contacts you need. Use HubSpot's filter criteria to narrow down your export.
- 1Scroll to 'Additional Fields' section
- 2Toggle 'Filters' to enabled
- 3Click 'Add Filter' and select your criteria (e.g. lifecycle stage, lead status)
- 4Set the comparison operator and value
HubSpot Node > Additional Fields > Properties to Return
Select Contact Properties
Choose which contact fields to export. Only select properties you actually need to keep the payload small and fast.
- 1Toggle 'Properties to Return' to enabled
- 2Add essential properties like email, firstname, lastname, company
- 3Include any custom properties you need in your sheet
Editor > + > Data Transformation > Code
Add Data Transformation
Transform the HubSpot data structure for Google Sheets compatibility. This formats dates and flattens nested objects.
- 1Add a 'Code' node after HubSpot
- 2Select 'JavaScript' as the language
- 3Paste transformation code to format the contact data
Drop this into an n8n Code node.
JavaScript — Code Node// Transform HubSpot nested properties to flat structure▸ Show code
// Transform HubSpot nested properties to flat structure
const contacts = items.map(item => ({
email: item.json.properties?.email?.value || '',... expand to see full code
// Transform HubSpot nested properties to flat structure
const contacts = items.map(item => ({
email: item.json.properties?.email?.value || '',
firstname: item.json.properties?.firstname?.value || '',
lastname: item.json.properties?.lastname?.value || '',
company: item.json.properties?.company?.value || '',
created_date: item.json.properties?.createdate?.value?.split('T')[0] || ''
}));
return contacts.map(contact => ({ json: contact }));Editor > + > Productivity > Google Sheets
Add Google Sheets Node
Configure the Google Sheets connection to write your contact data. You'll specify the spreadsheet and how to handle existing data.
- 1Click '+' after the Code node
- 2Search for and select 'Google Sheets'
- 3Set operation to 'Update' or 'Append'
- 4Choose your target spreadsheet from the dropdown
Google Sheets Node > Credential
Authenticate Google Sheets
Connect your Google account to access spreadsheets. The OAuth flow will request permissions for Google Sheets access.
- 1Click 'Create New Credential' for Google Sheets
- 2Select 'Google OAuth2 API'
- 3Complete the Google authentication flow
- 4Grant permissions for Google Sheets access
Google Sheets Node > Parameters
Configure Sheet Mapping
Map HubSpot contact properties to Google Sheet columns. Set up column headers and data mapping for each field you want to export.
- 1Select your target sheet from the 'Range' dropdown
- 2Toggle 'Column Headers' if your first row contains headers
- 3Map each HubSpot property to the corresponding sheet column
- 4Set 'Value Input Mode' to 'Mapping'
Toolbar > Execute Workflow
Test the Workflow
Run a test execution to verify data flows correctly from HubSpot to your sheet. Check that filters work and data formats correctly.
- 1Click 'Execute Workflow' in the top toolbar
- 2Monitor execution progress in each node
- 3Verify test data appears correctly in your Google Sheet
- 4Check that contact properties mapped to the right columns
Workflow > Active Toggle
Activate Scheduled Export
Enable the workflow to run automatically on your configured schedule. Monitor the first few runs to ensure reliability.
- 1Click the toggle switch in the top-right to 'Active'
- 2Verify the schedule shows correct next execution time
- 3Check execution history after the first scheduled run
Scaling Beyond 1000+ contacts per export+ Records
If your volume exceeds 1000+ contacts per export records, apply these adjustments.
Implement Batch Processing
Split large exports into batches of 200-300 contacts each. Use the HubSpot 'limit' parameter and 'after' pagination token to process contacts in chunks instead of pulling everything at once.
Add Rate Limit Handling
Insert Wait nodes between API calls and implement exponential backoff. HubSpot's rate limits tighten with high volume, so build in delays of 2-3 seconds between batches to stay under the threshold.
Going live
Production Checklist
Before you turn this on for real, confirm each item.
Troubleshooting
Common errors and how to fix them.
Frequently Asked Questions
Common questions about this workflow.
Analysis
Use N8n for this if you need custom data transformation or have complex filtering requirements. The Code nodes let you reshape HubSpot's nested property structure exactly how you want it. You also get unlimited executions on the self-hosted version, which matters when exporting large contact lists. Skip N8n if you just want a simple daily export with no custom logic - Zapier's HubSpot integration is more straightforward for basic use cases.
This workflow uses roughly 3-5 executions per run depending on your contact volume and transformation complexity. At one export per day, that's 100-150 executions monthly. The N8n cloud starter plan at $20/month covers 2,500 executions, so you're well within limits. Make would charge $9/month for the same volume, and Zapier's $20 plan handles it easily. N8n costs the same as Zapier but gives you way more execution headroom.
Make handles batch operations better - their HubSpot module automatically paginates through large contact lists without custom code. Zapier's interface is cleaner for non-technical users and has better error messaging when things break. But N8n wins on flexibility - you can transform the HubSpot data structure, add custom validation, and handle edge cases that would require multiple steps in other platforms.
You'll hit HubSpot's 100 requests per 10-second rate limit if you export more than 1000 contacts at once. Google Sheets truncates cell values at 50,000 characters, so long text fields get cut off. The HubSpot API returns properties as nested objects like properties.email.value, not flat fields - your transformation code needs to handle this structure or you'll get empty columns.
Ideas for what to build next
- →Add Slack Notifications for New Contacts — Send a Slack message when the export finds new contacts that weren't in the previous run, helping sales teams react quickly to new leads.
- →Create Deal Pipeline Export — Build a companion workflow that exports HubSpot deals to a separate sheet, then use Google Sheets formulas to connect contact and deal data for complete reporting.
- →Implement Data Validation Checks — Add nodes that validate exported data for missing emails or invalid formats, then send alerts when data quality issues are detected in the export.
Related guides
How to Share Notion Meeting Notes to Slack with Pipedream
~15 min setup
How to Share Notion Meeting Notes to Slack with Power Automate
~15 min setup
How to Share Notion Meeting Notes to Slack with n8n
~20 min setup
How to Send Notion Meeting Notes to Slack with Zapier
~8 min setup
How to Share Notion Meeting Notes to Slack with Make
~12 min setup
How to Create Notion Tasks from Slack with Pipedream
~15 min setup