Dreamdata
Datafly Signal delivers events to Dreamdata server-to-server using the Dreamdata Events API. Dreamdata is a B2B revenue-attribution platform that stitches anonymous web activity to known accounts and contacts, so you can attribute pipeline and revenue across the full buyer journey. Because Signal sends events from your own infrastructure, delivery is not affected by ad blockers or browser tracking prevention.
Prerequisites
Before configuring Dreamdata in Signal, you need a Dreamdata account and a Source API key.
Create a Server-Side Source
- Log in to the Dreamdata platform.
- Go to Data Platform > Sources.
- Open Server Side Analytics APIs and create (or select) a server-side source.
Copy the Source API Key
- On the source, copy the Source API Key.
- Store it securely — you will paste it into Signal in the next section.
The Source API key is used as the HTTP Basic auth username with an empty password. Signal handles the encoding for you.
Configure in Signal
Configuration Fields
| Field | Required | Description |
|---|---|---|
api_key | Yes | Your Dreamdata Source API key. Found under Data Platform > Sources > Server Side Analytics APIs. |
Management UI Setup
- Go to Integrations > Add Integration > Dreamdata.
- Choose a variant:
- B2B / SaaS — page views, sign-up, login, lead, form submit, content engagement, trial, and subscription events.
- Default — page views and core conversion tracking.
- Enter your
api_key. - Select consent categories (typically
analyticsormarketing). - Click Save.
The Dreamdata Events API has no per-event consent field. Consent is enforced by Signal: events are only delivered when the visitor has granted the consent categories you select on the integration.
API Endpoint
POST https://api.dreamdata.cloud/v1/batchAuthentication is HTTP Basic — the Source API key is the username and the password is empty (Authorization: Basic base64("{api_key}:")).
Events are sent as a batch object with a batch array. Each request is limited to 500 KB; Signal automatically splits larger volumes across requests.
Identity Signals
Dreamdata stitches activity to accounts and contacts using both pseudonymous and known identifiers. Unlike advertising platforms, Dreamdata accepts raw (un-hashed) email and name traits because it performs identity resolution on its side — Signal does not hash PII for this integration.
| Signal | Field | Description |
|---|---|---|
anonymousId | anonymousId | Signal’s canonical first-party pseudonymous visitor ID. Sent on every event; required when no userId is present. |
userId | userId | Known/authenticated user identifier, set when you call datafly.identify() with a user ID. |
email | traits.email | User email (raw), sent when the visitor is identified. |
name | traits.name | Full name (raw). |
company | traits.company | Account/company name — drives account-level attribution. |
context.ip | context.ip | Visitor IP, forwarded from the original request. |
context.userAgent | context.userAgent | Visitor User-Agent, forwarded from the original request. |
How to Send User Data
Call datafly.identify() when a user signs up, logs in, or submits a form:
datafly.identify("user-123", {
email: "jane.doe@acme.com",
name: "Jane Doe",
company: "Acme Inc",
title: "VP Marketing"
});Signal attaches these traits to subsequent events so Dreamdata can resolve them to the right account.
Event Mapping
B2B / SaaS preset
| Signal event | Dreamdata event | Type |
|---|---|---|
page | page | page |
Signed Up | sign_up | track |
Logged In | login | track |
Lead Generated | lead_generated | track |
Form Submitted | form_submitted | track |
Content Viewed | content_viewed | track |
Trial Started | trial_started | track |
Subscription Started | subscription_started | track |
Example
A Lead Generated event captured by Datafly.js:
datafly.track("Lead Generated", {
form_id: "demo-request",
value: 0,
currency: "USD"
});Resulting Dreamdata batch payload (Signal also adds a batch-level messageId and sentAt):
{
"batch": [
{
"type": "track",
"event": "lead_generated",
"anonymousId": "df_8f2a1c9e-...",
"userId": "user-123",
"messageId": "evt_6f47f5a0-...",
"timestamp": "2026-06-06T11:11:14.000Z",
"properties": {
"form_id": "demo-request",
"value": 0,
"currency": "USD"
},
"traits": {
"email": "jane.doe@acme.com",
"name": "Jane Doe",
"company": "Acme Inc"
},
"context": {
"ip": "24.5.68.47",
"userAgent": "Mozilla/5.0 ...",
"page": {
"url": "https://acme.com/pricing",
"title": "Pricing",
"referrer": "https://google.com"
},
"campaign": {
"source": "google",
"medium": "cpc",
"name": "brand-2026"
}
}
}
]
}Testing
- Configure the integration with your Source API key and enable it.
- Trigger a tracked event on your site (e.g. submit a demo form).
- In the Signal Event Debugger, confirm the event was delivered with HTTP
200. - In the Dreamdata platform, open your server-side source’s activity/debug view and confirm the event arrived with the expected
event,anonymousId, andproperties.
Allow a short delay — Dreamdata ingests and resolves identity asynchronously, so events may take a few minutes to appear in account journeys.
Troubleshooting
| Symptom | Likely cause | Fix |
|---|---|---|
401 Unauthorized | Wrong or revoked Source API key | Re-copy the key from Data Platform > Sources > Server Side Analytics APIs and update the integration. |
400 Bad Request | Event missing both userId and anonymousId, or malformed timestamp | Ensure Datafly.js is loaded so anonymousId is always present; confirm timestamps are ISO-8601. |
413 Payload Too Large | Batch exceeded 500 KB | Signal batches under the limit automatically; if you see this, reduce custom property payload size. |
| Events delivered but not attributed | Visitor not yet identified to an account | Call datafly.identify() with email/company so Dreamdata can resolve the account. |
| No events arriving | Consent not granted | Check the integration’s consent categories and that the visitor granted them. |