For HubSpot operators
The CSV import is the easy part. The aftermath is the work.
How AutoLeads writes to HubSpot in a way that doesn{'}t turn your contact database into a graveyard of half-mapped properties.
Between us at Grezy and the RevOps friends we've traded notes with, we've probably watched a thousand CSVs land in HubSpot. Nobody is proud of any of those imports. We're writing this so the next one is less painful.
Importing a CSV into HubSpot is genuinely easy. There's a wizard. It maps fields. It tells you about duplicates. The wizard is the easiest part of an import, and that lulls you into thinking the rest of the work is done. It is not. The rest of the work is what RevOps people we know spend forty hours a week on, and quietly hate.
What goes wrong after the wizard
Three problems eat 90 % of the time:
- Lifecycle stage soup. The CSV imports as "Lead". Half of those should have been "Marketing Qualified" because they were already in your CRM. HubSpot's automatic lifecycle propagation rules then trip and downgrade everything. By Wednesday your funnel report is unreliable.
- Attribution noise. No source, no campaign, no original UTM. The "Original Source" field defaults to "Offline Sources" and stays there forever.
- Domain-level dedup vs email-level dedup. The wizard dedups on email. AutoLeads' CSV gives you contact-level and company-level rows. If you don't merge company-side too, you end up with three Cabinet du Dr. Martin entries in your companies table.
How AutoLeads writes to HubSpot
Connect HubSpot once in the AutoLeads dashboard. We then push leads directly via the official API, not as a CSV import. That changes three things:
- One-row-per-business + one-row-per-contact. We create a Company, then a Contact, and we associate them. Your existing dedup rules in HubSpot run normally, and the company side stays clean.
- Lifecycle stage stays under your control. We tag new contacts with a "Source: AutoLeads" property and let your existing lifecycle workflow decide. We never touch existing contacts.
- Idempotency by domain hash. If we've already synced a contact for that company, we don't re-create. If you delete it on your side, we don't resurrect.
The day a friend broke their own funnel report
A RevOps lead we know at a Paris fintech messaged us last spring after importing a couple thousand prospects from a scraper test into their HubSpot. They forgot to set "Original Source". By the time they noticed, the weekly funnel report showed a chunky portion of new leads attributed to "Offline Sources", which is HubSpot's polite way of saying "we have no idea". They lost an afternoon backfilling properties.
That message convinced us to hardcode the source field into our HubSpot adapter: every AutoLeads contact lands with "Original Source = AutoLeads" and "Original Source Drill-Down 1 = <campaign name>". The next person who tries the same shortcut won't have to spend an afternoon cleaning up after themselves.
Custom properties we recommend creating
These four custom properties make AutoLeads leads usable in workflows out of the box:
autoleads_quality_score(Number, 0–100) — branch sequences on score.autoleads_campaign(Single-line text) — for attribution.autoleads_keyword(Single-line text) — useful for per-vertical reporting.autoleads_delivered_at(Date) — needed for cohort analysis on close rate by week.
FAQ
Will you overwrite my contacts?
No. We never write to existing contacts. If you already have a contact for that domain, we skip and surface a "collision" counter in the AutoLeads dashboard so you know what didn't sync.
Does this support HubSpot Free?
Yes. Custom properties work on Free. The only thing you don't get on Free is workflow branching, but you can still segment lists on the custom properties manually.
Stop importing CSVs by hand
First 10 leads are free. Connect HubSpot, run one campaign, and check your contacts table on Tuesday morning. If the lifecycle and attribution stay clean, the rest of your CRM ops gets quieter.