A different starting point
Most SoundExchange enrichment starts with a file: you export a play log from your automation software and add the missing ISRC and label columns after the fact. Monitoring the stream flips that around. Point SonoVault at the stream URL your listeners already tune into, and it identifies each track as it airs and logs it with its ISRC — the field a Report of Use needs and your automation export almost never carries.
It is the better starting point in two cases: when your automation log is too thin to enrich (missing albums, mangled titles), or when you want an independent record of what actually went out over the air rather than what the scheduler intended to play.
How it works
You register a stream URL with POST /v1/streams. SonoVault connects to the stream and recognises tracks continuously (via the same Beatport and AcoustID matching that powers one-shot identify), and every recognised airing lands in a log you can read back — each entry carrying the recording's ISRC.
Register your stream
Send the stream URL and a name. You get back an id and a status; monitoring begins immediately.
const res = await fetch("https://api.sonovault.now/v1/streams", { method: "POST", headers: { "x-api-key": API_KEY, "Content-Type": "application/json", }, body: JSON.stringify({ url: "https://stream.example.com/live", name: "My Station", }), }); const { id, status } = await res.json(); console.log(`Monitoring stream ${id} (${status})`);
Prefer no code? Add the same stream from the Streams dashboard and read the now-playing and report views there.
Watch the now-playing log
GET /v1/streams/:id returns the current track; now_playing is nullduring ads, talk, or audio it can't place. GET /v1/streams/:id/history gives the running log of recognised airings.
{
"id": 4021,
"url": "https://stream.example.com/live",
"runtime_status": "running",
"now_playing": {
"track": {
"id": "315587019",
"title": "One More Time",
"isrc": "GBDUW0000059", // what SoundExchange wants
/* artists, releases[].label.name, duration, … */
},
"started_at": "2026-07-04T14:22:07Z"
},
"last_recognized_at": "2026-07-04T14:22:07Z"
}Pull the airplay report for your period
For reporting, don't scrape the history — pull the aggregated airplay report over your filing window (up to 92 days). It is grouped by stream, and every airing row carries its ISRC. Play counts are collapsed: one airing counts once, not once per detection tick.
{
"report": {
"from": "2026-06-01",
"until": "2026-07-01",
"scope": "account",
"streams": [
{
"id": 4021,
"name": "My Station",
"summary": [
{
"isrc": "GBDUW0000059",
"title": "One More Time",
"artist": "Daft Punk",
"play_count": 12 // one airing counts once
}
/* … one row per recording aired … */
],
"detail": [
{
"isrc": "GBDUW0000059",
"played_at": "2026-06-01T08:14:00Z",
"duration_seconds": 320
}
]
}
]
}
}Assemble and file the Report of Use
You now have title, artist, ISRC and play counts per recording — the core of a compliant line. For any recording where you need the album + label fallback instead of the ISRC, resolve it with GET /v1/tracks/isrc/:isrc or the Bulk Lookup tool, which returns the album title and marketing label. Then file through SoundExchange Licensee Direct.
Coverage, honestly
Recognition covers what lives in the Beatport and AcoustID space, which is broad but not everything. So treat the stream log as a way to build and augmentyour play list, not as a self-certifying census. In practice that means reconciling it against the play counts your automation software already produces, and filling any gaps with a lookup on the tracks it couldn't place.
For the field-by-field requirements and the census-vs-sample rules, start with what a Report of Use requires; for the file-based route from an automation export, see adding ISRCs and labels to a RadioBoss export. SonoVault supplies the ISRC, album and label data — filing specifics and thresholds live with SoundExchange.
Frequently asked questions
What kind of stream can I monitor?
Any public Icecast, Shoutcast, or plain HTTP audio stream URL — the same URL a listener would tune into. You register it once; SonoVault connects and identifies tracks continuously.
What does stream monitoring cost?
€29 per active stream per month, billed per stream rather than out of your API credits. It is open to any plan tier including free, but it needs a card on file so the per-stream subscription can be charged.
Does the airplay report include the ISRC?
Yes. Every airing in the report carries a representative ISRC for the recognised recording, alongside the play count and timestamps. ISWC and genre are deliberately not part of the report — for those, resolve the ISRC through the track endpoints.
Does this replace my automation log?
Treat it as a complement. It recognises what is in the Beatport and AcoustID space, so it is best used to build or augment your play log and to reconcile against the counts your automation software already produces — not as a guaranteed 100% census on its own.