Skip to content

Qloo picks. Code scores.
The AI writes.

Afinlo is an agent built with LangGraph. Qloo answers every question about the audience, plain code turns those answers into scores, and a language model writes the pitch from the scored results. The model never chooses a city, a brand, a venue or an act, and it can't add one.

One plan, five steps.

Each plan runs the same steps in order, and every step streams to the page as it happens, so you can watch the agent work.

  1. 1. You brief it

    An artist or comedian, where to tour (the whole world, a region or countries, from a first look at where the fans are worldwide), and what matters.

  2. 2. Qloo tools

    Resolve the act, Fan DNA, the heatmap, brands, support acts, local spots. Up to four requests at a time.

  3. 3. Scorers

    Plain TypeScript: Fan Heat, hidden markets, the route, Sponsor Fit. Same input, same output.

  4. 4. Writer

    The pitch, booking requests and follow-ups are drafted from the scored results. With a language model connected, it writes them, and its draft is checked.

  5. 5. Refine

    Ask for a change. The planner turns it into new filters and the agent plans again.

Fan Heat finds the hidden cities.

Afinlo knows 2,737 cities in 184 countries. For each in the tour's area, Fan Heat is the mean affinity of the Qloo heatmap cells within 45 km of its centre, scaled against the act's other cities there: 100 is the act's strongest city. Compare cities within a tour, not across tours.

  • A hidden market is a city outside the area's biggest metros (its ten largest, or a third of its cities with data when there are fewer than 30) whose Fan Heat is in the act's top third, and at least 60, with enough data to trust.
  • The route takes the best cities by tour score (Fan Heat, weighted three to one against market size on a log scale), keeps at least two hidden markets when there are any, never puts two stops within 150 km (a promoter's radius clause), and orders them to keep travel short. A leg up to 650 km is a drive, a longer one a flight.
  • A world tour spreads wider: shows at least 400 km apart, and no country with more than a quarter of them (two at least) while others have fans. Its market size is what a city's people can spend, its population times its country's GDP per head. Qloo's world cells are about 150 km across, so a city counts only its own country's and leans on its country's average: one odd cell can't make it hot.
  • Confidence is high when a city has six or more heatmap cells from the act's own data, lower with fewer, and never high when the plan is estimated from similar acts.
1234567

Sponsor Fit ranks the brands.

Sponsor Fit starts from Qloo's affinity of this audience for each brand, scaled against the other brands, then weighted by brand size: household names ×0.8 (hardest to land, least distinctive), established brands ×1, niche brands ×0.9.

  • With categories chosen, only brands carrying those Qloo category tags remain.
  • Each top brand's own Qloo heatmap shows where its fans are strongest along the route.
  • These weights are Afinlo's judgment, not Qloo's.

Yee Yee Apparel

Fashion · Established brand
  • The #1 brand for Morgan Wallen's audience in Qloo

Vineyard Vines

Fashion · Established brand
  • The #2 brand for Morgan Wallen's audience in Qloo

Buckle

Fashion · Established brand
  • The #3 brand for Morgan Wallen's audience in Qloo

Every Qloo call.

A plan takes about 20 to 30 Qloo requests. Each response is cached for 24 hours, and an identical request made within a day reuses the plan, so repeated questions don't spend Qloo's quota. Each plan's receipts list every request.

  1. Resolve the act

    GET /search (artists, then people)

    The act's Qloo entity; you confirm the exact one.

  2. Fan DNA

    GET /v2/insights: urn:tag, urn:demographics, film, TV, podcast and book

    Taste tags, the audience's age and gender skew, what fans love elsewhere.

  3. Where in the world

    GET /v2/insights: urn:heatmap, filter.location = the whole world

    About 3,000 cells of 150 km: the countries and regions where the fans are, for choosing where to tour.

  4. Fan Heat

    GET /v2/insights: urn:heatmap, filter.location = the region, or boxes around the countries

    Thousands of cells, from 5 km in one country to 40 km across a region: how strongly the audience over-indexes there.

  5. Sponsor match

    GET /v2/insights: urn:entity:brand, signal.location = the tour's area, one call per category tag

    Brands this audience loves there, with their Qloo affinity and category tags.

  6. Sponsor evidence

    GET /v2/insights: urn:heatmap for each top brand

    Where each brand's own audience is strongest along the route.

  7. Support acts

    GET /v2/insights: urn:entity:artist, then /v2/insights/compare

    Acts with overlapping audiences, and the taste both crowds share.

  8. Venues and partners

    GET /v2/insights: urn:entity:place, filter.location = POINT near each stop

    Music venues or comedy clubs, local businesses to partner with, and places fans love, within 20 km, pinned on the map.

What the AI does, and the checks on it.

The writer sees only the scored results and their Qloo IDs. It writes; it never decides what's in the plan.

  • Every draft is checked.A draft is rejected if it names a city or brand outside the plan, or states a money figure or percentage.
  • A rejected draft is replaced.A plain template writes the pitch instead, and the plan says so.
  • The planner chooses from fixed lists.Turning a message like “only beverage brands” into filters, it can only pick Afinlo's own categories and cities.
  • When Qloo knows little, Afinlo says so.An act with no location data of its own is planned from the acts whose audiences overlap most, and labelled “estimated from similar acts”. If that isn't enough either, the plan says Afinlo can't tell. A Qloo request that fails is shown as failed.

What Afinlo doesn't claim.

Fan Heat is taste affinity, not ticket demand.

A sponsor match means the brand's customers love this act, not that the brand will pay. Demographics describe an audience in aggregate, never a person. Afinlo uses no personal data and sends nothing on your behalf.

Sources.

Taste data: Qloo Taste AI (the hackathon API), through every request in each plan's receipts.

Cities: Natural Earth populated places (ne_10m_populated_places_simple), public domain. Cities of 90,000+ people; a city within 45 km of a bigger one in the same country counts as part of it.

Market sizes: Natural Earth's metro-area estimate (pop_max). For a world tour, times GDP per head: Natural Earth countries (ne_50m_admin_0_countries), public domain: GDP per head, the World Bank's figures for 2011–2019, 170 of 184 countries for 2019.

Map: OpenFreeMap vector tiles, from OpenStreetMap data, drawn with MapLibre.

See it on an act
you know.

Search an artist or comedian. The plan takes under a minute, and there's no sign-up.

Plan a tour
Two people planning at a laptop in a rehearsal room