π£ Automate contact enrichment with Surfe, Google Sheets & HubSpot
β‘ 466 views Β· π£ Lead Generation & Enrichment
π‘ Pro Tip β If youβre pulling LinkedIn data through HTTP requests or dealing with API restrictions, thereβs a community node called ScraperNode that handles this natively. It has dedicated scrapers for profiles, companies, jobs, and people search β you just pass a URL and get structured data back.
Description
This template enables fully automated lead enrichment using Surfeβs bulk API. Simply drop a Google Spreadsheet into your Google Drive, and n8n will handle everything β from reading the leads, enriching them in batches, filtering valid data, and pushing results to HubSpot.
1. β What Problem Does This Solve?
Manually enriching contact lists is tedious, error-prone, and doesnβt scale. Whether youβre importing leads from events, marketing forms, or partners, this workflow ensures each record is enriched and synced to your CRM β hands-free.
2. π§° Prerequisites
To use this template, youβll need:
- A self-hosted or cloud instance of n8n
- A Surfe API Key
- A Google Drive and Sheets account (with OAuth or service account)
- A HubSpot account with access to create/update contacts (via OAuth or Private App Token)
- The workflow JSON file (included with this tutorial)
3. π Input File Format
To run the automation, you must upload a Google Spreadsheet to a specific folder in your Drive.
The spreadsheet must contain the following columns:
first name(required)last name(required)- Either
company nameorcompany domain(at least one is required) linkedin url(optional)
π Important: Any row missing first name, last name, and both company name and company domain will be ignored automatically by the workflow.
Each row represents a person to enrich.
We recommend including the linkedin url if available, but itβs not mandatory.
Screenshot 20250807 at 11.54.27.png
4. βοΈ Setup Instructions
4.1 π Create Your Credentials in n8n
4.1.1 π Google Drive
To connect Google Drive and Google Sheets in your workflow, you need to authorize n8n via Google OAuth 2.0 using a Client ID and Client Secret from the Google Cloud Console.
π Step 1: Create a Google Cloud Project
- Visit Google Cloud Console
- Create a new project or select an existing one
- Navigate to APIs & Services β OAuth consent screen
βοΈ Step 2: Configure the OAuth Consent Screen
- Enter the following:
- App name (e.g.Β
n8n Integration) - User support email
- App name (e.g.Β
- Choose Audience Type:
Internalif youβre using a Google Workspace accountExternalif using a personal Gmail account
- Under Contact information
- email address
- Click Save and Continue
Screenshot 20250807 at 11.54.02.png
π Step 3: Create OAuth Client Credentials
-
Go to APIs & Services β Credentials
-
Click + Create Credentials β OAuth Client ID
-
Select Web application as the application type
-
Name it (e.g.Β
n8n Google Drive Access) -
In Authorized redirect URIs, paste this:
https://oauth.n8n.cloud/oauth2/callback(Or your self-hosted n8n redirect URI)
-
Click Create
-
Copy the Client ID and Client Secret
β Step 4: Finish Setup in n8n
- In n8n, go to Credentials β Create New β Google Drive / Google Sheets
- Choose OAuth2
- Paste your:
- Client ID
- Client Secret
- Redirect URL (should match Google Console)
- Click Sign in with Google
- Authorize access and save the credential
Screenshot 20250807 at 11.43.41.png
β Your Google Drive is now ready to use in workflows.
4.1.2 π Google Sheets OAuth2 API
- Go to n8n β Credentials
- Create new credentials:
- Type:
Google Sheets OAuth2 API
- Type:
- Here a pop-up will open where you can login to your Google account from where you will read the Google Sheets
When itβs done you should see this on n8n
Screenshot 20250807 at 11.44.35.png
4.1.3 π§ Gmail OAuth2 API
- Go to n8n β Credentials
- Create new credentials:
- Type:
Gmail OAuth2 API
- Type:
- A pop-up window will appear where you can log in with your Google account that is linked to Gmail
- Make sure you grant email send permissions when prompted
Screenshot 20250807 at 11.45.06.png
4.1.4 π Surfe API
- In your Surfe dashboard β Use Surfe Api β copy your API key
- Go to n8n β Credentials β Create Credential
- Choose Credential Type:
Bearer Auth - Name it something like
SURFE API Key - Paste your API key into the
Bearer Token - Save
- Choose Credential Type:
Screenshot 20250807 at 11.45.58.png
4.1.5 π― HubSpot
π Private App Token
- Go to HubSpot β Settings β Integrations β Private Apps
- Create an app with scopes:
crm.objects.contacts.readcrm.objects.contacts.writecrm.schemas.contacts.read
- Save the App token
- Create an app with scopes:
- Go to n8n β Credentials β Create Credential β HubSpot App Token
- Paste your App Token
Screenshot 20250807 at 11.47.05.png
Screenshot 20250807 at 11.47.34.png
Screenshot 20250807 at 11.48.47.png
β You are now all set for the credentials
4.2 π₯ Import and Configure the N8N Workflow
- Import the provided JSON workflow into N8N
- Create a New Blank Workflow
- click the
β¦on the top left - Import from File
Screenshot 20250807 at 11.49.34.png
Screenshot 20250807 at 11.50.36.png
4.2.1 π Link Nodes to Your Credentials
In the workflow, link your newly created credentials to each node of this list :
Google Drive Node->Credentials to connect withβGoogle Drive AccountGoogle Sheets->Credentials to connect withβGoogle Sheets AccountGmail Node Credentials to connect withβGmail accountHubspot NodeβCredentials to connect withβGmail accountSurfe HTTP nodes:- Authentication β Generic Credential Type
- Generic Auth Type β Bearer Auth
- Bearer Auth β Select the credentials you created before
Screenshot 20250807 at 11.51.16.png
Surfe HTTP nodes
Surfe HTTP nodes
Surfe HTTP nodes
- HubSpot node β
Credentials to connect withβ select your HubSpot credentials in the list
4.2.2 π§ Additional Setup for the Google Drive Trigger Node
Screenshot 20250807 at 11.52.50.png
5. π How This N8N Workflow Works
- A new Google Sheet containing a
linkedin_urlcolumn is added to a specific folder in Google Drive - n8n detects the new file automatically via the Google Drive Trigger
- All rows are read and batched in groups of 500 to comply with Surfeβs API limits
- Each batch is sent to Surfeβs Bulk Enrichment API
- n8n polls Surfe until the enrichment job is complete
- It extracts the enriched contact data from Surfeβs response
- Only contacts with both email and phone number are kept
- These validated leads are pushed to HubSpot
- Finally, a Gmail notification is sent to confirm the job is complete
6. π§© Use Cases
- Post-event contact enrichment β After a trade show, upload a list of LinkedIn profile URLs from badge scans or lead capture forms
- Outbound LinkedIn campaign follow-ups β Gather LinkedIn URLs from manual outreach and enrich them into usable CRM leads
- CRM data enhancement β Use LinkedIn URLs to fill in missing contact info for existing or imported contacts
- List building from LinkedIn exports β Upload a list of LinkedIn profiles (e.g.Β from Sales Navigator) and turn them into fully enriched contacts in HubSpot
7. π Customization Ideas
- π Add retry logic for failed Surfe enrichment jobs
- π€ Log enriched contacts into a Google Sheet or Airtable
- π Add pre-check logic to avoid creating duplicates in HubSpot
- π Extend the flow to generate a basic summary report of enriched vs rejected contacts
8. β Summary
This workflow turns a basic Google Sheet of LinkedIn URLs into fully enriched, CRM-ready contacts β automatically synced with HubSpot.
Just upload your file.
Let Surfe do the rest.
π Nodes Used
Google Sheets, HTTP Request, HubSpot, Gmail, Google Drive Trigger, Filter
π₯ Import
Download workflow.json and import into n8n:
Workflow menu β Import from File