SonoVault is in open beta — signups are live. Get your free API key →
ResourcesMusic TrackingMonitor Your Stream URL to Auto-Build a SoundExchange Track List

Monitor Your Stream URL to Auto-Build a SoundExchange Track List

Point SonoVault at your Icecast or Shoutcast stream URL and it logs each track as it airs — with the ISRC SoundExchange needs — building your play list without exporting anything from your automation software.

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.

Billing is per stream, not per credit.Stream monitoring is €29 per active stream per month. It is open to any tier including free, but it needs a card on file so the per-stream subscription can be charged — it is billed separately from your API plan's credits.
Set it up
1

Register your stream

Send the stream URL and a name. You get back an id and a status; monitoring begins immediately.

TypeScriptregister.ts
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.

2

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.

GET/v1/streams/4021200 OK
{
  "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"
}
3

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.

GET/v1/streams/report?from=2026-06-01&until=2026-07-01200 OK
{
  "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
          }
        ]
      }
    ]
  }
}
4

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.

Census reporting means everyeligible performance. If a track isn't recognised on the stream, it still has to be reported — so reconcile the stream log against your scheduler's log rather than filing the stream log alone.

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.

Ready to build?

Free API key. No credit card. 1,000 requests to get started.

Get Free API Key
More in Music Tracking
Music TrackingFrom Automation Log to Report of Use: An End-to-End Enrichment Pipeline8 min readMusic TrackingA&R Workflow: Slack Alerts for Competitor Label Drops7 min read