Find the sponsors your crowd already loves

Fans now expect things to feel made for them, from the playlists on their phones to the shows they buy tickets for. A live event should feel the same way, down to the brands around the stage.

Promoters pay for their shows partly by selling sponsorships, but most sponsor lists start from memory: the same beer, the same bank, the same energy drink, show after show. Nobody checks whether ticket buyers actually like those brands.

Laminate starts from the crowd instead. Tell it who's playing and where, and it uses Qloo's taste data to find the brands those fans like more than the rest of the city, sorts them into priced sponsor packages, and writes the pitch. In under a minute, a promoter has a sponsor list backed by real data instead of a guess.

An event in Laminate: the proof stamp, money committed, and revenue by tier. Sample data, for illustration only.

From a 300-person club to an 80,000-person stadium: each sample event's crowd, top price and brands placed. Sample data.

On the big screen: the run's Presenting and Gold picks light up a stadium's screens. Sample data.

Try it in 2 minutes

Judges: start with the one-click access link in the Additional info section of this submission. It opens the site with live search, Ask's open questions, live Compare runs, and test emails unlocked. The access code is there too.

Without it, go to laminate.pexelerate.com. No account is needed, and every example and every saved comparison opens.

  1. Click any poster on the landing page. It replays a saved run with every Qloo request numbered, then opens the event.
  2. Open Board and drag a brand from Silver up into Gold. The package total changes as soon as you let go.
  3. Hit Dashboard in the top left to see a whole season of events.

The problem

Most sponsor pitches still start from an old contact list and last year's rate card. Sponsors are whoever you know, prices are last year's, and open slots get lost in a spreadsheet. Sponsorship brokers keep up to 30% of what they sell, and many also charge a retainer of up to $12,000 (Sponsorship Collective, 2023).

The problem: sponsors, prices, and open slots today, and with Laminate. Sample data, for illustration only.

Two ways promoters use it

Selling one show

You type it the way you'd say it: "Taylr Swift (typo on purpose) concert at MetLife Stadium, 80k people, $1M goal." The brief check looks each act up in Qloo first, and Claude or Gemini offers the corrected name before anything runs. Qloo's API then shows which brands those fans like near the venue versus in the city, and the code turns that into five priced tiers and a prospectus.

Running a season

With twelve shows on the calendar, a promoter needs to know which events are behind and which brands could sponsor more than one. The Dashboard puts every event on one goal line, with a pipeline, a calendar, and reports.

What Laminate does

Find sponsors from one sentence

Type the show the way you would say it, with the lineup, venue, crowd size, and goal. Laminate checks the brief, looks each act up in Qloo, and finds the brands this crowd likes more than the rest of the city.

The landing page with the brief box and sample events. Sample data.

Sell sponsor packages to brands

The brands land in five priced tiers, from Presenting to Community. Drag a brand to another tier and the package total updates right away, or ask in plain words, such as "move the energy drink to Gold".

The sponsor board with five priced tiers. Sample data.

See why each brand fits

Each brand opens with its fit score, its rank for this crowd and in the city alone, and the Qloo requests behind each number.

A brand record: why it fits, the deal and its deliverables. Sample data.

Manage every event in one dashboard

The Dashboard puts every event on one goal line, with a pipeline from Prospect to Renewal, a calendar, and the deals that need attention.

The season dashboard: every event's pace and what needs attention. Sample data.

Track sales with reports

Reports show sell-through by item, list price against agreed price, win rate and lost reasons across all events, and export to CSV.

Laminate also suggests brands for categories the board does not cover yet, and Compare (below) runs the same brief through a generic chatbot.

New in the latest build

  • Proof on every board. A stamp in the event header counts the placed brands that carry a Qloo rank in the run's own answers and opens the request list. The same count is on the dashboard, the prospectus, the posters, and the globe cards.
  • What a chatbot would pitch. An event's Overview puts a general model's picks for the same brief (no crowd data, no web search) beside Laminate's board, with how many are on the board, how many Qloo ranks for this crowd, and how many this event's rules block. Recorded once and replayed with zero calls.
  • Every decision in a sentence. Each run step is a plain sentence with the count behind it, and the Audit Trail opens with the same lines as a decision log, then every Qloo request behind the run.
  • Who to lead with. One line above the board names the brand to lead with and why, or says nothing. Fit scores show their rank in the run and the brand's rank in the city.
  • Not pitching. Benched brands are split into ready for a slot and Not pitching, each with one reason: all-ages show, blocked category, only traveling fans know it, category taken, or below the brand-size floor.
  • Next move. When an event is behind pace, the event Overview and the dashboard name the unsold tier and up to three brands to pitch first, linked to their pitches.
  • Asks before it guesses. A venue, city, or crowd origin it is unsure of is asked before the first Qloo request, never guessed.
  • Ask on every page, and an MCP server for your own agent. Both are described under How it works.
  • Try a sample brief. One click on the landing page types a US stadium brief and runs it live, a new one each time.
  • Short video tutorials. Help lists a 2-minute tour and nine short chapters. Ask, the prospectus, the dashboard's follow-ups, and the developer docs each link to the chapter about them.

Why it only works with Qloo

A chatbot knows nothing about a specific crowd, and with web search it mostly finds deals already signed. In the saved Compare run, all 16 of Laminate's picks have a Qloo rank for this crowd. The chatbots have none. When I swapped the headliner at the same stadium, Laminate repeated no sponsors, because a different act draws different people. The chatbot repeated 1 sponsor, and 5 when it could search the web. Across all four recorded pairs, 7 of Laminate's 62 picks repeat, against 9 of 64 for the chatbot and 15 of 64 with search. The bigger gap is elsewhere. None of Laminate's picks already sponsor the act or the venue (the chatbot with search had 6 that did), and none break the event's rules (the two chatbots had 3 and 6).

Compare: Laminate with Qloo against a generic AI model, checked four ways. Sample data.

Every Qloo call is a GET request from the server. /search pins the acts, venue, and city. /v2/insights returns brands near the venue and in the city alone, nearby places, ages, and a heatmap. /v2/tags and Taste Analysis cover what the crowd is into, /v2/audiences adds spending habits, /v2/trending spots climbing brands, and /v2/analysis/compare finds what the headliner's fans share with the rest of the bill. The app lists every call with its curl command.

Qloo in numbers

Measured from the saved runs and recordings, with no new Qloo calls:

  • About 60% of the brands Laminate placed across its saved events are not in the city's own ranked list. That's what the crowd adds.
  • About 80% of the distinct brands it placed appear on only one event's board.
  • 62 of 62 Laminate picks in Compare carry a Qloo rank for that crowd, against 0 of 64 for a generic chatbot.
  • A run makes a median of 11 Qloo requests (8 to 28); 70% were answered from the response cache when recorded, and a replay makes none.
  • Brand requests to /v2/insights take 2.6 s at the median (5.9 s at p95, across 95 requests), and Qloo accounts for about 41% of a run's time.
  • Laminate uses 11 endpoint and type pairs and 28 documented parameters, and it checks every request against Qloo's parameter guide before sending it.

How it works

Architecture

Laminate is one agent with three ways in. All three read the same stored runs and the same Qloo-backed tools, so your agent, Ask, and the board agree on the answer.

1. Laminate inside your agent

The MCP server adds Laminate's Qloo-backed sponsorship tools to Claude or any MCP client: 13 tools, 10 of them with no access code. This adds Qloo to an agent you already use: list_events, get_board, explain_brand, crowd_profile, season_summary, brand_across_events, price_package, check_rules, reblend_crowd and get_prospectus read stored runs or run Laminate's own code, and find_sponsors, get_run and score_brand_list start live work with the access code. Setup is in Use Laminate from your agent.

2. Ask the agent on every board

Ask a question on an event or the dashboard, and a model picks from 8 read and pricing tools, up to 4 calls, before it answers. Any change comes back as a proposal you confirm. The tools are get_board, explain_brand, crowd_profile, check_rules, price_package, reblend_crowd, season_summary and brand_across_events, shared with the MCP server (lib/mcp/read.ts). They make no Qloo call and start no run. The answer may name only brands, numbers, and places a tool returned; anything else is dropped, and the model is asked again. Questions about the board itself (who is in Gold, the gap to goal) are answered in code with no model.

3. The sales agent run

A model reads the brief and decides the board. A validator sends back any brand Qloo did not return, any duplicates, and any rule breaks once, then the code finishes the board. The Qloo plan is fixed on purpose, so every number can be re-run and audited.

  1. Read the brief. An LLM (Gemini, or Claude when configured) reads the promoter's sentence into acts, venue, city, and numbers. Code keeps a name or number only if it was typed, and a venue, city, or crowd origin it is unsure of is asked before the first Qloo request, never guessed.
  2. Gather the evidence. Nine tools run in a set order: resolve_acts, find_venues, crowd_profile, brand_fit, city_baseline, price_tiers and check_brands before placement, then apply_rules and write_pitch after it. Each is a call to Qloo's API (the Insights API, Search, Tags, Audiences, Trending, or Compare) or plain code, and check_brands can add a web search to confirm a brand still trades there.
  3. Decide the board. The LLM gets a table of the ranked brands with their fit, size, and flags, and places them into five tiers in one structured call. With no LLM available, code places them by fit.
  4. Check the decision. A validator drops any brand Qloo didn't return, any brand placed twice, and any rule breaks, then sends the board back to the LLM once. After the second try, the code finishes the board by fit.
  5. Explain it. The fit score, the rules (category exclusivity, all ages, blocked categories, locked sponsors, brand size), the prices, every card reason, and every pitch are code. The run screen shows each decision with its count, the Audit Trail lists them, benched brands carry the reason they aren't pitched, and the event Overview and dashboard name the brands to pitch first when an event is behind pace.

Qloo requests are fixed by code, so a run can be replayed exactly. The model decides the board, not which questions Qloo is asked.

A Next.js server on Vercel checks that the run is allowed to spend money before the agent starts. Each Qloo request is numbered and cached privately in Upstash, and scores, prices, and rules live in code, so the model never picks a number.

The fit score

Why you can trust it

Four checks between Qloo and the board

Nine reference events, from US stadiums and Philippine arenas down to a 300-person club, run as golden tests on synthetic data. The 27 global events passed the same checks before I saved them: every act is a Qloo artist, and every venue is a Qloo place in the right country.

Tested and cheap to run

Quality

Efficiency

947 unit tests, 376 end-to-end tests, and 9 golden reference events pass on every change.

A run costs about half a cent in model tokens ($0.0045).

Business

Business model

Laminate is a subscription business. Promoters pay $39 a month billed yearly for a few shows a year, or $99 for a single event. Teams pay $149 a month for 3 seats, then $29 for each extra seat, and venue groups and leagues sign an annual contract. A run costs about half a cent in model tokens, so each plan covers its model costs many times over. For comparison, a sponsorship broker takes 10 to 30% of what they sell (Sponsorship Collective): on a $40,000 goal that's $4,000 to $12,000, against $468 for a year of Indie. The prices are planned. Laminate is free during judging, and checkout on the site is a simulation.

What I built during the hackathon

I built it all during the hackathon, starting with the first commit on October 23, 2026: the Qloo client, the agent, scoring and pricing, the board, Compare, the dashboard, and the tests and CI.

Challenges

Venues

Of 47 named venues, 46 resolved to a Qloo place, but 10 of those were more than 60 km from the city Qloo returned, usually because a place with the same name exists in another country. The brief check now catches that before the run and offers the right venue as the fix.

Ranks, not raw affinity

Qloo's affinity scores from two requests aren't on one scale, so the lift over the city is based on each brand's rank in the crowd's list versus its rank in the city's list.

What I learned

Qloo's taste data showed me brands a promoter would never have guessed. Across the saved events, about 60% of the brands Laminate placed don't appear in the city's own ranking at all, so they come from what this crowd likes, not from what's popular locally. Qloo also knew every act in the saved runs (62 of 62), and its main brand request came back in 2.6 seconds at the median.

Working with the API taught me three things. Ranks only mean something inside one result set, so Laminate compares this crowd's list with the city's list position by position instead of comparing raw affinity scores. Qloo doesn't return a request ID, so Laminate numbers every request itself (Q1, Q2 and so on) and shows the curl command for anyone to replay. And /v2/trending came back empty for a 120-day window, so Laminate asks for a year of weekly ranks.

On the model side, I learned that the model is good at reading a messy brief and placing brands from a short table, but anything with a number belongs in code. Moving that work out of the prompt cut tokens by 96%, and the top 20 brands stayed the same.

What's next

Next is a pilot with a few promoters through a real season. Any paid plan waits on a commercial Qloo license (Qloo's terms, section 5), so the pricing stays planned. The same taste data could also serve brands looking to sponsor events, plan tour routing, and build festival lineups, and Laminate's code already covers about half of what each would need.

Longer term, I want Laminate to be the sales agent for any live event, where a promoter finds, prices, pitches, and renews sponsors. Anyone can ask a chatbot which brands could sponsor a show. Qloo's taste data shows which brands this crowd actually cares about, and that is what lets Laminate match sponsors to the people in the room, not just to the city around them.

Videos

Laminate in 2 minutes
Laminate in 2 minutes
1. Start with a better brief
1. Start with a better brief
2. Find and sell the right sponsors
2. Find and sell the right sponsors
3. Run your whole season
3. Run your whole season
4. Know every brand and share the numbers
4. Know every brand and share the numbers
5. Your crowd
5. Your crowd
6. Laminate from your agent
6. Laminate from your agent
7. Ask your agent
7. Ask your agent
8. Test emails and reminders
8. Test emails and reminders
9. Reports and outreach
9. Reports and outreach

Links

Taste data by Qloo. Laminate is not affiliated with or endorsed by Qloo, Inc. Brands shown are Qloo suggestions, not sponsors.

Built With

  • anthropic
  • claude
  • dnd-kit
  • gitleaks
  • google-gemini
  • maplibre-gl
  • model-context-protocol
  • motion
  • next.js
  • playwright
  • qloo-api
  • react
  • tailwind-css
  • three.js
  • typescript
  • upstash-redis
  • vercel
  • vitest
  • zod
Share this project:

Updates

Submission history