Competitor Analysis skill for Codex
Sourced rival research that ends in decisions. Codex identifies the alternatives buyers really weigh, including spreadsheets and doing nothing, captures each competitor's messaging and pricing with dated sources, codes review-site complaints into switching triggers, and merges SEO tool gap exports with Search Console data. The result is a positioning statement, a keyword shortlist split into target and skip, and a plan for accurate comparison pages.
curl -fsSL codexskills.dev/install.sh \ | sh -s -- competitor-analysis Installs to ~/.agents/skills/competitor-analysis/ for every project on this machine.
curl -fsSL codexskills.dev/cli.mjs -o codex-skills.mjsnode codex-skills.mjs install competitor-analysis The CLI also searches, updates and removes skills. Run it with no arguments to pick from a list. Needs Node 20.12+.
curl -fsSL codexskills.dev/install.sh \ | sh -s -- --project competitor-analysis Installs to .agents/skills/competitor-analysis/ in the current repository. Commit it and everyone who runs Codex there gets it.
curl -fsSLO codexskills.dev/downloads/competitor-analysis.zipunzip -o competitor-analysis.zip -d ~/.agents/skills/ The archive holds the skill folder with its generated agents/openai.yaml. Unzip into .agents/skills/ to scope it to a repo.
& ([scriptblock]::Create((irm codexskills.dev/install.ps1))) competitor-analysis PowerShell 5.1 or 7. Installs to %USERPROFILE%\.agents\skills\. Add -Project for the current repo.
104-line POSIX script. No sudo, no telemetry. Read install.sh
Use it in Codex
Start a prompt with $competitor-analysis, or pick it from /skills.
You can also just describe the task: Codex reads the description below and loads the playbook when your request matches.
What Codex reads before loading it
Analyses competitors for positioning and organic search - identifies real competitors (buyer alternatives and SERP rivals), captures messaging, pricing and proof from public pages, mines review sites for switching reasons, runs keyword and content gap analysis from Ahrefs, Semrush or Search Console exports, and turns findings into a positioning map, differentiated messaging and a prioritised plan for comparison and alternatives pages. Use when asked who our competitors are, how to position against a rival, where competitors outrank us, or to plan "X vs Y" and "X alternatives" pages.
Use it when
- You need positioning or messaging that stands apart from competitors
- Competitors outrank you and you want a keyword and content gap analysis
- You are planning comparison or alternatives pages
- Sales keeps losing deals to the same rival and you want to know why
Use something else when
- You want a hands-on teardown of a competitor's product UX: use competitive-teardown
- You need ongoing monitoring of competitor changes over time: use competitive-intelligence
How to check the result
Every competitor claim carries a source URL and capture date, and the positioning statement is one no named competitor could truthfully repeat.
The mistake it prevents
Treating SEO tool traffic estimates and old screenshots as facts, then publishing comparison pages that are already out of date.
The analysis is done well when it names the alternatives buyers actually consider (including “do nothing” and spreadsheets), every claim about a competitor links to a dated public source, and it ends in decisions: what to say differently, which pages to build, which keywords to pursue or ignore.
Scope and sources
Confirm the goal first: positioning and messaging, SEO gaps, or both. Then define the set:
| Competitor type | How to find | Use for |
|---|---|---|
| Direct (same product, same buyer) | Sales call notes, lost-deal reasons, G2/Capterra category | Positioning, comparison pages |
| Indirect (different approach, same job) | Customer interviews: “What did you use before?” | Messaging against the status quo |
| SERP competitors (rank for your keywords) | Search results for your top 20 queries, Ahrefs/Semrush “organic competitors” | Content and keyword gaps |
| Status quo | Interviews, support tickets | Often the biggest competitor |
Allowed sources: public websites, pricing pages, docs, changelogs, public review sites, public job posts, SEO tool exports the user has a licence for, the user’s own CRM and call notes. Do not create fake accounts, scrape behind logins, bypass paywalls, or ignore robots.txt and terms of service. Fetching pages needs network access; in a sandbox with network off, ask the user for exports or approval.
Workflow
- [ ] 1. Agree goal and competitor set (3-6 direct, 2-3 indirect, top SERP rivals)
- [ ] 2. Capture each competitor's homepage, pricing, top feature pages (date every capture)
- [ ] 3. Mine reviews for praise, complaints and switching reasons
- [ ] 4. Build the messaging and pricing comparison
- [ ] 5. Run keyword and content gap analysis from tool exports
- [ ] 6. Draw the positioning map; find the open ground
- [ ] 7. Write recommendations: messaging, pages to build, keywords to target or skip
Messaging capture
For each competitor, record what they say, not what you think of them:
| Competitor | Homepage H1 | Primary audience | Core claim | Proof shown | Pricing model / entry price | CTA | Captured |
|---|---|---|---|---|---|---|---|
| Acme | "Projects without the chaos" | Agencies 10-50 | Client approvals | 4,000 agencies, G2 4.6 | Per seat, $12 | Free trial | 2026-10-20 |
Then mark categories of claim (speed, price, ease, power, integrations, compliance, support). When every competitor claims “easy”, easy is not a differentiator.
Review mining
From G2, Capterra, TrustRadius, app stores, Reddit and community threads:
- Collect 30-100 recent reviews per main competitor (export or copy what the user can access; respect each site’s terms).
- Code each into themes: praise, complaint, missing feature, reason for switching to or away, buyer role and company size.
- Count themes; keep 2-3 verbatim quotes per theme with links.
- Note switching triggers (“price increase”, “outgrew it”, “support got slow”); these become comparison page angles and ad angles.
Keyword and content gap
Inputs: Ahrefs “Content gap” / Semrush “Keyword Gap” exports for your domain vs 3-5 rivals, plus your Google Search Console queries export.
import pandas as pd
gap = pd.read_csv("keyword_gap.csv") # columns vary by tool: map them first
gap = gap.rename(columns={"Keyword": "keyword", "Volume": "volume", "Keyword Difficulty": "kd"})
ours = pd.read_csv("gsc_queries.csv").rename(columns={"Top queries": "keyword", "Position": "our_pos"})
df = gap.merge(ours[["keyword", "our_pos"]], on="keyword", how="left")
df["status"] = df["our_pos"].apply(lambda p: "missing" if pd.isna(p) else ("weak" if p > 10 else "ranking"))
shortlist = (df[(df.status != "ranking") & (df.kd <= 40)]
.sort_values("volume", ascending=False)
.head(100))
shortlist.to_csv("gap_shortlist.csv", index=False)
print(shortlist.groupby("status").size())
Column names differ between tools and export versions; print gap.columns and map them
before filtering. Then classify each shortlisted keyword by intent and by fit:
| Fit | Rule |
|---|---|
| Core | Buyers of your product search it; you can be the best answer |
| Adjacent | Audience overlap, weaker purchase intent; content marketing |
| Skip | Competitor-specific features you do not have, or audience you do not serve |
Hand clustering and briefs to keyword-research and content-briefs.
Positioning map
Pick two axes buyers actually trade off (from reviews and lost-deal notes), not flattering ones: e.g. “setup effort” vs “depth of reporting”, or “price per seat” vs “compliance coverage”. Place competitors using evidence from the captures. The useful output is the open ground you can credibly own, stated as:
For <target buyer> who <situation/trigger>, <product> is the <category> that <key benefit>.
Unlike <main alternative>, it <differentiator backed by proof>.
Comparison and alternatives pages
High-intent pages: ”<Competitor> alternatives”, ”<You> vs <Competitor>”, ”<Competitor>
pricing” commentary.
- Be accurate and dated: “Pricing as of October 2026, from
<competitor>.com/pricing”. - Acknowledge where the competitor is better; it raises trust and qualifies leads.
- Organise by the buyer’s decision criteria, not your feature list.
- Use competitor names only to identify them (nominative use); no logos implying endorsement, no false or unverifiable claims. Comparative advertising law (e.g. the Lanham Act in the US, EU comparative advertising rules) applies; have legal review pages that make direct claims.
- Re-verify facts every quarter; stale comparisons damage credibility and invite complaints.
Gotchas
- Comparing against the competitor you admire rather than the one buyers choose.
- Treating SEO tools’ traffic estimates as facts; label them as estimates.
- Copying a competitor’s keyword strategy for features you do not have.
- Undated screenshots and prices that change next month.
- Analysis with no recommendations; every section should end in an action or a non-action.
Verification
- Every competitor claim in the deliverable has a source URL and capture date.
- Keyword shortlist rows reference the exported data, with tool and date noted.
- Positioning statement survives the test: could a named competitor say the same truthfully? If yes, it is not differentiated.
Output template
## Competitor analysis: <market> (<date>)
**Goal:** positioning | SEO | both **Set:** direct, indirect, SERP rivals
### Messaging and pricing comparison (table, sourced)
### What buyers say (review themes with counts and quotes)
### Keyword and content gaps (top 20 with intent and fit; full CSV attached)
### Positioning map and open ground
### Recommendations
1. Messaging: ...
2. Pages to build: "<Competitor> alternatives", "<You> vs <Competitor>" ...
3. Keywords to target / to skip
**Caveats:** estimated data, access limits, refresh date What the zip contains
SKILL.md plus the interface file below. Nothing runs on install.
agents/openai.yaml
Gives the Codex app a display name, a one-line description and a starter prompt for this skill.
interface:
display_name: "Competitor Analysis"
short_description: "Sourced rival research that ends in decisions"
default_prompt: "$competitor-analysis Who are our real competitors and how should we position against them?" About this skill
Written and maintained by the Codex Skills editors to the same editorial standard as every skill here: a selective description, a real workflow, known pitfalls and a way to verify the work. First published , last updated . MIT licensed. Something wrong or out of date? Tell us.