Method
Cheapest true number first.
Catalogs and per-user dashboards are not in one API. Public charts are estimated. A count is artist-verified only after the artist attests the dashboard on dots.id and a signed-in capture lands.
01 · Free
Direct HTML
Static public charts (kworb Spotify totals, public YouTube views).
No Firecrawl credit. No vision model. Regex over HTML is enough.
02 · 1 credit / page
Firecrawl markdown
A public page needs JavaScript to render.
Markdown scrape only. JSON extract (+4 credits) is skipped when a parser can read the page.
03 · Free HTML first, then a snapshot of the public page
Public profile screenshots
Someone opens /artist and that catalog is not indexed yet.
Songdata goes to Spotify, Apple Music, YouTube, SoundCloud, and kworb — public pages only — and screenshots what is visible. No login. Dashboard vaults stay for attested owners.
04 · Vercel Sandbox, attested sessions only
Sandbox Chrome vault
The artist attested a dashboard and signed into it in Songdata’s remote Chrome.
Spotify for Artists and Apple Music for Artists do not publish catalog totals. The session is the data. No laptop extension.
05 · ~$0.06 / 1k images
Moondream OCR
A dashboard screenshot exists.
Ask only for the integer. Do not send analytics UI to a frontier VLM.
Why not a browser extension?
An extension on the artist’s laptop means every artist installs Songdata, keeps it updated, and we scrape from machines we do not control. Loading that same extension into the sandbox Chrome does not log anyone in, and headless Chromium is a weak MV3 host.
The session is the Chromium profile. The artist signs in (including 2FA) in a live view of the sandbox browser. We snapshot that disk. Cron bursts the snapshot and runs a skill per service — clicks we own, then a screenshot, then Moondream.
YouTube is the exception: prefer Google OAuth (YouTube Analytics) when the channel owner connects. Browser vault is fallback.
Skills
- Spotify for Artists · sandbox profile · artists.spotify.com
- Apple Music for Artists · sandbox profile · artists.apple.com
- Amazon Music for Artists · sandbox profile · artists.amazon.com
- YouTube Music (Studio) · OAuth first · studio.youtube.com
- YouTube Studio · OAuth first · studio.youtube.com
- SoundCloud Insights · sandbox profile · soundcloud.com/you/stats
- Deezer for Artists · sandbox profile · www.deezer.com
- Tidal Artist Portal · sandbox profile · artist.tidal.com
Example cron (Spotify)
agent-browser --profile songdata-russ-spotify open https://artists.spotify.com # skill: if login wall, abort — vault session expired; artist must reconnect # skill: open Music → Songs # skill: search the track title # skill: open the song # skill: screenshot the streams figure agent-browser --profile songdata-russ-spotify screenshot captures/songdata-russ-spotify.png agent-browser --profile songdata-russ-spotify close # moondream: What is the integer lifetime stream count for this track? Reply with digits only.