Inspiration

While studying principles of marketing at university, the course made one thing clear: researching a market is hard, and the people who need it most can least afford it. Big companies pay for research and advertising at scale. Startups don't have that budget, and many founders have never learned the formal methods of market analysis.

I wanted a simple way for them to understand their market. It shouldn't rest on a list of random competitors. It should show who their audience really is, what that audience likes, and how to reach them. Discover is for startups first, but any business can use it to find its audience without working through the theory.

What it does

A founder or marketer describes a product: what it is, its price, the city it sells in, and a few competitors. Discover returns a handful of audience personas. Each one covers who they are, what they like, what holds them back, which messages and platforms fit, and where to reach them.

Every claim is labelled as evidence, calculation or interpretation, and links back to the Qloo data behind it. Reports export to PowerPoint, Word, Markdown and JSON.

Qloo's taste graph is the source of the personas, not decoration on top of them:

  • Competitors: brands are resolved through Qloo and checked against their full record. Qloo's similar-brand signal then fills out the competitive set.
  • Audience: Qloo insights show who over-indexes by age and gender, which decides the segments.
  • Culture: Qloo's audience descriptions are condensed, without an LLM, into a short, citable digest per segment.
  • Taste, place and platforms: TV, music and places come from Qloo calls for each segment. Social platforms come from the links Qloo carries on entities.

How we built it

  • Front end: React, Vite and TypeScript on Vercel.
  • API: FastAPI with async SQLAlchemy and Alembic on Render, with Neon Postgres for storage.
  • Language model: Groq (openai/gpt-oss-120b). It writes each persona from the evidence only. A validator rejects unsupported claims, and a template fallback keeps a run alive if the model fails.
  • Analyses: they run as background jobs with a live progress feed.
  • Engine modes: the default lean mode uses about 32 Qloo calls per analysis, with a ceiling of 35. A full mode gives every segment its own calls (about 50). One setting, ENGINE_MODE, switches between them.

Code: https://github.com/Inialpha/Discover. Live app: https://discover-frontend-six.vercel.app

Challenges we ran into

  • Call budget. The first design used about 150 Qloo calls per analysis, which a 10,000-call allocation can't sustain. We rebuilt it around shared market calls and cut it to about 12.
  • Wrong brand. A name search can return the wrong entity. Checking the full record caught Colgate University being accepted as a toothpaste competitor.
  • Thin competitor pools. Some categories have only one or two true competitors. A semantic tag search narrows the category and widens the pool, and the LLM picks only from real candidates.
  • Noisy audience text. Counting support per entity, scoring lift against other segments and choosing sentences extractively kept it faithful and citable.
  • Price. A hard price rule was too strict, so price is now a soft signal from income bands.
  • Coverage by place. The US, New York, Tokyo and London return rich data. Nigeria is sparse, so we tested in high-coverage cities.
  • LLM limits. Groq's free tier allows about 8,000 tokens a minute, so calls are paced and kept few.
  • Shipping. Free hosting meant manual deploys, a CORS variable-name mismatch, and converting the engine to async.

Accomplishments that we're proud of

  • Personas whose claims all trace back to Qloo data, with no invented audience text.
  • A cut from about 150 to about 12 Qloo calls per analysis, with the richer mode kept as a switch.
  • An identity check that stops look-alike brands from polluting a market.
  • A tool a non-expert can use in about a minute.

What we learned

  • Grounding beats generating: the LLM is most useful when it only writes up evidence it is handed.
  • Cheap, deterministic steps such as counting, ranking and extracting often beat another LLM call.
  • Data coverage varies by location, so a tool should say so.
  • Verifying what a search returns matters as much as the search.

What's next for Discover

  • Cache Qloo answers so a price-only rerun costs zero calls.
  • Add per-segment place and TV calls for more distinct personas.
  • Build a comparison view across runs.
  • Add Google sign-in and password reset.

Built With

Share this project:

Updates

Submission history