

How to Reconcile Google Sheets Contacts Against HubSpot with Make
Compare contact lists between Google Sheets and HubSpot to identify missing records in either system and sync discrepancies.
Steps and UI details are based on platform versions at time of writing β check each platform for the latest interface.
Best for
Teams with 200+ contacts who need bidirectional comparison between Google Sheets and HubSpot with custom matching logic
Not ideal for
Simple one-way imports or teams with under 50 contacts where manual comparison is faster
Sync type
scheduledUse case type
syncReal-World Example
A 25-person marketing agency uses this to reconcile their prospect spreadsheet against HubSpot weekly. They import leads from events into Google Sheets but sales reps add contacts directly to HubSpot. Before automation, they spent 3 hours monthly comparing systems and missed 15-20 duplicate prospects. Now the scenario runs every Monday morning and flags discrepancies in a separate sheet for review.
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 Make
Copy the pre-built Make blueprint and paste it straight into Make. 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 | email | |
5 optional fieldsβΈ show
| First Name | firstname |
| Last Name | lastname |
| Company Name | company |
| Phone Number | phone |
| Lead Source | hs_lead_source |
Step-by-Step Setup
Dashboard > Create Scenario > Google Sheets
Create New Make Scenario
Start a new scenario in Make to build your contact reconciliation workflow. This will house all the modules needed to compare both systems.
- 1Click 'Create a new scenario' from your Make dashboard
- 2Click the large + button in the center
- 3Search for 'Google Sheets' and select it
- 4Choose 'Watch Rows' as your trigger
Google Sheets Module > Connection
Connect Google Sheets Account
Authenticate your Google account so Make can access your contact spreadsheet. You'll need edit permissions on the sheet containing your contact list.
- 1Click 'Create a connection' in the Google Sheets module
- 2Sign in to your Google account when prompted
- 3Grant Make permission to access your Google Sheets
- 4Select 'Allow' for all requested permissions
Google Sheets Module > Configuration
Configure Google Sheets Trigger
Point Make to your specific contact spreadsheet and configure which changes should trigger the reconciliation process.
- 1Select your contact spreadsheet from the 'Spreadsheet' dropdown
- 2Choose the worksheet containing contacts (usually 'Sheet1')
- 3Set 'Table contains headers' to Yes
- 4Leave 'Row processing option' as 'Process all rows'
Scenario > Add Module > HubSpot > List Contacts
Add HubSpot Connection
Connect to HubSpot so Make can fetch your existing contact database for comparison. This requires a HubSpot account with contacts access.
- 1Click the + button to add a new module
- 2Search for 'HubSpot' and select it
- 3Choose 'List Contacts' from the actions
- 4Click 'Create a connection' and enter your HubSpot API key
HubSpot Module > List Contacts Configuration
Configure HubSpot Contact Fetch
Set up HubSpot to return all contacts with the properties you need for comparison. Limit the fields to avoid unnecessary API calls.
- 1Set 'Limit' to 100 (maximum per call)
- 2In 'Properties' field, add: email,firstname,lastname,createdate
- 3Leave 'Property History' unchecked
- 4Set 'Associations' to None
Tools > Array Aggregator
Add Array Aggregator
Collect all HubSpot contacts into a single array so you can compare against your Google Sheets list efficiently.
- 1Add a new module after HubSpot
- 2Search for 'Array aggregator' in Tools
- 3Select 'Array aggregator'
- 4Set 'Source module' to the HubSpot List Contacts module
Flow Control > Iterator
Add Iterator for Sheet Rows
Create an iterator to loop through each row in your Google Sheets contact list for individual comparison against HubSpot data.
- 1Add a new module after the Array aggregator
- 2Search for 'Iterator' in Flow Control
- 3Select 'Iterator'
- 4Map the 'Array' field to the Google Sheets rows output
Iterator > Filter > Condition
Add Filter for Missing Contacts
Create a filter that identifies Google Sheets contacts missing from HubSpot by comparing email addresses between both lists.
- 1Click the wrench icon between Iterator and next module
- 2Select 'Set up a filter'
- 3Set condition: HubSpot contacts array 'does not contain' current Google Sheets email
- 4Name the filter 'Missing from HubSpot'
HubSpot > Create a Contact
Create HubSpot Contact for Missing Records
Add missing Google Sheets contacts to HubSpot when the filter identifies them as absent from your CRM.
- 1Add 'HubSpot' module after the filter
- 2Select 'Create a Contact' action
- 3Map 'Email' to the Google Sheets email column
- 4Map 'First Name' and 'Last Name' to respective sheet columns
Array Aggregator > Add Route > Iterator
Add Reverse Comparison Branch
Create a parallel branch to find HubSpot contacts missing from your Google Sheets by iterating through the HubSpot array.
- 1Right-click the Array aggregator module
- 2Select 'Add another route'
- 3Add an Iterator module to this new branch
- 4Set Iterator array to the HubSpot contacts from Array aggregator
HubSpot Iterator > Filter
Filter HubSpot Contacts Missing from Sheets
Add a filter on the HubSpot branch to identify CRM contacts that don't exist in your Google Sheets list.
- 1Add a filter after the HubSpot Iterator
- 2Set condition: Google Sheets email column 'does not contain' current HubSpot email
- 3Name filter 'Missing from Sheets'
- 4Use the 'map' function to create an array of sheet emails for comparison
Google Sheets > Add a Row
Log Missing Contacts to New Sheet
Create a Google Sheets action to log contacts found in HubSpot but missing from your original sheet for review.
- 1Add Google Sheets module after the HubSpot filter
- 2Select 'Add a Row' action
- 3Create or select a 'Missing Contacts Log' spreadsheet
- 4Map HubSpot email, firstname, lastname to new sheet columns
Drop this into a Make custom function.
Copy this template{{lower(trim(1.email))}} = {{lower(trim(2.properties.email))}}βΈ Show code
{{lower(trim(1.email))}} = {{lower(trim(2.properties.email))}}... expand to see full code
{{lower(trim(1.email))}} = {{lower(trim(2.properties.email))}}Scaling Beyond 500+ contacts per system+ Records
If your volume exceeds 500+ contacts per system records, apply these adjustments.
Batch HubSpot API Calls
Use Make's repeater module to fetch contacts in 100-record chunks rather than individual calls. This reduces API operations from 500 to 5 for a full contact list pull.
Implement Progressive Sync
Add a 'Last Modified' date filter so you only reconcile contacts updated since the last run. This cuts operations by 80-90% after initial sync and prevents unnecessary API calls.
Split Large Sheets
Break sheets over 1000 rows into separate tabs or files. Google Sheets API performance degrades significantly above 1000 rows and Make's processing time increases exponentially.
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 Make for this if you need bidirectional reconciliation and have over 200 contacts to compare. Make's array aggregator and dual-path routing handles the complex logic better than simple trigger-based platforms. The visual scenario builder makes it easy to debug mismatched records and add custom comparison logic. Skip Make and use Zapier if you only need one-way sync from Sheets to HubSpot - Zapier's HubSpot integration handles basic duplicate detection automatically.
This workflow uses about 4 operations per Google Sheets row plus 1 operation per 100 HubSpot contacts fetched. For 500 contacts in each system, expect 25 operations per run. Running daily, that's 750 operations monthly, fitting Make's Core plan at $10.59/month. Zapier would need the Professional plan at $49/month for the same volume since it lacks batch processing. Make saves you $460 annually on this workflow.
Zapier beats Make on built-in duplicate detection - their HubSpot integration automatically prevents duplicate contact creation without custom filters. N8n offers better bulk operations with their batch processing node, handling 1000+ contacts more efficiently than Make's 100-record API limits. But Make wins on visual debugging and error handling. When your comparison logic fails, Make's execution history shows exactly which records didn't match and why.
You'll hit three main issues after setup. HubSpot's API paginates at 100 contacts maximum per call - if you have 500+ contacts, you need Make's repeater module to fetch all pages. Google Sheets rate limits at 100 requests per 100 seconds, so large reconciliations need delay modules between operations. Email formatting breaks everything - '[email protected]' doesn't match '[email protected]', so wrap all email comparisons in lower() and trim() functions to avoid false mismatches.
Ideas for what to build next
- βAdd Contact Scoring Sync β Create a follow-up scenario that syncs lead scores from your Google Sheets analysis back to HubSpot contact properties for better sales prioritization.
- βSet Up Duplicate Merge Notifications β Build a Slack notification workflow that alerts your sales team when the reconciliation finds potential duplicate contacts that need manual review and merging.
- βCreate Contact Activity Timeline β Develop a scenario that logs all contact reconciliation changes to a master Google Sheets timeline for audit purposes and data governance compliance.
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