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

  1. Log in to the Dreamdata platform.
  2. Go to Data Platform > Sources.
  3. Open Server Side Analytics APIs and create (or select) a server-side source.

Copy the Source API Key

  1. On the source, copy the Source API Key.
  2. 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

FieldRequiredDescription
api_keyYesYour Dreamdata Source API key. Found under Data Platform > Sources > Server Side Analytics APIs.

Management UI Setup

  1. Go to Integrations > Add Integration > Dreamdata.
  2. 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.
  3. Enter your api_key.
  4. Select consent categories (typically analytics or marketing).
  5. 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/batch

Authentication 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.

SignalFieldDescription
anonymousIdanonymousIdSignal’s canonical first-party pseudonymous visitor ID. Sent on every event; required when no userId is present.
userIduserIdKnown/authenticated user identifier, set when you call datafly.identify() with a user ID.
emailtraits.emailUser email (raw), sent when the visitor is identified.
nametraits.nameFull name (raw).
companytraits.companyAccount/company name — drives account-level attribution.
context.ipcontext.ipVisitor IP, forwarded from the original request.
context.userAgentcontext.userAgentVisitor 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 eventDreamdata eventType
pagepagepage
Signed Upsign_uptrack
Logged Inlogintrack
Lead Generatedlead_generatedtrack
Form Submittedform_submittedtrack
Content Viewedcontent_viewedtrack
Trial Startedtrial_startedtrack
Subscription Startedsubscription_startedtrack

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

  1. Configure the integration with your Source API key and enable it.
  2. Trigger a tracked event on your site (e.g. submit a demo form).
  3. In the Signal Event Debugger, confirm the event was delivered with HTTP 200.
  4. In the Dreamdata platform, open your server-side source’s activity/debug view and confirm the event arrived with the expected event, anonymousId, and properties.

Allow a short delay — Dreamdata ingests and resolves identity asynchronously, so events may take a few minutes to appear in account journeys.

Troubleshooting

SymptomLikely causeFix
401 UnauthorizedWrong or revoked Source API keyRe-copy the key from Data Platform > Sources > Server Side Analytics APIs and update the integration.
400 Bad RequestEvent missing both userId and anonymousId, or malformed timestampEnsure Datafly.js is loaded so anonymousId is always present; confirm timestamps are ISO-8601.
413 Payload Too LargeBatch exceeded 500 KBSignal batches under the limit automatically; if you see this, reduce custom property payload size.
Events delivered but not attributedVisitor not yet identified to an accountCall datafly.identify() with email/company so Dreamdata can resolve the account.
No events arrivingConsent not grantedCheck the integration’s consent categories and that the visitor granted them.