Skip to main content

AI lead enrichment → HubSpot

For: a startup or growth team that wants quick, repeatable automation without standing up a data stack.

The problem. You have a CRM full of half-empty company records — a domain here, a name there — and you want enriched contacts (emails, titles, company size) flowing in continuously. Normally that's a Zapier maze or a script someone has to babysit.

What you'll build. A single flow that pulls a seed list, enriches it with Apollo and Hunter, and lands a clean, HubSpot-ready list — then a schedule so it runs every morning on its own.


1. Connect your data providers

Go to Sources → + Add source and add three connectors from the gallery. Each source type asks only for what it needs — HubSpot and the enrichment providers use an API key, not a connection string.

Add a source from the gallery

  • HubSpot — paste a Private App token (scopes: read contacts & companies). This is your seed list to enrich.
  • Apollo.io — paste your Apollo API key. People/company enrichment, domain-driven.
  • Hunter.io — paste your Hunter API key. Email discovery for a domain.

Your connected sources appear in the Sources list with their type and status:

Connected sources

No CRM yet?

You can skip HubSpot and drive enrichment purely from a prompt (e.g. "SaaS companies, 50–200 employees, US") — Apollo returns the matching companies and people. HubSpot just gives you a warm seed list to start from.

2. Create a place to land the results

Flows write into a staging database (a managed workspace DB) and can also export a CSV file.

  • Go to Flows → Staging and + Add staging DB (or use the demo staging that ships with the app).
  • For a file you can hand to HubSpot, go to Sources → Files & Storage and add a store (a local folder, an S3 bucket, or an on-prem folder via the connector).
Files & Storage tab in Sources123
  1. File stores live under Sources, on the "Files & Storage" tab.
  2. Each store shows its kind and status — here a connector-backed local folder, online.
  3. Add a store: a local folder, an S3 bucket, or an on-prem folder via the connector.

3. Build the enrichment flow

Open Flows → + New flow. A flow is a small pipeline of steps; for enrichment you need just one or two.

Step 1 — Source. Choose the source kind Prospecting / SaaS spec and write a short brief, e.g.:

Find decision-makers (Head of Sales, VP Marketing) at the companies in my HubSpot list; include name, title, work email and company size.

AgentData turns that into a reusable spec against Apollo/Hunter (it calls them via MCP where available, with a REST fallback) and previews the rows it will produce.

Step 2 — Target. Pick where the enriched rows go:

  • New table in staging — to keep a growing, queryable list, or
  • CSV in a file store — to import straight into HubSpot.

Map the provider fields to your target columns (drag in the Designer tab), add any calculated columns (e.g. a full_name or a lead score), and choose a load typeupsert on email so re-runs update existing rows instead of duplicating.

The flow builder — Apollo+Hunter prospects mapped to a CSV target1234
  1. Your connected sources (apollo, hunter, hubspot…) — drag them in as flow steps.
  2. Steps grouped into rows; everything in a row runs in parallel (Apollo + Hunter together).
  3. Designer tab: drag a provider field on the left onto your target column (email, title, company…) on the right.
  4. Save the flow, then Run once to preview the enriched rows.

4. Run it once, review the output

Click ▶ Run. The flow fetches, enriches, maps and writes — and shows per-step rows in/out. Review the result before trusting it:

  • Open the flow's Exports to preview the produced CSV (columns + first rows), or
  • If you wrote to a table, browse it from the staging DB.

When it looks right, you have a clean, deduplicated, enriched list.

5. Schedule it

You don't want to press Run every day. Two options:

  • Per-flow schedule — open the flow's Schedule and pick Daily 07:00.
  • Scheduler (run several flows together) — Flows → Schedulers → + New scheduler, set the cadence, and add this flow (and any others) into a row.
Creating a scheduler123
A scheduler runs many flows on one cadence, in rows — a row's items run in parallel, and the next row starts only when the one before it finishes.
  1. Pick the cadence — Daily, Hourly, Weekly, Monthly, or a cron expression.
  2. Add flows AND whole pipelines into a row.
  3. Switch the scheduler on.

6. Get it into HubSpot

  • CSV target: download the export (or pick up the file from your S3 bucket) and use HubSpot's native Import to upsert contacts/companies.
  • Table target: keep the enriched list in staging and query it, or point your existing HubSpot import at it.
Write-back

Pulling from HubSpot (as a source) and producing a HubSpot-ready file is supported today. A direct HubSpot write-back target (push enriched rows back into HubSpot automatically) is on the roadmap — until then, the CSV import is one click in HubSpot.


The result

A hands-off enrichment loop: every morning AgentData pulls your list, enriches it with Apollo/Hunter, dedupes and scores it, and leaves a HubSpot-ready file — work that used to be a brittle script or a paid automation tool, now a flow you can read and change in the UI.

Next: combine several flows into a pipeline (e.g. enrich → score → export), or query the enriched table in plain language — see the semantic layer use case.