Beginner~12 min setupCRM & EmailVerified April 2026
HubSpot logo
Gmail logo

How to Log Gmail Activity to HubSpot CRM with Make

Automatically capture Gmail emails with HubSpot contacts and log them to the contact's CRM timeline.

Steps and UI details are based on platform versions at time of writing — check each platform for the latest interface.

HubSpot Gmail extension exists as a native integration, but it requires manual setup per user and doesn't create contacts automatically. This guide uses an automation platform for full control. View native option →

Best for

Sales teams who need selective email logging with custom filtering based on contact properties or sender criteria.

Not ideal for

Teams wanting to log every single email without any filtering or customization requirements.

Sync type

polling

Use case type

sync

Real-World Example

💡

A 25-person B2B software sales team uses this to automatically log client emails to HubSpot without cluttering timelines with internal messages. Before automation, reps manually forwarded important client emails to HubSpot using the BCC feature, but forgot 40% of the time. Now every client interaction gets captured automatically, giving managers complete visibility into prospect communication history.

What Will This Cost?

Drag the slider to your expected monthly volume.

/mo
505005K50K

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

Skip the setup

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.

Gmail account with emails from HubSpot contacts
HubSpot CRM with existing contact records
Make account with available operations
HubSpot admin access to authorize timeline permissions

Field Mapping

Map these fields between your apps.

FieldAPI Name
Required
Contact IDobjectId
Event TypeeventType
Email Subjecttitle
TimestampoccurredAt
2 optional fields▸ show
Email Bodydescription
Sender EmailextraData.sender

Step-by-Step Setup

1

Dashboard > + Create scenario > Gmail

Create new Make scenario

Start building your email logging automation in Make. This creates the workspace where you'll connect Gmail and HubSpot.

  1. 1Click 'Create a new scenario' from your Make dashboard
  2. 2Select Gmail from the app list
  3. 3Choose 'Watch emails' as your trigger
What you should see: You should see a Gmail module with a question mark icon in the scenario builder.
2

Gmail module > Connection > Add

Connect your Gmail account

Authorize Make to read your Gmail messages. The connection needs read access to detect emails with HubSpot contacts.

  1. 1Click 'Create a connection' in the Gmail module
  2. 2Select your Google account from the popup
  3. 3Grant Make permission to read Gmail messages
What you should see: Gmail module shows 'Connection established' with your email address displayed.
Common mistake — Don't use a shared inbox account — Gmail API limits apply per connection and you'll hit rate limits faster.
Make settings
Connection
Choose a connection…Add
click Add
HubSpot
Log in to authorize
Authorize Make
popup window
Connected
green checkmark
3

Gmail module > Settings

Configure email watching

Set Gmail to monitor your inbox for new messages. This determines which emails trigger the HubSpot logging.

  1. 1Set Folder to 'INBOX'
  2. 2Set Maximum results to '10'
  3. 3Leave Label field empty to watch all emails
  4. 4Set Watch also for to 'Unread emails only'
What you should see: Gmail module configuration shows inbox monitoring settings with green checkmarks.
Common mistake — Setting Maximum results above 50 will slow down every run — Gmail API returns emails in batches.
Make
+
click +
search apps
HubSpot
HU
HubSpot
Configure email watching
HubSpot
HU
module added
4

Scenario > + > HubSpot > Search

Add HubSpot search module

Search HubSpot to check if the email sender exists as a contact. This prevents logging emails from unknown senders.

  1. 1Click the + button after Gmail module
  2. 2Select HubSpot from the app list
  3. 3Choose 'Search for CRM Objects' action
What you should see: HubSpot module appears connected to Gmail with a dotted line between them.
5

HubSpot module > Connection > Add

Connect HubSpot account

Link your HubSpot CRM to Make with proper permissions. The connection needs contact read access and timeline write access.

  1. 1Click 'Create a connection' in the HubSpot module
  2. 2Enter your HubSpot portal domain
  3. 3Click 'Continue' and authorize in the popup
  4. 4Grant Make access to contacts and timeline
What you should see: HubSpot module displays 'Connected' status with your portal name visible.
Common mistake — If you see 'insufficient scope' errors later, reconnect and ensure you grant timeline write permissions during auth.
6

HubSpot module > Search configuration

Configure contact search

Set up HubSpot to find contacts matching the Gmail sender's email address. This maps emails to CRM records.

  1. 1Set Object Type to 'Contacts'
  2. 2In Search Query, map Gmail sender email using the data picker
  3. 3Set Limit to '1' since emails have one sender
  4. 4Leave other fields at default values
What you should see: HubSpot search shows mapped email field from Gmail with contact object type selected.
7

Tools > Flow Control > Router

Add router for found contacts

Split the workflow based on whether HubSpot found a matching contact. Only emails with existing contacts should be logged.

  1. 1Click the + button after HubSpot Search
  2. 2Select 'Flow Control' from tools
  3. 3Choose 'Router' to create multiple paths
  4. 4The router automatically connects to HubSpot
What you should see: Router appears with one input line from HubSpot and two empty output paths.
Common mistake — Don't skip the router — without it, Make throws errors when no contact matches and stops the entire scenario.
8

Router > Path 1 > Filter

Set up contact found filter

Configure one router path to only proceed when HubSpot finds a matching contact. This prevents logging emails from non-contacts.

  1. 1Click the first router output path
  2. 2Set condition to 'HubSpot Contact ID exists'
  3. 3Choose 'is not empty' as the operator
  4. 4Label this path 'Contact Found'
What you should see: First router path shows filter icon with 'Contact Found' label and existence condition.
Common mistake — Filters are the most common place setups break. Double-check the field name and value exactly match what your app sends — a single capital letter difference will block everything.
HubSpot
HU
trigger
filter
Condition
matches criteria?
yes — passes through
no — skipped
Gmail
GM
notified
9

Contact Found path > + > HubSpot > Create Object

Add timeline entry module

Create the HubSpot module that actually logs email activity to the contact timeline. This writes the email details to CRM.

  1. 1Click + after the 'Contact Found' filter path
  2. 2Select HubSpot again from apps
  3. 3Choose 'Create a CRM Object' action
  4. 4Set Object Type to 'Timeline Event'
What you should see: Second HubSpot module appears on the filtered path, configured for timeline entries.
Common mistake — Make sure you select 'Timeline Event' not 'Activity' — Activities don't show up on contact timelines in the same way.
10

Timeline module > Field mapping

Map email data to timeline

Configure which Gmail data gets logged to HubSpot timeline. This creates the actual email record in CRM.

  1. 1Map Contact ID from the search results
  2. 2Set Event Type to 'EMAIL'
  3. 3Map Gmail subject line to Title field
  4. 4Map Gmail body to Description field
  5. 5Map Gmail timestamp to Occurred At field
What you should see: Timeline module shows all mapped fields with Gmail data connected via blue mapping lines.
Common mistake — Don't map HTML email bodies directly — they'll break timeline formatting. Use Make's stripHTML function in the Description field.
HubSpot fields
firstname
lastname
email
company
hs_lead_status
available as variables:
1.props.firstname
1.props.lastname
1.props.email
1.props.company
1.props.hs_lead_status
11

Scenario controls > Run once

Test the complete workflow

Run a test to verify emails get properly logged to HubSpot timelines. This confirms the entire automation works end-to-end.

  1. 1Click 'Run once' at the bottom left
  2. 2Send yourself a test email from a HubSpot contact
  3. 3Check the execution log for green checkmarks
  4. 4Verify the timeline entry appears in HubSpot contact record
What you should see: Execution shows successful run with email data flowing through all modules to HubSpot timeline.
Make
▶ Run once
executed
HubSpot
Gmail
Gmail
🔔 notification
received
12

Scenario > Scheduling toggle

Activate ongoing monitoring

Turn on the scenario to continuously monitor Gmail and log emails. The automation runs every 15 minutes by default.

  1. 1Click the 'OFF' toggle in the top left to turn it ON
  2. 2Confirm scheduling is set to every 15 minutes
  3. 3Click 'OK' to activate the scenario
  4. 4Monitor the first few runs in the execution history
What you should see: Scenario toggle shows 'ON' and scheduling displays 'Every 15 minutes' with next run time.
Common mistake — Start with 15-minute intervals — Gmail API has daily limits and shorter intervals burn through them faster with high email volume.

Drop this into a Make custom function.

Copy this templatestripHTML({{1.textPlain}}) + '\n\nSender: ' + {{1.fromEmail}} + '\nReceived: ' + {{1.date}}
▸ Show code
stripHTML({{1.textPlain}}) + '\n\nSender: ' + {{1.fromEmail}} + '\nReceived: ' + {{1.date}}

... expand to see full code

stripHTML({{1.textPlain}}) + '\n\nSender: ' + {{1.fromEmail}} + '\nReceived: ' + {{1.date}}

Scaling Beyond 300+ emails/day+ Records

If your volume exceeds 300+ emails/day records, apply these adjustments.

1

Batch email processing

Increase Gmail module's maximum results to 50 and reduce scenario frequency to 30 minutes. This processes emails in larger batches and reduces API calls.

2

Add sender domain filtering

Use Make's filter function to only process emails from business domains, not gmail.com or yahoo.com. This cuts processing volume by 60-80% in most sales environments.

3

Implement retry logic

Add a delay module before HubSpot calls and configure 3 retry attempts with exponential backoff. High volume scenarios hit rate limits more frequently.

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

VerdictWhy Make for this workflow

Use Make for this if you need granular control over which emails get logged and how they appear in HubSpot timelines. Make's router system lets you filter by sender domain, email content, or contact properties before logging. The visual scenario builder makes it easy to add conditions like 'only log emails from prospects' or 'skip automated newsletters.' Pick Zapier instead if you want zero setup time and don't mind logging every single email — their Gmail-HubSpot Zap works in 3 clicks but offers no filtering.

Cost

This workflow burns 3 operations per email: Gmail watch, HubSpot contact search, and timeline creation. At 200 emails/month with HubSpot contacts, that's 600 operations monthly. Make's Core plan at $9/month includes 10,000 operations, so you're well covered. Zapier would cost $20/month for their Starter plan to handle the same volume. N8n is free but requires server hosting that costs $15-30/month, making Make the middle-ground option.

Tradeoffs

Zapier wins on setup speed — their pre-built Gmail-HubSpot integration takes 5 minutes versus Make's 30-minute scenario building. N8n offers better cost scaling for high volume since it's usage-unlimited once hosted. But Make strikes the right balance here: more customization than Zapier's rigid templates, easier than N8n's code-heavy approach. The visual router system alone saves hours compared to writing conditional logic in N8n.

Gmail API limits will bite you at 500+ emails daily — you'll hit the 250 quota units per user per day ceiling. HubSpot's contact search API occasionally returns duplicate contacts for the same email, creating double timeline entries. The Gmail 'Watch emails' trigger sometimes misses emails that arrive in rapid succession, so don't rely on this for legally critical logging. HTML emails with embedded images can exceed HubSpot's timeline field limits and cause silent failures.

Ideas for what to build next

  • Add email attachment handlingExtend the scenario to save Gmail attachments to HubSpot file manager and link them to timeline entries for complete email archiving.
  • Create Slack notifications for VIP contactsAdd a filter for high-value contacts and send Slack alerts when they email, so sales reps can respond immediately to key accounts.
  • Build outbound email trackingCreate a parallel scenario that monitors your Gmail Sent folder and logs outgoing emails to HubSpot for complete communication history.

Related guides

Was this guide helpful?
HubSpot + Gmail overviewMake profile →