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.

  • Growth & SEO
  • $competitor-analysis
  • 155 lines
  • 2 files
  • ~1,750 tokens
  • MIT
  • Updated

Install

curl -fsSL codexskills.dev/install.sh \  | sh -s -- competitor-analysis

Installs to ~/.agents/skills/competitor-analysis/ for every project on this machine.

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

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.

~/.agents/skills/competitor-analysis/SKILL.md

--- name: competitor-analysis description: Analyses competitors for positioning and organic search - identifies real competitors (buyer alternatives and SERP rivals), captures messaging,… license: MIT ---

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 typeHow to findUse for
Direct (same product, same buyer)Sales call notes, lost-deal reasons, G2/Capterra categoryPositioning, 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 quoInterviews, support ticketsOften 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:

  1. Collect 30-100 recent reviews per main competitor (export or copy what the user can access; respect each site’s terms).
  2. Code each into themes: praise, complaint, missing feature, reason for switching to or away, buyer role and company size.
  3. Count themes; keep 2-3 verbatim quotes per theme with links.
  4. 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:

FitRule
CoreBuyers of your product search it; you can be the best answer
AdjacentAudience overlap, weaker purchase intent; content marketing
SkipCompetitor-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.yamlgenerated from this page

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.

esc
Just launched

Codex Skills Pro is live

79 premium skills for Codex, each with scripts, references and an evidence report that proves the result.

Bought one by one$882.21
All 79 skills$49
94% off

That's $0.62 a skill, paid once.

Get all 79 for $49Or pick single skills from $4.99 →

Secure checkout by Creem