Ads API Guides
Object Hierarchy
Your Ads Manager account comprises sets of related objects organized in a hierarchy. The Ads API gives you direct, programmatic access to these objects. From top to bottom, the objects that build the structure of your account include:
- Businesses
- Ad Accounts
- Campaigns
- Ad Sets
- Ads
- Assets
Businesses
When you create an account in Spotify Ads Manager, a business account and an associated ad account will automatically be created for you. A business is an object used to centrally manage multiple ad accounts.
Ad Accounts
You must have an ad account before you can create advertisers, campaigns, ad sets, or ads. Use the Get Ad Account by ID endpoint to view information about your account after it has been set up.
Campaigns
A campaign is an object that contains and organizes one or more ad sets. Also, you need a campaign before you can create an ad set. Use the Create Campaign endpoint to create a campaign under your ad account.
Ad Sets
An ad set is the core component of your Ads Manager campaign. It is a child of a campaign object and contains all the essential information Ads Manager needs to execute your campaign. For example, an ad set contains:
- Information about how, when, and where your campaign runs (e.g., start and end dates, bids, budgets, targeting, etc).
- One or more ads.
See the Create Ad Set endpoint for more information or to add an ad set to a campaign.
Ads
An ad is an object that contains an image asset along with either an audio or video asset. Each ad must be linked to an ad set but a given ad cannot be linked to multiple ad sets. See the eponymous Create Ad endpoint to get started.
Assets
The Ads Manager platform supports audio, video, and image assets. These assets are required to create an ad. The asset endpoints help you upload and manage these items. Use the following endpoints to first create and then upload an asset:
Campaign Management
Overview
The Campaign Management API allows you to create and manage campaigns, ad sets, and ads at scale. It also includes endpoints to estimate audience size and bid amount based on your targeting specifications (set at the ad set level).
Eligibility Criteria
As of August 2023, the Campaign Management API is generally available ("GA") and no longer requires a manual allowlisting process to gain access. As soon as you have set up your application, your client ID will be able to access these endpoints automatically.
Please note that the Campaign Management API is only available for advertisers with a Spotify Ads Manager account.
Differences from the UI
Most features available in the Ads Manager UI are also available via the Ads API, with a few exceptions:
Feature | Supported in Spotify Ads Manager UI | Supported in Spotify Ads API |
---|---|---|
Create new ad account | yes | yes - as of v3 |
Manage users | yes | no |
Manage billing/payment | yes | no |
Voiceover generation | yes | no |
Real-time context targeting | yes | yes - Referred to as playlist targeting |
Fan targeting | yes | yes - Referred to as artist targeting |
MOAT viewability tracking set up | yes | no - Only IAS is available |
Build a campaign
Follow these steps to build your first end-to-end campaign with the Ads API. NOTE: The below sample curl requests do not reflect every request parameter available.
Step 1: Retrieve your business & ad account ID
If you're unsure of your business ID, you can call the Get Businesses for Current User endpoint to return a list of all businesses available to the current authenticated user.
_10curl --request GET \_10 --url https://api-partner.spotify.com/ads/v3/businesses \_10 --header 'Authorization: Bearer <ACCESS_TOKEN>'
You can then use the business ID to retrieve a list of all ad accounts under the business that the current authenticated user has access to via the Get Ad Accounts for Current User by Business ID endpoint.
_10curl --request GET \_10 --url https://api-partner.spotify.com/ads/v3/businesses/<BUSINESS_ID>/ad_accounts \_10 --header 'Authorization: Bearer <ACCESS_TOKEN>'
Step 2: Create a campaign
_10curl --request POST \_10 --url https://api-partner.spotify.com/ads/v3/ad_accounts/<AD_ACCOUNT_ID>/campaigns \_10 --header 'Authorization: Bearer <ACCESS_TOKEN>' \_10 --header 'Content-Type: application/json' \_10 --data '{_10 "name": "My Test Campaign",_10 "objective": "EVEN_IMPRESSION_DELIVERY"_10}'
Upon success, the API will return an ID for the newly created campaign. Store this ID for use in Step 5 (Create an ad set).
Step 3: Define targeting specifications
Use the /targets endpoints to understand/retrieve the available targeting options -- supported categories include:
- artist
- genre
- playlist
- interest
- language
- geographic location (country, region, DMA, city, and postal code)
- podcast episode topics
- sensitive topic targets
Step 4: [Optional] Estimate audience size and recommended bid amount
In order to help plan your campaign, we recommend using the /estimates endpoints to help forecast estimated audience size and recommended bid amount based on your targeting specifications (NOTE: Estimates are NOT a guarantee of performance).
Retrieve a recommended bid range:
_49curl --request POST \_49 --url https://api-partner.spotify.com/ads/v3/estimates/bid \_49 --header 'Authorization: Bearer <ACCESS_TOKEN>' \_49 --header 'Content-Type: application/json' \_49 --data '{_49 "start_date": "2025-09-23T04:00:00Z",_49 "end_date": "2025-10-23T04:00:00Z",_49 "bid_strategy": "MAX_BID",_49 "asset_format": "AUDIO",_49 "currency": "USD",_49 "targets": {_49 "age_ranges": [_49 {_49 "min": 18,_49 "max": 65_49 }_49 ],_49 "playlist_ids": [_49 "holidays",_49 "cooking"_49 ],_49 "genders": [_49 "MALE"_49 ],_49 "geo_targets": {_49 "dma_ids": [_49 "501"_49 ],_49 "region_ids": [_49 "5279468"_49 ],_49 "city_ids": [_49 "4174700"_49 ]_49 },_49 "genre_ids": [_49 "rock",_49 "blues"_49 ],_49 "platforms": [_49 "IOS"_49 ],_49 "placements": [_49 "PODCAST",_49 "MUSIC"_49 ]_49 },_49 "objective": "EVEN_IMPRESSION_DELIVERY"_49}'
Retrieve an audience estimate:
_57curl --request POST \_57 --url https://api-partner.spotify.com/ads/v3/estimates/audience \_57 --header 'Authorization: Bearer <ACCESS_TOKEN>' \_57 --header 'Content-Type: application/json' \_57 --data '{_57 "ad_account_id": "<AD_ACCOUNT_ID>",_57 "start_date": "2025-09-23T04:00:00Z",_57 "end_date": "2025-10-23T04:00:00Z",_57 "bid_strategy": "MAX_BID",_57 "asset_format": "AUDIO",_57 "targets": {_57 "age_ranges": [_57 {_57 "min": 18,_57 "max": 65_57 }_57 ],_57 "playlist_ids": [_57 "holidays",_57 "cooking"_57 ],_57 "platforms": [_57 "IOS"_57 ],_57 "genders": [_57 "MALE"_57 ],_57 "language": "en",_57 "geo_targets": {_57 "country_code": "US",_57 "dma_ids": [_57 "501"_57 ],_57 "region_ids": [_57 "5279468"_57 ],_57 "city_ids": [_57 "4174700"_57 ]_57 },_57 "genre_ids": [_57 "rock",_57 "blues"_57 ],_57 "placements": [_57 "PODCAST",_57 "MUSIC"_57 ]_57 }_57 },_57 "objective": "EVEN_IMPRESSION_DELIVERY",_57 "budget": {_57 "micro_amount": 25000000,_57 "type": "DAILY",_57 "currency": "USD"_57 }_57}'
Step 5: Create an ad set
_72curl --request POST \_72 --url https://api-partner.spotify.com/ads/v3/ad_accounts/<AD_ACCOUNT_ID>/ad_sets \_72 --header 'Authorization: Bearer <ACCESS_TOKEN>' \_72 --header 'Content-Type: application/json' \_72 --data '{_72 "name": "My Test Ad Set",_72 "start_time": "2025-10-23T00:00:00Z",_72 "end_time": "2025-10-30T00:00:00Z",_72 "frequency_caps": [_72 {_72 "frequency_unit": "DAY",_72 "max_impressions": 3,_72 "frequency_period": 1_72 },_72 {_72 "frequency_unit": "WEEK",_72 "max_impressions": 5,_72 "frequency_period": 1_72 },_72 {_72 "frequency_unit": "MONTH",_72 "max_impressions": 15,_72 "frequency_period": 1_72 }_72 ],_72 "bid_micro_amount": 5000000,_72 "category": "ADV_1_1",_72 "budget": {_72 "micro_amount": 15000000,_72 "type": "DAILY"_72 },_72 "targets": {_72 "age_ranges": [_72 {_72 "min": 18,_72 "max": 65_72 }_72 ],_72 "playlist_ids": [_72 "holidays",_72 "cooking"_72 ],_72 "genders": [_72 "MALE"_72 ],_72 "geo_targets": {_72 "dma_ids": [_72 "501"_72 ],_72 "region_ids": [_72 "5279468"_72 ],_72 "city_ids": [_72 "4174700"_72 ]_72 },_72 "genre_ids": [_72 "rock",_72 "blues"_72 ],_72 "platforms": [_72 "IOS"_72 ],_72 "placements": [_72 "PODCAST",_72 "MUSIC"_72 ]_72 },_72 "bid_strategy": "MAX_BID",_72 "campaign_id": "<CAMPAIGN_ID>",_72 "asset_format": "AUDIO"_72}'
Upon success, the API will return an ID for the newly created ad set. Store this ID for use in Step 7 (Create an ad).
TIP: If you want to ensure your ad set is not trafficked while you are still finalizing details, you can set the "delivery" to "OFF" until you are ready to have it go live.
Step 6: Create & Upload assets
First, create an asset (the below example is for creating a companion image asset):
_10curl --request POST \_10 --url https://api-partner.spotify.com/ads/v3/ad_accounts/<AD_ACCOUNT_ID>/assets \_10 --header 'Authorization: Bearer <ACCESS_TOKEN>' \_10 --header 'Content-Type: application/json' \_10 --data '{_10 "asset_type": "IMAGE",_10 "name": "myImage.png"_10}'
Upon success, the API will return an ID for the newly created image asset.
Next, upload your file to the newly created asset:
_10curl -X 'POST' \_10 'https://api-partner.spotify.com/ads/v3/ad_accounts/<AD_ACCOUNT_ID>/assets/<ASSET_ID>/upload' \_10 -H 'accept: application/json' \_10 -H 'Authorization: Bearer <ACCESS_TOKEN>' \_10 -H 'Content-Type: multipart/form-data' \_10 -F 'media=@"<FILE_PATH>";type=image/"<FILE_TYPE>"' \_10 -F 'asset_type="IMAGE"'
TIP: You can confirm the asset has been processed successfully by calling the Get Asset endpoint and referring to 'status' in the response:
_10curl --request GET \_10 --url https://api-partner.spotify.com/ads/v3/ad_accounts/<AD_ACCOUNT_ID>/assets/<ASSET_ID> \_10 --header 'Authorization: Bearer <ACCESS_TOKEN>'
Repeat the above upload process for either an audio or a video asset and then proceed to Step 7. There are endpoints available to do a chunked upload for larger audio or video files.
Step 7: Create an ad
All ads must include either an audio asset or a video asset, in addition to a companion image asset.
_17curl --request POST \_17 --url https://api-partner.spotify.com/ads/v3/ad_accounts/<AD_ACCOUNT_ID>/ads \_17 --header 'Authorization: Bearer <ACCESS_TOKEN>' \_17 --header 'Content-Type: application/json' \_17 --data '{_17 "advertiser_name": "My Advertiser",_17 "assets": {_17 "asset_id": "<AUDIO_OR_VIDEO_ASSET_ID>",_17 "companion_asset_id": "<IMAGE_ASSET_ID>"_17 },_17 "call_to_action": {_17 "clickthrough_url": "https://www.spotify.com"_17 },_17 "name": "My Test Ad",_17 "tagline": "Music for everyone",_17 "ad_set_id": "<AD_SET_ID>"_17}'
Upon success, the API will return an ID for the newly created ad.
TIP: If you want to ensure your ad is not trafficked while you are still finalizing details, you can set the "delivery" to "OFF" until you are ready to have it go live.
Congratulations on creating your first full campaign! Once your campaign has been approved through the review process and goes live, you can track its performance using the Get Aggregate Report by Ad Account Id endpoint endpoint.
Reporting
Overview
The Reporting API allows advertisers to access real-time performance data for campaigns created via Ads Manager UI or via third party platforms integrated with Spotify Campaign Management API based on custom queries. You can find definitions of the available metrics (aka “fields”) in the Metrics Glossary section.
Eligibility Criteria
As of November 2022, the Reporting API is generally available ("GA") and no longer requires a manual allowlisting process to gain access. As soon as you have set up your application, your client ID will be able to access these endpoints automatically.
Please note that the Reporting API is only available for advertisers with a Spotify Ads Manager account.
Differences from the UI (Reporting)
Metric | Spotify Ads Manager UI | Spotify Ads API |
---|---|---|
Budgets and Spend | “Budget Spent” metric (available at the ad set level only) will never exceed the budget amount set by the advertiser – overdelivery is only reflected in the ‘Pacing’ column | SPEND field is not capped based on budget set by advertiser - in the event of overdelivery, SPEND may exceed the budget amount set by the advertiser but advertisers will only be billed up to their budget amount |
Metrics Glossary
This section includes definitions for all of the campaign metrics (referred to as fields
) that are available via the Reports endpoints.
Campaign Performance Metrics
These metrics provide the information you need to manage and optimize your campaigns efficiently and in real-time.
Metric/Field | Definition |
---|---|
Clicks ("CLICKS" ) | The number of impressions in which your ad was clicked (#) |
Completes (“COMPLETES” ) | The number of ads served that was played to the end (#) |
Completion Rate (“COMPLETION_RATE” ) | The percentage of ads played to completion(%) |
Click Through Rate (“CTR” ) | The percentage of ads that were clicked (%) |
Downloaded Impressions ("OFF_SPOTIFY_IMPRESSIONS" ) | The number of times an ad has been downloaded (#) |
Effective Cost per Click (“E_CPC” ) | The average cost per click if this campaign were billed on clicks -- NOTE: all campaigns are currently billed on cost per 1000 impressions |
Effective Cost per Completed Listen (“E_CPCL” ) | The average cost per 1,000 completed listens - NOTE: Applies to active audio/CPCL campaigns only |
Effective Cost per Mille (“E_CPM” ) | The average cost per 1,000 impressions |
First Quartiles (“FIRST_QUARTILES” ) | The number of users who listened or viewed 25% of the ad's total length (#) |
Frequency of Ads Served(“FREQUENCY” ) | The average number of times each person heard or viewed your ad (#) |
Impressions("IMPRESSIONS" ) | The number of times an ad has been served (#) |
Midpoints (“MIDPOINTS” ) | The number of users for which the ad played to the midpoint of the ads total length (#) |
Paid Listens (“PAID_LISTENS” ) | The number of listens for a CPCL campaign where a user did NOT skip the ad -- NOTE: Applies to active audio/CPCL campaigns only |
Frequency of Paid Listens (“PAID_LISTENS_FREQUENCY” ) | The average frequency for listens on a CPCL campaign -- NOTE: Applies to CPCL campaigns only |
Reach of Paid Listens (“PAID_LISTENS_REACH” ) | The number of unique users who had a paid listen for this CPCL campaign -- NOTE: Applies to active audio/CPCL campaigns only |
Reach of Ads Served (“REACH” ) | The number of unique users who received your ad (#) |
Skips("SKIPS" ) | The number of times a user skips an ad -- NOTE: Skippable ads are currently supported in AU only (#) |
Amount Spent ("SPEND" ) | The total amount spent in this campaign (#) |
Starts (“STARTS” ) | The number of times a user starts hearing/viewing your ad (#) |
Streamed Impressions ("STREAMED_IMPRESSIONS" ) | The number of times an ad has been streamed (#) |
Third Quartiles (“THIRD_QUARTILES” ) | The number of users who listened or viewed 75% of the ad's total length (#) |
Unmutes ("UNMUTES" ) | The number of times a user unmutes an ad (#) |
Video Expands ("VIDEO_EXPANDS" ) | The number of times someone tapped your ad to expand it -- NOTE: Only available for campaigns with the video views objective (#) |
Video Expand Rate ("VIDEO_EXPAND_RATE" ) | The number ad expands divided by the number of impressions -- NOTE: Only available for campaigns with the video views objective (%) |
Video Views ("VIDEO_VIEWS" ) | The number of times your video played for at least 3 seconds -- NOTE: Only available for campaigns with the video views objective (#) |
Streaming Conversion Metrics
Available only for campaigns using artist promotion or the streams objective. These metrics show you how listeners are responding to your ad so that you can understand how advertising impacts the listener journey on Spotify.
Metric/Field | Definition |
---|---|
Average Streams per Listener (“STREAMS_PER_USER” ) | The average number of times each listener streamed your content after seeing or hearing your ad. (#) |
Average Streams per New Listener (“STREAMS_PER_NEW_LISTENER” ) | The average number of times each new listener streamed your content after seeing or hearing your ad. (#) |
Intent Rate (“INTENT_RATE” ) | Note: Intent Rate has been deprecated and will be removed from v4. The percentage of listeners who took actions showing intent to stream your content again in the future. Actions include saving your content (by tapping the + icon or “save”) or adding it to a playlist.(%) |
Listener Conversion Rate (“CONVERSION_RATE” ) | The percentage of listeners who streamed your content after seeing or hearing your ad. (%) |
Listeners(“LISTENERS” ) | The number of unique Spotify users who streamed at least 30 seconds of the promoted content within 14 days of seeing or hearing your ad. (#) |
New Listener Streams ("NEW_LISTENER_STREAMS" ) | The number of streams from new listeners who heard or saw your ad. (#) |
New Listeners (“NEW_LISTENERS” ) | The number of listeners who had not streamed your content in the 28 days before seeing or hearing your ad. (#) |
New Listeners Conversion Rate (“NEW_LISTENER_CONVERSION_RATE” ) | The percentage of new listeners who streamed your content after seeing or hearing your ad. (%) |
Streams ("STREAMS" ) | The number of times listeners streamed your content for at least 30 seconds within 14 days of seeing or hearing your ads. (#) |
Conversion Measurement
Description: We've updated our attribution methodology with improved data resolution, which helps us provide a deterministic understanding of the customers who take action after seeing or hearing an ad on Spotify. The following information is applicable to campaigns with a start date of Dec 3, 2024 or earlier. Learn more about the updated attribution methodology
Metric/Field | Definition |
---|---|
Page Views ("PAGE_VIEWS" ) | The total number of page views attributed to your ads within a 30-day window. Page views are counted when a webpage loads in the browser based on information received from your data sources connected to Spotify. |
Leads ("LEADS" ) | The number of lead events attributed to your ads within a 30-day window. Lead events are defined by the user when setting up the data source and connecting it to Spotify. |
Adds to Cart ("ADD_TO_CART" ) | The number of add to cart events attributed to your ads within a 30-day window. Add to cart events are defined by the user when setting up the data source and connecting it to Spotify. |
Purchases ("PURCHASES" ) | The number of purchase events attributed to your ads within a 30-day window. Purchase events are defined by the user when setting up the data source and connecting it to Spotify. |
Attributed Revenue ("REVENUE" ) | The total amount of revenue attributed from purchase or lead events based on information received from data sources connected to Spotify. Revenue tracking events must include currency and value parameters. |
Average Order Value (AOV) ("AVERAGE_ORDER_VALUE" ) | The average value per transaction made by a customer based on attributed revenue and the count of purchase and lead events received from data sources connected to Spotify. To calculate this metric, data sources must be sending revenue tracking events, like purchases or leads, including value and currency parameters. |
Return on Ad Spend (ROAS) ("RETURN_ON_AD_SPEND" ) | The total return on ad spend (ROAS) from attributed purchases. This is based on the value of purchase or lead events received from data sources connected to Spotify. Data sources must be passing revenue tracking events, like purchases or leads, with value and currency parameters. |
Customer Acquisition Cost (CAC) ("CUSTOMER_ACQUISITION_COST" ) | The cost of acquiring a new customer, calculated by dividing campaign spend by the number of purchases or leads attributed to Spotify-connected data sources. Data sources must be passing revenue tracking events, like purchases or leads, with value and currency parameters. |
Cost per Lead ("COST_PER_LEAD" ) | The cost of acquiring a lead, calculated by dividing campaign spend by the number of leads attributed to information received by Spotify-connected data sources. |
Start Checkouts ("START_CHECKOUT" ) | The number of start checkout events attributed to your ads within a 30-day window. Start checkout events are defined by the user when setting up the data source and connecting it to Spotify. |
Product Views ("PRODUCTS" ) | The number of product view events attributed to your ads within a 30-day window. Product view events are defined by the advertiser when setting up the data source and connecting it to Spotify. |
Sign-ups ("SIGN_UPS" ) | The number of sign-up events attributed to your ads within a 30-day window. Sign-up events are defined by the user when setting up the data source and connecting it to Spotify. |
Custom Event 1 ("CUSTOM_EVENT_1" ) | The number of custom events attributed to your ads within a 30-day window. Custom events are defined by the user when setting up and connecting the data source to Spotify and can't be renamed. |
Custom Event 2 ("CUSTOM_EVENT_2" ) | The number of custom events attributed to your ads within a 30-day window. Custom events are defined by the user when setting up and connecting the data source to Spotify and can't be renamed. |
Custom Event 3 ("CUSTOM_EVENT_3" ) | The number of custom events attributed to your ads within a 30-day window. Custom events are defined by the user when setting up and connecting the data source to Spotify and can't be renamed. |
Custom Event 4 ("CUSTOM_EVENT_4" ) | The number of custom events attributed to your ads within a 30-day window. Custom events are defined by the user when setting up and connecting the data source to Spotify and can't be renamed. |
Custom Event 5 ("CUSTOM_EVENT_5" ) | The number of custom events attributed to your ads within a 30-day window. Custom events are defined by the user when setting up and connecting the data source to Spotify and can't be renamed. |
Legacy Metrics
Description: Legacy metrics are metrics that are being sunsetted or no longer supported by Spotify Ads Manager. They'll only be used for historical reporting purposes. All legacy metrics will be removed from v4 and no longer supported in the Ads API.
Metric/Field | Definition |
---|---|
Modeled Add to Cart (“MODELED_ADD_TO_CART” ) | The number of attributed add-to-cart events by modeled (not IP-matched) households (#) |
Modeled Leads (“MODELED_LEAD” ) | The number of attributed add-to-cart events by modeled (not IP-matched) households (#) |
Modeled Page Views (“MODELED_PAGE_VIEW” ) | The number of attributed website page views by modeled (not IP-matched) households (#) |
Modeled Purchases (“MODELED_PURCHASE” ) | The number of attributed purchase events by modeled (not IP-matched) households (#) |
Unmodeled Add to Cart (“UNMODELED_ADD_TO_CART” ) | The number of attributed add-to-cart events by IP-matched households (#) |
Unmodeled Leads (“UNMODELED_LEAD” ) | The number of attributed add-to-cart events by IP-matched households (#) |
Unmodeled Page Views (“UNMODELED_PAGE_VIEW” ) | The number of attributed website page views by IP-matched households (#) |
Unmodeled Purchases (“UNMODELED_PURCHASE” ) | The number of attributed purchase events by IP-matched households (#) |
App Conversion Metrics
These metrics track the actions users take with your app after interacting with your ad, helping you to understand how your advertising influences behavior associated with your app.
Metric/Field | Definition |
---|---|
App Installs (AppsFlyer) (“APPSFLYER_APP_INSTALLS” ) | An attributed app install is counted when the downloaded app is opened. This data is provided to Spotify by your mobile measurement provider. (#) |
App Installs (Kochava) (“KOCHAVA_APP_INSTALLS” ) | An attributed app install is counted when the downloaded app is opened. This data is provided to Spotify by your mobile measurement provider. (#) |
SKAdNetwork App Installs (“SKAD_APP_INSTALLS” ) | An attributed app install is counted when the downloaded app is opened. This data is provided to Spotify by your mobile measurement provider. (#) |