IntegrationsCDPTealium EventStream

Tealium EventStream

If you already have a CDP, Signal can be its first-party collector. This integration forwards events from Signal into your existing Tealium EventStream so EventStream’s connector fan-out continues unchanged, while Signal replaces utag.js with a first-party server-side collector on your own domain.

Signal is not a replacement for Tealium. EventStream remains your downstream activation and connector layer; Signal sits in front of it as the upstream first-party collector. Use this integration if you already run Tealium and want first-party collection without disturbing existing connectors.

Why route Tealium EventStream through Datafly Signal

  • Profiles are updated from the server, not the browser. Events reach Tealium EventStream even when a tracker blocker or a failed page unload would have dropped a client-side call, so the profile reflects what actually happened.
  • Client IP and user agent are carried in the payload. Both are taken from the original visitor request rather than your server, which is what Tealium EventStream needs to attribute the event to the right session.
  • One consent decision governs every destination. Tealium EventStream is gated by the same consent state as the rest of your stack, so a withdrawal applies everywhere at once.

Prerequisites

  • A Tealium account with EventStream provisioned.
  • Your Tealium account and profile names.
  • An HTTP API data source configured in EventStream, and its data source key.

Get your credentials

Locate your account and profile names

In the Tealium dashboard, your account and profile appear in the top navigation (e.g. account acme, profile main). Note both values exactly — they’re case-sensitive.

Create an HTTP API data source

In EventStream, open Sources > Data Sources and click Add Data Source. Choose HTTP API as the source type. Give it a name (for example “Datafly Signal”).

Copy the data source key

After saving, EventStream displays the data source key (sometimes labelled “data source ID” or “tealium_datasource”). Copy it — this is the value Signal needs.

Connect downstream connectors

Configure the EventStream connectors you want this data source to feed (e.g. Google Analytics, Meta Conversions API, audience streams). Signal-collected events will flow through each connector exactly as utag.js-collected events do.

Configure in Signal

Configuration fields

FieldRequiredDescription
tealium_accountYesTealium account name.
tealium_profileYesTealium profile name within the account.
tealium_datasourceYesEventStream data source key. Stored as a secret.

Management UI setup

  1. Go to Integrations > Add Integration > Tealium EventStream.
  2. Enter your tealium_account, tealium_profile, and tealium_datasource.
  3. Select the General preset.
  4. Choose consent categories (default: analytics).
  5. Save and enable.

Management API setup

curl -X POST https://api.example.com/v1/admin/integrations \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "source_id": "src_abc123",
    "vendor": "tealium_eventstream",
    "name": "Tealium EventStream Production",
    "enabled": true,
    "config": {
      "tealium_account": "acme",
      "tealium_profile": "main",
      "tealium_datasource": "abc123"
    },
    "consent_categories": ["analytics"]
  }'

API endpoint

POST https://collect.tealiumiq.com/event
Content-Type: application/json

Authentication is by payload, not header: tealium_account, tealium_profile, and tealium_datasource are included in the JSON body and EventStream uses them to route the event to the correct data source.

Event mapping

Retail events use Tealium’s retail data layer names and variables; other events keep the Signal event name:

Signal eventtealium_eventVariables
pagepage_viewpage and visitor variables
identifyuser_updatecustomer_id
view_itemproduct_viewproduct_id, product_name, product_category, product_brand, product_price, product_quantity (arrays)
view_item_listcategory_viewcategory_id, category_name, product arrays
search, view_search_resultssearchsearch_keyword, search_results
add_to_cart, remove_from_cart, view_cartcart_add, cart_remove, cart_viewproduct arrays, cart_total_value
begin_checkoutcheckoutcart_total_value, order_promo_code, product arrays
purchasepurchaseorder_id, order_total, order_currency_code (upper-cased), order_tax_amount, order_shipping_amount, order_promo_code, order_store, product arrays
sign_up, loginuser_register, user_loginmethod
other eventsthe Signal event nameeach documented property as a flat variable

Every event carries tealium_visitor_id, customer_id, event_id, event_timestamp, ip_address, user_agent, page_url, page_title and referrer. Variables are flat: Tealium rejects a key containing a period. The General preset also forwards events it does not list, with the visitor, page and time variables; the Retail, Insurance, B2B / SaaS, Travel and Media & Streaming presets send the events of their event spec.

Identity

Signal fieldEventStream field
anonymous_idtealium_visitor_id
user_idcustomer_id
event_idevent_id
context.ipip_address
context.user_agentuser_agent
context.page.urlpage_url
context.page.titlepage_title
context.page.referrerreferrer

Signal generates a stable first-party anonymous_id and forwards it as tealium_visitor_id. When datafly.identify() is called, the same user_id arrives as customer_id on subsequent events — EventStream’s Visitor Stitching can join the two.

The default consent category for this integration is analytics. Events are only forwarded when the visitor has granted analytics consent.

Override the category list in the integration config if you need to gate delivery on a different category.

Verify

Trigger an event

Call:

datafly.track("Test Event", { source: "signal-verify" });

Check Live Events in EventStream

In Tealium, open EventStream > Live Events. Filter by your data source. The event should appear within seconds. Confirm:

  • tealium_event matches the expected snake_case name
  • tealium_visitor_id is populated
  • Event-specific properties are present

Confirm downstream connector delivery

Open one of your EventStream connectors and confirm the event reached it. This validates that Signal-collected events flow through each connector exactly as utag.js-collected events do.

Troubleshooting

ProblemSolution
Events accepted (202) but missing from Live Eventstealium_account, tealium_profile, or tealium_datasource is wrong. EventStream returns 202 for malformed routing and silently drops the event. Double-check all three values exactly (they’re case-sensitive).
400 from TealiumPayload is malformed — missing required fields or wrong content type. Check the event payload in Signal’s event debugger.
Events appear in Live Events but not in a connectorIssue is downstream of Signal — check the connector configuration and event filter in the EventStream dashboard.
customer_id is missingdatafly.identify() has not yet been called for the visitor. Verify identify is wired into your login / form-submit flow.
Event names look wrong (e.g. order_completed instead of purchase)The integration is on a blueprint before 0.3.0. Apply the latest blueprint version: retail events now use Tealium’s retail names (purchase, cart_add, product_view).

See also