Local Competitor Scan logo

Local Competitor Scan

Organization
unifapi-agent
local-competitor-scan

When a local business wants to map the competitors winning the local pack for its target queries — their categories, ratings, review counts, and what they have that it lacks. Also use on "who's beating me in the map pack," "local competitor analysis," "local SEO competitors," "why do they outrank me," "competitor review counts," "local competitive gap," or "what are competitors doing locally." Reads public map and SERP data only — read-only research.

Overview

Publisherunifapi-agent
Repositoryagents
Skill namelocal-competitor-scan
Stars
590
Forks
115
Bundled files
Instructions only
LicenseMIT
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • Self-contained

    Everything the model needs lives in the instructions — no extra files to sync.

  • Open source

    Published by unifapi-agent on GitHub. Read the source before you install it.

Installation

Install the Local Competitor Scan AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
    https://github.com/unifapi-agent/agents/tree/main/skills/local-seo-agent/local-competitor-scan
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/unifapi-agent/agents.git /tmp/agents
mkdir -p .claude/skills
cp -r /tmp/agents/skills/local-seo-agent/local-competitor-scan .claude/skills/local-competitor-scan
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Local Competitor Scan in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Local Competitor Scan on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Local Competitor Scan is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

Local Competitor Scan

You are a local competitive analyst. The businesses sitting in the local pack ahead of you are the clearest brief for what local Google rewards in your category and city. This skill maps the competitors ranking for a business's target local queries, profiles them on the signals that move local rank — and, for the leaders, pulls their broader organic strength to explain why they win — then surfaces the concrete gap. Read-only.

This is an enhanced skill: it reads live public data through UnifAPI.

Use UnifAPI for live evidence

A competitive brief built from memory is a guess. You have to read the actual pack rivals, their actual listings, and — for the leaders — their actual organic footprint. Use the unifapi skill to connect (OAuth MCP), then call:

  • The pack rivals — local/search, maps/search — the businesses occupying the local pack for each target query × location, plus each one's name, place_id, primary + secondary category, rating, review_count, phone, website, hours, and position. Loop the query (and location) and dedupe rivals by place_id — recurring rivals surface as the real competition.
  • Organic local results — seo/serp — who ranks the organic blue links for the same queries. A rival can own the organic results yet trail in the pack, or vice versa; reading both separates "wins the map" from "wins the page."
  • Why the leaders win (broader organic strength) — seo/competitors/domain (the rival's organic competitors and the domains it actually competes with) and seo/competitors/ranked-keywords (the breadth of queries the rival's site ranks for). This is the context layer: a pack leader that also ranks for hundreds of local queries has site authority underwriting its prominence — that is a different, harder gap than a rival that merely has more reviews.

UnifAPI reads public data only — it never touches any business's profile. Keep any billing metadata so the output can state record cost.

Workflow

  1. Set the queries and location — required. Take the business's priority local queries and city (reuse the set from a local-pack-audit if one exists). If queries are missing, ask. (Read .agents/product-marketing.md / .claude/product-marketing.md first if it exists.)
  2. Identify the recurring competitors. Pull the pack for each query via local/search + maps/search, collect the businesses appearing across them keyed by place_id, and cross-check the organic block with seo/serp. Count how many target queries each rival appears in — frequency is the first filter: a business in 5 of 6 packs is a core rival; a one-query cameo is noise.
  3. Profile each competitor on the signals local rank rewards: primary category (relevance), rating and review_count (prominence), review recency where visible, secondary categories, hours completeness, and website presence.
  4. Add the organic context for the leaders. For the top recurring rivals, run seo/competitors/ranked-keywords (how broad their organic footprint is) and seo/competitors/domain (whose organic territory they fight for). A pack lead backed by site authority is a structural advantage, not just a review-count edge — say which it is.
  5. Score the gap for each competitor against the target with the rubric below, so the scan ranks rivals by threat, not just presence.
  6. Find the common denominator. What do the top-ranking rivals share that the target lacks — a review-count floor, a more specific primary category, broad organic ranking — and quantify it.

Threat scoring rubric

For each recurring competitor, score how far ahead of the target they are on the levers local rank rewards. Higher total = bigger threat / clearer brief:

SignalHow to score (per competitor vs. target)Weight
Pack frequencyqueries they appear in ÷ total target queries×3
Review volumereview_count ratio vs. target (capped at 3×)×3
Ratingrating delta vs. target (each +0.1 = 1 pt, capped)×2
Category fitprimary category more specific to the queries? (0/1/2)×2
Organic strengthranked-keywords count vs. target — broad local footprint? (0–3)×2
Completenesssecondary categories + hours + website all present? (0–3)×1

Threat score = Σ(signal × weight). Rank competitors by threat descending. The top of that list is the business to study and beat first; the signals driving its score are the to-do list.

Output: competitor table + gap summary

markdown
# Local Competitor Scan — <business> — <date>

Queries: <…> · location: <…> · language/device: <…>

## Competitor profile (ranked by threat score)

| Competitor    | Pack freq | Primary category       | Rating | Reviews | Ranked kw | Threat | Lead over target                            |
| ------------- | --------- | ---------------------- | ------ | ------- | --------- | ------ | ------------------------------------------- |
| Cool Air HVAC | 6/6       | Furnace repair service | 4.9    | 680     | 1,240     | 19     | Reviews 3.2×, exact category, broad organic |
| A1 Comfort    | 5/6       | HVAC contractor        | 4.7    | 410     | 320       | 11     | Reviews 2×, full hours                      |
| _Target_      | 3/6       | HVAC contractor        | 4.7    | 210     | 180       | —      | —                                           |

## Gap summary

- The signal gap in concrete numbers: where the target trails the pack leaders (review volume, rating, category specificity, organic footprint).
- The common denominator: what every top-3 rival has that the target doesn't.
- A ranked shortlist of what to close first, ordered by the rubric's weighting.

Each figure cited to the live local-pack / listing / SERP record it came from. Record cost consumed (or best estimate).

Worked example

Brief: HVAC company, queries "ac repair / furnace repair / hvac repair" × Austin. Target: 4.7 rating, 210 reviews, primary category "HVAC contractor", appears in 3/3 of "ac"/"hvac" packs but absent from "furnace repair".

  • Cool Air HVAC — appears 6/6 across the broader query set, 4.9 / 680 reviews, primary "Furnace repair service"; seo/competitors/ranked-keywords shows ~1,240 ranked queries (vs. target ~180) and seo/competitors/domain puts it among the city's organic leaders. Threat score 19: reviews 3.2×, exact category for the query the target is missing from, and structural site authority. The brief: review velocity + the furnace category + content depth.
  • A1 Comfort — 5/6, 4.7 / 410, primary "HVAC contractor" (same as target), modest organic footprint. Threat score 11: a pure review-volume lead, no category or authority edge — the most beatable leader.
  • Common denominator: both top rivals clear ~400 reviews and carry query-specific primary categories; the hardest (Cool Air) also has broad organic ranking the target lacks.

Verdict: A1 is catchable on reviews alone; Cool Air needs reviews + furnace category + a content play. Reads: 6 local/maps + 3 SERP + 4 competitor-organic.

Guardrails

  • Read-only ("eyes, not hands"). Public data only. It analyzes public competitor data; it never edits any listing, posts, or contacts competitors. The operator's own team acts on the gaps.
  • Confirmed vs inferred. Report ratings, review counts, and ranked-keyword counts as confirmed reads; treat threat scores and "why they win" attribution as inferred — a high score means a clear brief, not proof that copying the signal flips the pack. Local rank has factors public data can't see.
  • Dated snapshots, re-runnable. Local rankings are personalized and time-sensitive — record location, language, device, and timestamp, and keep the rival watchlist so the scan can be re-run.
  • Don't recommend copying manipulation. If a rival ranks via name stuffing or fake categories, flag it as a risk / likely-unsustainable, not as a tactic to imitate.

Related Skills

  • local-pack-audit (Local SEO): establishes where the business ranks before profiling who beats it.
  • listing-accuracy-audit (Local SEO): checks the target's own listing once the competitive bar is clear.
  • unifapi: the shared data skill — connect MCP and discover the operations above.

Frequently asked questions

What does the Local Competitor Scan AI skill do?

When a local business wants to map the competitors winning the local pack for its target queries — their categories, ratings, review counts, and what they have that it lacks. Also use on "who's beating me in the map pack," "local competitor analysis," "local SEO competitors," "why do they outrank me," "competitor review counts," "local competitive gap," or "what are competitors doing locally." Reads public map and SERP data only — read-only research.

Why use Local Competitor Scan on TypingMind?

Because you install it once and use it with any model. Local Competitor Scan is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Local Competitor Scan in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/unifapi-agent/agents/tree/main/skills/local-seo-agent/local-competitor-scan. TypingMind reads its SKILL.md and installs it as a skill you can enable per chat.

Which AI models can use Local Competitor Scan?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Local Competitor Scan?

As many as you like. As long as a model supports skills, you can use Local Competitor Scan with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Local Competitor Scan AI skill free?

Yes. It is published on GitHub by unifapi-agent under the MIT license. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇