Claude
Skills
Sign in
Back

positioning-map

Included with Lifetime
$97 forever

Build a positioning map for 3–5 competitors and identify the empty quadrant the founder could own. Use when a founder asks "where's the positioning gap?", "how do I position against X?", "what's the competitive landscape look like on hero / pricing / hiring / customers?", or needs a structured comparison before a launch, repositioning, or fundraise. Combines Anysite MCP (LinkedIn company entity + post search + jobs search; SEC for late-stage) with Exa MCP (fetch JS-heavy SaaS marketing pages, find case studies and changelogs). Returns a comparison table across 5 axes (hero / pricing / specialities / recent shipping / hiring), 3 candidate positioning moves with explicit choice criteria, and a one-sentence positioning statement. Requires customer pain themes as input — positioning without pain context is just rearranging marketing copy. Run competitor-discovery and customer-pain-mining first if you don't have a curated competitor list + pain themes.

AI Agents

What this skill does


# Positioning Map

Positioning isn't marketing copy — it's a **product decision about who you say no to**. This skill makes that choice visible by mapping competitors on 5 signal axes, locating the empty space, and forcing you to pick between 3 candidate moves rather than defaulting to the first one that sounds good.

Founders consistently underweight four things on competitor positioning: hero copy is the most-curated surface (so trust it least), pricing reveals who they actually sell to, what they ship reveals what they think matters, and **who they hire reveals where they're going next quarter** (the leakiest signal of all). Customer logos reveal who they actually catch, which often contradicts who they pitch.

## Frameworks this skill draws from

This skill is the operational version of three positioning frameworks, executed against real public data:

1. **April Dunford — *Obviously Awesome* (5 components):** competitive alternatives, unique attributes, value (and proof), target market characteristics, market category. Dunford's #1 insight: **start with competitive alternatives, not with what you do.** This skill operationalizes that by always grounding "the empty quadrant" against the actual competitor set, not against an abstract market.
2. **Geoffrey Moore — *Crossing the Chasm* (positioning statement template):** "For [target customer] who [need], the [product] is a [category] that [benefit]. Unlike [primary alternative], our product [primary differentiation]." This is the format of the deliverable — the one-sentence positioning move.
3. **Ries & Trout — *Positioning: The Battle for Your Mind* (mental real-estate):** you can only own ONE word/concept in the customer's mind. The "empty quadrant" framing inherits from this: the position you can own is the one nobody else is claiming AND that customers care about.

Adjacent frameworks worth knowing but not directly encoded here: **Treacy & Wiersema's three value disciplines** (product leadership / operational excellence / customer intimacy — pick one, do the others adequately) and **Ulwick's outcome-driven JTBD** (positioning aligned to unmet desired outcomes). If the founder uses these in their own thinking, fold them into the axis choices.

## When this skill applies

- Founder asks where the positioning gap is
- Pre-launch — choosing what to say no to
- Pre-fundraise — proving positioning is defensible
- Post-`customer-pain-mining` — synthesizing what you found with what competitors actually claim

## What you need (inputs)

1. **3–5 competitors with URLs** — fewer than 3 isn't a map; more than 5 is noise.
2. **The job-to-be-done** — one line. Without it, "axis" has no meaning.
3. **Customer pain themes — REQUIRED, not optional.** Output from `customer-pain-mining`. Positioning without pain context is just rearranging marketing copy. The gap lives where pain ≠ competitor claims. If the founder hasn't run pain-mining, refuse to produce a positioning sentence — produce only a descriptive map and flag this in the executive summary.
4. **(Optional) Founder's current positioning** — if doing a repositioning exercise.

If you don't have item 1, run `competitor-discovery`. If you don't have item 3, run `customer-pain-mining` first.

## Tools

**Exa MCP** (primary for axes 1, 2, 4 — modern SaaS marketing sites are JS-rendered SPAs):
- `mcp__claude_ai_Exa__web_fetch_exa(urls)` — pull homepage / pricing / customers / changelog pages. Batch multiple URLs per call.
- `mcp__claude_ai_Exa__web_search_exa(query, numResults)` — find case studies, changelog blogs, "X review" comparison posts.

**Anysite MCP**:
- `mcp__claude_ai_Anysite__execute(source="linkedin", category="company", endpoint="company", params={"company": "<alias>"})` — company entity + URN + employee count + specialities[] + short_description.
- `mcp__claude_ai_Anysite__execute(source="linkedin", category="search", endpoint="search_posts", params={"keywords": "<competitor> <category>", "date_posted": "past-month", "count": 10})` — what they're posting and what's being said about them in the last month. Use this for the "recent shipping" axis; it covers the same ground as `linkedin/company/company_posts` but with richer engagement filtering via `query_cache`.
- `mcp__claude_ai_Anysite__execute(source="linkedin", category="search", endpoint="search_jobs", params={"keywords": "<competitor>", "count": 20})` — open roles. Filter response by `company.alias` matching the actual target (keyword search can catch namesakes — e.g. a keyword search for one competitor may return a different competitor's roles that mention it in the JD).
- `mcp__claude_ai_Anysite__execute(source="sec", category="search", endpoint="search_companies", params={"entity_name": "<competitor>", "forms": ["10-K","S-1","D"], "count": 5})` — only for late-stage / public competitors. For early-stage consumer SaaS, returns nothing useful.
- `mcp__claude_ai_Anysite__execute(source="webparser", category="parse", endpoint="parse", params={...})` — only for static-HTML competitor sites. Modern SaaS marketing pages (Next.js / Vercel) return empty; use Exa instead.

Budget: ~3 Anysite calls per competitor (LinkedIn company + post search + jobs search) + ~2 Exa fetches per competitor. For 5 competitors: ~15 Anysite + ~10 Exa.

## How to run

For each competitor, run the same 5 axes. Capture as a row in a growing table.

### Axis 1 — Hero copy (who they pitch)

`mcp__claude_ai_Exa__web_fetch_exa(urls=["https://<competitor>.com"])`

Extract: H1 headline, sub-headline, the verb (build / write / cite / extract / scrape / etc.), explicit audience callout if any ("for academic researchers," "for indie devs," "for teams 10–500", "for AI agents").

Validated on the web-scraping niche: a single batched Exa fetch on `["brightdata.com", "apify.com", "firecrawl.dev", "scrapingbee.com", "anysite.io"]` returns hero + subhead + pricing summary + customer-logo trust bar for all 5 competitors in one call. The hero is the most curated surface — trust it least for "what the product actually does" and most for "who the company is currently pitching."

Webparser tends to fail on JS-rendered SPAs (Next.js / Vercel marketing sites) — Exa fetch is the reliable primary.

### Axis 2 — Pricing (who they actually sell to)

`mcp__claude_ai_Exa__web_fetch_exa(urls=["https://<competitor>.com/pricing"])`

If `/pricing` returns `CRAWL_NOT_FOUND` (it sometimes does for Next.js sites), the pricing is usually on the homepage from Axis 1 — search for "$" in the body text.

Extract: tier names, lowest paid tier (in $), highest published tier, gating (seats / usage / features / credits). Convert everything to monthly USD for comparability. The lowest tier reveals their floor; the highest reveals ambition.

Web-scraping API niche pricing spread (validated): Firecrawl $0 → $16 Hobby → $83 Standard → $333 Growth (credit-based, 5x multiplier on extract). Apify $5 free → $49 Starter (compute-unit). Bright Data product-by-product: Crawl $1/1K req; Unlocker $1/1K; Browser API $5/GB; Web Scraper $0.001/record; effective $499/mo for 510K records. ScrapingBee $49/mo Freelance → $99 Startup → $599 Business+. The whole category is in pricing turmoil — the dominant pain in `customer-pain-mining` is the credit-multiplier surprise, so the pricing axis has positioning leverage right now.

### Axis 3 — LinkedIn company entity (the org's verbatim self-positioning)

`mcp__claude_ai_Anysite__execute(source="linkedin", category="company", endpoint="company", params={"company": "<alias or website-derived alias>"})`

Returns: `short_description`, `description`, `employee_count`, `founded_on`, `specialities[]`, `headquarter_location`.

What to extract:
- `short_description` — often a single positioning sentence the company curates for LinkedIn (different from their homepage hero — useful contrast).
- `specialities[]` — explicit, comma-separated list of what they claim to do. Rare verbatim self-positioning. In Dunford's terms, this is their stated "un
Files: 1
Size: 30.6 KB
Complexity: 40/100
Category: AI Agents

Related in AI Agents