We already run OpenSEO. Here is the GEO report local businesses are not getting.
If you still treat SEO as crawl plus keywords plus ranks, you are auditing last year's channel. The question in 2026 is whether ChatGPT, Gemini, and Claude mention the business when a real person asks for the job.
That is not a slogan. It is a report we can run this week on the OpenSEO instance Creative Marketing AI already operates. The MCP endpoint is live at openseo.creativemarketing.ai/mcp. DataForSEO feeds the crawl, keyword, rank, and AI-visibility data. Google Analytics is already wired. We are not discovering a vendor. We are not standing up a second copy. We are productizing GEO, AEO, prompt explorer, and AI visibility on the stack we already pay for.
every-app/open-seo is on GitHub's daily trending list today, Sunday August 30, 2026. That is a signal, not a purchase order. Last tagged release is v0.1.6, shipped August 19. There is no new in-window release. Shared project context, SAM skills, Lighthouse as an opt-in on agent-run audits, and Google Analytics MCP tools are already in that tag. We already have the parts. The gap is the client-facing GEO report, not another login.
What the instance already covers
OpenSEO is an open-source SEO platform built so a human and an agent share the same data. The workflows we actually use:
Keyword research. Saved keywords. Rank tracking. Domain overview. Backlinks. Site audit. AI visibility. Prompt explorer. Local SEO tools for business profiles, reviews, and local rank grids. Google Analytics organic traffic on the dashboard and through MCP.
Site audit is a table of pages, not a ninety-page PDF. Rank tracking is a feature you can see, not a buried module. v0.1.6 added project context that SAM and MCP clients both read: goals, positioning, competitors, key pages, writing preferences. That context is how an agent stops inventing the client's market every time it opens a chat.
MCP is the operational change. The coding agent CMA already uses can call the instance: research keywords, pull Search Console where connected, read GA, dump a cluster into the workspace, run prompt explorer across supported models. The agent drafts. A human sends. The agent does not publish.
DataForSEO is the paid data plane. We already hold the key. Do not send a client to a public hosted signup. Do not spin a second OpenSEO "to try the UI." The UI we need is the one on our instance. If something is missing, it is a productization job on our side, not a new vendor evaluation.
Last year's audit vs this year's question
A classic local SEO audit still matters. Titles, H1s, redirects, thin pages, schema, NAP consistency, the commercial keyword set, the rank snapshot. Clients understand that language. They have been buying it for a decade.
It is no longer enough, because the first research step for a lot of buyers is not Google's ten blue links. It is a prompt. "Best plumber near Plano." "Who does AC repair on weekends." "Emergency electrician Frisco." The model answers in sentences. It names two or three businesses, or it names none and points at a directory. If our client is not in that answer, the rank-one page they paid for is a channel they no longer fully own.
GEO is generative engine optimization: are you in the generated answer. AEO is answer engine optimization: are you the cited source. AI visibility in OpenSEO is the lookup. Prompt explorer is how you collect the receipts. Run the same five service prompts across the models you care about. Save the answers. That is a monthly report you can sell, because the client has never seen it.
Do not promise we replaced a four-figure suite. Promise a readable technical punch list, a commercial keyword set, and a GEO check the client has not received.
The five prompts
Use the client's real service, city, and brand. Do not use "best marketing agency" as a demo unless that is the client. The panel is:
- Best [service] near [city]
- Who does [job] on weekends
- Emergency [service] [city]
- [Brand] reviews
- [Brand] vs [known competitor]
That set covers discovery, after-hours intent, panic intent, reputation, and comparison. Those are the five ways a local buyer actually asks. If the model mentions the brand on prompt 1 and 4 but not on 3, you have a content and entity problem, not a "we need more blog posts" problem. If it names the competitor on 5 and describes our client as "a local option," you have a positioning problem you can put in the rebuild brief.
Run ChatGPT, Gemini, and Claude at minimum. If prompt explorer on the instance exposes Perplexity or another supported model, include it, and log the extra DataForSEO cost. Each model is a separate paid call. Default cheap, then add models on purpose.
Save the raw answers, the cited URLs, and a yes/no/partial for brand mention. Partial means the model described the service area without the legal name, or used an old DBA. That is a finding. Treat it like a missing H1.
One-week SOP on the instance we already have
This is a company SOP, not a lab. Pick one live client site. Prefer a client whose last technical audit you still have, so you can compare the crawl to something you already stood behind.
Monday — confirm the pipe, set the project
Confirm the MCP client used by the SEO/rebuild agent is pointed at https://openseo.creativemarketing.ai/mcp. Do not add a second server. Do not create a personal hosted account "just to click around."
Confirm DataForSEO returns a known seed. Use the client's primary service plus city. If keyword research comes back empty, stop. That is a key or quota problem, not a content problem.
Confirm Google Analytics organic traffic is visible for properties we already connected. v0.1.6 put GA on the dashboard and in MCP. If the property is missing, connect it. Do not invent traffic numbers in the report.
Create or open the OpenSEO project for this client. Fill shared project context: one-sentence goal, positioning, two or three named competitors, key pages (home, service, location, reviews, contact), writing preferences (plain language, no hype, city names the client actually serves). That context is what keeps the agent from researching the wrong market.
Write the five prompts into the project notes with the real nouns filled in. Lock the competitor name. Do not let the agent pick a national brand the client never loses jobs to.
Tuesday — technical crawl and punch list
Run the site audit on the live domain. Look at titles, H1s, redirects, thin pages, missing meta descriptions, empty H1s treated as missing, pages with no outgoing links. Time the run. You are not looking for an identical issue count versus last quarter's paid-suite export. You are looking for whether you would send this table to the client without apology.
Export or copy the issue list into the working folder for the engagement. Group by "fix this week," "fix in the rebuild," and "ignore." Ignore is a real bucket. Orphan tag pages and calendar archives are not the GEO problem.
If Lighthouse is opt-in on agent-run audits, leave it off unless you already planned a performance pass. Do not mix Core Web Vitals into the first GEO baseline unless the homepage is the thing failing. One report, one job.
Spot-check five URLs in the browser. If the crawler says a title is missing and the live page has a title, log the mismatch. Do not send a hallucinated punch list.
Wednesday — commercial keywords and ranks, plus local if it applies
Build a 20-keyword rank set from commercial terms, not blog vanity. Service plus city. Service plus "near me" only if you can stand behind the intent. Emergency modifiers. Weekend modifiers if the business actually answers the phone. Brand and brand-plus-service. Do not load 200 informational queries to make the tracker look busy.
Turn tracking on. Record today's positions as the baseline. If a keyword has no rank in the top 100, write "not ranking" instead of a fake page number.
If the client is a Google Business Profile business, use the local SEO tools already in the instance: profile, reviews, categories, local rank grid for the service area. NAP mismatches belong in the punch list. Review volume and recency belong in the GEO narrative, because models often cite Google reviews when they answer prompt 4.
Pull Search Console if the property is connected. Look at queries that already get impressions but sit on page two. Those are classic SEO opportunities. Keep them in a separate section from the AI-visibility panel so the client can tell the difference.
Pull GA organic landing pages for the last 90 days if the property is connected. If it is not connected, say so. Do not paste a screenshot from another tool and pretend it is the instance.
Thursday — AI visibility and prompt explorer
This is the new line item. Run brand lookup / AI visibility for the legal name and any DBA the client still uses in ads.
Run prompt explorer on the five locked prompts across ChatGPT, Gemini, and Claude. Save every raw answer. Save citations. Mark mention: yes, no, partial. Note who else got named. Note whether the model cited the client's site, a directory, a Facebook page, or a competitor.
If the instance exposes cited-sources or share-of-voice against named competitors, run it for the same competitor set you put in project context. Keep the competitor cap small. Up to a handful, not a fantasy market map.
Do not rewrite the model answers into prettier copy. The client needs to see the sentence the model actually said. That is the artifact. You can add a one-line operator note under each: "Mentioned. Cited Yelp, not the site." or "Not mentioned. Named Competitor A and the Angi category page."
If a model refuses or returns a thin answer, record that. It is still a data point. Do not rerun ten times until you like the result. One pass is the baseline. You can rerun next month.
Friday — the report a human sends
The agent drafts. A human sends. That is the rule.
The Friday packet has four sections, in this order:
- AI visibility snapshot. Five prompts, three models, mention grid, citations, who else got named. One paragraph on what that means for this business this month. No adjectives about landscapes.
- Technical punch list. Ten items or fewer that a rebuild or a content pass can actually fix. Link each item to a URL.
- Keyword and rank baseline. The 20 commercial terms. Position. Landing page if we have one. "Not ranking" where true.
- Recommended next work. Pages, FAQs, GBP cleanup, or rebuild notes that would change the answers in section 1. Tie each recommendation to a prompt. "Add an after-hours / weekend page because prompt 2 never names you" is a job. "Create more content" is not.
Attach the live OpenSEO project as internal context, not as a client login. Clients should not need another dashboard. They need a PDF or a portal note they can forward to a partner.
Price two offers off this packet.
One-time audit. Technical crawl plus commercial keyword set plus AI-visibility / prompt-explorer panel. This is the Website Audit we already sell, with GEO included instead of treated as a footnote. The audit still produces a firm rebuild price when a rebuild is the right next step. It also produces the mention grid even if the site stays.
Monthly retainer. Rank tracking on the 20-keyword set, crawl delta on the same issue classes, and a new AI-visibility snapshot on the same five prompts. The agent drafts the monthly. A human reviews mentions, citations, and the punch list, then sends. Do not auto-email a raw model dump.
Do not promise a rank. Do not promise the models will name the client next month. Promise the snapshot, the delta, and a punch list tied to the prompts that failed.
How the GEO findings feed the rebuild
If prompt 3 never names the client, the emergency / same-day page is missing, thin, or not the entity the models can cite. That is a rebuild and content job, not a blog calendar.
If prompt 4 cites a Facebook page and a directory, the site's review or about page is not the source. Get reviews onto a page we control. Make the GBP and the site agree on the name.
If prompt 5 loses to a competitor the client already knows, look at the competitor's service pages and GBP, not their blog. Then decide whether the rebuild needs a comparison-safe services structure (hours, cities served, emergency vs scheduled, licensed vs not) written in language a model can quote.
If the technical crawl is a mess, do not sell GEO as a overlay on a broken site. Sell the rebuild. GEO is the argument for why the new pages have to exist. The crawl is why the old ones cannot be patched forever.
What I would not do
I would not tell anyone to sign up on a public OpenSEO host. I would not stand up a second instance for "testing." I would not dump a client into Docker on a Friday. I would not let the agent publish content from keyword clusters. I would not cite DataForSEO volumes in a sales deck until I have compared a handful against Search Console on a property we own. I would not load 500 keywords to look serious. I would not change the five prompts every month so the snapshot cannot be compared. I would not claim "we replaced Ahrefs." I would not invent mention rates or traffic lifts.
The GitHub trending spike is why this is a news item this Sunday. It is not why we run the software. We run it because the MCP is already ours, the data plane is already paid, and local businesses are still being audited as if Google's ten links were the whole channel.
The lead
creativemarketing.ai should say this plainly. The SEO most local businesses are told to buy is a crawl, a keyword list, and a rank screenshot. That work still has to happen. It is not the meeting. The meeting is whether the models that now sit in front of Google mention the business when someone asks for the job.
We already run the tool that can check that. Book the audit. Bring the domain and the last 90 days of Search Console if you have it. We will run the crawl, the commercial keyword set, and the five-prompt panel, and you will leave with a punch list instead of a login you will forget.
