Local SEO by WorkPods

ai.workpods由 workpods.ai 發布v1.0.1更新於 Nov 7, 2026

Audit Google Business Profiles, reviews and Maps rankings, and check a site's NAP and schema.

發布方自己的服務:Agent Ready Website Audit

概覽

AI 產生的概覽

透過搭配的 Chrome 擴充功能稽核 Google 商家檔案、評論、貼文與地圖排名,並檢查網站的 NAP 與結構化資料。

可以做什麼
  • 在 Google 地圖上尋找商家,取得 placeId 或 cid 供其他工具使用
  • 稽核 Google 商家檔案並給出 0-100 分數,比對歷史快照查看變化
  • 讀取並分析評論與貼文,包括發文頻率與評論趨勢
  • 讀取某次搜尋的地圖結果,並排比較 2 至 10 個商家,建議類別
  • 檢查單一地點的排名,或圍繞中心點以網格檢查一片區域的排名
  • 核對網站上的名稱、地址、電話、營業時間是否與商家檔案一致,並檢查 LocalBusiness 結構化資料、一鍵撥號與嵌入地圖
適用情境
適合在地 SEO 工作:稽核 Google 商家檔案、診斷商家在某個地點為何搜尋不到、與競爭對手比較,或核對網站與商家檔案的 NAP 一致性。它只讀取資料,不會向 Google 發布變更。
執行需求
需要 Node.js 22 或更新版本,透過 npx 以 stdio 執行。多數工具需要安裝 Local SEO Chrome 擴充功能並與本機橋接配對,且保持 Chrome 開啟;網站檢查也可在 Node 中不依賴擴充功能執行。不需 WorkPods 帳號。選用的付費資料來源使用使用者自己的帳號,金鑰保存在擴充功能中。
安裝前請注意
部分工具會透過使用者自己的 DataForSEO 帳號產生費用,例如每 10 則評論約 0.0015 美元、每個網格點約 0.002 美元。擴充功能的配對碼應妥善保密。以瀏覽器讀取的資料可能不完整,結果中會說明這些限制。AI 能見度工具會在使用者已登入的瀏覽器工作階段中提問。與 Google 無關聯。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Local SEO by WorkPods,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

@workpods/local-seo

Local MCP server and CLI that pairs with the Local SEO browser extension to audit Google Business Profiles and check Google Maps rankings.

Install the extension

Install Local SEO from the Chrome Web Store.

Profile, review, post, and Maps ranking tools need the extension. The website check can also run in Node without it.

Quick start

Requires Node.js 22 or later. Print the installed package version:

bash
npx -y @workpods/local-seo --version

Check a website against a business's name, address, and phone:

bash
npx -y @workpods/local-seo audit-website https://example.com/ \  --name "Example Business" --phone "+1 415-555-0100" --address "123 Example St"

The command prints a Markdown report and exits with code 1 if a high-severity check fails or partly fails. Facts you leave out are not compared. Running npx -y @workpods/local-seo without a subcommand prints usage and exits with code 2.

Use from an AI agent

For Claude Code:

bash
claude mcp add local-seo -- npx -y @workpods/local-seo mcp

For Cursor (~/.cursor/mcp.json) or Claude Desktop (claude_desktop_config.json), add this to the client's MCP settings:

json
{  "mcpServers": {    "local-seo": {      "command": "npx",      "args": ["-y", "@workpods/local-seo", "mcp"]    }  }}

Pair the extension with this computer's bridge:

bash
npx -y @workpods/local-seo pair

Enter the code in the extension's Settings → Agent connection, and enable Connect to the local bridge when it runs. Keep Chrome open while the agent works. The client starts the local server over stdio. Keep the pairing code private.

See agent setup for Codex, skills, and Firefox origin configuration.

What it can do

  • Profiles: audit a Google Business Profile and report findings and suggested fixes.
  • Reviews and posts: read reviews and posts, then summarize review trends and posting activity. Browser reads can be incomplete; the result reports those limits.
  • Local competitors: read Maps search results and compare businesses and categories.
  • Rankings: check a business's position from one point or across a grid of locations.
  • Website checks: compare the site's name, address, and phone with the profile, and inspect LocalBusiness schema, a click-to-call link, and an embedded map.
  • AI answers: collect answers about local businesses from supported assistants through the extension, using browser tabs or an optional provider.
  • Categories and history: suggest categories and compare saved profile snapshots to show what changed. The tools read profiles; they do not publish changes to Google.

No WorkPods account is required. Optional providers use your own accounts and may charge for usage. Keys stay in the extension; the MCP server returns results and does not receive those keys.

Links

Local SEO by WorkPods · Source code · Privacy policy · CLI documentation · Apache-2.0 license

Built by WorkPods. Written by Shefali Munjal. See LICENSE and NOTICE for licensing and attribution. Not affiliated with or endorsed by Google.

來源:bridge/README.md,提交 035d49d

工具

12

find_business

Find a business

Searches Google Maps for a business by name, or for a kind of business, and lists the places Maps shows. Use it first when the user names a business, to get an exact placeId or cid to pass as business to the other tools; if several candidates fit, ask the user which one. It works in the user's own Chrome through the Local SEO extension, opening Google Maps in a background tab, and fails with a message saying how to connect when the extension is not connected. Nothing is written to Google. Returns query, from (the point searched from, null when Maps chose) and candidates. Each result has position (1-based, ads not counted), sponsored, name, ids (placeId, cid, kgId, featureId, each null when Maps did not expose it), primaryCategory, rating, reviewCount, address and location (the place pin {lat, lng}), each null when the list did not show it.

輸入參數nearquery必填

audit_profile

Audit a Business Profile

Audits one Google Business Profile against every Local SEO check: profile basics, categories, description, services and attributes, photos, reviews, posts, the linked website and trust signals, with a 0-100 score. Use it for a profile audit or to confirm a fix. include picks what is read beyond the profile; keyword adds the relevance checks and is the competitor search. It works in the user's own Chrome through the Local SEO extension, opening Google Maps in a background tab, and fails with a message saying how to connect when the extension is not connected. Nothing is written to Google. It can take a few minutes. Returns business (the full profile record), findings, score (an object: score, 0-100, or null when no check could be judged; judged, the number of checks judged; untested, the number not_applicable), fixes (checkId, title, severity, fix; most important first), reportMarkdown (the whole audit as a readable report) and notes on what was not read, including when Maps showed the page in a language other than English, which leaves some fields missing. The audit reads posts in the browser, which sees only the newest one, so the posting checks (L26 to L29) are not_applicable with the reason; read_posts with source dataforseo reads them all. When Maps keeps its own "Most relevant" review order, a note says so and the recency checks (L22 recent reviews, L24 reply speed, L25 recent unanswered negatives unless one was found) are not_applicable. Each finding has checkId (a Local SEO check id such as L7), group, status (pass, partial, fail or not_applicable), severity (high, medium or low on a fail or partial, null otherwise), a one-sentence summary and evidence (url, value, note). not_applicable means the check could not be judged, never that it passed or failed. A profile field the page or provider did not give is {missing: true, reason}; with absent: true it means Google was read and lists nothing there (no phone on the profile), which is a real gap, while without i

輸入參數includekeywordbusiness必填

read_reviews

Read reviews

Reads a business's Google reviews and analyses them. Use it for review strategy, reply drafting or to judge review velocity. source picks free browser reading or paid DataForSEO, which is faster for large reads: about $0.0015 per 10 reviews. With source dataforseo it spends from the user's own DataForSEO account inside the extension, within the monthly cap set there; a call over the cap, or with no cap set, is refused with an error saying so, and the same request within the cache window the user set in the extension (7 days unless changed) is served from the cache for nothing. spend says what was charged (null when nothing paid was called). The agent never sees the key. Returns business (name, source, readAt, placeId, cid, primaryCategory, address, phone, website, rating, reviewCount; each null when unknown); reviews, one page of at most 100 (id, rating, text, publishedAt ISO or null, relativeAge as shown, ownerReply or null, authorReviewCount, photoCount); analytics over every review read (count, averageRating, distribution by star, monthly trend, velocity in the last 30, 90 and 365 days or null when no review is dated, responses with reply rate and median reply days, unansweredNegatives, photoShare and themes); read (how many were read); order (newest: newest first; most_relevant: the browser could not set Maps' Newest sort, so the reviews are Maps' "Most relevant" sample, which can skip recent ones; do not judge velocity, reply speed or recent negatives from it); truncated (true when the read holds fewer than the profile has, or stopped at max when the profile count is unknown); notes (why fewer were read or why the order is not newest, such as Google's signed-out view showing about five, only the Overview's reviews when the Reviews tab did not open, or Maps shown in a language other than English, which can leave the order unset; empty when nothing to say); and nextCursor: when not null, call again with it as cursor for the next page of the same read. A null rate

輸入參數maxcursorsourcebusiness必填

read_posts

Read posts

Reads a business's Google posts (Updates, offers and events), newest first, and analyses how often the owner posts. Use it to judge posting cadence or before planning posts. source picks free browser reading, which sees only the newest post Maps shows on the profile's Overview, or paid DataForSEO, which reads the full list: about $0.003 per read plus $0.0015 per 10 posts. With source dataforseo it spends from the user's own DataForSEO account inside the extension, within the monthly cap set there; a call over the cap, or with no cap set, is refused with an error saying so, and the same request within the cache window the user set in the extension (7 days unless changed) is served from the cache for nothing. spend says what was charged (null when nothing paid was called). The agent never sees the key. Returns business (name, source, readAt, placeId, cid, primaryCategory, address, phone, website, rating, reviewCount; each null when unknown); posts (text, publishedAt or null, relativeAge, hasMedia, link, kind: update, offer, event or unknown); analytics (count, lastPostAgeDays, last30, last90, medianIntervalDays, gaps of over 30 days, mediaShare, linkShare, kinds; a null figure means no dated post supports it); truncated (always true from the browser); and unknown. unknown is null only when the full list was read (source dataforseo), and then an empty list is a real finding: the profile has no posts. From the browser unknown is always a sentence saying why (only the newest post was seen, or Google's signed-out view hid them): how often the business posts is unknown, not zero; say so, and offer source dataforseo.

輸入參數maxsourcebusiness必填

local_scan

Scan local results

Reads the Google Maps results for a search from a point and lays them out side by side, with how often each category is used. Use it to see who wins a local search and why, or to find competitors. withDetails opens each profile for the fields the result list does not show. It works in the user's own Chrome through the Local SEO extension, opening Google Maps in a background tab, and fails with a message saying how to connect when the extension is not connected. Nothing is written to Google. Returns results (surface, query, from, readAt and the ranked list), rows (position, sponsored, name, ids, primaryCategory, secondaryCategories, rating, reviewCount, photoCount, website, phone, claimed, address, distanceKm from the point searched from, straight line to one decimal; each null when not read or not known), categoryFrequency (category, usedBy, asPrimary, share 0-1 of rows with known categories), detailsRead and truncated (stopped at max while Maps had more). Each result has position (1-based, ads not counted), sponsored, name, ids (placeId, cid, kgId, featureId, each null when Maps did not expose it), primaryCategory, rating, reviewCount, address and location (the place pin {lat, lng}), each null when the list did not show it.

輸入參數maxnearquery必填withDetails

rank_at

Rank from a point

Runs one Maps search as if the customer stood at a point (Teleport) and says where the business ranks there. Use it to check one location, such as a customer complaint ("I can't find you from the station"); use geo_grid for an area. It works in the user's own Chrome through the Local SEO extension, opening Google Maps in a background tab, and fails with a message saying how to connect when the extension is not connected. Nothing is written to Google. Returns at, zoom, rank and results, the top 20 at that point. A rank is {kind: "ranked", rank}, {kind: "not_found", depth} (the list was read to depth organic results, as many as Maps listed up to the cap, and the business was not there, which is not rank 0), or {kind: "unknown", reason} (the point could not be read, or Maps cut its list short, so the business may sit just past it). Each result has position (1-based, ads not counted), sponsored, name, ids (placeId, cid, kgId, featureId, each null when Maps did not expose it), primaryCategory, rating, reviewCount, address and location (the place pin {lat, lng}), each null when the list did not show it.

輸入參數at必填zoomquery必填business必填

geo_grid

Geo-grid rank map

Maps where a business ranks across an area: a size x size grid of points spacingKm apart around center, one Maps search from each. Use it for rank diagnosis by distance. The browser source is free but slow and capped at 5x5; dataforseo allows up to 13x13 at $0.002 per point (a 7x7 grid is about $0.10). Call it first with estimateOnly true to get the price for the user to approve. With source dataforseo it spends from the user's own DataForSEO account inside the extension, within the monthly cap set there; a call over the cap, or with no cap set, is refused with an error saying so, and the same request within the cache window the user set in the extension (7 days unless changed) is served from the cache for nothing. spend says what was charged (null when nothing paid was called). The agent never sees the key. A large browser grid can take 10 minutes. Returns source, depth (results read at each point), cells (point with row, col, lat, lng; and rank), summary (points, ranked, notFound, unknown, averageRank over ranked points or null, top3Share of read points or null, best), estimatedCostUsd (null for browser) and spend. With estimateOnly, cells is empty and summary null. A rank is {kind: "ranked", rank}, {kind: "not_found", depth} (the list was read to depth organic results, as many as Maps listed up to the cap, and the business was not there, which is not rank 0), or {kind: "unknown", reason} (the point could not be read, or Maps cut its list short, so the business may sit just past it).

輸入參數size必填zoomquery必填center必填sourcebusiness必填spacingKm必填estimateOnly

category_ideas

Category ideas

Finds the Google Business Profile categories that the top-ranking competitors use, how often, and which of them the business lacks. Use it to choose a primary category and secondary categories. Give business, query or both: with only a business, its primary category is the search. The top 8 competitors' profiles are opened one at a time in a background tab for their secondary categories, so it takes about a minute. It works in the user's own Chrome through the Local SEO extension, opening Google Maps in a background tab, and fails with a message saying how to connect when the extension is not connected. Nothing is written to Google. The category counts are read from Maps for free; searchVolumes adds paid DataForSEO search volumes for each category name (one keyword task, about $0.012 plus $0.00012 per category). With source dataforseo it spends from the user's own DataForSEO account inside the extension, within the monthly cap set there; a call over the cap, or with no cap set, is refused with an error saying so, and the same request within the cache window the user set in the extension (7 days unless changed) is served from the cache for nothing. spend says what was charged (null when nothing paid was called). The agent never sees the key. Returns query, competitorsRead, categories (category, usedBy, asPrimary, share 0-1), missing (null when no business was given), volumes (category, monthlySearches or null when unknown, in the business's country, or the United States when its address names no country or no business was given; volumes itself is null unless searchVolumes was asked for and a key is set) and spend.

輸入參數nearquerybusinesssearchVolumes

check_website_nap

Check website NAP

Checks whether a business's website states the same name, address, phone and hours as its Google profile, and whether it has LocalBusiness schema, a click-to-call link and an embedded map. Use it for NAP consistency or to check a location page. With business, the extension reads the profile from Maps and checks the website it links unless url is given. Without the extension, pass url and profile (name, and phone and address if known) and the page is fetched from this computer instead, without running its JavaScript. Returns website (url; name, address, phone and hours each with status match, mismatch, not_found (the site does not state it) or profile_missing (nothing to compare), the profile value and what the site states; localSchema with types and missing fields, or null when the page has no LocalBusiness schema; telLinks; embeddedMap), findings (checks L30 to L35), profileFrom (maps or arguments) and notes. Each finding has checkId (a Local SEO check id such as L7), group, status (pass, partial, fail or not_applicable), severity (high, medium or low on a fail or partial, null otherwise), a one-sentence summary and evidence (url, value, note). not_applicable means the check could not be judged, never that it passed or failed.

輸入參數urlprofilebusiness

compare_businesses

Compare businesses

Lays 2 to 10 Google Business Profiles side by side and measures how far the first falls behind the rest. Use it when the user names their competitors; use local_scan to find who actually ranks. keyword adds each business's Maps rank. It works in the user's own Chrome through the Local SEO extension, opening Google Maps in a background tab, and fails with a message saying how to connect when the extension is not connected. Nothing is written to Google. Returns rows in the order given (position is that order; name, ids, categories, rating, reviewCount, photoCount, website, phone, claimed, address; each null when unknown), gap (competitors, missingCategories, primarySharedBy, and reviews, rating and photos each as target, competitorMedian, difference and known, null where a side is unknown; and summary sentences) and ranks (null without keyword). A rank is {kind: "ranked", rank}, {kind: "not_found", depth} (the list was read to depth organic results, as many as Maps listed up to the cap, and the business was not there, which is not rank 0), or {kind: "unknown", reason} (the point could not be read, or Maps cut its list short, so the business may sit just past it).

輸入參數keywordbusinesses必填

profile_history

Profile history

Lists what the extension saved each time it read this profile in the past, and what changed between reads: name, categories, address, phone, website, hours, description, rating, review and photo counts, claimed state and closure. Use it to spot a suspended or edited profile, or a competitor changing its name or category. History comes from the extension storage, so a profile never read before has none. An id or link this device has seen answers without reading Google; given {name, city}, a short link, or an id the extension has not seen, Maps is opened once to learn the business's ids first. Returns snapshots (readAt and a summary, oldest first) and changes (field, before, after, from, to). A profile field the page or provider did not give is {missing: true, reason}; with absent: true it means Google was read and lists nothing there (no phone on the profile), which is a real gap, while without it the value is simply unknown. Never treat either as 0.

輸入參數business必填

local_ai_visibility

Local AI visibility

Asks AI assistants a local buyer question, "best <query> in <city>", and reads whether each answer names the business. Use it to measure local AI visibility against competitors. source assist (the default, free) asks in the user's own signed-in browser sessions, and an engine the user is not signed in to comes back missing. source cloro asks ChatGPT, Gemini and AI Mode unattended through the user's Cloro key: about $0.014 for chatgpt and $0.012 each for gemini and ai_mode; call it first with estimateOnly true to get the price for the user to approve. A cloro run over the monthly cap, or with no key or cap set, is refused with an error saying so. Perplexity is always asked in assist mode. It works in the user's own Chrome through the Local SEO extension, opening Google Maps in a background tab, and fails with a message saying how to connect when the extension is not connected. Nothing is written to Google. Returns prompt, source, estimatedCostUsd (null for assist) and answers (empty with estimateOnly), one per engine: engine, and answer, either {missing: true, reason} or verdict (recommended when among the first three businesses named, named when later, absent), position (1-based among businesses named, null when absent), excerpt (the passage naming it, or the opening when absent), businessesNamed, competitorsNamed and citedUrls. One run is one sample; answers change between runs.

輸入參數city必填query必填sourceenginescompetitorsbusinessName必填estimateOnly

版本歷史

1
  1. v1.0.1最新Nov 6, 2026

評分

已滿足適用檢查項的 90%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分
  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具必需15 分
  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分

其他 Workpods 整合