Agent skill

Local SEO

by every-app in every-app/open-seo

Audit a Google Business Profile, compare it to local competitors, and map Maps visibility around a location.

MITAuto-check passedMarketing & SEO

Install Local SEO

skills CLI
$ npx skills add every-app/open-seo --skill local-seo -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install every-app/open-seo local-seo --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/every-app/open-seo.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/local-seo .claude/skills/local-seo && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
local-seo
GitHub stars
23k
Token cost
~1.9k tokens
SKILL.md length
1,073 words
Files
1
Skills in repo
19
Repo updated
First seen
Licence
MIT

At a glance

Audit a Google Business Profile, compare it to local competitors, and map Maps visibility around a location.

  • Works in 4 steps: Call get_project_context first and… → This skill needs business_overview. If… → Before spending credits, check the… → …
  • Tasks that involve Local SEO
  • SKILL.md covers Goal, Required inputs, Project context and Deliver as a report, plus 4 more sections
  • Reaches openseo.so

What it does

Local SEO is an agent skill from every-app/open-seo. Audit a Google Business Profile, compare it to local competitors, and map Maps visibility around a location.

Its SKILL.md is about 1.9k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Marketing & SEO, covering Local SEO. The repository describes itself as: Open source alternative to Semrush and Ahrefs. The licence is MIT.

When your agent uses it

  • Tasks that involve Local SEO

Example prompts

  • “/local-seo”

Workflow steps

4 steps, taken from the first numbered list in SKILL.md.

  1. Call get_project_context first and ground the work in it — what the business does and where it operates decides which keywords and radius…
  2. This skill needs business_overview. If it is empty, run a minimal inline setup: infer what the business does and its location from the…
  3. Before spending credits, check the research log. If the same research ran within the last 30 days, reuse that result and say so instead of…
  4. On finish, write back what is durable with update_project_context — local competitors that have a website via addCompetitors (competitor…

What it can do on your machine

Read from SKILL.md and the folder at commit deb4491. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    No scripts in the folder and no shell commands in SKILL.md.

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Hosts in commands or code, which the agent is likely to contact:

    • openseo.so

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Local SEO loads about 1.9k tokens when it runs. Until then it costs about 30 tokens; SKILL.md has 1,073 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~30
When it runs · the whole SKILL.md, loaded when a task matches
~1.9k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from every-app/open-seo at commit deb4491, republished under its MIT licence (© every-app). 1,073 words, ~1,883 tokens.

Download SKILL.mdSave it as .claude/skills/local-seo/SKILL.md (or your agent's skills folder).
name
local-seo
description
Audit a Google Business Profile, compare it to local competitors, and map Maps visibility around a location.

OpenSEO Local SEO

Goal

Work out why a business does or does not show up in Google Maps and the local pack near its customers, and what to fix first.

Use this when rankings depend on a physical location or service area. For national organic work, use competitor-analysis or keyword-research.

Required inputs

  • projectId
  • The business: name, or a cid/placeId (most reliable)
  • Its coordinate (latitude/longitude) — derive it from a search_local_businesses / get_local_serp_results row; only ask the user when derivation is ambiguous
  • One to three keywords customers actually search (e.g. "emergency plumber", not the brand name)

Project context

The project-context tools are free and shared with the app and other agents.

  1. Call get_project_context first and ground the work in it — what the business does and where it operates decides which keywords and radius matter.
  2. This skill needs business_overview. If it is empty, run a minimal inline setup: infer what the business does and its location from the site and confirm it with the user in one question, write it back with update_project_context, then continue. Never front-load the full interview; suggest seo-project-setup at the end for the rest.
  3. Before spending credits, check the research log. If the same research ran within the last 30 days, reuse that result and say so instead of re-buying it.
  4. On finish, write back what is durable with update_project_context — local competitors that have a website via addCompetitors (competitor rows are keyed by domain, so skip listings without one), a corrected business_overview — and append a research log entry: { appendResearchLog: { summary: "Local SEO: <business> near <area>. Verdict: <conclusion>" } }.

Deliver as a report

Deliver through the seo-report skill, saving with skill: "local-seo". If that skill is not available, say so and stop before writing HTML.

OpenSEO MCP tools

  • search_local_businesses: nearby listings, filterable by minRating, minReviews, and isClaimed — use isClaimed: false to find unclaimed listings when prospecting. One call with the brand name as query and a wide radius returns category, rating, review count, claimed status, coordinates, and cid for every location of a chain — usually enough that per-location get_business_profile calls are unnecessary.
  • get_local_serp_results: the Maps/Local Finder result set near a coordinate. The rows carry cid and place_id — collect them once and reuse them everywhere below.
  • get_business_profile: the full profile for one business (hours, rating breakdown) when the search_local_businesses row isn't enough.
  • get_business_reviews: reviews with ratings, text, and whether the owner replied. Queued: a processing response returns a taskId — call again with it after 30-60 seconds, at no extra cost.
  • get_local_rank_grid: rank at every point of a grid around a coordinate, with each point's result count and #1 business. 3x3 is nine searches; only go to 5x5 when the service area is genuinely wide.
  • get_google_business_questions: Q&A on the profile (accepts cid/placeId).
  • get_business_updates: posts published on the profile, with dates.
  • list_business_categories: valid category slugs for search_local_businesses.

Workflow

  1. Find the business. Given only a name or website, search_local_businesses (name as query, wide radius) locates the listing and yields its cid and coordinate. If it returns several locations, the business is a chain — see multi-location below.
  2. Run get_local_serp_results for the main keyword near the business coordinate. Record the top 3-5 competitors' cid/place_id and the user's own row.
  3. Compare the user's listing against the top two competitors: primary category, additional categories, review count, hours completeness, photo count, claimed status. search_local_businesses rows usually carry all of this; use get_business_profile for what they lack.
  4. Sanity-check each listing's website link (url/contact_url in the rows): it should deep-link to that location's page on the project domain, not a homepage or a stale domain. For broader on-page work, hand off to run_site_audit.
  5. Call get_business_reviews for the user and the strongest competitor. Look at review volume, recency, average rating, and how many reviews got an owner reply.
  6. Run get_local_rank_grid for the main keyword. Use the grid to separate "ranks at the storefront only" from "ranks across the service area", and each point's topResult to name who wins where the target doesn't.
  7. Add get_google_business_questions and get_business_updates when the profile basics are already competitive and the gap is engagement rather than setup.
  8. Turn the evidence into a prioritized list. Category and claim problems outrank posting cadence every time.
Show full SKILL.md (378 more words)Show less
Multi-location businesses

Always build the profile snapshot table for the whole chain — one search_local_businesses call covers it. The per-location deep-dives (reviews, grid, posts, Q&A) are where cost scales:

  • 5 locations or fewer: deep-dive them all.
  • More than 5: present the snapshot table, then ask the user (AskUserQuestion) which 1-3 locations to deep-dive. Pick sensible defaults to recommend — e.g. the weakest profile in the densest market.

Output format

h1: the business name.

If a report template applies (see seo-report), its sections and tone replace this list.

Sections in this order:

  1. Snapshot — one or two opening sentences, then a table of category, rating, review count, and claimed status. One row per location for a chain.
  2. The one fix — one finding. Category and claim problems outrank posting cadence every time.
  3. Head to head — a table of signal, this business, the best competitor, and the gap. Cover categories, reviews (count, recency, owner replies), hours and profile completeness, and the listing's website link.
  4. Maps coverage — what the grid shows, where visibility drops off, and who wins there. A bar chart of ranks by direction reads faster than a paragraph; label every value.
  5. Q&A and posting — only when the basics are already competitive.
  6. What to do next — an ordered list.
  7. How this report was made — opens with the skill link line from seo-report, pointing at https://openseo.so/docs/skills/local-seo ("OpenSEO Local SEO skill"), then which tools returned what, plus a note reading each missing grid rank against that point's resultsCount rather than calling it invisibility.

Guardrails

  • Do not run a 5x5 grid, or grids for several keywords, without telling the user the cost first — every point is a paid SERP call.
  • Match businesses by cid or place_id when you have one. Name matching collides with chains and similarly named businesses.
  • A missing rank at a grid point means the business wasn't among the results returned there. Read it with that point's resultsCount: a full result set means outranked; a near-empty one means a sparse SERP, not proof of invisibility.
  • Do not infer local-pack strength from national organic metrics.
  • Never recommend review gating, fake reviews, or keyword-stuffed business names.
  • A grid centered on the wrong place is worse than no grid — confirm the coordinate matches the storefront before spending grid credits.

© every-app, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in .agents/skills/local-seo of every-app/open-seo.

Open the folder on GitHubat commit deb4491

Compare with similar skills

Local SEO next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Local SEO compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Local SEO this skillevery-app/open-seo23k—~1.9kAutomated safety check: PassMIT
FLOW SEO FrameworkAgriciDaniel/claude-seo18k2 repos~1.4kAutomated safety check: PassMIT
Google Mapscablate/mcp-google-map468—~909Automated safety check: PassMIT
Google Maps Local SEOcablate/mcp-google-map468—~633Automated safety check: PassMIT
Google Maps Travel Planningcablate/mcp-google-map468—~710Automated safety check: PassMIT
SEO Project Setuppetera2c/simple-table2292 repos~1.5kAutomated safety check: PassMIT

Similar skills

  • FLOW SEO Framework

    AgriciDaniel/claude-seo

    Brings the FLOW framework's stage-specific SEO prompts into the agent, from keyword discovery through backlinks, on-page work and conversion to local SEO, loaded on demand.

    18k GitHub starsUsed in 2 repos~1.4k tokens
    Marketing & SEOAuto-check passed
  • Google Maps

    cablate/mcp-google-map

    Search places, resolve addresses, compare routes, inspect neighborhoods, and retrieve geographic or environmental facts through the standalone @cablate/mcp-google-map CLI.

    468 GitHub stars~909 tokensUpdated 12 days ago
    Marketing & SEOAuto-check passed
  • Google Maps Local SEO

    cablate/mcp-google-map

    Analyze Google Business Profile visibility, geographic grid rankings, local search keywords, and nearby competitors through the standalone Google Maps CLI.

    468 GitHub stars~633 tokensUpdated 12 days ago
    Marketing & SEOAuto-check passed
  • Google Maps Travel Planning

    cablate/mcp-google-map

    Build evidence-backed day trips, multi-day itineraries, and efficient stop sequences with Google Maps data through the standalone CLI.

    468 GitHub stars~710 tokensUpdated 12 days ago
    Marketing & SEOAuto-check passed
  • SEO Project Setup

    petera2c/simple-table

    Set up a durable local SEO workspace with project context, notes, goals, positioning, preferences, MCP checks, and Search Console data intake.

    229 GitHub starsUsed in 2 repos~1.5k tokens
    Marketing & SEOAuto-check passed
  • Universal SEO Analysis

    AgriciDaniel/claude-seo

    Hub for site-wide SEO work: audits, technical checks, schema, content quality, local, hreflang and AI-search readiness, run through slash commands.

    18k GitHub stars~4.9k tokensUpdated 4 days ago
    Marketing & SEOAuto-check passed

More from every-app/open-seo

All 19 skills in this repo
  • Papercuts

    every-app/open-seo

    Log genuine, recurring repository friction to .agents/PAPERCUTS.md — confusing setup, a flaky repo command or script, a misleading in-repo error, stale generated files, or a non-obvious gotcha that…

    23k GitHub starsUsed in 1 repo~1.2k tokens
    Auto-check passed
  • Evaluate Skill

    every-app/open-seo

    Test a candidate OpenSEO skill end to end by running fresh, isolated Codex sessions against the local backend and scoring the reports they save.

    23k GitHub stars~1.8k tokensUpdated 2 days ago
    Auto-check: notes
  • Simple Issue Description

    every-app/open-seo

    Turn a rough bug report, feature request, support note, or pull request into a short, plain-language issue focused on the problem and desired behavior.

    23k GitHub starsUsed in 1 repo~1.2k tokens
    Auto-check passed
  • Create Repo Skill

    every-app/open-seo

    Create or update a skill in this repository the right way — canonical home in .agents/skills, internal-vs-public marking, symlink mirroring into .claude/skills, and public docs registration for…

    23k GitHub stars~1.4k tokensUpdated 2 days ago
    Auto-check passed
  • Deslop

    every-app/open-seo

    Remove AI writing patterns from prose so it reads like a person wrote it.

    23k GitHub stars~602 tokensUpdated 2 days ago
    Auto-check passed
  • Observability Triage

    every-app/open-seo

    Triage OpenSEO production errors in Cloudflare Workers Observability — verified query recipes, counting gotchas, and a known-noise filter list applied automatically.

    23k GitHub stars~1.7k tokensUpdated 2 days ago
    Auto-check passed

Categories

Questions about Local SEO

What does Local SEO do?

Audit a Google Business Profile, compare it to local competitors, and map Maps visibility around a location. Local SEO is an agent skill from every-app/open-seo. Audit a Google Business Profile, compare it to local competitors, and map Maps visibility around a location.

When should I use Local SEO?

Local SEO fits situations like: tasks that involve Local SEO.

How do I install Local SEO in Claude Code?

Run `npx skills add every-app/open-seo --skill local-seo -a claude-code`. Or copy the skill folder (.agents/skills/local-seo in every-app/open-seo) into .claude/skills/local-seo in your project. Claude Code loads it when a task matches its description.

How do I install Local SEO in Codex?

Run `npx skills add every-app/open-seo --skill local-seo -a codex`. Or copy the skill folder (.agents/skills/local-seo in every-app/open-seo) into .agents/skills/local-seo in your project. Codex loads it when a task matches its description.

Can I use Local SEO in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add every-app/open-seo --skill local-seo -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/local-seo, .gemini/skills/local-seo, .github/skills/local-seo and .opencode/skills/local-seo in your project.

What does Local SEO need to run?

SKILL.md names no scripts, command-line tools or credentials: Local SEO is instructions for the agent only.

Does Local SEO access the network?

SKILL.md names 1 domain. In commands or code: openseo.so; the agent is likely to contact it when it follows the instructions. This is read from the text; nothing was executed.

Is Local SEO safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Local SEO use?

Local SEO is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Local SEO use?

About 1.9k tokens (SKILL.md is roughly 7.5k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Local SEO?

Skills that share tags, products or a category with Local SEO: FLOW SEO Framework (AgriciDaniel/claude-seo, 18k stars), Google Maps (cablate/mcp-google-map, 468 stars), Google Maps Local SEO (cablate/mcp-google-map, 468 stars) and Google Maps Travel Planning (cablate/mcp-google-map, 468 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Local SEO?

every-app (a GitHub organization) maintains it in every-app/open-seo, which has 22,680 GitHub stars. The repository holds 19 skills in this directory. The repository was last updated on October 6, 2026.

Source: every-app/open-seo on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.