ZMS Campaign Daily

KPI Aggregation & Granularity: The calculated KPIs in this dataset—specifically ropi, roas, cvr, ctr, cpc, roas_campaign —are provided at the baseline granularity of campaign_id, dt, device and country. If you alter or roll up the granularity of your analysis, do not directly sum (SUM) or average (AVG) these KPI columns. Instead, recalculate the metrics using the explicit formulas mentioned in the schema description below (i.e., aggregate the base metrics first, then apply the formula). Example usage can be seen in the Example Measures section.

Overview

This dataset delivers daily performance insights for Zalando Partner Marketing Services (ZMS) campaigns. The dataset is structured at the campaign, country, and device level granularity.

Using metrics such as viewable_impressions, ad_clicks, budget_spent, and items_sold, partners can monitor how their overall campaigns perform across different platforms (e.g. App vs. Web, Country, etc.).

These insights enable partners to evaluate campaign effectiveness, optimise macro-level campaign budgets, and analyze platform-specific consumer behavior without the granularity of individual SKUs.

Property Description
Data granularity campaign_id, campaign_objective, dt, country, device
History available Data available from 2024-01-01
Update frequency Daily
Data retention Past 2 years + current year
Primary keys campaign_id, dt, country, device
Partition columns dt
SLOs Daily around 1:00 PM UTC (for the previous day's data)
Notice period for changes See Versioning and Deprecation Policy
Support Support available via partner-care@zalando.de.
No 24/7 support available.

Data Refresh Strategy

Partners can choose either a full load or an incremental load approach when consuming this dataset, depending on what best fits their pipeline.

  • How it works: Merge new and updated records into your local table using account_id, campaign_id, dt, country, and device as the merge keys. Rows matching these keys should be updated/replaced with the latest version; new key combinations should be inserted.
  • Identifying changed records: Use the updated_at timestamp to request only rows that have changed since your last successful load (e.g. WHERE updated_at > <last_max_updated_at_you_processed>).
  • Why choose this? Lower processing cost and faster refreshes, since only new/changed rows since your last run need to be transferred and merged.
  • Soft delete handling: The dataset includes an is_deleted column to indicate records that have been logically deleted. Partners should exclude records where is_deleted = true when performing attribution KPI calculations to ensure accurate reporting.

Option B: Full Load

  • How it works: Overwrite your entire local table with the full dataset on each retrieval.
  • Why choose this? Simplest to implement and operate — no merge logic required, and guarantees your table always reflects the latest state, including retroactive corrections to historical data (up to 2 years).
  • Soft delete handling: The dataset includes an is_deleted column to indicate records that have been logically deleted. Partners should exclude records where is_deleted = true when performing attribution KPI calculations to ensure accurate reporting.

Tracking refreshes

Regardless of approach, partners can reference the updated_at timestamp column to verify exactly when a given record was last refreshed.

Table Reference

zms_campaign_daily_share.direct_data_sharing.zms_campaign_daily

Schema

Column name Format Description
account_id string Zalando Partner Account ID (included as partition key for downstream processing).
campaign_id string Unique ID of the campaign (n_code).
campaign_name string Name of the campaign.
merchant_id string Zalando Partner ID (BPID).
campaign_objective string Objective of the campaign. One of: Conversion, Consideration, Awareness.
start_date date Campaign start date.
end_date date Campaign end date.
dt date Event record date.
country string ISO country code of campaign (e.g. DE, AT).
device string Device options of campaigns (e.g. App, Web).
viewable_impressions bigint The number of times a user has been exposed to at least 50% of your ad content (25% for big ad format).
ad_clicks bigint The number of times a user has clicked on your ads.
budget_spent double Your total campaign budget, including discounts, vouchers and free media.
partner_spent double The amount you have invested in your campaign, excluding discounts, vouchers and free media.
items_sold bigint The number of items sold after users clicked on your ads (before cancellations and returns).
attributed_gmv double The value of items sold after users clicked on your ads (before cancellations and returns).
ropi double Return On Partner Invest: Calculated as Attributed GMV divided by Partner Invest and excluding any budget spent on TikTok, Pinterest and/or Snapchat.

Formula: SUM(attributed_gmv) / SUM(partner_spent)
roas double Return On Ad Spend: Calculated as Attributed GMV divided by Budget Spent and excluding any budget spent on TikTok, Pinterest and/or Snapchat.

Formula: SUM(attributed_gmv) / SUM(budget_spent)
cvr double Conversion Rate: The percentage of clicks on your ads that have led to sales (excluding clicks from TikTok, Pinterest and/or Snapchat).

Formula: SUM(items_sold) / SUM(ad_clicks)
ctr double Click-through Rate: Calculated as Clicks divided by Viewable Impressions.

Formula: SUM(ad_clicks) / SUM(viewable_impressions)
cpc double Cost Per Click: The amount you pay for each click on your ads.

Formula: SUM(budget_spent) / SUM(ad_clicks)
created_at timestamp Timestamp in UTC when the data was created.
updated_at timestamp Timestamp in UTC when the data was updated.
gmv_campaign double The value of items sold - before cancellations and returns - after users clicked on or viewed your ads.
roas_campaign double Return on Ad Spend: The GMV your business earns for each euro it spends on advertising. Calculated as Campaign GMV (purchases of any SKU included in the campaign) divided by Budget spent and excluding budget spent on TikTok, Pinterest and/or Snapchat.

Formula: SUM(gmv_campaign) / SUM(budget_spent)
items_sold_campaign bigint The number of items sold - before cancellations and returns - after a user clicked on an ad and purchased any SKU included in the campaign.
conversion_rate_clicks_campaign double The percentage of clicks on your ads that have led to a sale of any SKU included in the campaign.

Formula: (SUM(items_sold_campaign) / SUM(ad_clicks)) * 100
cpsi_campaign double The advertising cost of each individual item's sale of any SKU included in the campaign.

Formula: SUM(budget_spent) / SUM(items_sold_campaign)
is_deleted boolean Soft delete flag: true when the row was deleted due to attribution correction.

Example Measures

Campaign Performance by Country

Calculates clicks, spend, and Conversion Rate (CVR) broken down by country to help optimise targeting country.

SELECT
    dt,
    campaign_id,
    campaign_name,
    country,
    SUM(viewable_impressions) AS viewable_impressions,
    SUM(ad_clicks) AS ad_clicks,
    SUM(items_sold) AS items_sold,
    CAST(sum(items_sold) / NULLIF(sum(ad_clicks), 0) AS DOUBLE) AS cvr,
    CAST(sum(ad_clicks) / NULLIF(sum(viewable_impressions), 0) AS DOUBLE) AS ctr,
    CAST(sum(budget_spent) / NULLIF(sum(ad_clicks), 0) AS DOUBLE) AS cpc
FROM zms_campaign_daily_share.direct_data_sharing.zms_campaign_daily
WHERE is_deleted IS FALSE
GROUP BY 1, 2, 3, 4

Overall ROAS and ROPI by Country

Evaluates financial performance and return across different country to guide strategic budget allocations.

SELECT
    campaign_id,
    campaign_name,
    country,
    start_date,
    end_date,
    SUM(budget_spent) AS budget_spent,
    SUM(attributed_gmv) AS attributed_gmv,
    CAST(sum(attributed_gmv) / NULLIF(sum(partner_spent), 0) AS DOUBLE) AS ropi,
    CAST(sum(attributed_gmv) / NULLIF(sum(budget_spent), 0) AS DOUBLE) AS roas
FROM zms_campaign_daily_share.direct_data_sharing.zms_campaign_daily
WHERE is_deleted IS FALSE
GROUP BY 1, 2, 3, 4, 5
ORDER BY 1, 2, 3, 4, 5

Campaign Attribution Comparison: Click vs Campaign GMV

Compares click-based attribution (roas) with campaign-level attribution (roas_campaign) side by side. Campaign GMV includes view-through conversions and purchases of any SKU in the campaign — giving a broader picture of your campaign's true revenue impact.

SELECT
    campaign_id,
    campaign_name,
    SUM(budget_spent)                                       AS budget_spent,
    SUM(attributed_gmv)                                     AS gmv_click,
    SUM(gmv_campaign)                                       AS gmv_campaign,
    SUM(attributed_gmv) / NULLIF(SUM(budget_spent), 0)      AS roas_click,
    SUM(gmv_campaign)   / NULLIF(SUM(budget_spent), 0)      AS roas_campaign
FROM zms_campaign_daily_share.direct_data_sharing.zms_campaign_daily
WHERE is_deleted IS FALSE
GROUP BY 1, 2
ORDER BY roas_campaign DESC

Campaign GMV and ROAS Trend Over Time

Tracks gmv_campaign and roas_campaign day by day across all campaigns. Useful for identifying performance trends, spikes, and dips to guide timely budget adjustments.

SELECT
    dt,
    SUM(budget_spent)                                       AS budget_spent,
    SUM(gmv_campaign)                                       AS gmv_campaign,
    SUM(gmv_campaign) / NULLIF(SUM(budget_spent), 0)        AS roas_campaign
FROM zms_campaign_daily_share.direct_data_sharing.zms_campaign_daily
WHERE is_deleted IS FALSE
GROUP BY 1
ORDER BY 1

Changelog (non-breaking changes)

2026-09-22 - v1.4.0 (General Availability)

  • Summary: Dataset moved from pilot mode to General Availability.
  • Details: The backend serving this data has moved to a more reliable source maintaining the same existing schema of the dataset.
  • Availability: partners that were using the dataset during the pilot phase will continue their operations normally. New partners can request access to the data from the contact support button at the bottom of this page.
  • Impact: values for created_at, updated_at columns are all changed due to an initial overwrite job to switch the backend data source. Moving forward, created_at & updated_at columns will resume their normally expected behaviour.
  • Action required: None

2026-08-25 — v1.3.0 (Data load change)

  • Summary: Dataset now supports both full load and incremental load consumption patterns.
  • Details: Partners may either (a) fully overwrite their local table on each refresh, or (b) incrementally merge new/changed records using account_id, campaign_id, dt, country, and device as merge keys, filtering on updated_at to identify changed rows since their last load. Both approaches must exclude/apply is_deleted = true rows appropriately (see Data Refresh Strategy section).
  • Availability: Available immediately; no change to underlying data or schema.
  • Impact: None expected for existing consumers. Partners currently doing full loads may continue unchanged; incremental load is an optional alternative approach.
  • Action required: None. Partners wanting lower processing costs may optionally switch to the incremental merge pattern described above.

2026-07-28 — v1.2.0 (Additive schema change)

  • Summary: Added 3 new columns for campaign-level attribution insights and 1 new column for soft deletion
  • Details: New columns enable analysis of purchases driven by campaign impressions and views, beyond click-only attribution. Added columns: items_sold_campaign, conversion_rate_clicks_campaign, cpsi_campaign, is_deleted. All columns are non-nullable.
  • Availability: Available from the release date 2026-07-28.
  • Impact: None expected for existing consumers. This is purely additive and does not modify existing columns or their behavior.
  • Action required: None. Existing queries will continue to work. Consumers can optionally add items_sold_campaign, conversion_rate_clicks_campaign, and cpsi_campaign to their pipelines to distinguish between click-driven and broader campaign-driven revenue attribution.

2026-07-08 — v1.1.0 (Additive schema change)

  • Summary: Added 2 new columns for campaign-level attribution insights
  • Details: New columns enable analysis of purchases driven by campaign impressions and views, beyond click-only attribution. Added columns: gmv_campaign, roas_campaign. Both columns are non-nullable and represent aggregated campaign-level metrics derived from attributed_gmv_campaign.
  • Availability: Available from the release date 2026-07-08.
  • Impact: None expected for existing consumers. This is purely additive and does not modify existing columns or their behavior.
  • Action required: None. Existing queries will continue to work. Consumers can optionally add gmv_campaign and roas_campaign to their pipelines to distinguish between click-driven and broader campaign-driven revenue attribution.
Contact Support