Adform DMP
Create and license audience segments in your Adform Data Management Platform (DMP) account. Zeotap uses the Adform DMP REST API to create and license segments against your chosen org scope (Agency, Advertiser, or Data Marketplace) and drops the identifier payload (MAIDs and Adform cookie IDs) into the Adform-provided S3 bucket for ingestion.
Prerequisites
- An Adform DMP account with an active Data Provider
- An OAuth 2.0 Client Credentials application registered with Adform, scoped to
dmp.categoriesanddmp.segments - An S3 drop bucket provisioned by Adform, together with AWS Access Key ID and Secret Access Key that can write to it
- A category named
ZEOTAP CDP(or a custom category name of your choosing) created in the Adform DMP UI before the first sync
Permissions
Register your OAuth client with Adform Support (technical@adform.com) using these parameters:
- Authorization flow:
Client Credentials - Scopes:
https://api.adform.com/scope/dmp.categories,https://api.adform.com/scope/dmp.segments - Description: “Facilitate segment creation and licensing for Zeotap CDP”
Adform will email the Client ID and Client Secret, and separately provision the S3 drop bucket and AWS keys.
Authentication
Adform DMP combines two authentication methods in a single destination:
- OAuth 2.0 Client Credentials — used to create, look up, and license segments via the Adform DMP REST API. Zeotap exchanges the Client ID and Client Secret against
https://id.adform.com/sts/connect/tokenand caches the bearer token for reuse. - AWS S3 access keys — used to drop identifier files into the Adform-provided S3 bucket. Zeotap uploads one CSV per identifier type per sync batch.
Both credential pairs are entered when you create the destination in Zeotap.
Configuration
| Field | Type | Required | Description |
|---|---|---|---|
| Organisation Type | Select | Yes | Agency, Advertiser, or Data Marketplace. Controls which ID fields are required and how the segment is licensed. |
| Country ID | Text | Conditional | Required for Agency and Advertiser. |
| Agency ID | Text | Conditional | Required for Agency and Advertiser. |
| Advertiser ID | Text | Conditional | Required for Advertiser. |
| Seat ID | Text | Conditional | Required for Data Marketplace. |
| Data Provider ID | Text | Yes | Adform DMP Account ID visible under Settings. |
| Category | Text | No | Adform DMP category that hosts the segment. Defaults to ZEOTAP CDP. |
| S3 Drop Bucket | Text | Yes | Bucket name provisioned by Adform. |
| S3 Region | Select | Yes | AWS region for the drop bucket. |
| S3 Path — MAIDs | Text | No | Folder prefix for mobile advertising ID files. Defaults to maids/. |
| S3 Path — Cookies | Text | No | Folder prefix for Adform cookie ID files. Defaults to cookies/. |
| CPM Price | Text | No | Optional flat CPM price attached to the segment licensing request. |
| Percent of Media Cost | Text | No | Optional percent-of-media-cost CPM attached to the segment licensing request. |
Target Settings
| Field | Type | Required | Description |
|---|---|---|---|
| Segment Name | Text | Yes | Name of the Adform DMP segment to create or reuse inside the selected category. |
| Segment ID (Ref ID) | Text | No | Existing Adform segment Ref ID to update. Leave blank to let Zeotap look up the segment by name or create it. |
Supported Operations
Sync Modes
Adform is audience-only — standard data sync modes are not supported.
Audience Sync Modes
| Mode | Supported |
|---|---|
| Add | Yes |
| Mirror | Yes |
| Remove | — |
| Upsert | — |
Because Adform’s segment ingestion is file-based, Zeotap cannot revoke individual identifiers from a previously delivered drop. Mirror excludes rows marked as removed from the new drop so the segment snapshot reflects current membership.
Features
- Field Mapping: Yes — map your warehouse columns to
maidand/oradform_cookie_id - Schema Introspection: No
Required Mapping Fields
At least one of these fields must be mapped for every sync:
| Field | Description |
|---|---|
maid | Mobile advertising ID (IDFA or GAID) |
adform_cookie_id | Adform browser cookie identifier |
Default Destination Fields
| Field | Type | Description |
|---|---|---|
maid | String | Raw IDFA (iOS) or GAID (Android). |
adform_cookie_id | String | Adform browser cookie identifier. |
How It Works
- Zeotap authenticates with Adform using the OAuth 2.0 client credentials grant and caches the access token.
- When the destination is saved, Zeotap looks up any existing segment with the supplied name under the configured data provider + category. If none exists, a new segment is created via the Adform DMP REST API.
- Zeotap then licenses the segment against your chosen scope (Agency, Advertiser, or Data Marketplace) using the Adform Segment Data Usage API, attaching the optional CPM price or percent-of-media-cost.
- For each sync batch, Zeotap splits rows by identifier type (
maidversusadform_cookie_id), serialises each group into a CSV with asegmentIdcolumn, and uploads one file per identifier type to the configured S3 drop bucket. File names include the data-provider ID, segment ID, sync mode, and a UTC timestamp. - Adform ingests the drop on their side and materialises segment membership in the DMP. The segment then becomes available for activation across Agency, Advertiser, or Data Marketplace buyers according to the licensing you configured.
Rate Limits
- The Adform DMP REST API enforces account-level rate limits on segment CRUD operations. Zeotap reports HTTP 429 batches as failed and retries on the next sync run.
- S3 uploads use AWS default throttling. Because each sync produces a small number of CSV files per batch, throttling is unlikely in normal operation.
Best Practices
- Create the Category up front — Adform does not auto-create categories. Make sure
ZEOTAP CDP(or your custom category name) exists in the Adform DMP UI before activating the destination. - Reuse existing Segment IDs when migrating an audience already known to Adform to avoid duplicate segments.
- Pre-provision S3 keys — request the S3 drop bucket and AWS keys from Adform at the same time you request OAuth credentials to avoid configuration gaps.
- Audit org-scope licensing — the Organisation Type drives who in Adform can see and activate the segment. Double-check the Country / Agency / Advertiser / Seat IDs before going live.
- Use Mirror for declarative audiences — Mirror mode drops the full current membership on every run and is the closest equivalent to a reset semantic for file-based destinations.
Troubleshooting
Authentication failed: invalid OAuth client credentials
The Client ID and Client Secret are incorrect or the OAuth client has been disabled. Verify the credentials with Adform Support and that the client is scoped to dmp.categories and dmp.segments.
Access forbidden / Data provider not found
The OAuth client does not have access to the configured Data Provider ID. Confirm the Data Provider ID matches the Adform DMP Account ID and that the OAuth client was issued against the same account.
Segment licensing failed
Zeotap successfully created the segment but could not license it to the configured scope. The drop will still run, but the segment will not be visible to the intended Agency / Advertiser / Data Marketplace buyer until licensing is fixed. Confirm the Country / Agency / Advertiser / Seat IDs, then re-run the sync to retry licensing.
S3 upload failed
Verify that the Access Key ID and Secret Access Key have write access to the configured bucket, and that the region matches the bucket’s region. Adform operates buckets in multiple AWS regions — picking the wrong region causes signature or DNS resolution failures.
Row missing maid and adform_cookie_id
The source row contains neither a mobile advertising ID nor an Adform cookie ID. Ensure your warehouse query or field mapping exposes at least one of these columns for every row.
Rate limited (HTTP 429)
Adform’s DMP REST API rate-limited the segment CRUD call. Zeotap marks the batch as failed and retries it on the next sync run.