Try it, no sign-in: https://somm-494617981995.us-central1.run.app (open Reports → Coachella 2026; every small orange code is a Qloo receipt) Code (MIT): https://github.com/RaYYeR220/somm (JUDGES.md is a five-minute review path)

The problem

Sponsorship is a $100B+ market still sold on gut feel and inflated decks. A podcast, a festival or a team has to guess which brands to pitch, and the brand on the other side has to guess whether an offer reaches people who'd ever buy from it. Ask a language model and it names the same famous brands for everything, because it doesn't know what this particular audience loves.

What Somm does

Somm is an agent that reads Qloo's taste graph for a specific audience and turns it into a sponsorship decision. For a rights holder it builds a fan fingerprint (age and gender lean, where fans concentrate, what else they love across music, TV, podcasts, places and brands), finds the brands those fans over-index for in each sponsor category, scores each brand 0–100, and writes pitches where every figure links to the Qloo request behind it. One click publishes a media kit brands can open, with an intro-request button that lands in the owner's private deal board. For a brand, Somm reads the sponsorship offers you received (pasted as-is) and returns a verdict per offer: pursue, consider, pass or blocked. For other agents, the same judgment is available over MCP.

Why it needs Qloo

Every part of the score comes from Qloo: fan affinity for the brand within its category (Insights recommendations with the property's entities as signals), whether the brand's own fans like the property back (rank workflow), age and gender similarity (urn:demographics), overlap of the strongest areas across the market (urn:heatmap, every cell Qloo returns, often thousands), and the property's popularity trend. Without Qloo there is no score at all; each report shows what a language model suggests with no Qloo data next to Somm's list so the difference is visible.

The refusal is the product

Somm says no in code, not in the prompt. A brand in a category another partner holds exclusively is blocked. An offer from a property that already works with your competitor is blocked. Beer, spirits and betting deals are never cleared on taste data alone: industry codes require 73.6–73.8% of the audience to be 21+, and taste affinity can't prove that, so Somm blocks youth-skewed and all-ages deals and holds the rest at "consider" until measured audience data is in. Offer text is treated as untrusted data: instructions aimed at an AI reviewer are detected, stripped before the model reads the offer, and shown to you. And pitches are claim-checked: a sentence with a number, ranking or named entity that doesn't match a Qloo-backed fact is struck out and never exported.

How we built it

Next.js 16 on one Cloud Run container. Somm talks to Qloo through Qloo's official MCP server (qloo mcp from the hackathon harness, run as a stdio child process) for recommendations, ranking, demographics, taste tags and trends, and calls the Qloo API directly for search, tag lookup, full heatmaps and multi-brand Insights. Every call is written to an evidence ledger (exact request, route, status, answer hash) and cached privately. A language model plans which categories to prospect, reads pasted offers, and writes pitches; it never produces a score. The agent streams each step and each Qloo request to the browser as it works, and stops to ask when a name is ambiguous. SQLite with Litestream replication to Cloud Storage; a public MCP server exposes fan_fingerprint, prospect_sponsors, fit_score and evaluate_offer.

Proof

We collected 202 real, sourced sponsorships across 9 podcasts, 8 festivals and 7 teams, plus 122 same-category brands that didn't sponsor them, and registered the test (method and answer-key hash) before the first run. Results: Somm's Fit Score separates real sponsors from controls at chance (mean AUC 0.49), the same as Qloo affinity alone (0.49) and above brand popularity (0.43); a language model with no taste data scores 0.64, mostly by recalling deals that were announced in the press; the negative control sits at 0.48, as it should. So today's sponsorship money mostly doesn't follow fan taste, and Somm shows where it could. Gate traps: 10 of 11 caught (the miss is Polymarket, which Qloo doesn't have). Full table, including where Somm does no better than the baselines, on the Proof page and in EVAL.md. 148 automated tests cover the gateway, ledger, scoring, gates, claim checker, orchestrator, API and MCP server.

Challenges

Qloo returns taste affinity, not audience shares, so the age gate had to be designed around what the data can't prove. Hackathon trend data only comes back for long windows and is often flat, so momentum carries little weight and is skipped when empty. Heatmaps arrive as hundreds to thousands of cells per entity; we compact them before caching. Ambiguous names (two "Alex Cooper"s) pause the run and ask, unless one candidate is clearly the one people mean.

What's next

Measured audience-composition uploads to clear age-restricted deals; brand ownership so a partner's own sub-brands aren't treated as competitors; CRM write-back for the deal board.

Built With

Share this project:

Updates

Submission history