Skip to main content
Unification is the process of merging records from your connected integrations into a single, deduplicated view. When you connect multiple data sources (CRMs, enrichment tools, analytics platforms), Cargo automatically resolves and links records that represent the same real-world entity using shared identifiers called references. The result is four native data models that serve as the canonical source of truth for your workspace: Account, Contact, Account Event, and Contact Event.

How unification works

1

Connect data sources

Connect integrations (HubSpot, Salesforce, LinkedIn, etc.) that sync data models into your warehouse. Each integration model declares which unification type it participates in — account, contact, accountEvent, or contactEvent.
2

Map references

Each source model maps its columns to unification references — shared identifiers like domain, email, or linkedinId. Cargo uses these references to determine which records across different sources represent the same entity.
3

Resolve canonical IDs

Cargo builds a mapping table that groups records sharing the same reference values under a single canonical ID. If a HubSpot company and a Salesforce account share the same domain, they receive the same canonical ID.
4

Materialize unified models

The native unified models are materialized as tables in your warehouse, refreshed every 5 minutes.

Unified models

Account

The Account model merges company records from all connected integrations into a single, deduplicated table. Each row represents a unique company, identified by a canonical ID computed from shared references.
ColumnTypeDescription
idstringCanonical account ID — unique identifier for this unified company
domainstringCompany website domain
linkedin_idstringLinkedIn company numeric ID
linkedin_handlestringLinkedIn company vanity URL slug
crunchbase_uuidstringCrunchbase organization UUID
crunchbase_permalinkstringCrunchbase organization permalink
twitter_handlestringX / Twitter company handle
sales_navigator_idstringLinkedIn Sales Navigator account ID
idsobjectMap of source connector models to their original record IDs
Reference columns (domain, linkedin_id, etc.) are resolved by taking the highest-priority non-null value across all source records that share the same canonical ID.

Contact

The Contact model merges people records from all connected integrations into a single, deduplicated table. Each row represents a unique person, linked to their parent Account via account_id.
ColumnTypeDescription
idstringCanonical contact ID — unique identifier for this unified person
emailstringGeneric email address
personal_emailstringPersonal email address
work_emailstringWork / professional email address
linkedin_idstringLinkedIn member numeric ID
linkedin_handlestringLinkedIn member vanity URL slug
twitter_handlestringX / Twitter personal handle
sales_navigator_idstringLinkedIn Sales Navigator lead ID
account_idstringForeign key to the unified Account id
idsobjectMap of source connector models to their original record IDs
The account_id is resolved through the parent unification mapping — if a source contact model declares a parent relationship to an account model, Cargo automatically links the unified contact to the correct unified account.

Account Event

The Account Event model aggregates event data from all connected integrations into a single timeline, where each event is linked to its parent Account.
ColumnTypeDescription
idstringComposite event ID (<database_slug>__<model_slug>__<record_id>)
account_idstringForeign key to the unified Account id
occurred_atdateTimestamp when the event occurred (from the source time column)
event_namestringName of the event, derived from the source model name
propertiesobjectOriginal column values from the source record, keyed by slug
database_slugstringSlug of the source database / dataset
model_slugstringSlug of the source model within the dataset

Contact Event

The Contact Event model aggregates event data from all connected integrations into a single timeline, where each event is linked to its parent Contact.
ColumnTypeDescription
idstringComposite event ID (<database_slug>__<model_slug>__<record_id>)
contact_idstringForeign key to the unified Contact id
occurred_atdateTimestamp when the event occurred (from the source time column)
event_namestringName of the event, derived from the source model name
propertiesobjectOriginal column values from the source record, keyed by slug
database_slugstringSlug of the source database / dataset
model_slugstringSlug of the source model within the dataset

References

References are the shared identifiers Cargo uses to match records across integrations. Each unification type supports a specific set of references. Event models inherit the references of their parent type.

Account references

Used by the Account and Account Event models.
ReferenceDescription
DomainCompany website domain (e.g. acme.com)
LinkedIn IDLinkedIn company numeric ID
LinkedIn HandleLinkedIn company vanity URL slug
Crunchbase UUIDCrunchbase organization UUID
Crunchbase PermalinkCrunchbase organization permalink
Twitter HandleX / Twitter company handle
Sales Navigator IDLinkedIn Sales Navigator account ID

Contact references

Used by the Contact and Contact Event models.
ReferenceDescription
EmailGeneric email address
Personal EmailPersonal email address
Work EmailWork / professional email address
LinkedIn IDLinkedIn member numeric ID
LinkedIn HandleLinkedIn member vanity URL slug
Twitter HandleX / Twitter personal handle
Sales Navigator IDLinkedIn Sales Navigator lead ID

Reference priority

When multiple references match, Cargo uses an ordered reference list to determine which reference takes priority for deduplication. You can configure this order per unified model in the workspace settings. For example, with the default account reference order [domain, linkedinId, linkedinHandle, ...], two records sharing the same domain will be merged even if their linkedinId values differ.

Relationships

The four unified models form a connected graph:
RelationshipColumnTypeDescription
Contact → Accountaccount_idMany-to-oneEach contact is linked to one unified account
Account Event → Accountaccount_idMany-to-oneEach account event is linked to one unified account
Contact Event → Contactcontact_idMany-to-oneEach contact event is linked to one unified contact

Source tracking

Every unified record includes an ids column — a JSON object that maps back to the original records from each contributing integration:
{
  "<database_slug>__<model_slug>": "<original_record_id>",
  "hubspot__companies": "12345",
  "salesforce__accounts": "001Ab00000XyZ"
}
For event models, the id itself is a composite key that encodes the source: <database_slug>__<model_slug>__<original_record_id>. The properties column on event models preserves all original columns from the source record as a JSON object, so no data is lost during unification.