One of the reasons I like writing about AI is that almost every day, I get a chance to test a new AI tool. And more and more, I see that as part of my job here. I get stuck in the setup, make the mistakes, and report back what I learned so you do not have to repeat all of the trial and error yourself.
You probably know by now that I also take SEO seriously when it comes to growing this newsletter. Even with all the attention going to GEO and AI search, Google still brings new readers to AI Maker.
According to my August 2026 numbers, search contributes around 15 to 20 percent of my new subscribers, but roughly 40 to 50 percent of my new subscription revenue. That is enough for me to keep paying attention to it.
That is why I previously built an SEO review agent for my Substack posts. It starts with a finished draft, uses Tavily to inspect the current search results and competing pages, then gives me the SEO work I usually leave until the end: a possible search angle, metadata, slug suggestions, internal links, image alt text, and a list of things I should leave alone.
I still use that process. But after building it, I realized there was an earlier question it could not answer very well:
What should I write in the first place?
Letâs say I wanted to write about Claude Skills. My review agent could read a finished post, check what was already ranking, and suggest a search phrase that seemed to fit.
But it could not accurately tell me how many people were searching for each phrase, how difficult those searches might be, or what my own Search Console and Google Analytics data suggested I should investigate before I committed to the topic.
What happened instead was that I invested so much time writing a piece of content before consulting my agent about what to write.
So I started looking for a research service that could give my agent real search data earlier in the process.
Of course, tools for this already exist. Ahrefs has a $29 Starter plan, but its MCP access begins with the $129-per-month Lite plan. Semrushâs SEO plan costs $139 per month, while its MCP-enabled plan costs $199 per month as of August 2026.
Both are serious SEO platforms. They also have far more capability than I need for this one research process. For a one-person newsletter, I could not justify paying for a large SEO suite when I knew I would use only a small part of it.
What I wanted was much narrower. I needed current keyword and competitor evidence. I wanted to connect Search Console and Google Analytics. And I needed direct access through MCP so my agent could retrieve the data instead of sending me into another dashboard every time.
That last part matters for how I work now.
Because my AI Maker agent already knows my publication goals, reader profile, content archive, conversion analysis, and SEO rules. I wanted it to bring all of that together with what people were actually searching for and which pages were already ranking.
That is when I found OpenSEO.
I know what some of you might be thinking. I found another new AI tool, and now I am writing about it.
Fair.
But hear me out, because I think OpenSEO offers a clear value here.
OpenSEO had a $10 hosted plan when I tested it. It has an MCP connection, so Claude Code, ChatGPT/Codex, and other compatible agents can call its research tools directly. It can also connect read-only Google Search Console and Google Analytics data, then combine that first-party data with keyword estimates, live search results, and competitor research.
Together, those sources gave me a way to do more than ask an AI which keywords that aligned with my business.
So, I knew I had to write this.
But, once I started looking around, I realized I could easily turn this into a much bigger post. OpenSEO also includes rank tracking, backlink research, site audits, and saved keywords, along with an AI Visibility feature that shows whether available ChatGPT and Google AI Overview results mention or cite your brand. That gives me another area I want to explore later: using those mentions, cited pages, and related prompts as evidence for improving what people usually call GEO.
The Google Analytics connection opens up another set of possibilities. The agent can pull organic performance, landing pages, traffic acquisition, engagement, key events, ecommerce outcomes, and other reports from the connected property. I can imagine using that to create a recurring organic-traffic brief or an automated report that tells me which pages are bringing meaningful results.
But I want to keep this post specific and focused on one job: start with real keyword data from your own website, research the competitors that matter for those keywords, and turn the findings into a content plan. Iâll come back to the GEO and Google Analytics workflows later on if you want to learn more about them.
So I decided to test one question:
Could I start with what my website already knows, use OpenSEO to investigate the sites competing for those searches, and finish with an actual content plan?
Start With What Your Website Already Knows
For AI Maker, the first place I looked was Google Search Console.
It showed me the queries already causing my posts to appear in Google, the pages connected to those searches, and where I might have room to improve. I focused on recent non-branded queries, especially the ones ranking somewhere around positions 5 to 20.
Those positions do not guarantee an easy win. But Google already associates my website with the subject, which makes them more useful starting points than a broad topic an AI agent generated for me.
I also looked at the words people added around each subject. Were they searching for a setup, a guide, a review, a comparison, or a way to connect two tools? Those modifiers helped me understand what the searcher was actually trying to do.
Then I compared the queries against my existing archive. My data/content-index.csv contains 186 indexed URLs, so the agent could see whether I already had a page serving the search, whether an older page could be improved, or whether several posts might compete for the same intent.
I added my publishing goals and directional conversion data too.
That gave the agent four useful inputs:
Search Console queries and their connected pages.
My existing content archive.
My reader and publishing goals.
Google Analytics or Substack outcomes when they changed the priority.
What if your website does not have enough search data?
For a newer site, you can also follow my process by asking your AI to analyze your website.
I would ask the agent to read the homepage, About page, product or service pages, and the most important existing content. It should identify who the website helps, what those people are trying to do, what the site can credibly help them with, and which audiences or topics would be a poor fit.
From there, the agent can generate five to ten specific query hypotheses to analyze later. I want to emphasize the term hypotheses here, because the agent still does not know whether people search for them or what kind of results Google rewards.
Check the queries with OpenSEO
This is where OpenSEO became useful.
For each candidate, I checked the estimated search volume, trend, keyword difficulty, likely intent, and the pages currently ranking. A query stayed in the research only when three things were true:
There was enough evidence of search demand to investigate it further.
The search intent matched the audience or offer.
I could credibly create or improve the kind of page already ranking.
OpenSEOâs volume, difficulty, and competitor numbers are estimates, so I used them to compare opportunities. Search Console remained the direct evidence of what had already happened on my website.
Here are example queries from the Claude Code cluster that my agent unpacked based on whatâs shown on my Substack pages:
The goal was a small set of five to ten approved queries. That was enough to represent the search area and show OpenSEO which competitive landscape it should investigate.
How the Competitor Rankings Became a Content Plan
Once I had the approved queries, I used OpenSEO to find the domains that kept ranking across them. Then I selected the competitors that matched my audience, inspected their ranking pages, and ran a second keyword pass on the gaps that looked useful.
The last check happened inside my own archive. For every opportunity, the agent had to decide whether I needed a new page, already had the right page, needed broader coverage, or should leave the topic alone.
That gave me four possible decisions:
TEST: keep investigating before deciding whether to create or change a page.WRITE: create a distinct new page.UPDATE: retarget an existing page that should own the query.EXPAND: keep the pageâs current target and add missing coverage.IGNORE: leave the opportunity outside the SEO plan.
Then came the interesting part.
One of the recurring competitors was Ruben Hassidâs Substack.
As of August 24, 2026, OpenSEO estimated his site at 30,394 organic traffic and 970 ranking keywords, compared with 19,418 traffic and 682 keywords for AI Maker.
We also have a large overlap in keywords targeting âClaude skills.â Hereâs how the competitive landscape looks for the Claude-skill keyword cluster.
Ruben used exact-match slugs, published one page for each named topic, and built pages around specific problems such as Claude usage limits. At the same time, none of the pages appearing in his top 100 ranking keywords covered Claude Code hooks, subagents, MCP, plugins, or CLAUDE.md.
That gave the agent several gaps to investigate. OpenSEO checked those topics again for demand and difficulty, then the agent compared them against my Search Console data, archive, and directional subscriber outcomes.
Here is what survived that process.
UPDATE: Claude Code hooks
OpenSEO estimated âclaude code hooksâ at 3,600 monthly searches with a keyword difficulty of 16.
I already had a paid post about Claude Code hooks. It had received 906 search clicks, ranked around position 8.5, and had nine attributed paid subscribers. That works out to roughly 9.93 subscribers per 1,000 search clicks, which is one of the stronger conversion rates in this research set.
Ruben had no hooks page among his top 100 ranking keywords. But because I already had the right asset, creating another broad Claude Code post would have added overlap without solving the targeting problem.
The decision was UPDATE: make the existing page more clearly target âclaude code hooksâ and preserve the page that was already converting.
WRITE: Claude memory, pending one scope decision
âClaude memoryâ looked almost too good when OpenSEO returned it: an estimated 2,900 monthly searches with a keyword difficulty of 2. Ruben had no memory page in the ranking set I reviewed.
But my archive changed the recommendation.
I already had a guide about Claude Projects memory ranking around position 6 with 3,218 search clicks. A new page could easily compete with it if the angle stayed broad.
So the agent marked this as a possible WRITE, with medium cannibalization risk and one unresolved decision. The existing guide would need to keep Claude Projects memory, while the new page would focus specifically on Claude Code memory through CLAUDE.md and continuity across sessions.
I have not approved that page yet. I need to confirm that the two posts can answer genuinely different searches before I write anything.
This is part of what made the research useful to me. It found the opportunity and also showed me the decision I still had to make myself.
EXPAND: Claude Code usage and limits
My existing Claude Code usage-limits post was already ranking around position 6.8. The page had the right intent, but its query coverage was narrow.
Rubenâs equivalent page ranked for a broader family of 21 keywords and had an estimated traffic value of 2,742 across them. It also ranked around position 6 for âclaude usage limitsâ, between two Anthropic pages.
That was enough evidence that an independent Substack page could compete in this search area. I also had no other page targeting the same topic.
The decision was EXPAND: keep the existing page and add the missing usage-limit questions instead of publishing a duplicate.
IGNORE: tool comparisons as an SEO revenue priority
This was probably the most useful decision in the plan because the keywords looked attractive.
OpenSEO estimated âclaude code vs cursorâ at 6,600 monthly searches with a keyword difficulty of 5. âperplexity vs claudeâ showed 2,900 searches with a difficulty of 0. Those numbers make the topics look easy to justify.
My own data told a different story.
Across six comparable AI Maker pages, tool-comparison posts had produced 17,428 search clicks and six attributed paid subscribers. That is approximately 0.34 subscribers per 1,000 search clicks, based on the August 18, 2026 archive analysis. The build and method posts in the same analysis averaged around 8.2 subscribers per 1,000 clicks.
The decision was IGNORE for SEO monetization. I may still write a comparison when it helps with timeliness, authority, or social reach. I just would not put it on the search-driven revenue calendar.
The final content plan
The four decisions gave me a comprehensive view of what to do for each keyword. Then I asked my agent to create a content plan I can follow to improve my SEO based on the report.
Here is the plan it produced:
That gave me the outcome I wanted from the research. I knew which page to work on first, which new posts still needed evidence, and which tempting keywords did not belong on the plan.
What We Are Building: SEO Research Agent
After the first experiment, I wanted to make the same research process repeatable.
So I turned it into an SEO research agent with one main job: run competitive keyword research and generate a content plan for my newsletter so I can expand my keyword territory.
The process involves deploying three sub-agents, each with its own assignment:
Find and validate the starting query territory.
Select relevant competitors, inspect the pages that matter, and propose gaps.
Validate those gaps, group the surviving queries, determine page ownership, and surface cannibalization risk.
Iâm also providing the agent folder you can download and use right away, but youâll still need to customize it and add some data and project context files that align with what youâre building.
What you will build in this guide
The local project foundation: record your site, audience, offers, goals, writing rules, OpenSEO connection, content inventory, and optional business outcomes in files the agent can inspect.
The OpenSEO data connection: give the agent access to Search Console plus current keyword, search-result, and competitor evidence through MCP. Google Analytics can be added when it changes how you prioritize the plan.
One delegated research skill: start a complete opportunity study with one request while three subagents handle the specialist stages.
A four-artifact evidence: preserve the queries, competitor findings, opportunity map, and final decisions in one dated run folder.
What you need before starting
Claude Code, ChatGPT, Codex, or another coding agent that can read local files and run a project-level skill.
An OpenSEO account. Its hosted plan was $10 per month. Itâs so cheap for a starting point.
Google Search Console for an established website, or enough website and offer information to complete the low-data path.
Google Analytics, Substack data, or another business outcome when you want the agent to prioritize beyond traffic.
OpenSEOâs research tools use credits, so I recommend starting your research with small batches and checking the results after each stage, so you know what cost to expect. In my latest run, it cost me less than $1.
By the end, you will have an SEO research agent that starts with your website, investigates the competitors that matter for searches you can credibly serve, and leaves you with a few content decisions you can take action on.
Letâs build it.
Create Your OpenSEO Account
The first thing we need to do is sign up for OpenSEO. This is where all the data will come from, especially Google Search Console, where all organic queries, keyword rankings, and pages that show up on Google will be accessible.
Now, you need to complete any remaining information about your project. There are a few steps you must take to finish setting up your project data, including filling in the general information, providing the context, and connecting both Search Console and Google Analytics.
Here are some steps you need to do after you sign up:












