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

How to Parse Email Signatures and Update HubSpot with Make

Automatically extract phone numbers, job titles, and company names from Gmail signatures and update contact properties in HubSpot.

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

Teams with inconsistent email signature formats who need custom parsing rules and conditional contact updating.

Not ideal for

Teams with standardized signatures who want simple field extraction without complex branching logic.

Sync type

polling

Use case type

sync

Real-World Example

💡

A 25-person B2B consulting firm uses this to automatically capture contact details from client emails and update their HubSpot database. Before automation, account managers manually copied phone numbers and titles from email signatures into contact records, missing about 60% of updates. Now signature data gets parsed and updated within 15 minutes of email receipt.

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 API access enabled
HubSpot account with contacts write permissions
Make account with active subscription (free tier works)
Custom contact properties created in HubSpot for signature data
Sample emails with signatures to test pattern matching

Field Mapping

Map these fields between your apps.

FieldAPI Name
Required
Email Addressemail
Contact IDhs_object_id
4 optional fields▸ show
Phone Numberphone
Job Titlejobtitle
Company Namecompany
Last Activity Datenotes_last_updated

Step-by-Step Setup

1

Scenarios > Create new > Gmail > Watch emails

Create New Scenario

Set up a new Make scenario to process incoming Gmail messages. This workflow will trigger whenever new emails arrive in your Gmail inbox.

  1. 1Click 'Create a new scenario' from your Make dashboard
  2. 2Search for 'Gmail' in the app selector
  3. 3Select 'Watch emails' trigger module
  4. 4Connect your Gmail account and authorize permissions
What you should see: You should see a Gmail module with a green connection indicator and 'Watch emails' selected as the trigger.
2

Gmail module > Configuration

Configure Gmail Trigger

Set the trigger to monitor all incoming emails and capture the full message content including signatures. The trigger will poll Gmail every 15 minutes for new messages.

  1. 1Set 'Folder' to 'INBOX'
  2. 2Change 'Maximum number of results' to 10
  3. 3Enable 'Mark as read' to prevent reprocessing
  4. 4Set 'Format' to 'Full' to capture complete email content
What you should see: The configuration panel shows INBOX selected and Format set to Full with a 10-message limit.
Common mistake — Don't use 'Simple' format - it strips signature content you need to parse.
Make
+
click +
search apps
HubSpot
HU
HubSpot
Configure Gmail Trigger
HubSpot
HU
module added
3

Gmail > + > Tools > Text parser > Match pattern

Add Text Parser Module

Insert a text parser to extract signature content from the email body using regex patterns. This module isolates the signature block before field extraction.

  1. 1Click the + button after Gmail module
  2. 2Search for 'Text parser' in tools
  3. 3Select 'Match pattern' function
  4. 4Map Gmail body content to the Text field
What you should see: A Text parser module appears connected to Gmail with 'Match pattern' selected.
4

Text parser > Configuration

Configure Signature Extraction Pattern

Set up regex to capture email signature blocks that typically appear after line breaks or signature separators. This pattern catches most standard signature formats.

  1. 1In 'Pattern' field, enter: (--\s*|\n\n)([\s\S]*?)$
  2. 2Enable 'Global match' checkbox
  3. 3Set 'Text' to map from Gmail > plain/text body
  4. 4Enable 'Multiline' flag for signature parsing
What you should see: Pattern field shows the regex and Global match is checked with Gmail body mapped to Text input.
Common mistake — Test this pattern with your actual email format - some signatures use different separators than -- or double line breaks.
5

Text parser > + > Tools > Text parser

Extract Phone Numbers

Add another text parser to find phone numbers in the signature content using a comprehensive phone number regex pattern. This catches US and international formats.

  1. 1Add another 'Text parser' module after the first one
  2. 2Select 'Match pattern' function
  3. 3Map signature text from previous parser output
  4. 4Enter phone regex: (\+?\d{1,4}[\s.-]?)?\(?\d{3}\)?[\s.-]?\d{3}[\s.-]?\d{4}
What you should see: Second text parser module shows phone regex pattern and signature text mapped from previous step.
6

Text parser configuration

Extract Job Title

Create a third parser to capture job titles that typically appear on lines by themselves in signatures. This pattern looks for common title indicators and positioning.

  1. 1Add third 'Text parser' module
  2. 2Use pattern: (CEO|CTO|VP|Director|Manager|Analyst|Specialist|Coordinator)[^\n]*
  3. 3Map to the same signature text source
  4. 4Enable 'Case insensitive' flag
What you should see: Third parser module configured with job title pattern and case insensitive matching enabled.
Common mistake — This pattern catches common titles but may miss creative job titles - adjust the regex for your industry.
7

Text parser configuration

Extract Company Name

Add a fourth parser to identify company names, usually found on the first or second line of email signatures. This looks for capitalized words that aren't personal names.

  1. 1Insert fourth 'Text parser' module
  2. 2Pattern: (?<!\w)[A-Z][a-zA-Z&\s,.']*(?:Inc|LLC|Corp|Ltd|Company|Co\.|Group)[^\n]*
  3. 3Map signature text from first parser
  4. 4Keep 'Global match' unchecked to get first company match
What you should see: Fourth parser shows company extraction pattern with signature text mapped and Global match disabled.
8

Parsers > + > HubSpot > Search for CRM Objects

Add HubSpot Search Module

Insert HubSpot contact search to find existing contacts by email address before updating. This prevents creating duplicate contacts for signature updates.

  1. 1Click + after the parser modules
  2. 2Search for 'HubSpot' and select it
  3. 3Choose 'Search for CRM Objects' action
  4. 4Set Object Type to 'Contacts'
What you should see: HubSpot module appears with 'Search for CRM Objects' selected and Contacts as the object type.
Common mistake — Don't skip the search step - updating without checking creates duplicate contact records.
9

HubSpot Search module > Configuration

Configure Contact Search Parameters

Set up the search to find contacts by email address from the original Gmail message. This ensures you're updating the right contact record with signature data.

  1. 1In 'Property to search' field, select 'email'
  2. 2Map 'Value' to Gmail > from > email address
  3. 3Set 'Limit' to 1
  4. 4Leave 'After' field empty
What you should see: Search configuration shows email property selected with Gmail sender address mapped to Value field.
10

HubSpot Search > + > Flow control > Router

Add Router Module

Insert a router to handle cases where contacts exist versus when they need to be created. This splits the workflow into update and create paths.

  1. 1Click + after HubSpot search module
  2. 2Select 'Flow control' from tools
  3. 3Choose 'Router' option
  4. 4Connect the router to HubSpot search output
What you should see: Router module appears with two empty paths branching from the HubSpot search step.
11

Router path 1 > HubSpot > Update a CRM Object

Configure Update Contact Path

Set up the first router path to update existing contacts with parsed signature information. This path only executes when the search finds a matching contact.

  1. 1Click the first router path
  2. 2Add HubSpot 'Update a CRM Object' module
  3. 3Set Object Type to 'Contact'
  4. 4Map Contact ID from search results
What you should see: First router path contains HubSpot update module with Contact object type and ID field mapped.
Common mistake — Map the actual contact ID from search results, not the email address.
12

HubSpot Update module > Properties

Map Signature Fields to HubSpot Properties

Configure the contact update to populate phone, job title, and company fields with parsed signature data. This completes the signature-to-CRM data flow.

  1. 1Map 'Phone number' to phone parser output
  2. 2Map 'Job title' to title parser output
  3. 3Map 'Company name' to company parser output
  4. 4Set filter condition: search results > total > greater than 0
What you should see: Update module shows all three signature fields mapped to corresponding HubSpot properties with existence filter applied.
Common mistake — Add the total > 0 filter or the update will run even when no contact is found, causing errors.

Drop this into a Make custom function.

JavaScript — Custom Functionfunction cleanPhone(phoneNumber) {
▸ Show code
function cleanPhone(phoneNumber) {
  // Remove all non-digits except leading +
  return phoneNumber.replace(/[^\d+]/g, '').replace(/^(\+)(\d)/, '+1$2');

... expand to see full code

function cleanPhone(phoneNumber) {
  // Remove all non-digits except leading +
  return phoneNumber.replace(/[^\d+]/g, '').replace(/^(\+)(\d)/, '+1$2');
}

// Use in Make's JavaScript function module to normalize phone format before HubSpot update
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

Scaling Beyond 300+ emails/day+ Records

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

1

Use Gmail Label Filtering

Configure the Gmail trigger to only watch specific labels like 'Client Communications' instead of the entire inbox. This reduces unnecessary processing of internal emails and newsletters.

2

Implement Batch Processing

Increase the Gmail trigger's 'Maximum number of results' to 50 and process multiple emails per scenario run. This reduces total operations and improves efficiency.

3

Add Rate Limiting

Insert a Sleep module between HubSpot operations to avoid hitting API rate limits. Set 2-3 second delays when processing large batches of contact updates.

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 custom regex parsing and complex conditional logic. Make's visual router system handles the contact-exists-or-not branching cleanly, and multiple text parsers let you extract different signature elements in sequence. Pick Zapier instead if your signatures follow a super consistent format - their built-in text extraction is simpler for basic phone/title parsing.

Cost

This workflow uses about 8 operations per email: Gmail trigger, 4 text parsers, HubSpot search, router decision, and contact update. At 200 emails/month, that's 1,600 operations monthly. That fits Make's free tier at 1,000 ops plus their $9 Core plan. Zapier would cost $20/month for the multi-step Zaps tier. N8N is free if self-hosted but requires server management. Make wins on cost and complexity handling.

Tradeoffs

Zapier's formatter has built-in phone number extraction that's more reliable than custom regex - you don't need to write patterns for different phone formats. N8N's JavaScript function nodes let you write custom parsing logic that's more powerful than Make's text parsers for complex signature variations. But Make's visual router makes the contact-update-vs-create logic much clearer than Zapier's path filters or N8N's IF nodes.

You'll hit signature format inconsistencies fast. Sales people use everything from iPhone auto-signatures to custom HTML blocks, and your regex will miss edge cases. HubSpot's contact search is case-sensitive on email addresses - Gmail's 'from' field might be [email protected] while HubSpot has [email protected], breaking the match. The Gmail API sometimes takes 2-3 minutes to see new emails, so don't expect instant signature processing.

Ideas for what to build next

  • Add Slack Notifications for New ContactsSet up alerts to your sales channel when signature parsing creates new HubSpot contacts from previously unknown email addresses.
  • Create Company Records from SignaturesExtend the workflow to check if parsed company names exist in HubSpot and automatically create company records when they don't.
  • Build Signature Data Quality ReportsSend weekly Google Sheets reports showing parsing success rates and contacts with missing phone numbers or job titles for manual cleanup.

Related guides

Was this guide helpful?
HubSpot + Gmail overviewMake profile →