-
-
Qloo’s picks vs a size-only plan in the same radius
-
Proof: tested ranking vs biggest cities by tour size
-
The Without Qloo view: biggest cities within ~600 mi
-
For promoters: Burlington’s audience, not yet played
-
Venues ranked by audience fit, with pitch drafts
-
Whitespace Atlas across 204 real touring artists
-
For promoters: live Qloo artists for Duluth, sized to the room
-
Hero: the animated Pert Near Sandstone route
-
Full agent log: Qloo calls, model decisions, server checks
-
204 sealed 2027 predictions, hash re-checked in the browser
-
Why each city counts: size rank, taste, tour traffic
Sleeper Markets matches artists and cities from both sides of the market. Bands ask "where should I play?"; promoters ask "who should play my city?". Both answers come from Qloo's taste map, and the ranking behind them was tested against real tours before we built on it.
Who it's for: a band without a booking agent choosing its next 8 cities, and a 300-3,000-capacity room trying to fill a weeknight with an act its city already listens to.
Tell the agent about your band and it plans a tour from Qloo's taste map. For Pert Near Sandstone, a small Minneapolis string band, it picks Duluth, Sioux Falls and Green Bay where a size-only plan within the same ~600-mile radius of Minneapolis would pick Wichita, Kansas City and Detroit.
Is that better than "just play the biggest cities"? We pre-registered the test at 8 stops and scored 66 held-out artists once: 74% of our picks vs 70% of the biggest-city picks were cities the artists actually played (28 artists better, 16 worse, 22 tied). With the weights frozen, 42 new artists' 2026 tours gave 64% vs 58% (22 better, 9 worse).
For tours of 6 stops or fewer the biggest cities win, and the app tells you so.
Inspiration
A band with no booking agent has one hard question before its first run: which cities? Streaming dashboards show where your current listeners are, which is close to nothing when you're new. So everyone pitches the same big cities.
Qloo knows something else: how much people in each area care about your kind of music. It's tempting to say taste beats population. Before telling a band to spend a weeknight and a tank of gas on that, we wanted to know if it's true. So we tested it on real tours and built the agent around what the test said.
What it does
- An agent with a live log. Describe your act in plain English. You see every Qloo call, model decision and server check as it happens. It finds you in Qloo, asks you to confirm it's really you (or uses 2-3 reference artists you confirm), and plans 3-12 stops. Small acts get a drivable regional run.
- Qloo vs size-only, on one map. Flip the route map to Without Qloo to see the biggest cities in the same radius and the exact cities Qloo swapped in. Compare complete tours shows both plans side by side.
- Whitespace and the Atlas. Each pick shows a tour-traffic count: how many of 246 tracked touring artists (every artist with a 2024-26 Wikipedia tour table) stopped there. Strong taste with few big tours is flagged as whitespace. Duluth: 0 of 246. Detroit: 147. The Whitespace Atlas applies this to all 204 artists from our tests (the ones matched in Qloo). It is display only and not part of the ranking.
- Venues, pitches, dossier. Live-music venues Qloo matches to your audience, an editable pitch email for each one (guards block invented numbers and claims), and a per-city date dossier: opener ideas no bigger than you, the bars and restaurants your crowd likes, brands, and audience demographics.
- A dated itinerary. Hold dates, estimated drive hours, days off, and a .ics calendar export.
- For promoters: who should play your city? Pick a city and see the tracked artists whose audience Qloo ranks in the top 10% there, split into "hasn't played here" (the booking opportunity) and "already plays here" (a proven draw). For Burlington, VT: Noah Kahan, Phoebe Bridgers, Lucy Dacus and Japanese Breakfast are all top 1-3% taste there, and none stopped there on their 2024-26 tours.
- Live from Qloo, sized to your room. A live button asks Qloo directly (
signal.location.query) for more artists with audience there; a "Your room" setting caps it by Qloo popularity (a proxy for draw, not a capacity), so Duluth returns local acts like Trampled by Turtles and Dessa (and, at club size, Charlie Parr and Bad Bad Hats), and every artist links to a tour plan that includes the city. Today the promoter lists cover the 204 big touring artists from our tests (mid-size acts are next), and they are display only, not a forecast. - Refusal when the evidence is thin. If your references point to different audiences, it says "No recommendation justified" and picks no cities. You can plan from one reference, or open an exploratory plan that is labelled as one.
- Spanish too. Write to the agent in Spanish and it plans and answers in Spanish; the server's notes and guards follow the same language.
Comedians work too: the agent uses Qloo people tagged as comedians and comedy clubs instead of music venues, with an explicit note that the ranking was never tested on comedy tours.
How we use Qloo
All calls run server-side against the Qloo API:
/search(urn:entity:artist, orurn:entity:personfor comedians): find the act. Nothing is mapped until a human confirms it, because Qloo sometimes returns a different artist./v2/insightsfilter.type=urn:heatmap(signal.interests.entities,filter.location.query=United States): the taste map. We aggregate geohash cells into 103 US cities and use it for the ranking, agreement between references, and evidence and stability checks./v2/insightsurn:entity:placewithfilter.tags=...live_music_venue(or...comedy_club) andfeature.explainability=true: venues ranked by audience fit, plus "Why these venues?", which shows which reference drove each match./v2/insightsurn:entity:artist(orurn:entity:person): reference suggestions for acts Qloo doesn't know yet, and opener ideas per city (signal.location.query,filter.popularity.max)./v2/insightsurn:entity:artistwithsignal.location.query=<city>: the promoter view's live "artists with audience here" list./v2/insightsurn:entity:place(bar/restaurant/cafe tags,filter.exclude.tags),urn:entity:brandandurn:demographics, plus/entities: the date dossier, and reference popularity for the opener cap.
We read the docs closely. popularity is an artist's percentile among entities in an area. It is not population. Our first version got this wrong. We fixed every label and added tests that block size claims built on it.
Why it's an agent
The LLM (Claude Haiku 5.5 via OpenRouter) makes the judgment calls. It interprets the request, chooses cities from the tour-tested ranking when you state a preference ("something in Texas"), applies natural-language edits, and writes the summary and pitches. Each decision is structured output that the server validates.
Deterministic code does everything else: the Qloo calls, the ranking, routing, distances, and guards. The guards reject cities outside the ranking, invented numbers and size claims, and fall back to a server-verified version with a visible note. With no stated preference, the server keeps the tested order. Identity is confirmed by the human.
We chose this split after a free tool-calling loop passed only 7 of 16 scenarios. The model can shape the plan, but it can't invent a city. In our latest 20-conversation regression (30 Oct) the agent passed 20/20 with 0 invented cities. Across nine full runs on 29-30 Oct it passed 19-20 of 20.
How we built it / proof
Next.js and TypeScript on Vercel, with Qloo and the LLM called only from the server. The ranking is 0.7 x percentile(Qloo affinity) + 0.3 x percentile(city population). Affinity comes from the median heatmap cell within 0.5 deg of each city, and a test checks that the app's ranking is identical to the backtested one.
The backtest. We took 162 artists with 2024-25 US tours on Wikipedia, tuned on 96, froze the weights in a commit, and scored 66 held-out artists once. Qloo taste alone lost to the biggest cities (57% vs 70% at 8 stops). Taste plus size won at the pre-registered 8 stops. In exploratory runs with the same weights it also led at every size from 7 to 12, and it lost at 6 or fewer.
The replication. We committed a second protocol before reading any 2026 tour. Then we scored the frozen ranking once on 42 artists it had never seen. Verdict: confirmed.
The sealed predictions. We sealed the 12 predicted cities for 204 artists' next US tours with a SHA-256 hash (04c0352d...). The scoring rule was written first. The /proof page re-checks the hash in your browser.
Where we differ. A single accuracy number from one train/test split is easy to inflate. We pre-registered the rule, tested it on held-out artists, replicated it on 2026 tours with frozen weights, and sealed 204 predictions for 2027 that anyone can re-check. We also publish where we lose: Qloo taste alone, and short tours.
Challenges we ran into
- Our first, smaller backtest went against Qloo rankings, and so did our original "hidden markets" idea. We published it, ran a bigger pre-registered test, and rebuilt the planner around the method that won.
- Qloo's locality heatmap boundary returned errors, so we aggregate geohash cells into cities ourselves.
- Guards can be wrong too. One rejected perfectly good summaries. We found it by probing the live demo and added a regression test.
- Small towns have thin venue coverage. We say so instead of padding the list.
Accomplishments that we're proud of
- A ranking chosen by a pre-registered test, replicated out of sample, with a public forward test.
- An agent that knows when to say "the data doesn't justify this".
- A real path for bands Qloo doesn't know yet, using Qloo's own artist associations to suggest peers.
- Free, no login, and works on a phone.
What we learned
The most useful thing a planner can tell you is how much to trust its answer. "Taste beats population" was only true once we measured where and how much. Put the model where judgment matters, keep the numbers deterministic, and publish the results that make you look bad.
What's next for Sleeper Markets
- Test on emerging acts using venue calendars, not just Wikipedia tours.
- Score the sealed 2027 predictions once at least 15 qualifying tours exist.
- Canada and Mexico.
- A roster mode for booking agents, and two-sided matching: send a promoter's "who should play here" list straight into the artist's tour plan.
Testing instructions
No login or setup is needed.
- Open https://sleeper-markets.vercel.app and press "Pert Near Sandstone - Try an example". It takes one click and the example act is confirmed for you. A recorded replay of an earlier live run may be served. If you type your own act, it runs live and you confirm the artist yourself.
- On the answer's map, flip to Without Qloo. Then open Compare complete tours, and set Stops per tour to 5 to see the app say the big cities win at that size.
- Scroll down for the manual planner: pick artists and cities yourself, with no LLM involved.
- https://sleeper-markets.vercel.app/proof shows the backtest for every tour size, any artist's real tour against each method, the 2026 replication, and the sealed-hash check.
- https://sleeper-markets.vercel.app/atlas shows the Whitespace Atlas for 204 artists.
- https://sleeper-markets.vercel.app/book?city=burlington-vt is the promoter view: pick a city, then press Ask Qloo live for more artists with audience there (try Duluth, and switch Your room between Club and Theater).
Code, protocols and per-artist results: https://github.com/Silentarcherjr/sleeper-markets
Built With
- axe-core
- claude
- gemini-tts
- leaflet.js
- next.js
- openrouter
- openstreetmap
- playwright
- qloo
- react
- typescript
- vercel
- vercel-ai-sdk
- vitest
- zod
Log in or sign up for Devpost to join the conversation.