Campaign engagement export (JSONL)
Streams the full engagement dataset for a campaign as
newline-delimited JSON (JSONL). Every line is a complete, valid
JSON object conforming to the campaign_engagement_daily v1.0 schema
— identical to the rows returned by GET /metrics/engagement but
without pagination or an envelope wrapper.
Designed for data pipeline consumers: load directly into BigQuery, Snowflake, or any JSONL-aware ingest tool without cursor logic.
Usage:
Response body (one JSON object per line, no trailing comma):
Date range: if you omit both dates, defaults to the last 90 days
ending today. Override with startDate / endDate. Responses are
capped at 90 days — a wider range returns 400 invalid_query_parameter.
Page longer histories in 90-day slices.
Mutability: rows for a given report_date can be revised for up to
7 days after the date closes. Re-fetching and re-ingesting on the
primary key is safe (idempotent).
Requires the metrics:read scope. Accepts API key or OAuth Bearer.
Authorizations
Query Parameters
Response
JSONL stream. Each line is a campaign_engagement_daily v1.0 row.
Lines are sorted by (report_date asc, engagement_context, country_code, engaged_spotify_track_id).
One row of the campaign_engagement_daily v1.0 schema.
Primary key: (provider, account_id, report_date, campaign_id, engagement_context, country_code, engaged_spotify_track_id).
Rows are idempotent — re-ingesting on the primary key is safe.
Values for a given report_date may be revised for up to 7 days after
the date closes due to delayed Spotify playback events.
1-based slot of the engaged track on the promoted playlist for report_date (1 = top).
Populated only when engagement_context = playlist and that day's playlist crawl listed the track.
null for catalog rows; before the day's crawl completes (current UTC day is often null until later morning UTC);
when the track was not listed or could not be matched to that day's crawl; or while historical backfill is still catching up.
Field is beta until historical backfill finishes. Treat null as unavailable — not an error.
x >= 1