🔓 Unlock all 10,000+ workflows & prompts free Join Newsletter →
✅ Full access unlocked — explore all 10,000 AI workflow and prompt templates Browse Templates →
Home n8n Workflow
January 22, 2026

Surfe to HubSpot, clean prospect lists without chaos

Lisa Granqvist Partner Workflow Automation Expert

You finally carve out time to build a prospect list, and somehow it turns into an afternoon of tab-hopping, copy-paste, missing phone numbers, and “wait, did we already contact them?” chaos.

This is where Surfe HubSpot automation pays off fast. Growth marketers feel it when campaigns need fresh lists yesterday. A sales lead feels it when reps are stuck cleaning data instead of booking meetings. Consultants building outbound systems run into the same mess.

This workflow finds ICP-fit companies in Surfe, pulls the right people, enriches contact details, keeps only reachable prospects, then syncs them into HubSpot and emails you when it’s done. You’ll see exactly how it works, what you need, and what to customize.

How This Automation Works

The full n8n workflow, from trigger to final output:

n8n Workflow Template: Surfe to HubSpot, clean prospect lists without chaos

The Problem: Prospecting lists turn into data cleanup

Building an ICP list sounds simple until you do it more than once. You search for companies by industry and size, grab domains, try to find decision-makers, then discover half the records don’t have a direct email or a mobile number. So you enrich one-by-one, patch holes, and still worry the list is stale by the time it hits HubSpot. The worst part is the mental load. You’re constantly double-checking, reformatting fields, and wondering where the mistakes are hiding.

It adds up fast. Here’s where it usually breaks down.

  • You waste about 2 hours per list jumping between tools and tabs just to assemble something “usable.”
  • Enrichment is inconsistent, which means reps start outreach with missing phone numbers and weak personalization.
  • Manual imports create duplicates in HubSpot, and then nobody trusts the CRM fields.
  • You can’t repeat the process weekly without burning out or handing it to someone else to “clean later.”

The Solution: Surfe enrichment synced straight into HubSpot

This workflow turns list-building into a push-button process inside n8n. You launch it (manually, or on a schedule), and it starts by asking Surfe for companies that match your ICP filters like industry, headcount, revenue bracket, and country. Once it has a set of company domains, it queries Surfe again to find the best-fit people inside those firms. Then it sends a bulk enrichment request, waits while Surfe completes the job, and pulls back a clean set of enriched contacts. Finally, it keeps only prospects with a direct email and mobile phone, upserts them into HubSpot (create or update), and sends you a completion email so you know the list is ready.

The workflow starts when you click Execute (or schedule it). Surfe handles company discovery, people search, and bulk enrichment, while n8n filters and syncs only “outreach-ready” contacts into HubSpot. When the sync finishes, Gmail sends a simple “done” notification.

What You Get: Automation vs. Results

Example: What This Looks Like

Say you run a weekly outbound refresh for 20 target companies. Manually, you might spend about 5 minutes per company finding the right contacts and another 5 minutes enriching and formatting, which is roughly 3 hours before you even import into HubSpot. With this workflow, you click once, let Surfe run the bulk enrichment (with a short polling loop), then HubSpot updates automatically. Your “time spent” becomes closer to 10 minutes of setup and review, not half a day of busywork.

What You’ll Need

  • n8n instance (try n8n Cloud free)
  • Self-hosting option if you prefer (Hostinger works well)
  • Surfe for ICP search and contact enrichment
  • HubSpot to store and update contacts in your CRM
  • Surfe API Key (get it from your Surfe dashboard)

Skill level: Intermediate. You’ll mostly connect credentials and adjust JSON filters, plus a little testing to confirm fields map cleanly into HubSpot.

Don’t want to set this up yourself? Talk to an automation expert (free 15-minute consultation).

How It Works

You launch the workflow. It begins with a manual trigger in n8n, though many teams schedule it for a weekly refresh when pipelines need new fuel.

Surfe pulls ICP companies, then people. First, an HTTP request asks Surfe for companies that match your targeting rules. Next, the workflow builds a domain payload and searches Surfe for relevant people inside those firms.

Bulk enrichment runs, then n8n checks status. The workflow submits a single bulk enrichment job, waits 3 seconds, and polls Surfe until the job returns as completed. This keeps the automation reliable without you babysitting it.

Only outreach-ready contacts go to HubSpot. n8n extracts the enriched people list, filters out anyone missing a direct email or mobile phone, then creates or updates the contact in HubSpot and sends a Gmail notification when everything finishes.

You can easily modify the ICP filters to target new industries or countries based on your needs. See the full implementation guide below for customization options.

Step-by-Step Implementation Guide

Step 1: Configure the Manual Trigger

Set up the manual start point to run the enrichment workflow on demand.

  1. Add Manual Launch Trigger as the workflow trigger.
  2. Leave default settings as-is to allow manual executions from the editor.
  3. Confirm the connection: Manual Launch TriggerFetch Target Firms.

Step 2: Connect Surfe API for Target Firm and Contact Discovery

These HTTP requests query Surfe for target companies and their contacts, then format the payload for enrichment.

  1. In Fetch Target Firms, set URL to https://api.surfe.com/v2/companies/search and Method to POST.
  2. Set JSON Body to { "filters": { "industries": ["Software", "Apps", "SaaS"], "employeeCount": { "from": 1, "to": 35 }, "countries": ["FR"], "revenues": ["1-10M"] }, "limit": 20}.
  3. Set Authentication to genericCredentialType and Generic Auth Type to httpBearerAuth.
  4. In Build Domain Payload, keep the code as provided to output the company domain list for contact searching.
  5. In Retrieve Contacts at Firms, set URL to https://api.surfe.com/v2/people/search, Method to POST, and JSON Body to {{ $json }}.
  6. Use the same bearer authentication settings in Retrieve Contacts at Firms.

Credential Required: Connect your httpBearerAuth credentials in Fetch Target Firms and Retrieve Contacts at Firms.

Step 3: Set Up Enrichment Payload and Request Loop

Generate the enrichment payload, submit it to Surfe, and poll until enrichment completes.

  1. In Compose Enrichment Payload, keep the provided JavaScript to build the enrichment request body and external IDs.
  2. In Request Bulk Enrichment, set URL to https://api.surfe.com/v2/people/enrich, Method to POST, and JSON Body to {{ $json }}.
  3. In Check Enrichment Status, set URL to =https://api.surfe.com/v2/people/enrich/{{ $json.enrichmentID }} and keep bearer authentication enabled.
  4. In Enrichment Complete?, set the condition to check {{ $json.status }} equals COMPLETED.
  5. Confirm the polling loop: Enrichment Complete?Pause 3 SecondsCheck Enrichment Status.

Credential Required: Connect your httpBearerAuth credentials in Request Bulk Enrichment and Check Enrichment Status.

Tip: If the Surfe API rate limits, increase Pause 3 Seconds Amount from 3 to a higher value for safer polling.

Step 4: Filter Enriched Data and Upsert to HubSpot

Parse enriched people, filter for valid contact details, and create or update contacts in HubSpot.

  1. In Extract Enriched People, keep the provided JavaScript to map Surfe results into normalized fields.
  2. In Filter Phone and Email, keep both conditions: {{ $json.phone }} is not empty and {{ $json.email }} is not empty.
  3. In Upsert HubSpot Contact, set Email to {{ $json.email }} and map additional fields such as First Name, Last Name, Company Name, and Phone Number using the existing expressions.

Credential Required: Connect your HubSpot appToken credentials in Upsert HubSpot Contact.

⚠️ Common Pitfall: If Filter Phone and Email is too strict for your dataset, valid leads may be skipped. Adjust the conditions to allow email-only or phone-only records if needed.

Step 5: Configure Completion Notification

Send a confirmation email after contacts are upserted to HubSpot.

  1. In Send Completion Email, set Send To to your address instead of [YOUR_EMAIL].
  2. Keep Subject and Message as Your ICP prospecting enrichment is done. or customize them.
  3. Confirm the flow: Upsert HubSpot ContactSend Completion Email.

Credential Required: Connect your Gmail OAuth2 credentials in Send Completion Email.

Step 6: Test and Activate Your Workflow

Run a full test to verify the Surfe API calls, enrichment loop, HubSpot updates, and completion email.

  1. Click Execute Workflow to run from Manual Launch Trigger.
  2. Verify that Fetch Target Firms returns companies and that Retrieve Contacts at Firms returns people data.
  3. Confirm Enrichment Complete? reaches the COMPLETED branch and that Extract Enriched People outputs records with email and phone.
  4. Check HubSpot to ensure contacts are created/updated by Upsert HubSpot Contact.
  5. Confirm the notification from Send Completion Email arrives in your inbox.
  6. Turn the workflow Active to use it in production.
🔒

Unlock Full Step-by-Step Guide

Get the complete implementation guide + downloadable template

Common Gotchas

  • HubSpot private app tokens can be missing scopes or get rotated. If contacts stop updating, check your HubSpot Private App settings and confirm contact read/write scopes first.
  • If you’re using Wait nodes or external processing, timing varies. This workflow polls Surfe every 3 seconds, so bump the wait duration if the status check occasionally returns before the job is ready.
  • Surfe filters are picky, honestly. Industries are case-sensitive strings and countries must be ISO-2 codes, so if results look empty, validate the filter values in the “Get Filters” endpoint before blaming the workflow.

Frequently Asked Questions

How long does it take to set up this Surfe HubSpot automation?

About 30 minutes if you already have the API keys and HubSpot app token.

Do I need coding skills to automate Surfe to HubSpot contact syncing?

No coding required. You’ll connect credentials and edit a few JSON filters for your ICP.

Is n8n free to use for this Surfe HubSpot automation workflow?

Yes. n8n has a free self-hosted option and a free trial on n8n Cloud. Cloud plans start at $20/month for higher volume. You’ll also need to factor in Surfe API usage based on your enrichment volume.

Where can I host n8n to run this automation?

Two options: n8n Cloud (managed, easiest setup) or self-hosting on a VPS. For self-hosting, Hostinger VPS is affordable and handles n8n well. Self-hosting gives you unlimited executions but requires basic server management.

Can I customize this Surfe HubSpot automation workflow for new ICP filters and territories?

Yes, and it’s the main thing you should customize. Update the Surfe “Fetch Target Firms” HTTP request JSON body to change industries, employee counts, revenues, countries, and the company limit. You can also adjust the people search request after the domain payload is built to focus on specific seniorities or roles. Common tweaks are “SMB only,” “new country launch,” and “only decision-makers.”

Why is my HubSpot connection failing in this workflow?

Usually it’s an expired or replaced private app token. Regenerate the token in HubSpot, then update the HubSpot credential in n8n. Also confirm your private app has contact read/write scopes, because missing permissions can look like a random API failure. If you’re testing with lots of records, HubSpot rate limits can show up too, so slow batches down if needed.

How many contacts can this Surfe HubSpot automation handle?

If you self-host n8n, there’s no execution limit and scale mostly depends on your server and API rate limits. On n8n Cloud, your monthly execution cap depends on plan, so large prospecting runs may require a higher tier. Practically, most teams run 20 to 50 companies per batch, then schedule it weekly to keep lists fresh without spikes.

Is this Surfe HubSpot automation better than using Zapier or Make?

Often, yes. This workflow needs polling (wait, check status, loop until complete), filtering logic, and an upsert pattern into HubSpot, and that’s where n8n is more flexible without turning into an expensive maze of steps. You can also self-host, which matters when you’re running weekly prospecting at volume. Zapier or Make can be quicker for basic two-app handoffs, but they get awkward once you add job status checks and batching. If you want help deciding, Talk to an automation expert.

Run it once and your CRM fills with contacts you can actually reach. The workflow handles the repetitive parts, so you can spend your time on messaging and follow-up.

Need Help Setting This Up?

Our automation experts can build and customize this workflow for your specific needs. Free 15-minute consultation—no commitment required.

Lisa Granqvist

Workflow Automation Expert

Expert in workflow automation and no-code tools.

×

Use template

Get instant access to this n8n workflow Json file

💬
Get a free quote today!
Get a free quote today!

Tell us what you need and we'll get back to you within one working day.

Get a free quote today!
Get a free quote today!

Tell us what you need and we'll get back to you within one working day.

Launch login modal Launch register modal