
competitor-analysis
✓ Official★ 1,129by firecrawl · part of firecrawl/web-agent
Compare two or more companies, products, or platforms across pricing, features, positioning, and docs. Use this skill whenever the user says "compare X vs Y", "how does X stack up against Y", "alternatives to X", "competitive landscape of …", "X vs Y vs Z", or asks for a competitor matrix. Uses search to discover competitors when the user only names a category, then scrape for each competitor's homepage, pricing page, and features/docs. Returns a normalized comparison matrix as JSON.
This is the playbook your agent receives when the skill activates — you don't need to read it to use the skill, but it's here to audit before installing.
Competitor Analysis
Structured side-by-side comparison of competing products. Designed for search + scrape; no interact needed for typical marketing/pricing pages.
When to use
- User names 2+ companies or products: "compare Vercel, Netlify, Cloudflare Pages"
- User names a category only: "best CDNs for edge functions" — search to discover the top 3–5 players, then analyze
- User asks for alternatives: "what are the alternatives to X?"
- User wants a feature matrix or positioning summary
Do NOT use for single-vendor deep-dives — use deep-research or structured-extraction instead.
Strategy
-
Identify competitors.
- If the user listed them, use that list.
- Otherwise search once:
"top <category> providers 2026"or"<product> alternatives". Pick the 3–5 most-cited.
-
For each competitor, gather three pages:
- Homepage — one-line positioning, target audience
- Pricing page (usually
/pricingor/plans) — tiers, units, free tier, enterprise gate - Features or product page — top 5–10 capabilities, any standout differentiators
-
Fan out when scale warrants.
- 2–3 competitors: stay in the orchestrator, scrape serially or with parallel tool calls.
- 4+ competitors: use
spawnAgents, one worker per competitor. Each worker gets the 3 URLs above and returns a normalized sub-object.
-
Normalize before formatting.
- Align pricing tiers by role (Free / Pro / Team / Enterprise) even when vendors name them differently.
- Call out where a competitor has a capability the others don't.
- Flag anything missing (e.g. "Enterprise pricing is contact-sales only").
-
Call
formatOutputonce at the end with the full matrix.
Output schema
Every run should produce an object with this shape (add fields as the user's prompt demands):
{
"category": "Edge hosting platforms",
"competitors": [
{
"name": "Vercel",
"url": "https://vercel.com",
"positioning": "Frontend cloud for Next.js and React",
"pricing": [
{ "tier": "Hobby", "price": 0, "unit": "month", "limits": {} },
{ "tier": "Pro", "price": 20, "unit": "seat/month", "limits": {} }
],
"strengths": [],
"weaknesses": [],
"freeTier": true,
"enterpriseContactOnly": false,
"sources": []
}
],
"summary": "One-paragraph takeaway comparing the field.",
"bestFit": {
"budgetConscious": "",
"enterprise": "",
"developer": ""
}
}Tips
- Pricing pages lie by omission. Always look for overages, egress costs, and seat minimums that show up only in a footnote.
- Marketing copy is noise. Prefer the pricing page and docs over the homepage for factual claims.
- If a scrape returns 404 on
/pricing, search"<vendor> pricing"before guessing another URL — vendors often move these pages. - Populate
strengthsandweaknessesfrom evidence, not opinion. "Has a built-in KV store (competitor docs do not mention one)" is fair game; "better DX" is not. - Always include
sources: [...]on every competitor object with the URLs you actually scraped.
See also
- deep-research — multi-source validation for a single topic
- pricing-tracker — detail on pricing extraction when that's the only dimension
- structured-extraction — lower-level helper for arbitrary JSON schemas
npx skills add firecrawl/web-agent --skill "competitor-analysis" --full-depthRun this in your project — your agent picks the skill up automatically.
Quick start
await agent.run({
prompt: 'Compare Vercel, Netlify, and Cloudflare Pages on pricing, edge functions, and free tier generosity',
skills: ['competitor-analysis'],
format: 'json',
})// User gave only a category — discover competitors first
await agent.run({
prompt: 'Compare the top 4 vector databases for production RAG workloads',
skills: ['competitor-analysis'],
format: 'json',
})No common issues documented yet. If you hit a problem, the repository's GitHub Issues page is the best place to look.
Licensed under MIT— you can use, modify, and redistribute it under that license's terms.
View the full license file on GitHub →