Beta founding offer: lock in 50% off any plan for life, before the beta ends. Claim founding pricing →
Radio monitoring

Every spin, on every
station you watch

Point us at a radio stream and we listen around the clock, recognise each recording as it airs, and hand you a timestamped spin log with ISRC. This page covers what you can do with that, and how the engine underneath it actually works.

What you get

A permanent record of what actually went out on air

Register a station once. Everything below runs from that point on, with no audio to upload and nothing to install.

A spin log for every station you watch

Each recognised airing, timestamped, with the recording's ISRC, artists, release, and cross-platform IDs. It lives in your account and stays queryable for as long as you are a customer. It is not a feed that scrolls away.

Airplay reports over any date range

Ask for a window and get per-track spin counts with first and last play, alongside a row for every individual airing. Every row carries the ISRC, which is the field a play log is usually missing.

Alerts the moment a track airs

A signed webhook or a live event stream, delivered as the play is confirmed rather than on a polling interval. Stations dropping offline and recovering are events too, so you always know when a gap in the log is the station and not us.

Watch your own catalog across many stations
By request

The inverse setup: instead of matching one station against the whole catalog, you supply your own recordings and we watch for those specific tracks across a large fleet of stations. Because the reference set is small, this scales to far more stations for far less. You pay per station rather than per song, so a whole roster rides on one station list.

Who uses it

Four very different reasons to watch a station

Labels and distributors
Show that a record is actually being played, station by station, and see which markets picked it up before the statements arrive.
Artists and managers
Find out a song aired the day it aired, instead of discovering it in a royalty statement a quarter later.
Webcasters and radio operators
Turn your own output into a report of use. Your automation software exports artist and title; the monitor fills in the ISRC and label fields the societies actually ask for.
Rights administrators
Cross-check what a broadcaster reported against an independent recording of what went out on air.
How the engine works

Built for a station that never stops, not for a clip

Recognising one song from a clean twenty-second clip is a solved problem. Recognising every song on a live station, around the clock, through talkover, jingles, tempo shifts, and a stream that drops out twice a week, is a completely different problem. We built the engine for the second one. Here is what it does, in plain terms.

  1. 01

    A dedicated listener for every station

    Each station you monitor gets its own long-lived audio connection and its own isolated process. Radio streams misbehave constantly: they stall mid-song, they hand back expired URLs, they quietly serve silence for an hour without ever returning an error.

    Keeping every station in its own lane means a badly behaved one cannot slow down, block, or wedge any of the others.

  2. 02

    Overlapping listening windows

    The audio is not chopped into neat consecutive blocks. The engine analyses a rolling window that advances a few seconds at a time, so every moment of the broadcast is covered by several overlapping windows.

    Nothing can slip through a gap between windows, and a record that starts halfway through one is still caught by the next.

  3. 03

    Two recognition methods, running side by side

    Most services run a single fingerprinting method. We run two fundamentally different ones on every station.

    The first compares the spectral shape of the audio. It is fast and it shrugs off the heavy compression broadcast streams apply.

    The second builds warp-robust fingerprints and then geometrically aligns them against the reference, recovering the match even when the station has shifted the pitch or nudged the tempo. Playout systems do this constantly, to fit a track into a slot or tighten a segue, and it is exactly what defeats a single-method matcher.

    Running both means that where one is blind, the other is usually not.

  4. 04

    The engine learns each station

    Which method wins is not the same on a dance station as on a classical one. So when monitoring starts, both run while the engine tallies which one is actually landing matches on that specific stream.

    After that the stronger one leads, and the other keeps running underneath to fill in the moments the leader goes quiet. Each station also carries its own detection profile, and a controller re-tunes its sensitivity on an ongoing basis rather than leaving it on a value someone picked months ago.

  5. 05

    A hot set held in memory, per station

    Radio repeats itself. A few hundred records carry a station's rotation for weeks at a time. So each listener keeps the tracks it has recently confirmed in memory, seeded from that station's own history the moment it starts up, and checks those first.

    This is the single largest optimisation in the system. On a live station we measured a hit against the in-memory set resolving in roughly a millisecond, against about 2.7 seconds for a full index probe. It is what makes watching many stations at once affordable, and it means the engine gets faster on a station the longer it listens to it.

  6. 06

    Nothing reaches your log until it is confirmed

    One window agreeing with a reference is not evidence. Speech over a music bed, a jingle built from a sample, or the crossfade between two records can all make a single window look like a confident match.

    So a candidate has to be confirmed by several consecutive windows before it is written to your log, and a play is only closed out after the audio has disagreed for a sustained stretch.

    That is a deliberate trade. The per-window threshold is loose, which protects recall, and the confirmation requirement is what supplies the precision. It also means one airing lands as one entry in your log rather than as dozens of detection ticks.

  7. 07

    A fleet that repairs itself

    The monitors run as a fleet across multiple machines, each reconciling against a central record of what should be running. If a machine dies, the survivors adopt its stations.

    A watchdog catches a listener that has gone quiet without throwing an error, tears down its audio process, and restarts it on a widening backoff. A station that drops out at three in the morning is being retried, not sitting dead until someone notices in the morning. Streams that keep failing are recorded with the reason rather than failing silently.

  8. 08

    Your log does not live inside the engine

    The recognition engine keeps no history of its own. Every confirmed play is handed straight over to your account, which is the single source of truth for both history and now-playing.

    That separation is on purpose. An engine restart, a deploy, or a bad night on one monitor never costs you history, and your log keeps answering questions either way.

Why we built our own

A recognition API pointed at a station is not a monitoring engine

You can bolt a clip-recognition service onto a scheduled job and call it monitoring. It falls over on the parts that matter.

AspectRecognition API on a timerPurpose-built monitoring engine
The unit of workOne clip you send inA station held open continuously for months
MatchingA single fingerprinting methodTwo methods, picked per station, each covering the other
Pitch or tempo-shifted playoutUsually a missWarp-robust matching with geometric alignment
Avoiding false matchesA strict threshold, which costs recallMulti-window confirmation, which keeps recall
Repeat playsA full index lookup every single timePer-station memory, roughly a millisecond
A station going downYour problem to detectWatchdog, backoff retry, and an offline event
What you end up withA matchA spin log and an airplay report

To be straight about what is ours: the underlying fingerprinting techniques are established signal processing and we did not invent them. What we built is everything around them. The per-station listener, the two-method selection and cross-cover, the multi-window confirmation gate, the in-memory hot set, the self-healing fleet, and the reporting layer are all our own design, built for continuous broadcast rather than adapted from one-shot clip recognition.

The airplay report

Spin counts and every individual airing

One call covers all of your stations, or a single one. Each station carries its own summary (per-track spin counts with first and last play) alongside a detail log with a row per airing. Both carry the ISRC. Windows can span up to 92 days, and reading your own reports uses no API credits.

bash
# Every spin across all your stations, for a date range
curl "https://api.sonovault.now/v1/streams/report?from=2026-07-01&until=2026-08-01" \
-H "x-api-key: YOUR_API_KEY"
json
{
"report": {
"from": "2026-07-01",
"until": "2026-08-01",
"generated_at": "2026-08-01T09:00:00Z",
"scope": { "stream_id": null },
"streams": [
{
"id": "9f2c8e1a-...",
"name": "My Station",
"url": "https://stream.example.com/radio.mp3",
"summary": [
{
"track_id": 121217540,
"title": "One More Time",
"artist": "Daft Punk",
"isrc": "GBDUW0000054",
"play_count": 34,
"first_played_at": "2026-07-01T07:12:44Z",
"last_played_at": "2026-07-31T22:48:03Z"
}
],
"detail": [
{
"played_at": "2026-07-01T07:12:44Z",
"ended_at": "2026-07-01T07:18:04Z",
"duration_seconds": 320,
"track_id": 121217540,
"title": "One More Time",
"artist": "Daft Punk",
"isrc": "GBDUW0000054"
}
]
}
]
}
}

Play counts are counted per airing, never per detection tick, so a five-minute record that the engine confirmed forty times over its run counts exactly once. The stream monitoring reference covers registering a station, now-playing, webhooks, and the live feed, and the API docs have every route in full.

No code needed

Try it on a station in about a minute

Paste a stream URL into the dashboard and watch the now-playing track and the recognition history fill in. Same engine as the API, nothing to install, and you can stop monitoring with a click.

Pricing and data notes

Monitoring is billed at 29 euro per active station per month, on top of your API plan, and you are only billed while a station is actually being monitored. Reading your own logs and reports costs no API credits. Sonovault is not a PRO, a collecting society, or a filing agent, and is not affiliated with any of them. A spin log pairs our own detections with catalog metadata aggregated from third parties, which can be incomplete or wrong, so verify before any rights, royalty, or licensing use. You hold your own broadcast licenses. See pricing and the terms.
FAQ

Frequently asked questions

One-off recognition answers a single question about a clip you send: what is this? Monitoring is continuous, and the hard parts are different. It has to stay connected to a station for months, survive that station misbehaving, tell a real song apart from a jingle or a talkover, decide when a play started and ended, and never log the same airing twice. The two share the idea of an audio fingerprint and almost nothing else. Our one-off endpoint is documented separately on the audio recognition page.
Any plain HTTP, Icecast, or Shoutcast audio stream in mp3 or AAC, the kind you can paste into a media player and hear. That covers the overwhelming majority of internet radio, including broadcast stations that simulcast online. Give us the direct stream URL rather than the station's webpage. Streams behind a login, behind DRM, or served only over HLS or DASH are not supported today.
Usually, yes. That is one of the main reasons we run a second recognition method rather than one. It builds fingerprints designed to survive time and pitch warping, then geometrically aligns them against the reference, so a record that has been pitched up or nudged faster to fit a slot still resolves to the right recording. A single-method matcher typically misses these outright.
Detection lags real time by roughly the length of an analysis window plus the confirmation step, so typically under a minute after the track starts. Every entry also records the timestamp the play actually began, so your log stays accurate regardless of how often you check it. If you want the play the instant it is confirmed, use a webhook or the live event stream rather than polling.
The monitor notices, emits a stream.offline event with a reason where it has one, and starts retrying on a widening backoff. When the station comes back it emits stream.online and monitoring resumes on its own. You can also switch on outage emails. Nothing needs a manual restart, and because the offline period is recorded you can tell the difference between a station that played nothing and a station that was not reachable.
Yes, and it is a different product to per-station monitoring. You supply your own recordings, and we watch for those specific tracks across a much larger fleet of stations. Because the reference set is your catalog rather than tens of millions of tracks, it fits in memory on each monitor, which makes a large fleet dramatically cheaper to run and dramatically cheaper to buy. You pay per station rather than per song, so an entire roster can ride on one station list. It is set up by request rather than self-serve, so get in touch and we will talk through the fit and price it.
You can use it as the evidence base, and customers do. Be clear about what it is, though. Sonovault is not a PRO, a collecting society, or a filing agent, and we are not affiliated with any of them. A report combines our detections with catalog metadata aggregated from third parties, so it can be incomplete or wrong. Check it before you file anything, and you hold your own broadcast licenses either way.
No. Signed-in users get a stream monitoring tool in the dashboard: paste a stream URL, watch the now-playing track and the recognition history build up, and stop monitoring with a click. It runs exactly the same engine as the API. The API is there for when you want the data inside your own systems.

Start watching a station

Create a free account and register your first stream from the dashboard. If you want to watch your own catalog across a large fleet of stations instead, that is the private beta, so talk to us first.