Adform

📘

This integration is currently in beta. Contact your MetaRouter support team to get started.

What Is Adform?

Adform is a global advertising technology platform that provides tools for ad serving, campaign management, audience building, and conversion tracking across web and in-app environments. Its Site Tracking product records visitor activity on advertiser websites through tracking points, which Adform uses for conversion attribution, audience building, and retargeting. The Server-Side Tracking API lets advertisers send conversion, page, and custom events directly to Adform server-to-server, without loading a tracking script in the user's browser. Events are attributed and added to audiences based on the identifiers passed with each request, such as Adform's cookie ID and extended IDs.


Product Type: Advertising
Integration Type: Starter Kit & ID Sync
Event Source Type: Web
Event Scope: Full-Funnel Events


Capabilities

  • Sends identify, page, product, cart, checkout, and order lifecycle events to Adform as server-side tracking points.
  • Attaches the Adform cookie ID collected by the Adform sync so conversions can be attributed to Adform campaigns.
  • Sends the customer's user ID as an extended ID to support audience building and retargeting.
  • Passes order details such as order ID, sales value, currency, basket size, and product-level data through Adform custom variables.
  • Forwards user IP address and user agent so Adform can derive geo and device information, including Cookieless Insights reporting.
  • Passes TCF and GPP consent signals when available.
  • Batches up to 20 tracking points per request.

Considerations

  • Events without the Adform cookie ID are filtered out and not sent to Adform. The cookie ID is required for conversion attribution and retargeting.
  • The Adform sync captures the cookie ID from the adfcookieid landing page URL parameter. The advertiser must configure Adform's __ADFUID__ macro in their Adform campaign (URL Append Rules) so the cookie ID is added to the landing page URL on ad click.
  • Adform cookie IDs are 19-digit values that can be negative. They must be passed as strings without rounding or truncation.
  • Collection of first-party identifiers must be enabled on the advertiser's Adform account.
  • When an event includes a userId, it is sent as an extended ID with a person-based ID type (atype 3). Events without a userId do not send extended IDs.
  • The extended ID source is a placeholder (ADD_YOUR_EID_SOURCE_HERE) that must be replaced in the playbook for each deployment. The source identifies who issued the ID and is expressed as a domain. Because the kit sends the advertiser's own user ID, the source is typically the advertiser's website domain (e.g., advertiser.com). If the ID comes from a third-party ID provider, use that provider's source value from Prebid's list of ID providers. Confirm the source value with your Adform representative before deploying.
  • Extended IDs are optional but recommended. They support audience building and retargeting but are not a standalone attribution identifier. Retargeting and scaling with an advertiser's own ID depends on ID Fusion being enabled in the buyer's DSP campaign.
  • Identify events are sent to Adform as tracking points and carry gender, country, and the user ID extended ID.
  • The tracking point name is derived from the event. Track events use the event name in lowercase with spaces replaced by underscores (e.g., Order Completed becomes order_completed). Page and identify events use the event type. If no name can be derived, the page URL is used.
  • gdpr is set to 1 only when a TCF consent string is present, and the string is sent as gdprConsent. If no TCF string is present, gdpr is not sent.
  • GPP consent values are read from properties.gpp and properties.gpp_sid. These must be included on events for GPP signals to reach Adform.
  • Send the end user's IP address and browser user agent to enable geo and device information and Cookieless Insights reporting.
  • The page referrer is sent under the key referer. Adform's documentation lists the field as refererUrl in its parameter table; confirm the expected key with your Adform representative.
  • Adform has no publicly documented rate limits. Adform reports that integrations have sent several thousand requests per second to the Site Tracking endpoint without issues. Please test limits with your Adform representative.
  • Additional custom fields can be added through Adform's supported custom site tracking variables using variables (one value per field) and subVariables (multiple value sets, such as products in an order).

Limitations

  • Adform's API returned success for all requests during implementation, and its documentation describes no error responses. Delivery issues may not surface as errors, so verify data in Adform reports after setup.
  • Adform's first-party ID (firstPartyId) for hybrid client-side and server-side setups is not supported. This kit identifies users by cookie ID and optional extended IDs only.

Identity Sync

  • Sync Available: Yes
  • Required for Starter Kit: Yes
  • Prerequisites: Adform ADFUID macro configured in the advertiser’s Adform campaign URL Append Rules; first-party identifier collection enabled on the advertiser’s Adform account
  • Documentation: See Adform Sync Documentation

Sync Details

  • Captures the Adform cookie ID used for attribution and retargeting.
  • Stores the cookie ID in first-party storage for the configured cookie lifetime (defaults to 60 days).
  • Required to link conversion events to Adform ad clicks.
  • Without this sync, events are filtered out and not sent to Adform.

Starter Kit Setup Guide

1. Deploy the Adform Sync

  • To collect the sync values (e.g., adfcookieid), you must implement an Adform ID sync. Refer to the following documentation to complete the setup: Adform - ID Sync Guide.

2. Gather Credentials

  • Tracking Domain: The tracking domain set at the advertiser level in Adform. Ask your Adform representative if you are unsure which domain applies.
  • Tracking Setup ID: The advertiser's tracking ID, found under Site Tracking in the Adform UI.

3. Add an Adform Integration

  • From the integration library, add an Adform integration. Then, fill out the Connection Parameters:
Connection ParameterDescription
TRACKING_DOMAINTracking domain set at the advertiser level in Adform.
TRACKING_SETUP_IDAdvertiser tracking setup ID found under Site Tracking in the Adform UI.
API_VERSIONAdform Server-Side Tracking API version. Defaults to v2.

4. Configure Event Mapping

  • MetaRouter provides all of the event mappings that Adform integrations typically require. You may add custom events, parameters, or mappings in accordance with Adform's API documentation.

5. Deploy to Pipeline

  • In the Pipelines tab, add your Adform integration.
  • Select the correct integration revision.
  • Click Add Integration and finalize deployment.

Event Mappings

Global

Global mappings will be applied to all events. If your parameter names do not match the Expected Inputs provided, you will need to overwrite the Inputs provided with your own.

Output KeyDescriptionExpected Input
name RequiredString: Tracking point name. Track events use the lowercased event name with underscores; others use the event type or page URL.Expression – derives from event, type, or context.page.url
identity.cookieId RequiredString: Adform cookie ID captured by the Adform sync. Events without it are filtered out.context.providers.adform.adfcookieid
identity.eidsArray: Extended ID built from the user ID with atype 3 . Replace the placeholder source, typically with your website domain; confirm with Adform.Expression – builds from userId with source 'ADD_YOUR_EID_SOURCE_HERE'
pageUrlString: URL of the page where the event occurred.context.page.url
refererString: URL of the referring page.context.page.referrer
userContext.userAgentString: User's browser user agent.context.userAgent
userContext.userIpString: User's IP address.context.ip
userContext.browserLanguageString: User's browser language.context.locale
compliance.gdprInteger: Set to 1 when a TCF consent string is present; not sent otherwise.Expression – returns 1 when context.consent.tcf.tcString exists
compliance.gdprConsentString: IAB TCF consent string. Required by Adform when gdpr is 1.context.consent.tcf.tcString
compliance.gppString: IAB GPP consent string.properties.gpp
compliance.gppSidString: GPP section ID used for privacy resolution.properties.gpp_sid
variables.genderString: User gender.traits.gender
variables.countryString: User country.traits.address.country

Event Specific

Page

Output KeyDescriptionExpected Input
pageUrlString: URL of the page, from page properties.properties.url
refererString: URL of the referring page, from page properties.properties.referrer

Product List Viewed

Output KeyDescriptionExpected Input
variables.subVariablesArray: One object per listed product with productname, productsales, productid, categoryname, productcount.Expression – maps properties.products (name, price, product_id, category, quantity)

Product Clicked

Output KeyDescriptionExpected Input
variables.currencyString: Currency code of the product.properties.currency
variables.subVariablesArray: Single object with productname, productsales, productid, categoryname, productcount.Expression – maps properties.name, price, product_id, category, quantity

Product Viewed

Output KeyDescriptionExpected Input
variables.currencyString: Currency code of the product.properties.currency
variables.subVariablesArray: Single object with productname, productsales, productid, categoryname, productcount.Expression – maps properties.name, price, product_id, category, quantity

Product Added

Output KeyDescriptionExpected Input
variables.currencyString: Currency code of the product.properties.currency
variables.subVariablesArray: Single object with productname, productsales, productid, categoryname, productcount.Expression – maps properties.name, price, product_id, category, quantity

Product Removed

Output KeyDescriptionExpected Input
variables.currencyString: Currency code of the product.properties.currency
variables.subVariablesArray: Single object with productname, productsales, productid, categoryname, productcount.Expression – maps properties.name, price, product_id, category, quantity

Product Added To Wishlist

Output KeyDescriptionExpected Input
variables.currencyString: Currency code of the product.properties.currency
variables.subVariablesArray: Single object with productname, productsales, productid, categoryname, productcount.Expression – maps properties.name, price, product_id, category, quantity

Cart Viewed

Output KeyDescriptionExpected Input
variables.currencyString: Currency code of the cart.properties.currency
variables.basketsizeString: Total quantity of items in the cart; each product counts as 1 if quantity is missing.Expression – sums properties.products quantities
variables.subVariablesArray: One object per product with productname, productsales, productid, categoryname, productcount.Expression – maps properties.products (name, price, product_id, category, quantity)

Checkout Started

Output KeyDescriptionExpected Input
variables.currencyString: Currency code of the order.properties.currency
variables.orderidString: Order ID.properties.order_id
variables.salesFloat: Order revenue.properties.revenue
variables.basketsizeString: Total quantity of items in the order; each product counts as 1 if quantity is missing.Expression – sums properties.products quantities
variables.subVariablesArray: One object per product with productname, productsales, productid, categoryname, productcount.Expression – maps properties.products (name, price, product_id, category, quantity)

Payment Info Entered

Output KeyDescriptionExpected Input
variables.orderidString: Order ID.properties.order_id

Coupon Entered

Output KeyDescriptionExpected Input
variables.orderidString: Order ID.properties.order_id

Order Completed

Output KeyDescriptionExpected Input
variables.currencyString: Currency code of the order.properties.currency
variables.orderidString: Order ID.properties.order_id
variables.salesFloat: Order revenue.properties.revenue
variables.basketsizeString: Total quantity of items in the order; each product counts as 1 if quantity is missing.Expression – sums properties.products quantities
variables.subVariablesArray: One object per product with productname, productsales, productid, categoryname, productcount.Expression – maps properties.products (name, price, product_id, category, quantity)

Order Updated

Output KeyDescriptionExpected Input
variables.currencyString: Currency code of the order.properties.currency
variables.orderidString: Order ID.properties.order_id
variables.salesFloat: Updated order revenue.properties.revenue
variables.basketsizeString: Total quantity of items in the order; each product counts as 1 if quantity is missing.Expression – sums properties.products quantities
variables.subVariablesArray: One object per product with productname, productsales, productid, categoryname, productcount.Expression – maps properties.products (name, price, product_id, category, quantity)

Order Refunded

Output KeyDescriptionExpected Input
variables.currencyString: Currency code of the order.properties.currency
variables.orderidString: Order ID.properties.order_id
variables.salesFloat: Refunded order revenue.properties.revenue
variables.basketsizeString: Total quantity of items in the order; each product counts as 1 if quantity is missing.Expression – sums properties.products quantities
variables.subVariablesArray: One object per product with productname, productsales, productid, categoryname, productcount.Expression – maps properties.products (name, price, product_id, category, quantity)

Order Canceled

Output KeyDescriptionExpected Input
variables.currencyString: Currency code of the order.properties.currency
variables.orderidString: Order ID.properties.order_id
variables.salesFloat: Canceled order revenue.properties.revenue
variables.basketsizeString: Total quantity of items in the order; each product counts as 1 if quantity is missing.Expression – sums properties.products quantities
variables.subVariablesArray: One object per product with productname, productsales, productid, categoryname, productcount.Expression – maps properties.products (name, price, product_id, category, quantity)

Required & Recommended Identifiers

These identifiers must be mapped to Adform in order for successful user matching to occur. Without these IDs, any events sent to Adform may not be accurately reflected in reporting.

AttributeExampleSync Injector Required?
cookieId Required5561975860057581265Yes
eids Recommendeduser_12345No
userIp Recommended111.111.111.111No
userAgent RecommendedMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36No

Integration Validation

  • In the Adform platform, go to Site Tracking and confirm that tracking points appear for the tracking setup ID configured in the integration.
  • Confirm tracking point names match the expected event names (e.g., page, identify, order_completed).
  • Verify that conversions are attributed to the correct Adform campaign for events that include the Adform cookie ID.
  • Check that conversion details such as sales value, order ID, and product data appear in Adform reporting.
  • Confirm that users from tracked events are added to audiences for retargeting.
  • Adform's API returns success responses even when data may not be processed as expected, so a successful response alone does not confirm delivery. Always verify data in Adform reports.
  • Ask your Adform representative to confirm that events are being received and processed on their backend.