AdRoll (Server-to-Server)
Datafly Signal delivers events to AdRoll server-to-server using the NextRoll Server-to-Server (S2S) Event API. Conversions and audience events are sent directly from your infrastructure to AdRoll, so delivery is not affected by ad blockers or browser tracking prevention.
Prerequisites
Before configuring AdRoll in Signal you need an active AdRoll (NextRoll) advertiser account, an Advertisable EID, and a Server Access Token (SAT).
Step 1: Find your Advertisable EID
- Sign in to the AdRoll dashboard.
- The Advertisable EID identifies the advertiser that events are attributed to. It is the value AdRoll supplies for your account (for example via the API at
GET /api/v1/organization/get_advertisables, or from your account manager). - Note the EID — you will enter it as
advertisable_eidin Signal.
Step 2: Request a Server Access Token (SAT)
The S2S Event API authenticates with a Server Access Token. SATs are issued to your account, not self-served.
- Contact your AdRoll account manager and request a Server Access Token for the S2S Event API.
- The token is shared with you securely (AdRoll typically delivers it via 1Password).
- Store it securely — you will enter it as
server_access_tokenin Signal.
The Server Access Token grants write access to your advertiser’s conversion and audience data. Treat it as a secret and rotate it if it is exposed.
Step 3: (Optional) Find your Pixel EID
If you also run the AdRoll pixel client-side, supply your Pixel EID so AdRoll can deduplicate server events against pixel events. You can retrieve it with GET /api/v1/advertisable/get_pixel.
Configure in Signal
Configuration Fields
| Field | Required | Description |
|---|---|---|
advertisable_eid | Yes | The EID of the AdRoll advertisable that events are attributed to. Sent as the advertisable query parameter. |
server_access_token | Yes | Server Access Token (SAT) issued by your AdRoll account manager. Sent as Authorization: Token <SAT>. |
pixel_eid | No | Your AdRoll Pixel EID. When set, AdRoll deduplicates S2S events against pixel events. |
dry_run | No | Set to true to validate payloads without affecting audiences or attribution. Remove before going to production. |
Management UI Setup
Add the integration
Go to Integrations > Add Integration > AdRoll.
Choose a variant
- Default — page views plus the core conversion funnel (search, product view, add to cart, purchase).
Enter your credentials
Enter your advertisable_eid and server_access_token. Add pixel_eid if you run the pixel client-side.
Select consent categories
Select the consent category that gates advertising (typically advertising or marketing). Events are only delivered when the visitor has granted marketing consent.
Save
Click Save. The integration is now live.
API Endpoint
POST https://srv.adroll.com/api?advertisable={advertisable_eid}
Authorization: Token {server_access_token}
Content-Type: application/jsonEvents are sent as a JSON array of event objects (up to 100 per request). Add &dry_run=true to validate without affecting reporting.
Identity Signals
Every event must carry at least one identifier so AdRoll can match it to a user. Signal nests these under the identifiers object.
| Signal | Field | Description |
|---|---|---|
| First-party cookie | identifiers.first_party_cookie | The AdRoll pixel’s first-party cookie value, when available. |
| Click ID | identifiers.adct | The AdRoll click token, extracted from the adct URL parameter. |
| Email (hashed) | identifiers.email_sha256 | SHA-256(LOWERCASE(email)). Hashed server-side by Signal before delivery. |
| User ID | identifiers.user_id | Your own stable customer identifier, set via datafly.identify(). |
AdRoll requires at least one of first_party_cookie or adct on every event for matching. Email and user ID improve match rates but do not replace these. All email hashing is performed server-side by Signal — raw email never leaves your infrastructure.
How to Send User Data
Call datafly.identify() when a user logs in, registers, or submits a form:
datafly.identify("user-123", {
email: "jane.doe@example.com"
});Signal lowercases and SHA-256 hashes the email into identifiers.email_sha256 automatically.
Event Mapping
Default preset
| Signal event | AdRoll event_name |
|---|---|
page | pageView |
Products Searched | productSearch |
Product Viewed | productView |
Product Added | addToCart |
Order Completed | purchase |
To customise, edit the integration’s Field Mappings in the Management UI.
Example: Purchase Event
Datafly.js call:
datafly.track("Order Completed", {
order_id: "ORD-001",
revenue: 113.56,
currency: "USD",
products: [
{ product_id: "ABCDEF-12345", category: "top-sellers", price: 56.78, quantity: 2 }
]
});AdRoll S2S payload sent by Signal:
[
{
"event_name": "purchase",
"conversion_value": "113.56",
"currency": "USD",
"timestamp": "1717632000",
"page_location": "https://example.com/checkout/confirmation",
"ip": "203.0.113.50",
"user_agent": "Mozilla/5.0 ...",
"pixel_eid": "ABCDEFGHIJKLMNOPQRSTUV",
"identifiers": {
"first_party_cookie": "a1b2c3d4-...",
"email_sha256": "5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8"
},
"event_attributes": {
"order_id": "ORD-001",
"products": [
{
"product_id": "ABCDEF-12345",
"category": "top-sellers",
"price": "56.78",
"quantity": 2
}
]
}
}
]Testing Your Integration
Enable dry run
Set dry_run to true in the integration config. AdRoll validates the payload and returns success without affecting audiences or attribution.
Trigger an event
Trigger a tracked action on your website (e.g. complete a test purchase). Inspect the outgoing payload in Signal’s event debugger.
Confirm acceptance
A 2xx response indicates the payload was accepted. Resolve any 400 errors (typically a missing identifier — every event needs first_party_cookie or adct).
Disable dry run
Remove dry_run (or set it to false) to begin delivering live events.
Troubleshooting
| Problem | Solution |
|---|---|
400 Bad Request | A required field is missing. Ensure every event carries at least one of identifiers.first_party_cookie or identifiers.adct. |
401 / 403 | The Server Access Token is invalid, revoked, or lacks permission for this advertisable. Request a new SAT from your account manager. |
404 Not Found | The advertisable_eid is wrong. Confirm the EID in the AdRoll dashboard. |
| Events accepted but no conversions appear | Confirm dry_run is not still set to true. Check that conversion_value and currency are present on conversion events. |
| Low match rate | Supply first_party_cookie and adct where available, and identify users via datafly.identify() so email_sha256 is sent. |
The NextRoll S2S Event API is under active development; field names and behaviour may change. Validate with dry_run after any AdRoll-side change.