What is the export service and what is its purpose
The export service provides granular performance data across both consumption and impression data that delivers reporting in a JSON format to an organization’s S3 bucket.
You may only use and share this data in accordance with your agreement with Spotify for use of the Megaphone platform (including the applicable DPA). To the extent you share it with your measurement partner, you will ensure that such measurement partner: (a) uses such data for the sole purpose of providing measurement and attribution reporting to you; and (b) does not, directly or indirectly, sell, share, or process for purposes of targeted advertising, any such data (the terms "sell", "share" and "targeted advertising" shall have the meaning set forth in applicable privacy laws, such as the CCPA).
How to setup the export service
Please reach out to our support team via Live Chat to set up this service (typically takes 1-2 weeks). Data will only be pushed from the date of setup forward and does not include backfill. We recommend setting this up prior to going live on Megaphone. Note that both the delivery and impressions export files will be sent once your bucket is set up.
How it works
Once the S3 bucket is setup, you will receive two files on an hourly basis through the day:
Impressions Export: impressions-v2-day-2025-08-01.json.gz
Delivery Export: delivery-v2-day-2025-08-01.json.gz
The files will be overwritten throughout the day and contain the impressions/delivery for the day (UTC timezone) thus far. By 11am UTC (7AM EST) each day, the previous day's file is final and will not be overwritten again. To confirm whether a specific day’s file has been completely finalized, check for the existence of a file with this name convention: “_finalized_<metric_type>_<partition_date>_<timestamp>”
Schema of Both Files
File One: Impressions Export |
Field | Description | SAI or DAI | Example |
impression_type | The advertising technology used to deliver the impression | Both | "sai” / “dai" |
impression_status | The status of an impression that is either delivered or available | Both | "delivered" / "available" |
metric_id | The unique Megaphone identifier of the person’s listening session for the DAI impression | DAI Only | "p468c92e-7d1e-11ef-ac4d-8xz211bb6d14” |
organization_id | The unique Megaphone identifier of an organization | Both | "b366c92e-6e0e-7ref-ac7d-8xz262bb6d19”" |
network_id | The unique Megaphone identifier of a network | Both | "dcdbb4fc-1a43-11eb-84ae-67a893070760" |
podcast_id | The unique Megaphone identifier of a podcast | Both | "42c9a7c0-ca68-11ed-94a6-27f47d63ee42" |
episode_id | The unique Megaphone identifier of an episode | Both | "9781f646-9645-11ef-93b9-2b900958dc65" |
advertisement_id | The unique Megaphone identifier for the advertisement | DAI Only | "a566c92e-7d0e-11ef-ac7d-8xz262bb6d19" |
order_id | The unique Megaphone identifier for a specific order. | Both | "f266c92e-7d0e-11ef-ac7d-8fd262bb6d34" |
created_at | The timestamp when the event (row) occured | Both | "2024-10-02T14:00:10.000Z" |
country | The country where the person was located when they consumed the ad | Both | "US" |
region | The first-level administrative division (e.g., state, province, or territory) where the person was located when they consumed the ad. | Both | “TX” |
city | The city where the person was located when they consumed the ad | Both | "Dallas" |
zip | The U.S. zip code where the person was located when they consumed the ad | Both | "75254" |
dma_name | The U.S. Designated Market Area (DMA) where the person was located when they consumed an ad. | Both | "Los Angeles, CA" |
normalized_user_agent | The platform or app where the podcast episode was played (e.g., Spotify, Apple Podcasts, etc). | Both | "Spotify" |
byte_offset
| The point in the audio file (measured in bytes) where an ad slot begins | DAI Only | 0 |
position | The position of the individual ad within the overall ad slot | Both | 1 |
type | The location of the ad. Ads are either pre-roll, mid-roll, or post-roll. | Both | "pre" / "mid"/”post” |
bytes_sent | The number of bytes sent to the person’s device | DAI Only | 71095069 |
seconds_downloaded | The number of seconds downloaded to the device of the person consuming content | DAI Only | 1559 |
ad_source | The logic by which the ad was placed | DAI Only | “auto” |
order_downloaded | Whether or not the ad file was completely downloaded by the listener | DAI Only | true / false |
blacklisted_ip | Whether the IP is one we associate with not real listeners - bots or employees. Note, this will always be false, planned deprecation. | DAI Only | false |
blacklisted_ua | Whether the user agent is one we associate with not real listeners - bots or employees. Note, this will always be false, planned deprecation. | DAI Only | false |
File Two: Delivery Export |
Field | Description | Plays or Downloads | Example |
id | The unique identifier of the event | Both | "1306432511362ad2e76697597f4b8992691fadcdd75a8716d7bf389671e0af11" |
delivery_type | The type of consumption, with “plays” representing only Spotify consumption, and downloads representing all platforms | Both | "play" / “download” |
media_type | The episode format type; either video or audio. | Both | “audio” / “video” |
is_stream | Indicates if the row represents a stream on Spotify | Plays only | true / false |
network_id | The unique Megaphone identifier of a network | Both | "dcdbb4fc-1a43-11eb-84ae-67a893070760" |
podcast_id | The unique Megaphone identifier of a podcast | Both | "2751f55e-8e15-11ed-ae35-43ee3a490d7d" |
episode_id | The unique Megaphone identifier of an episode | Both | "2764369c-8e15-11ed-ae35-9fc331636995" |
created_at | The timestamp when the event (row) occured | Both | "2023-01-06T23:52:35.000Z" |
duration | The length of an episode in seconds | Both | "104.33" |
country | The country where the person was located when they consumed the content | Both | "US" |
region | The first-level administrative division (e.g., state, province, or territory) where the person was located when they consumed the content | Both | "NY" |
dma_name | The U.S. Designated Market Area (DMA) where the person was located when they consumed the content. | Both | "Los Angeles, CA" |
city | The city where the person was located when they consumed the content | Both | "New York" |
source | Distinguish between embedded players and browser user agent. Note, this will always be “0” and planned for eventual deprecation. | Downloads only | 0 |
filesize | Size in bytes of the audio file | Downloads only | 2998176 |
bytes_sent | Audio bytes delivered to the user | Downloads only | 2998611 |
seconds_downloaded | The number of seconds downloaded to the device of the user consuming content | Downloads only | 104 |
normalized_user_agent | The platform or app where the podcast episode was played (e.g., Spotify, Apple Podcasts, etc) | Both | "Spotify" |
user_agent | Identifies the app and device making a request | Both | "Podcasts/1611.1.1 CFNetwork/1325.0.1 Darwin/21.1.0" |
ip | The hashed IP address associated with the person consuming the content | Both | "595a01d976316e1be1bed8646da0dbb2" |
blacklisted_ip | Whether the IP is one we associate with not real listeners - bots or employees. Note, this will always be false, planned deprecation. | Downloads only | false |
blacklisted_ua | Where the user agent is one we associate with not real listeners - bots or employees. Note, this will always be false, planned deprecation. | Downloads only | false |
What’s new about these files?
We’ve added new fields to each file and made some updates to the structural delivery of export files that should make it easier for you to use these services and provide a more complete picture of your performance.
New Fields:
Impression File:
impression_type: Distinguish between the technology used to deliver the ad (SAI vs DAI)
impression_status: Whether impressions that were delivered OR available
Country, Region, Zip, DMA: More granular geographic information based on impressions
Note, if impression_type= “SAI” and impression_status=”available” you will only see country level geolocation rows.
Delivery File
delivery_type: Used for understanding specific Spotify consumption and off platform consumption (plays and downloads)
media_type: Performance insight based on video vs audio episode formats
Is_stream: Whether the consumption event resulted in a Spotify stream
network_id: The network associated with relevant delivery rows
Structural Changes:
Filtering: We are now filtering out blacklisted IP/user agents so you do not need to handle this custom logic on your end.
Finalized Files: Easier understanding of when data is finalized. We will now be adding a new file to indicate that the date is finalized that will be following this naming convention: “_finalized_<metric_type>_<partition_date>_<timestamp>” this should inculcate to you that all the previous files within that day are now finalized.
Actions to take with new files
We will be sending the legacy and new files together for a period of roughly three months, with an eventual legacy depression in Q4’2025 (November estimate). We recommend testing and moving to the new files using some of the below tips prior to the legacy deprecation date.
How to calculate core metrics with these new files:
Within the delivery file:
Downloads: Count all rows where “delivery_type” = “download”
Plays: Count all rows where “delivery_type” = “play”
Streams: Count all rows where “is_stream” is true
Within the impression file:
Delivered Impressions: Count all rows where “impression_type” = “delivered”
Filtering Logic: You no longer need to apply previously recommended filtering logic, as we are now handling this on our end for blacklisted_ua and blacklisted_ip events. You will see fewer rows compared to the previous file, which is due to this filtering, but the counts in the export will match the Megaphone UI.
Future Deprecations and Field Changes
With the updated files (July 2025) we are including new fields. In order to not disrupt any existing workflows, we will still be sending the legacy files for at least three months. We eventually plan to deprecate the legacy files in Q4’2025 and will provide ample warning prior to only sending the new files. In addition, there are a few fields we will also plan to deprecate over time:
Planned fields to be deprecated by the end of 2025:
Blacklisted_ip: Due to new filtering always returns false
Blacklisted_ua: Due to new filtering always returns false
Source: This field is no longer supported, and always returns “0”