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.
Log in or sign up for Devpost to join the conversation.