Inspiration

Burna Boy's team knows where he's touring two years out. The artist who can't plan a tour is the one Google hasn't heard of yet: no streaming history, no data, no booking agent, often no manager. They book a first run on guesswork and favours, and an empty room in the wrong city can cost more than a month's rent.

Every tour-routing tool I could find starts from the artist's own data, which is exactly what an emerging artist doesn't have. So the question became: can you plan a tour for someone with no data at all?

What it does

The artist enters three things: their name (optional), the city they're based in, and up to three acts they sound like. TourScout treats the fans of those acts as the artist's future fans, and an AI agent uses Qloo's taste graph to plan a first run:

  • Cities ranked by fan taste, each with its distance from home. A first run is on a small budget, so the route opens at home, stays mostly within a drive or a short flight, and allows at most one long-haul market.
  • Rooms that fit: the music venues in each city whose crowd matches those fans, and where in the city the fans cluster.
  • A dated route, ordered to cut travel and held about 12 weeks out so rooms can still be booked.
  • Who to play with: bigger acts with the same fans to ask for a support slot, and acts at a similar stage to share bills with.
  • Brands to pitch that those fans already buy, with a small, realistic ask for each.
  • Emails ready to send to a venue booker and a brand. The artist has no stats yet, so the emails never claim any.

You watch the agent work: every Qloo call appears as it lands, with what came back. Five example runs (an Afro-R&B singer from Lagos, a soul singer from London, a rapper from Atlanta, an Afro-pop band from Nairobi, an alté singer from Accra) open instantly.

How I built it

The agent. A language model runs a function-calling loop over five Qloo-backed tools and finishes by calling finalize_plan. Two steps run first in code: checking that each reference act carries fan data, and locating the home city. The model decides which cities to scan and which to route, and writes the notes and emails. It can't invent anything: the final plan is assembled in code from what the tools returned, so every city, venue, act and brand in it came from Qloo.

Qloo, used in depth. One plan makes about 14 Qloo calls:

  • /search over artists for the "sounds like" picker, and over localities for the home city
  • /v2/insights with filter.type=urn:entity:destination and the reference acts as one combined signal, with a popularity floor so villages and resorts drop out, plus a second pass inside the home country
  • urn:heatmap and music-venue place insights around each city's coordinates
  • artist insights split by reach into acts to open for (reach 80+) and peers (30 to 80)
  • brand insights for sponsors
  • urn:demographics per reference act, averaged, because demographics don't accept a combined signal

Bring your own model. The hosted demo uses Gemini (gemini-flash-lite-latest). Anyone running TourScout can instead point it at any OpenAI-compatible API (OpenAI, Claude, Groq, OpenRouter, a local Ollama model) with three settings, or use no model at all and let a rule-based planner build the plan from the same Qloo data. Each plan shows which model made it.

Reliability. Whatever the model, it gets a 70-second budget with retries. If it fails or runs out of time, the rule-based planner finishes the run from the data already gathered. A plan always arrives.

Routing. Nearest-neighbour from home, then 2-opt to remove crossings. Dates skip the festive dead zone, with longer gaps after long hops. Stops within 60 km of each other count as one market.

Instant examples. The five examples are full agent runs computed at build time on Vercel and served from the server cache. Qloo's guide allows private server-side caching but not Qloo data in a public repo, so nothing is committed: every deploy plans the examples afresh.

Stack. Next.js 16 (App Router, Cache Components), React, TypeScript, Tailwind CSS v4, d3-geo, deployed on Vercel. The agent's progress streams to the browser as NDJSON.

Design. True black with one stage-light amber, used only on data: the route and its scores. The plan screen leads with the map beside a run sheet laid out like the dates on the back of a tour T-shirt.

Challenges I ran into

  • Acts with no fan data. Qloo lists many artists it holds no taste data for (Asake, Victony and Zinoleesky among them). Used as a signal, they either fail or quietly return generic popular cities, which would have produced confident-looking, meaningless tours. TourScout now checks every reference act as it's picked, shows the ones with no data struck through with a plain explanation, and plans only from those that carry a real signal.
  • Ambiguous names. "Washington" resolved to Washington State, so a DC show came back with fan hotspots in Seattle. City scans now search by coordinates and radius instead of by name.
  • One market, three cities. Qloo lists New York, Brooklyn and Newark separately, and an early plan booked all three into the same room. Stops within 60 km now count as one market.
  • Keeping the model honest. In one run the venue email said fans of "Cleo Sol, Joy Crookes, and Arlo Parks" over-index in the city. Arlo Parks was an act to open for, not part of the fan data. The prompt now says so, and a check in code replaces any email that names a non-reference act in a fan-data sentence.
  • Speed. The full Gemini Flash model took 20 to 40 seconds per turn on the free tier. Moving to Flash-Lite, which answers tool calls in 1 to 3 seconds, cut a full plan from over a minute to about 15 seconds.

Accomplishments that I'm proud of

  • It works for someone with no data at all, which is the person who needs it most.
  • It's honest about its limits: acts with no data are flagged, missing rooms say "Room to find", dates are labelled as proposals, and every plan shows when it was made and which model made it.
  • The examples open instantly without breaking Qloo's data rules.

What I learned

  • Qloo's taste graph is strongest as a bridge: you don't need data on a new artist if you have data on the artists they resemble.
  • An agent's output needs checks in code as well as instructions in the prompt.
  • The best product decisions came out of the data: the popularity floor, the distance penalty and the one-stop-per-market rule each fixed a plan that looked plausible and was wrong.

What's next for TourScout

  • Venue capacity and booking contacts, so "rooms that fit" also means rooms the artist can fill.
  • Ticket-price and cost estimates per stop, so the run can be checked against a budget.
  • Letting the artist edit the route (drop a city, add one) and re-plan around the change.
  • Importing an artist's own early listener data, from a Spotify for Artists export for example, to blend with the "sounds like" signal as they grow.

Built With

Share this project:

Updates

Submission history