Methodology
How TrackPodcasts detects podcast ads
Every sponsorship on this site is detected from the audio of an episode we transcribed, and every one comes with the verbatim read and a timestamp so you can go and listen. This page explains what that process does, what it labels, and what it cannot see.
What we transcribe
We run speech-to-text over podcast episodes around the clock and store the transcript as a list of timed segments. Detection works on those segments, never on show notes, feeds or media kits.
We do not transcribe every episode of every show. The transcribed set is a subset of the catalogue, and it skews recent, because new episodes are prioritised as they publish. A brand becomes visible to us only once it appears in an episode we have transcribed, so a brand page grows as more of its shows are processed.
For what the product does with this data, see TrackPodcasts for advertisers.
How an ad read is detected
Detection runs in two stages over each transcript.
Rules first. A deterministic pass looks for the signals that mark a paid read: cue phrases (“brought to you by”, “this episode is sponsored by”), spoken vanity URLs (“squarespace.com/show”) and promo codes (“use code X”). These are not equal. A cue phrase says an ad is happening but appears in plenty of ordinary speech; a vanity URL or a show-specific code can only exist because the brand negotiated with that show. So a placement is recorded when a known brand, or the brand named directly by a sponsor phrase, appears in the same short window as those signals. Brand names that are also ordinary words (“Away”, “Target”, “Public”) are accepted only when the brand’s own domain is spoken, because a cue phrase nearby is not enough to prove which word was meant. A bare “code” followed by an everyday word is rejected unless the word looks like a code or echoes the show’s name.
Then a model, on the candidates only. A language model reviews each candidate window the rules found. It never sees a whole transcript. It adds the offer in plain words (“10% off your first order”), catches promo codes phrased in ways the rules miss (“my name at checkout”), and judges whether the passage is actually an advertisement rather than a host mentioning a product they use.
Confidence and source. Every placement carries a confidence score that reflects which signals fired. The model raises it when it agrees the passage is an ad and lowers it when it does not. Rule-derived and model-derived rows are stored with their source so the precision of each can be measured separately.
The receipt. Each placement stores the verbatim transcript of the read, anchored on the segment that names the brand, along with its start and end time in seconds. Position in the episode (pre-roll, mid-roll, post-roll) is derived from where the read sits relative to the episode’s length, not guessed. The quote and the timestamp are what we ask you to trust; the timestamp links to that moment in the episode so you can listen to it yourself.
Host-read vs network-inserted
A host-read ad is baked into the audio and identical for every listener. It reflects a deal with that specific show. A network-inserted ad is stitched into the file per download by the hosting platform, so different listeners can hear different sponsors on the same episode, and the brand did not necessarily choose that show.
We label a read host-read when it carries a token that could only come from a deal with that show: a vanity URL path, or a promo code that echoes the show’s own name (“code RYAN” on a show hosted by Ryan). We label a read a network ad only when the show is hosted on a platform capable of dynamic insertion, the read carries no show-specific token, and it sits where a stitched slot would.
Anything else is shown as Unclassified. We do not guess. A wrong “network” label would understate a real endorsement, and a wrong “host-read” label would invent one, so the label is only applied when the evidence is in the audio.
Observed-at and dynamic insertion
Every placement carries the date we observed it. This is not decorative. With dynamic insertion the audio file is assembled per download, so the read we transcribed is one instance served at one moment to one listener: us. Another listener, on another day, can receive a different sponsor on the same episode.
A placement is therefore true as of its observed date. It is not a claim that the brand is on the show today, and the absence of a placement is not a claim that the brand is absent.
Paid placements vs organic mentions
A placement is a passage with evidence of payment, as described above. An organic mention is the brand named without that evidence: a host recommending something, a news item, a product named in passing. The two are stored separately, shown separately on every page, and their counts are never added together. Blending them is the one error that would make this data useless to an advertiser.
Mentions are held to a lower bar than placements, because nobody says “spotify.com” while chatting about Spotify. They pass through extra filters that reject the wrong entity: a person’s surname, a stadium carrying a brand’s naming rights, an ordinary word. Each mention records which alias matched, so an ambiguous hit can be audited.
Sentiment is classified on mentions only, from the sentence around the mention, and neutral is a first-class answer: most mentions of any brand are factual. Ad reads are never scored, because paid copy is positive by construction and scoring it would make every advertiser look loved. A brand’s score is published only once it has enough opinionated mentions to support one; until then the page says so instead of showing a number.
Brand resolution
Detection matches against a brand dictionary. It starts from a seeded list of known podcast advertisers with their domains and categories, and grows when a sponsor phrase in the audio names a brand we did not have. Each brand has aliases, including its spoken domain, so “AG1”, “Athletic Greens” and “drinkag1.com” resolve to one brand rather than three.
A name discovered in the audio is matched to existing brands first, so a variant like “Delete Me” becomes an alias of DeleteMe instead of a duplicate that splits its statistics. A new brand is created only when the name resolves to nothing we already have.
Brands whose name is also an ordinary word are flagged ambiguous and are recorded only when their domain is spoken. Automatically discovered names that are ambiguous, have no domain and are not on the seeded list are excluded from rankings and the brand index until a domain is attached or the name is verified. Nothing is deleted; a brand list topped by common English words would be worse than a shorter, honest one.
Coverage and honesty
We see what was in the episodes we have transcribed, at the moment we transcribed them. We cannot see episodes we have not transcribed; ads served to other listeners by dynamic insertion; reads where the brand is never named, or its name is mistranscribed; or anything outside the audio, such as rate cards, media kits or spend. We do not estimate spend. Every figure on this site is a count of detections, not a measurement of the market.
Before relying on the data, check a brand you know. Brand pages are free to view without an account, including real ad reads with their timestamps.
Corrections
If a placement is wrong, whether it names the wrong brand, is not an ad, or is attributed to the wrong show, email [email protected] with the link to the read. Every read on a brand page has a “Copy link” action for exactly this. We review each report against the audio and correct the record.