Moloco DSP
Upload audience segments (CustomerSets) to Moloco DSP so you can target or exclude device advertising identifiers (IDFA or Google ADID) in programmatic mobile campaigns.
Zeotap implements the Moloco Campaign Management API flow: it authenticates against the Moloco Auth API, uploads the audience file through a Moloco-issued upload URL, and then creates or updates a CustomerSet that points at the uploaded file.
Prerequisites
- A Moloco Ads account with an active Ad Account
- An Ad Account ID from the Moloco Ads console
- Either a Moloco API key (recommended) or the email and password for a Moloco Ads user
Authentication
Moloco DSP supports two authentication methods. The connector exchanges whichever you provide for a short-lived access token against POST /cm/v1/auth/tokens before every sync.
Option 1 — API Key (recommended)
Create an API key in the Moloco Ads console under Settings > API Keys and paste it into Zeotap. The key is stored encrypted and used only to obtain access tokens.
Option 2 — Email and Password
If API keys are not yet enabled on your Moloco account, you can use your Moloco user credentials. Zeotap calls the Auth API with auth_type: CREDENTIAL and uses the returned access token.
Configuration
| Field | Type | Required | Description |
|---|---|---|---|
| Ad Account ID | Text | Yes | The Moloco Ad Account ID that owns the CustomerSets managed by this destination. Every API call is scoped by this value. |
| Workplace ID | Text | No | Optional Moloco Workplace ID. Only relevant for the email/password auth flow; leave blank when using an API key. |
Target Settings
| Field | Type | Required | Description |
|---|---|---|---|
| Audience Name | Text | Yes | Title of the Moloco CustomerSet. If a matching CustomerSet does not exist, it is created on first sync. |
| CustomerSet ID | Text | No | Existing CustomerSet ID. When set, updates are applied to this CustomerSet via PUT /cm/v1/customer-sets/{id}. Leave blank to create a new CustomerSet. |
| ID Type | Select | Yes | Device advertising identifier type. Moloco requires exactly one of GOOGLE_ADID (Android) or APPLE_IDFA (iOS) per CustomerSet — mixing is not allowed. Default: GOOGLE_ADID. |
| Identifiers are upper-case | Toggle | No | Enable if the MAIDs in your source are upper-cased. Zeotap also normalizes identifiers before upload to match this setting. Default: off (lower-case). |
Supported Operations
Sync Modes
No standard (non-audience) sync modes are supported. Moloco DSP CustomerSets are audience/membership resources only.
Audience Sync Modes: Add, Mirror
Moloco CustomerSet updates are full-file replace operations. Every sync uploads a CSV containing the complete membership and replaces the previous file.
| Mode | Behavior |
|---|---|
| Add | All rows in the batch are uploaded. |
| Mirror | Rows marked as removed in the change set are excluded; the uploaded file is the new full audience. |
Per-identifier deletes (remove) and key-based updates (upsert) are not supported — Moloco’s CustomerSet API only accepts a whole-file replacement.
Features
- Field Mapping: Yes — map any source column onto the single required
maiddestination field - Schema Introspection: No — CustomerSets have a fixed shape (one MAID per row)
Required Field Mappings
| Destination Field | Description | Alternatives |
|---|---|---|
Mobile Ad ID (maid) | Device advertising identifier (IDFA or GOOGLE_ADID) | device_id, idfa, adid, advertising_id |
How It Works
Each batch the worker runs this sequence against the Moloco API:
POST https://api.moloco.cloud/cm/v1/auth/tokens— exchange the API key or email/password for an access token.POST https://api.moloco.cloud/cm/v1/creative-assets?ad_account_id={id}— request a Moloco-issued upload URL for a CSV asset.POST {upload_url}with headerx-goog-resumable: start— initiate a Google Cloud Storage resumable upload session and read thex-guploader-uploadidfrom the response.PUT {upload_url}&upload_id={id}— stream the CSV (one MAID per row, no header) into the resumable upload.- Either
POST /cm/v1/customer-sets?ad_account_id={id}to create the CustomerSet, orPUT /cm/v1/customer-sets/{customer_set_id}?ad_account_id={id}to update an existing one.
Rate Limits
Moloco enforces a limit of 300 requests per 5 minutes per ad account across all Moloco Ads API endpoints. Zeotap issues a small fixed number of requests per sync (auth, asset session, resumable start, file PUT, customer-set create/update), so hitting the limit typically requires many concurrent audiences syncing in quick succession.
Best Practices
- Prefer an API key over email/password for security and predictable rotation.
- Choose the
ID Typethat matches your first-party data source; do not try to mix GOOGLE_ADID and APPLE_IDFA in a single audience. - Leave
CustomerSet IDblank on first sync — Zeotap will create the CustomerSet and persist the returned ID automatically for subsequent updates. - Normalize MAIDs upstream or set the “Identifiers are upper-case” toggle consistently. Case-mismatched IDs will not match user impressions.
Troubleshooting
Invalid credentials (401 / 403)
The access-token exchange failed. For API key auth, regenerate the key from the Moloco Ads console. For password auth, confirm the account is active and not locked.
Ad Account returns 404
The token is valid but cannot read CustomerSets for the configured Ad Account ID. Verify the Ad Account ID matches the one shown in the Moloco console for your workplace.
”asset_url or content_upload_url missing”
The creative-assets endpoint accepted your request but returned an unexpected body. This usually indicates a temporary Moloco outage — retry the sync.
Upload completes but CustomerSet status stays PREPARING
After the file is uploaded, Moloco performs asynchronous validation before the CustomerSet reaches READY. This can take a few minutes for large audiences; the status is visible in the Moloco Ads console.
”id_type must be GOOGLE_ADID or APPLE_IDFA”
The ID Type target field is empty or contains an unsupported value. Re-open the destination and pick one of the two supported identifier types.
No valid MAIDs in batch
Every row in the audience was missing a mapped maid column. Confirm the field mapping selects a source column, and that the column is not fully null.