yala
← help

scanner + DSPs.

paste a track URL, get a list of every place that track lives. here’s how the scan actually works, what platforms we cover, and what to do when something doesn’t come back.

how scanning works.

when you paste a URL into the wizard (or hit scan now on an existing link), yala fans out a single source URL across two layers:

  • direct adapters — spotify, apple music, deezer, youtube, youtube music. these talk to the DSPs’ own APIs and return canonical IDs in ~200-400ms each. fastest + most accurate.
  • odesli aggregator — covers the long tail (bandcamp, soundcloud, anghami, audiomack, pandora, beatport, tidal, +25 more) via odesli.co. a single round-trip; we cache the result for an hour.

we run all adapters in parallel, then reconcile the results: when both odesli and a direct adapter return the same DSP, the direct adapter wins. when only odesli returns it, odesli wins. when one adapter returns not_found, that result is dropped.

what platforms we cover.

direct (sub-second, canonical): spotify, apple music, youtube, youtube music, deezer.

via odesli (sub-3-second): bandcamp, soundcloud, tidal, amazon music, pandora, anghami, napster, audiomack, boomplay, qobuz, beatport, jio saavn, gaana, itunes, playstore, +about 10 more — odesli’s coverage is constantly expanding.

URLs we won’t scan.

the scanner expects a track or album URL. artist URLs, channel URLs, user URLs, and playlist URLs (for the regular release scan) get rejected up front with an inline explanation. examples:

  • spotify artist URL open.spotify.com/artist/... → yala offers to convert it into a follow-me link instead.
  • youtube channel URL → ditto.
  • generic search URLs spotify.com/search/... — those are fan-side, not a release.

for playlists, use a playlist link type instead of a release.

rescanning later.

every link keeps its source URL. on the destinations tab, hit rescan to refresh — useful when:

  • you released originally to spotify only, then weeks later your distributor pushed it to apple music + bandcamp. rescan picks those up and adds them as new rows.
  • a DSP changed its canonical URL (rare, happens with apple music after they re-index). rescan refreshes the URL.
  • you manually removed a DSP a few weeks ago and want it back. rescan brings it back as long as the source still resolves there.

rescans preserve manual edits. if you edited the spotify URL by hand, rescan won’t overwrite it; if you added a custom row (like a patreon URL), rescan won’t delete it. the priority is always your edits beat the scanner.

adding services manually.

scanner missed something? click + add service on the destinations tab. you get two paths:

  • known platform — pick from spotify / apple music / etc., paste the URL. yala uses the standard branding and CTA copy.
  • other — paste any URL. yala uses the domain’s favicon and a generic “go” CTA. handy for patreon, your store, a youtube playlist, a newsletter, etc.

scanning via the API.

if you’d rather not use the wizard, the scan can be a single API call:

bash
curl -X POST https://api.yala.la/v1/scanner/preview \
  -H "authorization: Bearer yla_live_..." \
  -H "content-type: application/json" \
  -d '{
    "source": {
      "kind": "url",
      "value": "https://open.spotify.com/track/abc"
    }
  }'

the response is the same shape as the wizard preview: a list of destinations + the artwork URL + per-adapter counts. you can pass that directly into POST /v1/links as seedDestinations to create a link with the scan results pre-populated.

next upconditional redirectssend fans to different destinations based on territory, OS, device, or referrer. templates and a simulator included.