Your CRM knows who a contact is. It doesn't know what they did. Most HubSpot data enrichment advice only deals with the first half of that: a missing job title, a blank company size, a phone number nobody ever typed in. Filling those is worth doing and it is maybe a third of the job. This guide sets up both halves. A waterfall of data sources fills the contact and company fields HubSpot never collected, your own billing, support, and product systems supply the context no data source sells, and all of it writes back to HubSpot properties over the same connection it arrived on.
To enrich HubSpot contacts with product usage data, connect the product database or analytics tool as a source. Contacts match on email, companies on domain. Last login and seats in use land in custom properties you create once, and custom properties exist on every tier, Free included. Scheduled refreshes keep usage current without CSV exports.
To set it up on your own portal while you read, connect HubSpot to a free workspace and bring a segment in.
HubSpot's built-in data enrichment, and where it stops
Start with what HubSpot already does. Its own data enrichment runs on Starter, Professional, and Enterprise subscriptions, and according to HubSpot's knowledge base it does not consume HubSpot Credits. It uses a contact's first name, last name, and work email, and a company's domain, to fill properties such as job title, industry, and company size. Automatic enrichment is off by default, and a Super Admin turns it on for new records. If your portal is on a paid tier, switch it on first.
The built-in enrichment stops at what a tool database can know about a stranger. It never reads your billing system, your support desk, or your product, and a portal on HubSpot's free tools does not get it at all. The rest of this guide covers that remainder.
What HubSpot data enrichment actually has to fill
Pull a few hundred contacts out of a HubSpot portal and the shape is always similar. Work email is there for nearly everyone, because they handed it over. Job title is patchy. Industry has been typed by three different people who each picked a different word for the same thing. Phone numbers are basically absent.
That is the layer you can see. The one underneath is the one that decides who gets called:
what the account pays, on which plan, and when the contract comes up for renewal
how many support tickets they opened this quarter, and how the last one ended, which is also the raw material for a churn risk score
when they last logged in and how many teammates they invited
whether the company moved, grew, or hired a VP of Sales last month
Only the last of those is for sale. The first three already exist inside tools you are paying for right now, and not one of them writes to HubSpot on its own.
A tangent while we are here. Every enrichment tool opens with a B2B data decay statistic, some percentage of your database going stale each year, and those numbers rarely trace back to a study anybody ran. The claim underneath is obviously true. People change jobs and records rot. You don't need an invented percentage to believe it, and nobody should be quoting one.
Where each enriched HubSpot property comes from
Two kinds of data in, one CRM they land in.
HubSpot property | Comes from | Why it earns its place |
|---|---|---|
Job title, seniority | Waterfall of data sources | Routing and personalization |
Company size, industry, location | Waterfall of data sources | ICP fit, and list building later |
Work email, Deliverability | Waterfall of data sources, then Verify email | Everything you send depends on it |
Plan, MRR, renewal date | Your billing system | Expansion and renewal risk |
Open tickets, last escalation | Your support desk | Who is unhappy before you call them |
Last login, seats in use | Your product database | Who uses what they bought |
The waterfall half runs itself. Data sources are ordered by accuracy and hit rate, and the waterfall asks them one at a time and stops at the first one that returns an answer. Checking an email address is a separate step, Verify email. You see what a run will cost before you start it, and a lookup that comes back empty is never billed. There is no chain to assemble and no data source to pick, which matters mostly because picking badly is how enrichment bills get surprising.
The second half is the one an enrichment marketplace cannot sell at any price. Connect your billing system and each account picks up its own subscription state, read live from the subscription object rather than from a CSV somebody exports on Mondays. Support desks, product analytics, and your own Postgres connect the same way. 142 integrations read data in, write it back, or both, on every paid plan.
HubSpot data enrichment setup, step by step
1. Connect HubSpot and bring your records in. Connect HubSpot with a private app token that has read and write scopes, and pull in contacts, companies, deals, or tickets. The connection reads and writes from the beginning, which is what makes the last step cheap.
2. Run the waterfall. Ask for work email, job title, company size, industry, and location, and add Verify email so every address gets a Deliverability verdict. Check the cost preview, then run it across everything at once instead of one profile page at a time.
3. Attach your own systems. Billing, support desk, product database. Contacts match on email address, companies on domain. Each record picks up its own plan, ticket count, and last-active date.
4. Add AI where a field needs judgment. Describe your ideal customer once and every enriched record gets scored against that description from 0 to 100, with a one-line reason written beside the score. A record with too little to judge comes back unscored rather than low. The reason is the part reps act on. A bare number gets ignored.
5. Map everything back to HubSpot. Covered next, because it is where enrichment projects usually die.
6. Schedule the refresh. Turn on scheduled refreshes for the HubSpot source and keep Run automatically on new and changed rows on, so new contacts are enriched as they arrive. Run the export after each refresh so the new values reach HubSpot.
Map enriched data to HubSpot properties and write it back
Enriched data that never reaches the CRM is a tidy dead end. The export fills properties that already exist, so create the custom ones below in HubSpot once, each with the right type. It takes a few minutes in Settings, or one short script against HubSpot's CRM properties API. Then map each enriched field to its property, and every run fills the same ones.
Enriched field | HubSpot property | Type |
|---|---|---|
Company size |
| Number |
Plan |
| Single-line text |
MRR |
| Number |
Open tickets |
| Number |
Last login |
| Date |
ICP score |
| Number |
Score reason |
| Single-line text |
Custom properties exist on every HubSpot tier, Free included. Once the values land there, HubSpot treats them like anything it collected itself: views sort on them, lists filter on them, workflows branch on them. That is the whole trick behind running this on a free portal. On Salesforce the same build writes to Lead, Contact, and Account fields instead, and the Salesforce data enrichment guide walks through that version.
HubSpot write-back is included on every paid plan, starting at $20 a month. Worth saying plainly, because CRM write-back is the feature this category most often puts behind a tier costing several hundred dollars, which prices the one step that makes enrichment operational out of reach of the founder who needs it most.
Edge cases in a HubSpot enrichment run
Contacts on personal email. A gmail.com address gives the waterfall nothing to work with at the company level. Match those on the associated company record instead, or accept the gap.
Duplicates. Enriching a portal with duplicate contacts gives you enriched duplicates. Merge first. Enrichment is not deduplication and pretending otherwise makes the count look better than the data.
Deals and tickets. Enrich the associated company and let deals read from it. Copying firmographics onto every deal produces several versions of the same fact that drift apart.
Overwrites. Set this per field. Fill blanks by default, let genuinely decaying fields like plan and company size update in place, and leave anything a rep typed alone.
Big portals. Somewhere north of a hundred thousand contacts you are into scheduling and batch sizing, and honestly the answer depends on your API limits more than on anything we do. Start with a segment.
What HubSpot data enrichment costs, and what changes after the first run
The build above runs on the Team plan: $20 a month, 1,000 credits, unlimited seats, every one of the 142 integrations included, to read data in, write it back, or both. One meter covers all of it, every operation has a published credit price, and unused credits never expire. The free plan is $0 with 200 credits a month, three integrations, and tables of up to 100 rows, which is enough to enrich a real segment this afternoon and see whether the result changes who your team calls first.
What actually changes is smaller than a demo makes it sound, and better. A rep opens a HubSpot record and the plan, the last login, the two open tickets, and a one-line reason for the score are already sitting there. Nobody switched tabs. Nobody asked in Slack whether this account is a customer.
Then the schedule takes over, which is the part that pays for itself. New contacts are enriched as they arrive, the fields that rot get corrected, each export run carries the changes to HubSpot, and the portal stops drifting back toward the state described at the top of this guide. Connect HubSpot and get started free.

