Unify
Sync contacts, companies, and custom object records to Unify for sales intelligence, enrichment, and go-to-market workflows. Zeotap pushes audience data and enriched profiles to Unify via the Data API v1, enabling your sales team to act on the latest customer signals directly within Unify plays and prospecting workflows.
Prerequisites
- A Unify account with API access enabled
- A Unify API key generated from Settings > API Keys in the Unify dashboard
- The API name of the target object in Unify (e.g.
company,person, or a custom object) - A unique attribute defined on the target object for upsert matching (e.g.
domainfor companies,emailfor people)
Authentication
Unify uses API Key authentication. The API key is sent via the x-api-key header on every request.
- Log in to Unify
- Navigate to Settings > API Keys
- Click Create API Key and copy the generated key
- In Zeotap, select API Key as the authentication method
- Paste the key into the API Key field
Required Permissions
The API key must have read and write access to the Data API. Ensure the key has permissions to:
- List and read objects (
GET /objects) - Create, update, upsert, and delete records on the target object
Configuration
| Field | Type | Required | Description |
|---|---|---|---|
| Validation Mode | select | No | Controls how Unify validates attribute values. strict fails on any invalid attribute. ignore_invalid strips unknown attributes silently. If not set, Unify uses its default behavior. |
Target Settings
| Field | Type | Required | Description |
|---|---|---|---|
| Object Name | text | Yes | The API name of the Unify object to sync data to (e.g. company, person, or a custom object API name). |
| Match Attribute | text | No | The unique attribute used for record matching on upsert (e.g. domain for companies, email for people). Must be a unique attribute in Unify. Required when using upsert sync mode. |
Supported Operations
Sync Modes
| Mode | Supported | Description |
|---|---|---|
| Upsert | Yes | Match records by the configured match attribute and create or update accordingly |
| Insert | Yes | Create new records; fails if a record with conflicting unique values already exists |
| Update | Yes | Update existing records by record ID |
| Mirror | — | Not supported |
Audience Sync Modes
| Mode | Supported | Description |
|---|---|---|
| Add | — | Not supported — Unify does not expose a list/audience membership API |
| Remove | — | Not supported |
| Mirror | — | Not supported |
| Upsert | — | Not supported |
Features
| Feature | Supported |
|---|---|
| Field Mapping | Yes |
| Schema Introspection | No |
Required Mapping Fields
No required mapping fields. Map any attributes that match the target object’s schema in Unify.
Default Destination Fields
| Field | Type |
|---|---|
name | string |
domain | string |
email | string |
phone | string |
status | string |
These are suggested starting fields. The actual attributes depend on the target object’s schema in Unify.
How It Works
- Row processing — Zeotap processes each row from the sync batch individually (Unify does not expose a bulk API)
- Operation mapping — Based on the sync mode, each row is sent to the appropriate Unify endpoint:
- Upsert:
POST /data/v1/objects/{object}/records/upsertwithmatchandcreate_or_updatefields - Insert:
POST /data/v1/objects/{object}/recordswith attribute data - Update:
PATCH /data/v1/objects/{object}/records/{id}with attribute data
- Upsert:
- Match attribute — For upsert mode, the configured match attribute (e.g.
domain) is extracted from the row and sent in thematchfield so Unify can find existing records - Validation — If a validation mode is configured, it is sent as a query parameter (
?validation_mode=strictor?validation_mode=ignore_invalid) - Error handling — Each row result is tracked individually. Failed rows are recorded with the HTTP status and error message from Unify
Rate Limits
Unify allows 100,000 requests per five-minute window. Since Zeotap sends one request per row, this is equivalent to approximately 333 requests per second. For typical sync volumes this limit is unlikely to be reached.
If a 429 Too Many Requests response is received, Zeotap pauses briefly before continuing with the remaining rows.
Best Practices
- Always configure a match attribute for upsert mode — Without a match attribute, Unify cannot reliably find existing records and may create duplicates
- Use
ignore_invalidvalidation mode during initial setup to avoid failures from unmapped or misspelled attributes, then switch tostrictonce mappings are finalized - Map identity fields (email, domain, phone) to maximize the value of Unify’s enrichment and identity resolution
- Use upsert mode for ongoing syncs to keep records up to date without creating duplicates
- Start with a small batch to verify field mappings and match behavior before running a full sync
Troubleshooting
Connection test fails with “unauthorized”
The API key is invalid, expired, or missing required permissions. Generate a new key from Settings > API Keys in Unify and update the credentials in Zeotap.
Connection test fails with “object not found”
The configured Object Name does not exist in Unify. Verify the API name by navigating to your Unify data model or calling GET /data/v1/objects to list available objects.
Upsert creates duplicate records
The Match Attribute is not configured or the attribute is not marked as unique in Unify. Ensure the match attribute (e.g. domain, email) is set in the target settings and is defined as a unique attribute on the Unify object.
Rows fail with “record_missing_required_field”
The target object in Unify has required attributes that are not being mapped from Zeotap. Check the object schema in Unify and ensure all required fields are included in the field mapping.
Rows fail with “record_conflict”
A record with the same unique attribute values already exists. This typically happens in insert mode when trying to create a record that already exists. Switch to upsert mode to update existing records instead.
Rows fail with “referenced_record_not_found”
The row contains a reference attribute pointing to a record that does not exist in Unify. Ensure referenced records (e.g. a company referenced by a person) are synced before the records that reference them.
Update fails with “record_not_found”
The record ID used for the update does not exist in Unify. Verify that the primary key column contains valid Unify record UUIDs. If records were deleted in Unify, re-sync using upsert mode instead.
Slow sync performance
Unify’s Data API processes records one at a time. For large datasets, syncs may take longer than batch-capable destinations. Consider syncing only changed records using incremental models to reduce the number of API calls.