{ case study 01 }
Competitor Intelligence
Name a competitor's domain and eight agents read the whole company: positioning, pricing, SEO, content. Then every gap is ranked into a plan you can act on. Every claim links back to a page the crawler actually saw.
{ the build }
One job,
scoped tight.
Problem
Competitor research is a day of tab-juggling that goes stale the moment it's finished. Someone reads a pricing page, skims a blog, guesses at the SEO position, and writes it into a deck nobody re-runs next quarter.
Handing that to a language model makes it fast and makes it worse. Ask a model about a competitor's pricing and it will answer confidently, in the right format, with a number it never actually found. The output looks exactly like research. That failure mode was clear from the start, and the whole system is designed around preventing it.
Approach
Split the company into surfaces and give each one a specialist. Eight agents, each reading a single dimension, all writing into one shared nine-section report, so no agent is asked to hold an entire competitor in its head at once.
Then the rule that makes it trustworthy: the pipeline enforces the evidence gate, so the model never gets a vote on it. A section ships with two or more citations from pages the crawler actually fetched, or it returns an explicit insufficient-data marker. Asking a model nicely to cite its sources is a suggestion. Refusing to render a section without them is a constraint.
{ how it runs }
Domain in,
ranked plan out.
Four stages. The interesting one is the third, where most of these systems quietly fail.
Crawl
The competitor's site is fetched page by page and kept with its source URL attached. Nothing downstream ever sees a fact without knowing which page it came from, and that provenance is what the evidence gate checks against later.
Firecrawl Scraping URL provenance
Eight agents
One specialist per surface (positioning, pricing, SEO, content and the rest), each reading only the pages relevant to its dimension. Narrow scope per agent means narrow, checkable claims instead of one model improvising a whole company profile.
Multi-agent Structured extraction Model routing
Evidence gate
Every claim is checked against the crawl before it reaches the report. Two or more citations from pages actually fetched, or the section returns insufficient data and says so. An honest gap is a usable result; an invented price is not.
Citation check Pipeline-level rule Insufficient-data marker
Rank & ship
Surviving findings are assembled into nine report sections and every gap is ranked into a prioritized plan. Deployed on Modal and triggered on demand, so a fresh pass is a domain name rather than another week of someone's time.
Modal Gap ranking On-demand runs
{ what it produces }
Numbers
that hold up.
{ more work }