Zeotap
Customer intelligence platform for identity resolution, audience segmentation, and data activation with a privacy-first approach.
Why route Zeotap through Datafly Signal
- Profiles are updated from the server, not the browser. Events reach Zeotap even when a tracker blocker or a failed page unload would have dropped a client-side call, so the profile reflects what actually happened.
- Email and phone number are hashed before leaving your infrastructure. Signal normalises (trim and lowercase) and applies SHA-256 inside your own deployment, so Zeotap receives match keys rather than raw personal data.
- One consent decision governs every destination. Zeotap is gated by the same consent state as the rest of your stack, so a withdrawal applies everywhere at once.
Prerequisites
Complete these steps in Zeotap before configuring Signal.
Access your Zeotap account
Log in to the Zeotap Unity platform at unity.zeotap.com. If you do not have an account, contact your Zeotap representative.
Determine your region
Zeotap operates in multiple regions. Your region was assigned during account setup and determines the API endpoint:
| Region | API URL | Value for Signal |
|---|---|---|
| EU | https://api.zeotap.com | eu |
| US | https://api-us.zeotap.com | us |
Check with your Zeotap account manager if you are unsure of your region.
Create an integration
Navigate to Integrations (or Data Sources) in the Zeotap Unity dashboard. Click Create Integration and select Server-Side API as the type. Give it a name (e.g. “Datafly Signal Events”) and configure the event types you want to receive.
Get your Write Key
After creating the integration, Zeotap will display a Write Key. This key authenticates events sent to this specific integration. Copy it immediately.
Note your API URL
The API URL for your integration is displayed on the integration detail page. This may include your region-specific base URL plus integration-specific path components. Copy the full URL.
Configure Event Types
In the integration settings, specify which event types you want to accept. Common choices include:
- Track — for custom behavioural events
- Identify — for identity and profile data
- Page — for page view events
Configuration
| Field | Type | Required | Description |
|---|---|---|---|
api_url | string | Yes | The API URL from the IMPLEMENTATION DETAILS tab of your Zeotap HTTP API (Server to Server) source, without query parameters. |
region | select | Yes | The region code of the source (EU, US or IN), sent as the region query parameter. |
write_key | secret | Yes | The source’s write key. Sent as HTTP Basic auth w_k:{write_key}. Wait 30 minutes after creating the source before using it. |
event_type | select | No | Sent as the eventType query parameter. Zeotap’s server-to-server source requires s2s (the default). |
default_country | string | No | ISO 3166-1 alpha-2 country sent when the visitor’s GeoIP country is unknown. Zeotap requires a country on every server-to-server event; an event with neither is not sent: the preset filters it (it is not dead-lettered) (#1556). Set it when your traffic can arrive without a GeoIP country (internal or load-test traffic, for example). |
Signal Setup
Quick Setup
- Navigate to Integrations in the sidebar.
- Open the Integration Library tab.
- Find Zeotap under the Identity Resolution category.
- Click Install, and fill in the required fields with the credentials gathered above.
- Click Install Integration to create the integration with a ready-to-use default configuration.
API Setup
curl -X POST http://localhost:8084/v1/admin/integration-catalog/zeotap/install \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "Zeotap",
"variant": "default",
"config": {
"api_url": "https://spl.zeotap.com/fp",
"region": "EU",
"write_key": "xxxxxxxxxxxxxxxxxxxx",
"event_type": "s2s",
"default_country": "GB"
},
"delivery_mode": "server_side"
}'Event Mapping
Each event is POSTed to {api_url}?region={region}&eventType=s2s. Zeotap maps any JSON shape in the source’s catalogue mapping; the body follows the documented server-side Zeotap shape:
| Field | Value |
|---|---|
id, type, event | Signal event ID; track, page or identify; the Signal event name |
user_id, customer_id, anonymous_id | Identifiers (the anonymous ID is on every event) |
email | SHA-256 digest of the trimmed, lower-cased address |
event_timestamp | ISO 8601 event time |
context | country (required), ip, user_agent, locale, page, consent.marketing |
properties | Every documented property; currency upper-cased, line items as products |
identify: properties.first_name, last_name, phone | SHA-256 digests (phone shaped to E.164 first) |
Presets: General, Retail, Insurance, Travel and Media & Streaming. Map these fields in the source’s catalogue mapping in Zeotap.
Identity
| Field | Source | Hashing | Notes |
|---|---|---|---|
email | identify traits | SHA-256, lower-cased and trimmed | Primary deterministic identity key. |
properties.phone (identify) | identify traits | SHA-256 of the E.164 number | Secondary deterministic key. |
user_id, customer_id | user_id from datafly.identify() | Plain text | Your stable customer ID. |
anonymous_id | Datafly anonymous identifier | Plain text | First-party cookie ID; Zeotap requires an identifier on every event. |
context.country | GeoIP, else default_country | Plain text | Required by Zeotap on server-to-server calls. An event with neither is filtered (not sent, not dead-lettered). |
Consent
Zeotap events should be sent under the marketing consent category. Zeotap’s identity graph honours per-record consent flags — Signal includes the visitor’s CMP consent state on every event so Zeotap can downgrade or suppress processing where required.
Delivery
Events are delivered server-side from your Datafly Signal infrastructure directly to the Zeotap API. No client-side scripts are loaded for this integration.
Verify it’s working
- After installing the integration, trigger a test event from your website or via the Signal event API.
- In the Zeotap Unity dashboard, navigate to your integration and check the Activity or Event Log for recently received events.
- Navigate to Audiences and verify the test user’s profile was created or updated with the expected attributes.
- In Signal, check Live Events to confirm delivery with a
200response status.
Troubleshooting
| Symptom | Possible Cause | Resolution |
|---|---|---|
401 Unauthorized | Invalid write key | Verify the write key on the integration detail page in Zeotap Unity and update the config |
404 Not Found | Incorrect API URL | Verify the API URL on the integration detail page. Ensure it includes the correct region base URL |
400 Bad Request | Wrong region or eventType, or a missing identifier or country | Read the x-zeo-debug response header; set event_type to s2s and the region to the source’s region |
| Wrong region | Region mismatch | Check with your Zeotap account manager and ensure the region config matches |
| Identity not resolved | Missing identifiers | Include at least one deterministic identifier (hashed email, phone) for Zeotap identity resolution |
Visit Zeotap documentation for full API reference and integration setup details.