From spotify-ads-api
Quick performance overview of all active Spotify ad campaigns — impressions, spend, reach, clicks, and pacing at a glance.
npx claudepluginhub spotify/ads-agentic-toolsThis skill is limited to using the following tools:
Quick performance overview with metrics, spend, and pacing for active campaigns.
Monitors deployed URLs for regressions after deploys, merges, or upgrades by checking HTTP status, console errors, network failures, performance (LCP/CLS/INP), content, and API health.
Share bugs, ideas, or general feedback.
Quick performance overview with metrics, spend, and pacing for active campaigns.
.claude/spotify-ads-api.local.md for access_token, ad_account_id, auto_execute.https://api-partner.spotify.com/ads/v3/spotify-ads-api:configure first..claude-plugin/plugin.json to get the plugin version. Set SDK_HEADER="X-Spotify-Ads-Sdk: claude-code-plugin/$PLUGIN_VERSION" and include -H "$SDK_HEADER" on all API requests.<campaign_id> (UUID) → Campaign detail view for that specific campaigndetail → Extended overview with ad set breakdown for all campaignsExecute two API calls to build the dashboard:
curl -s -w "\nHTTP_STATUS:%{http_code}" -H "Authorization: Bearer $TOKEN" \
-H "$SDK_HEADER" \
"$BASE_URL/ad_accounts/$AD_ACCOUNT_ID/aggregate_reports?\
entity_type=CAMPAIGN&\
fields=IMPRESSIONS&fields=SPEND&fields=CLICKS&fields=REACH&fields=FREQUENCY&fields=CTR&fields=COMPLETES&\
granularity=LIFETIME&\
entity_status_type=CAMPAIGN&\
statuses=ACTIVE&\
limit=50"
curl -s -w "\nHTTP_STATUS:%{http_code}" -H "Authorization: Bearer $TOKEN" \
-H "$SDK_HEADER" \
"$BASE_URL/ad_accounts/$AD_ACCOUNT_ID/campaigns?limit=50&sort_direction=DESC"
=== Campaign Dashboard ===
Active campaigns: 3 | Total spend: $1,234.56
| Campaign | Impressions | Spend | Reach | Clicks | CTR | Frequency |
|------------------|-------------|----------|--------|--------|-------|-----------|
| Summer Promo | 156,234 | $450.00 | 42,100 | 1,234 | 0.79% | 1.10 |
| Q2 Brand | 89,456 | $225.50 | 28,200 | 567 | 0.63% | 1.14 |
| Podcast Launch | 45,000 | $112.30 | 15,800 | 289 | 0.64% | 1.02 |
aggregate_reports: Already in dollars — display directly as $X.XX (do NOT divide by 1,000,000)micro_amount from entity details (campaigns, ad sets): In micro-units — divide by 1,000,000 to get dollars156,234)0.79%)When budget info is available from campaign/ad set details:
$450 / $500 daily (90%)$2,100 / $5,000 lifetime (42%, 35% of flight elapsed)To calculate flight elapsed percentage:
elapsed_pct = (today - start_date) / (end_date - start_date) * 100
If pacing is significantly ahead or behind (spend % differs from elapsed % by more than 20 points), flag it:
If continuation_token is present in the response, note that more campaigns exist and suggest running again with pagination.
<campaign_id>)Drill into a specific campaign with ad set breakdown.
curl -s -w "\nHTTP_STATUS:%{http_code}" -H "Authorization: Bearer $TOKEN" \
-H "$SDK_HEADER" \
"$BASE_URL/ad_accounts/$AD_ACCOUNT_ID/campaigns/$CAMPAIGN_ID"
curl -s -w "\nHTTP_STATUS:%{http_code}" -H "Authorization: Bearer $TOKEN" \
-H "$SDK_HEADER" \
"$BASE_URL/ad_accounts/$AD_ACCOUNT_ID/aggregate_reports?\
entity_type=AD_SET&\
fields=IMPRESSIONS&fields=SPEND&fields=CLICKS&fields=REACH&fields=FREQUENCY&fields=COMPLETES&\
granularity=LIFETIME&\
entity_ids=$CAMPAIGN_ID&\
entity_ids_type=CAMPAIGN&\
include_parent_entity=true&\
limit=50"
curl -s -w "\nHTTP_STATUS:%{http_code}" -H "Authorization: Bearer $TOKEN" \
-H "$SDK_HEADER" \
"$BASE_URL/ad_accounts/$AD_ACCOUNT_ID/ad_sets?campaign_ids=$CAMPAIGN_ID&limit=50"
=== Summer Promo (REACH) ===
Status: ACTIVE | Created: 2026-02-15
| Ad Set | Format | Budget | Impressions | Spend | Reach | Clicks | Completes |
|------------------|--------|------------|-------------|---------|--------|--------|-----------|
| US 18-34 Audio | AUDIO | $75/day | 98,000 | $300.00 | 28,500 | 890 | 85,000 |
| US 25-54 Video | VIDEO | $50/day | 58,234 | $150.00 | 13,600 | 344 | 42,000 |
Apply the same formatting rules as the account overview (spend from reports is already in dollars; budget micro_amount from entity details must be divided by 1,000,000).
Show targeting summary for each ad set if available (geo, age range, platforms).
detail)Like the default account overview, but also breaks down each campaign into its ad sets.
Use the same calls as the account overview, plus:
curl -s -w "\nHTTP_STATUS:%{http_code}" -H "Authorization: Bearer $TOKEN" \
-H "$SDK_HEADER" \
"$BASE_URL/ad_accounts/$AD_ACCOUNT_ID/aggregate_reports?\
entity_type=AD_SET&\
fields=IMPRESSIONS&fields=SPEND&fields=CLICKS&fields=REACH&fields=FREQUENCY&fields=COMPLETES&\
granularity=LIFETIME&\
include_parent_entity=true&\
entity_status_type=AD_SET&\
statuses=ACTIVE&\
limit=50"
And:
curl -s -w "\nHTTP_STATUS:%{http_code}" -H "Authorization: Bearer $TOKEN" \
-H "$SDK_HEADER" \
"$BASE_URL/ad_accounts/$AD_ACCOUNT_ID/ad_sets?limit=50&sort_direction=DESC"
Group ad sets under their parent campaign:
=== Campaign Dashboard (Detailed) ===
Active campaigns: 2 | Total spend: $675.50
Summer Promo (REACH) — $450.00 spent
| Ad Set | Format | Impressions | Spend | Reach | Clicks |
|------------------|--------|-------------|---------|--------|--------|
| US 18-34 Audio | AUDIO | 98,000 | $300.00 | 28,500 | 890 |
| US 25-54 Video | VIDEO | 58,234 | $150.00 | 13,600 | 344 |
Q2 Brand (CLICKS) — $225.50 spent
| Ad Set | Format | Impressions | Spend | Reach | Clicks |
|------------------|--------|-------------|---------|--------|--------|
| US All Audio | AUDIO | 89,456 | $225.50 | 28,200 | 567 |
auto_execute is true, execute all API calls directly and display the dashboard.auto_execute is false, present the curl commands and ask for confirmation before executing.aggregate_reports are already in dollars — display directly. Budget micro_amount values from entity details (campaigns, ad sets) must be divided by 1,000,000. Never show raw micro-amounts to the user.