-
-
Backtest on 282 real tours: 77.9% of its top 8 cities were played, vs 70.6% for the biggest cities
-
Booking kit: a CSV booking sheet and a pitch email per room, written only from Qloo numbers
-
Name an act, say musician or comedian, pick a region
-
The plan: Qloo's heatmap as a dot map, the route on top, and each stop's rooms to pitch (Prateek Kuhad, India)
-
Every stop: travel leg, rooms from Qloo's venue categories with affinity scores, and promo partners
-
The booking log: every Qloo call the agent makes, with what came back
-
Comedians too: Hasan Minhaj gets The Second City, Comedy Cellar and The Comedy Store, with an opener draw check
Inspiration
A label or a big promoter pays a data team to answer three questions before booking a tour: where do this act's fans actually live, which other acts share that audience, and which local places does that crowd already go to. An independent musician or comedian answers them with guesswork and follower counts, and books rooms in the wrong cities.
Qloo's taste graph holds exactly that picture, across music, places and people, and by geography. I wanted to put it in the hands of the act itself, as a booking agent that shows its working.
What it does
You name an act (your own, or one you sound like), say whether it's a musician or a comedian, and pick a region. The agent plans the tour one Qloo question at a time, every question appears in a live booking log with what came back, and the result is a tour you can actually book:
- Where the crowd is. Qloo's heatmap for the region (3,100 grid cells for India) is folded into cities of 300,000+ people, ranked by Qloo affinity for this crowd balanced with city size (tested below), and drawn as a dot map of Qloo's own data with the route on top.
- The route. The stops in travel order, drive or fly for each leg with distance and drive time, and a day plan with travel and rest days.
- Rooms to pitch in every stop. Venues from Qloo's own venue categories (live-music venues, concert halls and live-music bars; comedy clubs for comedians), ranked by affinity with this act's crowd. For Hasan Minhaj that is The Second City in Chicago and the Comedy Cellar in New York; for Prateek Kuhad in Delhi, The Piano Man Jazz Club.
- An opener who won't out-draw you. Acts whose fans overlap, ranked for this crowd in the top city, with the shared tastes that explain the overlap. Each one is checked against the headliner's Qloo popularity: anyone bigger is flagged as a co-headliner, not an opener.
- Promo partners. Places this crowd already hangs out in each city, for posters and after-shows (hotels excluded).
- A booking kit. A booking sheet (CSV) and a pitch email for each room, written only from Qloo numbers: "Mumbai's strongest area scores 0.994 affinity for this audience, higher than 99.4% of the 3,100 areas Qloo measured across India."
- What the data can't tell you, on the plan itself: capacities, prices and availability are for the booker to confirm.
Every claim links to the booking-log step that supports it. A grounding check removes any city, act or place the agent names that Qloo did not return.
Does it pick the right cities? I tested it on 282 real tours. For every 2022–2025 concert tour on Wikipedia with 8 or more US dates, I asked the app where that artist's crowd is and checked its top cities against where the tour actually went (a show within 60 km counts).
| On 178 tours held out from tuning | Top 5 | Top 8 | Top 12 |
|---|---|---|---|
| The biggest US cities | 0.837 | 0.706 | 0.623 |
| My first ranking (strongest Qloo affinity cell) | 0.737 | 0.702 | 0.673 |
| Where's My Crowd now (Qloo affinity balanced with city size) | 0.815 | 0.779 | 0.739 |
The test changed the product. My first ranking was no better than population at 5 or 8 cities: it over-picked tourist towns like Las Vegas and Honolulu. Balancing Qloo affinity 60/40 with city size (the weight chosen on the other 104 tours) beats "the biggest cities" on 103 of 178 tours and loses on 32. For Japanese Breakfast it gets 7 of 8 cities right, including Austin, Seattle and Portland, where the population list gets 3. Where it loses is honest too: stadium acts like Luke Combs, who play the biggest cities whatever their crowd. Everything to rerun it is in the repo's backtest/ folder.
Why it needs Qloo: a language model can name "Mumbai and Bengaluru" for any Indian indie act. It can't know which cities over-index for this audience, which act shares it, or which room in Pune that crowd already goes to. Without Qloo there is no product.
How I built it
- Qloo, only through the official harness (
@qloo/qloo-harness0.1.26), run as a subprocess on the server so the key never reaches the browser:- the harness's workflow tools (
qloo mcp):qloo_recommend,qloo_rank,qloo_compare_audiences,qloo_audience_demographics,qloo_trends; - the harness's raw API server (
qloo api mcp):qloo_searchto resolve the act with its own tags, andqloo_insightswithfilter.type=urn:heatmapfor every grid cell of the region. The workflow toolqloo_where_popularkeeps only the top 20 cells, which for a whole country are mostly remote areas, so the full heatmap is what makes the city ranking work.
- the harness's workflow tools (
- The agent: Gemini (3.5 Flash-Lite) with function calling over the harness's own MCP tool schemas. It decides which Qloo questions to ask and in what order, with a budget of 12 Qloo calls, then submits the plan through a structured tool. If Gemini is unavailable, a fixed booking workflow runs the same steps, so a visitor always gets a plan.
- Server: Node.js and Express, streaming each step to the page as it happens. Results are cached for 6 hours and each visitor is rate-limited, to respect the event quota.
- Geography: heatmap cells are named and grouped using GeoNames (cities of 15,000+, CC BY 4.0).
- Hosting: Render (a long-running container, since the harness needs a process; Qloo's kit says serverless isn't supported).
- Booking layer: plain rules over the Qloo results (rooms, opener draw check, routing with nearest neighbour and 2-opt, booking sheet, pitch emails), so the plan's practical parts never depend on the model.
- A backtest against 282 real tours from Wikipedia (key-free, polite crawl, cached), with a development/held-out split; scripts and results are in
backtest/. - Tests: 38 automated tests, including parsers checked against Qloo's documented example responses and the agent's fallbacks.
Challenges I ran into
- Finding real rooms. Asking Qloo for places a comedian's fans like in San Francisco returned the symphony and a museum. I tested tag heuristics, then found Qloo's own venue categories (
comedy_club,live_music_venue, ...) through its tag search; asking for those, ranked by this crowd, returns Punch Line and Cobb's. - A superstar as the opener. Qloo's overlap list for an indie act can include a stadium act. The draw check against Qloo popularity stops that.
- My first city ranking wasn't good enough. Ranking by each city's strongest Qloo cell looked right on the examples I tried. Tested against 282 real tours it was no better than listing the biggest cities, so I replaced it with the version above and kept the test in the repo.
- Heatmap cells aren't cities. Qloo returns geohash cells with affinity scores. I matched them to real cities by distance and population, folded suburbs into their metro (Brooklyn into New York City), and kept strong cells away from any big city as "also strong" pockets, rather than dropping them.
- Keeping the agent honest. The model can invent a plausible venue or city. The grounding check removes any name Qloo didn't return, and the poster says what it removed.
- Free-tier reality. One Gemini model took a minute to answer a one-word prompt; another allows only 5 requests a minute, fewer than one plan needs. I measured them, switched models, and capped each Gemini call so a plan finishes in about 30 seconds or falls back to the fixed workflow.
- Same name, different acts. When Qloo has several entities with the act's name, the agent stops and asks which one, instead of guessing.
Accomplishments that I'm proud of
- A real person can use it end to end, live, on real Qloo data, in about half a minute.
- Every recommendation is traceable to a specific Qloo call, and the poster states what the data doesn't establish.
- The city picks are measured, not asserted: 77.9% of the top 8 match real tours, against 70.6% for the obvious answer.
- It works for both musicians and comedians, in India, the US, the UK, Canada and Australia.
What I learned
- Qloo's affinities are relative: a tourist town can outrank a metro. Balancing affinity with size made the city picks match real tours far better, and I only learned that by testing against real tours.
- An agent is only as trustworthy as its evidence trail. Showing the questions it asked turned out to be more convincing than a polished answer.
What's next
- Room capacities and ticket prices, so the plan can size each date (Qloo doesn't hold them; a venue source would).
- Dates: Qloo's trends, plus the act's own calendar, to pick the window for each leg.
- Comparing two candidate tours side by side, and sending the pitch emails from the app.
Try it
Live: https://wheres-my-crowd.onrender.com · Code (MIT): https://github.com/chxmq/wheres-my-crowd · Backtest: https://github.com/chxmq/wheres-my-crowd/tree/main/backtest
Log in or sign up for Devpost to join the conversation.