Inspiration

Small brands know a collab could reach new customers, but picking who to partner with is mostly guesswork: whoever is famous, or whoever the founder already follows. Ask a general chatbot and you get the same big names for every city. A zobo drinks brand in Lagos and a coffee shop in Brooklyn need different partners, and the answer should come from what their audience actually likes, not from what a model has read most about.

What it does

A brand gives Crossover three things: what it sells, the city it sells in, and who it sells to. It can also name a few artists or brands its audience likes.

Crossover's agent then asks Qloo which artists, podcasts, venues and brands that audience over-indexes on in that city. It ranks them as partners and writes a short pitch for each one. Every pitch shows the Qloo signals behind it, so the brand can see why a partner was picked. It also filters out partners that don't fit:

  • Off-category brands (banks, telecoms, travel apps for a drinks brand) are dropped and listed, not hidden.
  • Likely competitors get flagged and pushed down.
  • Global giants a small brand can't realistically reach are scored down.
  • When Qloo has no truly local option for a partner type, the output says so under Gaps instead of pretending.

Example (live run, Lagos, zobo drinks, 18-29 afrobeats and streetwear fans): Adekunle Gold, Boomplay Music, Chocolate City, Fish Farm Lagos, and a podcast flagged as only a weak regional fit.

How we built it

  • Python, FastAPI, a small web page, hosted on Render.
  • The agent is an LLM tool-calling loop (Gemini through its OpenAI-compatible endpoint). It has four Qloo tools: resolve seed entities (/search), find genre tags (/v2/tags), build the audience's taste profile (/v2/insights with urn:tag), and pull partner candidates (/v2/insights for artists, podcasts, places and brands).
  • Qloo signals used: interest entities and tags, age buckets, Qloo audiences (e.g. "streetwear" maps to Street Fashion), location as a hard filter for places and a re-weighting signal for everything else, country genre tags and key-market tags for a "local and reachable" pass, and a popularity cap.
  • Ranking is done in code, not by the LLM: 0.45 Qloo affinity + 0.20 fit + 0.25 local + 0.10 reach. So every position on the shortlist traces back to numbers Qloo returned. The LLM decides what to ask Qloo and writes the pitches, using only the facts it is given.
  • If the LLM is unavailable, a deterministic offline pipeline runs the same Qloo calls and uses template pitches.
  • 49 tests run with no network, replaying real recorded Qloo responses.

Challenges we ran into

  • Our first ranking rewarded global giants. Popularity-heavy scoring put the biggest names on every shortlist, which is useless for a small brand. We rebuilt it around local evidence and reach.
  • Qloo's brand pool mixes in banks and telecoms. We used Qloo's own brand category tags to filter by sector.
  • Location works differently by entity type. A location filter changed place results but returned the same brand list, so we use location as a signal for non-places.
  • Qloo podcasts don't carry country tags, so a truly local Lagos podcast is hard to find. We show that as a gap rather than hide it.
  • Long live runs outlasted the hosting proxy timeout, so runs moved to background jobs that the page polls.

Accomplishments that we're proud of

  • Shortlists that look local: Lagos-born artists, Lagos record labels and venues, instead of the same global stars for every city.
  • Every pick is explainable, with its Qloo affinity, local evidence and fit shown next to it.
  • It's honest about its limits in the output itself.

What we learned

Taste data matters most where general models are weakest: specific cities, specific audiences, smaller names. An LLM alone gives a plausible list; Qloo gives a list grounded in what that audience actually likes.

What's next for Crossover

  • Category-targeted brand search, so a drinks brand gets stockists, bars and restaurants, not just music brands.
  • More product profiles beyond drinks, food, fashion and beauty.
  • Outreach drafts and a simple pilot tracker for each partner.

Notes for judges

  • The free server sleeps; the first visit takes about a minute to wake. A live run then takes 20 seconds to 3 minutes.
  • In LLM mode the shortlist can change between runs because the model picks its own Qloo queries. Ranking and filtering are deterministic.
  • Crossover sends Qloo only aggregate inputs (category words, a city, public names, tags, age buckets). No personal data.

Built With

Share this project:

Updates

Submission history