Data Enrichment
How a profile in Intempt gets filled in: what you send, what we derive, and what we buy from third-party providers on your behalf.
Data Enrichment
A profile in Intempt starts as whatever you sent us. Enrichment is everything that happens after that: the fields we derive, the fields we fetch from third-party data providers on your behalf, and the schema that keeps all of it in the same shape no matter which source it came from.
The result is that sarah@acme.com arriving from a web form and the same person
arriving from a HubSpot sync land on one profile, in one schema, with company
size, funding, tech stack and hiring signals filled in from providers you never
had to contract with separately.
First-party and third-party enrichment
Every attribute value in Intempt arrives by one of two families of enrichment service. The distinction is not cosmetic: they differ in cost, in freshness, and in whether your data leaves the project.
| First-party | Third-party | |
|---|---|---|
| Source of the value | Data you already own | An outside data vendor |
| Cost | None | Metered lookups |
| Data leaves your project | No | Yes, for the lookup |
| Answers | What your customers did | Who your customers are |
First-party enrichment services
| Service | Fills in |
|---|---|
| Out-of-box source schema | A connected platform's objects, on a shape we already defined. Shopify, Stripe, HubSpot, and the SDKs |
| Derived attributes | RFM scores, predictive attributes, calculated attributes you define, identity resolution |
Plus anything you send yourself, through an SDK or the Track API. That is not a service so much as the baseline, but it is first-party data and it merges into the same keys.
Third-party enrichment services
| Service | Provider |
|---|---|
| Person and company enrichment | People Data Labs |
| Phone lookup | People Data Labs |
| Key contacts at an account | People Data Labs |
| Email validation | ZeroBounce |
| Domain reputation | EmailGuard |
| Company logo | Logo.dev, Google favicon |
| IP geolocation | ipapi.co, or MaxMind as an enterprise add-on |
Intempt holds these contracts, so you get all of them through one integration and one bill. Details, including how lookups are metered, in Third-party enrichment.
The schema layers
Enrichment writes into a fixed set of layers. Each layer has its own set of reserved keys, so a value means the same thing whichever source wrote it.
| Layer | Reserved keys | Written by |
|---|---|---|
| Event envelope | 6 | Every source, identically |
| User attributes | 37 | You, sources, providers, derivation |
| Account attributes | 49 | You, sources, providers, derivation |
| Catalog attributes | 12 | Product feed or catalog source |
| Brand attributes | 34 | Brand kit |
86 reserved user and account attributes, which is the number that matters when you are comparing us to a CDP that gives you a free-text trait bag.
The event envelope
Identical on every event from every source. This is what makes cross-source identity work.
| Key | Type | Notes |
|---|---|---|
eventId | string | |
profileId | string | The identity spine |
sessionId | string, nullable | |
timestamp | long | UNIX milliseconds, the primary time field |
userId | string, nullable | Your own identifier, once known |
data | record | The per-event payload |
Only data differs between event types. A PageView from the web SDK carries
url, domain, query, path, windowWidth, hash, title and
previousPage; a Stripe invoices row carries 112 fields. The envelope around
them is the same.
Merging
Every reserved attribute uses a last-write-wins merge strategy. A newer value replaces an older one for that key, whichever path produced it. Enrichment does not silently lose a value you sent yourself, but it will overwrite it if it runs later, so treat provider data and your own data as writing to the same field.
Two timestamps let you see when a provider last touched a profile:
| Key | Meaning |
|---|---|
last_user_enrichment_time | Last time person enrichment ran |
last_account_enrichment_time | Last time company enrichment ran |
Where to go next
| First-party enrichment | What Intempt fills in from data you already own, free |
| Third-party enrichment | The external providers, what each fills in, and how lookups are billed |
| User and account attributes | All 86 reserved keys with types and examples |
| Source taxonomy | Every source, its collections, and its field counts |
| Catalog attributes | The 12 product fields, and the 6 that are required |
