---
title: "Get publisher advertising leaderboard"
method: GET
path: "/v1/podcasts/advertising/publishers/leaderboard"
tags: ["Podcast Advertising", "tier:premium"]
---

# Get publisher advertising leaderboard

`GET /v1/podcasts/advertising/publishers/leaderboard`

## Request

- Base URL: `https://api.particle.pro`
- URL: `https://api.particle.pro/v1/podcasts/advertising/publishers/leaderboard`
- Auth: one of:
  - API key in header `X-API-Key`
  - HTTP bearer

Ranks podcast publishers by an advertising activity metric across their entire catalog. ads_per_active_podcast is the monetization-density metric — small sub-networks (e.g. 'iHeartPodcasts and The Volume', 'Dan Patrick Network') typically rank far above broad catalogs on this dimension.

## Query parameters

- `limit` integer: Results per page
- `cursor` string: Opaque pagination cursor from previous response
- `metric` 'ad_count' | 'unique_sponsors' | 'podcast_reach' | 'episode_reach' | 'ads_per_active_podcast': Metric to rank publishers by. ads_per_active_podcast surfaces monetization density (small sub-networks often outrank big catalogs). Ranking reflects an all-time MV-fresh snapshot; this endpoint does not currently support time-window filters.
- `min_active_podcasts` integer: Only rank publishers with at least this many active podcasts (catalog podcasts that have run at least one detected ad). Guards ads_per_active_podcast and the other density-style metrics against tiny catalogs dominating the leaderboard — single-show publishers can otherwise rank #1 on ads_per_active_podcast purely on noise.

## Response `200`

OK

- PagePublisherAdvertisingLeaderboardEntry
  - `cursor` string: Pass to next request for more results
  - `data` PublisherAdvertisingLeaderboardEntry[], nullable, required: List of results
    - `ad_count` integer, required: Total ads across the publisher's catalog
    - `ads_per_active_podcast` number, double, required: Mean ad count across active podcasts — monetization density.
    - `coverage` PublisherAdvertisingCoverage, required
      - `active_coverage` number, double, required: active_podcasts / total_podcasts, clamped to [0, 1]. Treat as a confidence proxy for the rolled-up totals.
      - `active_podcasts` integer, required: Number of catalog podcasts that have at least one detected ad.
      - `total_podcasts` integer, required: Number of podcasts in the publisher's catalog (denormalized from podcast_publishers.podcast_count).
    - `episode_reach` integer, required: Distinct episodes with ads
    - `publisher` PodcastPublisherCompact, required
      - `id` string, required: Publisher ID
      - `name` string, required: Publisher name
      - `slug` string: Human-readable slug identifier (e.g., 'goalhanger', 'iheartpodcasts'). When present, accepted in place of the ID anywhere a publisher reference is taken in the API. Occasionally absent on publishers whose name doesn't slugify (e.g., scripts not representable in ASCII URL slugs).
    - `rank` integer, required: Position in the leaderboard
    - `unique_sponsors` integer, required: Distinct sponsors across the catalog
  - `has_more` boolean, required: Whether more results exist

## Other responses

- `402`: Payment Required. Read error_code. payment_required is the x402 path: either a keyless request being challenged — pay $0.04 in USDC per request (requirements in the PAYMENT-REQUIRED header) or send a pp_ API key — or a supplied payment that failed settlement (details in the PAYMENT-RESPONSE header; retry the same signature before signing a new one). See https://docs.particle.pro/x402. Any other code means the credential was accepted but does not cover this request (a plan or session gate such as premium_required or paid_plan_confirmation_required); its resolve says how to obtain access, and no payment header is sent.
- `default`: Error

---

[API](https://skmtc.dev/particle/apis/particle-api.md) · [All operations](https://skmtc.dev/particle/apis/particle-api/llms.txt) · [OpenAPI document](https://skmtc.dev/particle/apis/particle-api/revisions/416ba82ab9d7?raw)
