<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Gaël GERARD</title>
    <description>The latest articles on DEV Community by Gaël GERARD (@gal_gerard_5a39555b810e9).</description>
    <link>https://dev.to/gal_gerard_5a39555b810e9</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4202014%2F7da96712-c4e1-484b-902b-2dbbadebf40c.jpg</url>
      <title>DEV Community: Gaël GERARD</title>
      <link>https://dev.to/gal_gerard_5a39555b810e9</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/gal_gerard_5a39555b810e9"/>
    <language>en</language>
    <item>
      <title>AI search volume vs Google search volume: what 600 real keywords show</title>
      <dc:creator>Gaël GERARD</dc:creator>
      <pubDate>Fri, 23 Oct 2026 13:35:22 +0000</pubDate>
      <link>https://dev.to/gal_gerard_5a39555b810e9/ai-search-volume-vs-google-search-volume-what-600-real-keywords-show-3om0</link>
      <guid>https://dev.to/gal_gerard_5a39555b810e9/ai-search-volume-vs-google-search-volume-what-600-real-keywords-show-3om0</guid>
      <description>&lt;p&gt;&lt;em&gt;AI-generated: an AI agent drafted this post from real runs of a keyword tool I built with it. All the numbers come from those runs, on 23 October 2026.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Some searches now start in ChatGPT, Perplexity or Gemini instead of Google. SEO tools have started to estimate how often a keyword comes up there, which they call "AI search volume". I added it to my keyword tool this week, then looked at what it says for two real keyword sets:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;US:&lt;/strong&gt; 300 keyword ideas around "running shoes", in English;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;France:&lt;/strong&gt; 300 keyword ideas around "machine à café" (coffee machine), in French.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each row has Google's average monthly searches over the last 12 months and DataForSEO's AI search volume for the last month.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Per keyword, AI volume is still small
&lt;/h2&gt;

&lt;p&gt;For the median keyword, AI volume was 3.7% of Google volume in the US and 2.5% in France. 19 US keywords had no AI volume at all.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Close variants share one AI number
&lt;/h2&gt;

&lt;p&gt;"running shoes for men", "mens running shoes" and "running shoes men" have different Google volumes: 33,100, 40,500 and 18,100. They have the same AI volume, 1,973, with the same 12-month history. The AI data seems to be grouped by topic.&lt;/p&gt;

&lt;p&gt;That is also why "on the run shoes" shows 79,303 AI searches against 4,400 Google searches: it shares its number with "on running shoes".&lt;/p&gt;

&lt;p&gt;This matters as soon as you add numbers up. Summing AI volume over the US list gives 268,544. Counting each shared series once gives 155,220, 42% less. In France the gap was about 10%. Group variants before you sum them: the &lt;code&gt;core_keyword&lt;/code&gt; field catches many of them, and grouping identical 12-month AI histories catches more.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. AI Overviews and AI volume go together
&lt;/h2&gt;

&lt;p&gt;Keywords whose Google results show an AI Overview had a median AI share of 5.9% in the US. The other keywords had 2.3%. Each group held about 150 keywords.&lt;/p&gt;

&lt;p&gt;In France the gap was smaller: 3.4% against 2.5%, with only 50 keywords showing an AI Overview.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Questions and "best..." keywords lean AI
&lt;/h2&gt;

&lt;p&gt;In the US, the 66 keywords starting with "best", "how", "what", "why", "which", "is", "are", "can" or "do" had a median AI share of 6.2%.&lt;/p&gt;

&lt;p&gt;"running shoe brands" stands out, with 8,100 Google searches and 3,891 AI searches: 48%. Asking which brands are good is exactly the kind of question people put to an assistant.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Many product searches stay on Google
&lt;/h2&gt;

&lt;p&gt;Searches for a product type or one brand's range often stay almost entirely on Google:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Keyword&lt;/th&gt;
&lt;th&gt;Google&lt;/th&gt;
&lt;th&gt;AI&lt;/th&gt;
&lt;th&gt;AI share&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;neutral running shoes&lt;/td&gt;
&lt;td&gt;49,500&lt;/td&gt;
&lt;td&gt;459&lt;/td&gt;
&lt;td&gt;0.9%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;altra running shoes&lt;/td&gt;
&lt;td&gt;49,500&lt;/td&gt;
&lt;td&gt;230&lt;/td&gt;
&lt;td&gt;0.5%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;marathon racing shoes&lt;/td&gt;
&lt;td&gt;18,100&lt;/td&gt;
&lt;td&gt;65&lt;/td&gt;
&lt;td&gt;0.4%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;running sneakers for men&lt;/td&gt;
&lt;td&gt;18,100&lt;/td&gt;
&lt;td&gt;31&lt;/td&gt;
&lt;td&gt;0.2%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  What I take from it
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;To rank content ideas, use AI share, not raw AI volume: it shows which questions people take to assistants.&lt;/li&gt;
&lt;li&gt;Never sum AI volumes across close variants.&lt;/li&gt;
&lt;li&gt;Check each country: the patterns were weaker in France.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Two sets of 300 keywords in two niches are not a study, and AI volume is an estimate. Google's figure is a 12-month average while the AI figure is last month's, so seasonal keywords can tilt the ratio. Treat these numbers as directions, not facts.&lt;/p&gt;

&lt;h2&gt;
  
  
  Get the data
&lt;/h2&gt;

&lt;p&gt;The rows come from &lt;a href="https://apify.com/gaelasao/keyword-research-api" rel="noopener noreferrer"&gt;Keyword Research API&lt;/a&gt;, an Apify Actor I built. It returns one row per keyword with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Google volume, CPC, difficulty, intent and SERP features;&lt;/li&gt;
&lt;li&gt;AI search volume;&lt;/li&gt;
&lt;li&gt;Bing volume, on runs of 300+ keywords.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The US run used this input:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"mode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ideas"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"keywords"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"running shoes"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"location"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"US"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"maxIdeas"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;300&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It cost $0.61: 300 keywords at $0.002, plus $0.01 for the run. AI search volume is included.&lt;/p&gt;

&lt;p&gt;From an AI agent, connect &lt;code&gt;https://mcp.apify.com/?tools=gaelasao/keyword-research-api&lt;/code&gt; (OAuth in Claude, Cursor and VS Code), then ask:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Get 300 keyword ideas for "running shoes" in the US with Google and AI search volume, and add a column with the AI share.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;How the tool is built, and what I learned along the way: &lt;a href="https://dev.to/gal_gerard_5a39555b810e9/keyword-research-for-ai-agents-search-volume-cpc-and-difficulty-over-mcp-bdf"&gt;Keyword research for AI agents: search volume, CPC and difficulty over MCP&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>seo</category>
      <category>ai</category>
      <category>marketing</category>
      <category>datascience</category>
    </item>
    <item>
      <title>Striking distance keywords: what dev.to ranks 11 to 20 for on Google</title>
      <dc:creator>Gaël GERARD</dc:creator>
      <pubDate>Fri, 23 Oct 2026 13:34:06 +0000</pubDate>
      <link>https://dev.to/gal_gerard_5a39555b810e9/striking-distance-keywords-what-devto-ranks-11-to-20-for-on-google-m8p</link>
      <guid>https://dev.to/gal_gerard_5a39555b810e9/striking-distance-keywords-what-devto-ranks-11-to-20-for-on-google-m8p</guid>
      <description>&lt;p&gt;&lt;em&gt;AI-generated: an AI agent drafted this post from a real run of a keyword tool I built with it. All the numbers come from that run, on 23 October 2026.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Striking distance keywords are searches where a page already ranks just below Google's top 10, usually positions 11 to 20. Google already finds the page relevant, but page 2 gets almost no clicks. A clearer title, a missing section or a few internal links can be enough to move it up. That is usually less work than ranking a new page.&lt;/p&gt;

&lt;p&gt;I ran the check on dev.to itself, for searches in the US.&lt;/p&gt;

&lt;h2&gt;
  
  
  The query
&lt;/h2&gt;

&lt;p&gt;With my Keyword Research API connected as an MCP tool, I asked the agent:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Find the keywords where dev.to ranks 11 to 20 in the US. Show the 60 with the most searches, with position, difficulty and ranking page.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It sent this input:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"domain"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"domain"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"dev.to"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"location"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"US"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"minPosition"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;11&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"maxPosition"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"sortBy"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"volume"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"maxIdeas"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;60&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The run took 5 seconds and cost $0.13: 60 keywords at $0.002 each, plus $0.01 for the run.&lt;/p&gt;

&lt;h2&gt;
  
  
  What came back
&lt;/h2&gt;

&lt;p&gt;The run returned 60 keywords with 6.45 million searches a month between them. DataForSEO estimates that these rankings bring dev.to about 8,000 visits a month, roughly 0.1% of those searches. That is what page 2 is worth.&lt;/p&gt;

&lt;p&gt;These are the ten with the most searches:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Keyword&lt;/th&gt;
&lt;th&gt;Searches/month&lt;/th&gt;
&lt;th&gt;Position&lt;/th&gt;
&lt;th&gt;Difficulty&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;model combat&lt;/td&gt;
&lt;td&gt;301,000&lt;/td&gt;
&lt;td&gt;17&lt;/td&gt;
&lt;td&gt;28&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;google flows&lt;/td&gt;
&lt;td&gt;246,000&lt;/td&gt;
&lt;td&gt;17&lt;/td&gt;
&lt;td&gt;42&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;internet protocol&lt;/td&gt;
&lt;td&gt;246,000&lt;/td&gt;
&lt;td&gt;13&lt;/td&gt;
&lt;td&gt;16&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ddss&lt;/td&gt;
&lt;td&gt;201,000&lt;/td&gt;
&lt;td&gt;17&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;sum of absolute differences&lt;/td&gt;
&lt;td&gt;201,000&lt;/td&gt;
&lt;td&gt;19&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;game button css&lt;/td&gt;
&lt;td&gt;165,000&lt;/td&gt;
&lt;td&gt;12&lt;/td&gt;
&lt;td&gt;32&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;google cloud gcp&lt;/td&gt;
&lt;td&gt;165,000&lt;/td&gt;
&lt;td&gt;18&lt;/td&gt;
&lt;td&gt;47&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;html&lt;/td&gt;
&lt;td&gt;165,000&lt;/td&gt;
&lt;td&gt;16&lt;/td&gt;
&lt;td&gt;70&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;hypertext markup language&lt;/td&gt;
&lt;td&gt;165,000&lt;/td&gt;
&lt;td&gt;18&lt;/td&gt;
&lt;td&gt;38&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;b r&lt;/td&gt;
&lt;td&gt;135,000&lt;/td&gt;
&lt;td&gt;12&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Sorted by volume alone, this is not a to-do list yet. Three filters make it one.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Drop the accidental matches
&lt;/h2&gt;

&lt;p&gt;Some rankings are accidents. dev.to ranks for "b r" because of a post on the difference between the &lt;code&gt;&amp;lt;b&amp;gt;&lt;/code&gt; and &lt;code&gt;&amp;lt;br&amp;gt;&lt;/code&gt; tags. It ranks for "model combat" because of the comments page of a post about an LLM fighting game called Model Kombat. These searchers probably want something else. Scan the list before you act on it: it takes a minute.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Prefer low difficulty
&lt;/h2&gt;

&lt;p&gt;Keyword difficulty, from 0 to 100, estimates how hard it is to break into the top 10. "html" (difficulty 70) and "vscode" (100) will be hard to win. These look more winnable:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Keyword&lt;/th&gt;
&lt;th&gt;Searches/month&lt;/th&gt;
&lt;th&gt;Position&lt;/th&gt;
&lt;th&gt;Difficulty&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;internet protocol&lt;/td&gt;
&lt;td&gt;246,000&lt;/td&gt;
&lt;td&gt;13&lt;/td&gt;
&lt;td&gt;16&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;sum of absolute differences&lt;/td&gt;
&lt;td&gt;201,000&lt;/td&gt;
&lt;td&gt;19&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;rubber ducking&lt;/td&gt;
&lt;td&gt;110,000&lt;/td&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;td&gt;28&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;typing hacks&lt;/td&gt;
&lt;td&gt;110,000&lt;/td&gt;
&lt;td&gt;19&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;building a server&lt;/td&gt;
&lt;td&gt;90,500&lt;/td&gt;
&lt;td&gt;16&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;git game&lt;/td&gt;
&lt;td&gt;90,500&lt;/td&gt;
&lt;td&gt;16&lt;/td&gt;
&lt;td&gt;25&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;hoppscotch&lt;/td&gt;
&lt;td&gt;90,500&lt;/td&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;td&gt;26&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;contributing&lt;/td&gt;
&lt;td&gt;60,500&lt;/td&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;td&gt;18&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;"rubber ducking", "hoppscotch" and "contributing" sit at position 11, one place from page 1.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Group by page
&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;ranking_url&lt;/code&gt; field shows which page ranks. Group the rows by it and one post stands out: &lt;a href="https://dev.to/grahamthedev/hold-on-there-are-4-and-8-digit-hex-codes-for-colours-261i"&gt;GrahamTheDev's post on 4- and 8-digit hex codes&lt;/a&gt;. It ranks 12 to 19 for seven colour-code searches with 437,000 searches a month between them, such as "hex color", "hexadecimal code" and "color by hex code". Improving that one page could move all seven.&lt;/p&gt;

&lt;p&gt;Eight other pages rank for two keywords each. For example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;an intro to Google Cloud, for "gcp" (11) and "google cloud gcp" (18);&lt;/li&gt;
&lt;li&gt;a comparison of Create React App alternatives, for "react framework" (17) and "react js framework" (13).&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Try it on your own site
&lt;/h2&gt;

&lt;p&gt;The tool is an Apify Actor, &lt;a href="https://apify.com/gaelasao/keyword-research-api" rel="noopener noreferrer"&gt;Keyword Research API&lt;/a&gt;, so there is nothing to host. In Claude Code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;claude mcp add &lt;span class="nt"&gt;--transport&lt;/span&gt; http apify &lt;span class="s2"&gt;"https://mcp.apify.com/?tools=gaelasao/keyword-research-api"&lt;/span&gt; &lt;span class="nt"&gt;--header&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer &lt;/span&gt;&lt;span class="nv"&gt;$APIFY_TOKEN&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Claude, Cursor and VS Code can also connect to &lt;code&gt;https://mcp.apify.com/?tools=gaelasao/keyword-research-api&lt;/code&gt; with OAuth, with no token. Then ask about your own domain. Without an agent, paste the JSON above into the Actor's input form on Apify.&lt;/p&gt;

&lt;p&gt;A few tips:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Try positions 4 to 10 too. Those pages are on page 1, but below most of the clicks.&lt;/li&gt;
&lt;li&gt;Put up to 10 sites in &lt;code&gt;domains&lt;/code&gt; to check your competitors in the same run.&lt;/li&gt;
&lt;li&gt;Each row also has search intent, CPC, a 12-month trend, SERP features and AI search volume. Use them to skip keywords whose first page is mostly ads or shopping results.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It costs $2 per 1,000 keywords with data, plus $0.01 per run.&lt;/p&gt;

&lt;p&gt;I wrote about how the tool works, and what I learned building it, in &lt;a href="https://dev.to/gal_gerard_5a39555b810e9/keyword-research-for-ai-agents-search-volume-cpc-and-difficulty-over-mcp-bdf"&gt;Keyword research for AI agents: search volume, CPC and difficulty over MCP&lt;/a&gt;. If you run the check on your own site, I'd like to hear what you find.&lt;/p&gt;

</description>
      <category>seo</category>
      <category>webdev</category>
      <category>ai</category>
      <category>mcp</category>
    </item>
    <item>
      <title>Keyword research for AI agents: search volume, CPC and difficulty over MCP</title>
      <dc:creator>Gaël GERARD</dc:creator>
      <pubDate>Fri, 23 Oct 2026 08:13:47 +0000</pubDate>
      <link>https://dev.to/gal_gerard_5a39555b810e9/keyword-research-for-ai-agents-search-volume-cpc-and-difficulty-over-mcp-bdf</link>
      <guid>https://dev.to/gal_gerard_5a39555b810e9/keyword-research-for-ai-agents-search-volume-cpc-and-difficulty-over-mcp-bdf</guid>
      <description>&lt;p&gt;&lt;em&gt;AI-generated: an AI agent built this Actor with me and drafted this post from its code and test runs. The numbers, outputs and code come from the published Actor, and I checked them before publishing.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Ask an AI agent how many people search for "keyword research" each month and it will guess. For SEO work a guess is worse than nothing, so I built a tool the agent can call instead: &lt;strong&gt;&lt;a href="https://apify.com/gaelasao/keyword-research-api" rel="noopener noreferrer"&gt;Keyword Research API&lt;/a&gt;&lt;/strong&gt;. It is an Apify Actor that returns Google keyword data, and it works as an MCP tool in Claude, Cursor or any other MCP client.&lt;/p&gt;

&lt;p&gt;This post covers what it returns, how an agent uses it, and four things I learned building a pay-per-event Actor.&lt;/p&gt;

&lt;h2&gt;
  
  
  One row per keyword
&lt;/h2&gt;

&lt;p&gt;You send keywords and a country. Each keyword comes back as one flat row. This is a real row from a test run this morning (US, English):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"keyword"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"keyword research"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"search_volume"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;135000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"cpc"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;16.68&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"competition_level"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"LOW"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"low_top_of_page_bid"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;3.63&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"high_top_of_page_bid"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;26.33&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"keyword_difficulty"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;88&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"search_intent"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"informational"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"trend"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"monthly"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;233&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"quarterly"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;233&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"yearly"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;508&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"data_status"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ok"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"source_endpoint"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"dataforseo_labs/google/keyword_overview/live"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The row also holds &lt;code&gt;monthly_searches&lt;/code&gt; for the last 12 months. Keywords the source has no data for come back with &lt;code&gt;data_status: "no_data"&lt;/code&gt; and are not charged.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Update (October 23):&lt;/strong&gt; rows now also include &lt;code&gt;ai_search_volume&lt;/code&gt; and a 12-month &lt;code&gt;ai_monthly_searches&lt;/code&gt;: how often the keyword comes up in AI assistants such as ChatGPT, as estimated by DataForSEO from People Also Ask questions. For "keyword research" in the US it was 2,275 last month, and 79,303 for "running shoes". It is on by default and costs nothing extra.&lt;/p&gt;

&lt;p&gt;There are three modes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;metrics&lt;/strong&gt;: up to 10,000 keywords per run;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ideas&lt;/strong&gt;: 1 to 20 seed keywords, and up to 5,000 related keywords with the same metrics;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;domain&lt;/strong&gt;: the keywords a website or page ranks for, with its position, the ranking URL and estimated traffic.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"mode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"domain"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"domain"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"example.com"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"location"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"GB"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"maxIdeas"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It works for every country Google Ads serves, by ISO code or by country name. 94 countries get every metric; the others get the Google Ads metrics (volume, CPC, competition and bids).&lt;/p&gt;

&lt;h2&gt;
  
  
  Using it from an agent
&lt;/h2&gt;

&lt;p&gt;Apify exposes Actors through its MCP server, so there is nothing to host. In Claude Code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;claude mcp add &lt;span class="nt"&gt;--transport&lt;/span&gt; http apify &lt;span class="s2"&gt;"https://mcp.apify.com/?tools=gaelasao/keyword-research-api"&lt;/span&gt; &lt;span class="nt"&gt;--header&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer &lt;/span&gt;&lt;span class="nv"&gt;$APIFY_TOKEN&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Clients that support OAuth, such as Claude, Cursor or VS Code, can use &lt;code&gt;https://mcp.apify.com/?tools=gaelasao/keyword-research-api&lt;/code&gt; without a token: you sign in to Apify on first use.&lt;/p&gt;

&lt;p&gt;Then ask in plain language:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Get search volume, CPC, difficulty and intent for these 40 keywords in Germany, and sort them by volume.&lt;/p&gt;

&lt;p&gt;Which keywords bring competitor.com the most traffic in the UK? Show the top 30 with their ranking pages.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The agent sends the same JSON input as above and gets the same rows back. The price per keyword is fixed, so the agent can work out the cost before it runs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Four things I learned building it
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Check the spending cap before you buy data
&lt;/h3&gt;

&lt;p&gt;Apify users set a maximum cost per run. The data comes from DataForSEO, which bills me per request, so the Actor must never buy data it cannot charge for. Before each batch it books budget for the rows it can still bill (simplified from &lt;code&gt;src/billing.js&lt;/code&gt;):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// How many more rows the user's spending limit can pay for, keeping room for the start event.&lt;/span&gt;
&lt;span class="nf"&gt;rowsAffordable&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;remaining&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;maxTotalChargeUsd&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;chargedUsd&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;startCharged&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;startPrice&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;byPrice&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;max&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;floor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Number&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;remaining&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;rowPrice&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;toFixed&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;))));&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;min&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;byPrice&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;manager&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;calculateMaxEventChargeCountWithinLimit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;EVENTS&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;row&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Books budget before buying data, so concurrent batches never buy more than can be billed.&lt;/span&gt;
&lt;span class="nf"&gt;reserve&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;count&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;granted&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;max&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;min&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;count&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;rowsAffordable&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;reserved&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
  &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;reserved&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="nx"&gt;granted&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;granted&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When the cap is reached, the run stops cleanly, keeps every row already delivered and says what the rest would cost, for example: &lt;em&gt;"Stopped at your $1.00 maximum cost per run: 495 keywords with data. Raise it to $2.01 to get the other 505."&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Free accounts cost you money
&lt;/h3&gt;

&lt;p&gt;On Apify, only paying users generate revenue. Runs from free accounts bring nothing, yet each one still costs me data. So free accounts can try the Actor on 20 keywords per run. The platform tells the Actor who is paying through an environment variable (simplified; the real check also exempts my own account so I can test):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;isFreePlanRun&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;APIFY_IS_AT_HOME&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;1&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;APIFY_USER_IS_PAYING&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;1&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. The daily Store test runs your prefilled input
&lt;/h3&gt;

&lt;p&gt;Apify tests every public Actor once a day with the values prefilled in its input form. If more than half of the runs in three days fail, the Actor is labelled "under maintenance". My prefill is five US keywords: the test passes and costs about one cent of data a day.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Store search only sees listing changes after a new build
&lt;/h3&gt;

&lt;p&gt;I renamed the Actor through the API to put "search volume" in the title. The Store page changed at once, but Store search still showed the old title more than 13 hours later. Pushing a new build refreshed it immediately, and the Actor went from outside the top 250 to 59th for "search volume". If you edit your listing through the API, push a build afterwards.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pricing
&lt;/h2&gt;

&lt;p&gt;$2 per 1,000 keywords with data, plus $0.01 per run that returns data, with lower prices on higher Apify plans. AI search volume is included. Keywords without data, duplicates and failed batches are free.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's next
&lt;/h2&gt;

&lt;p&gt;AI search volume shipped the same day as this post (see the update above). Bing volumes are the next gap: if you would use them, tell me in the comments.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Store page: &lt;a href="https://apify.com/gaelasao/keyword-research-api" rel="noopener noreferrer"&gt;https://apify.com/gaelasao/keyword-research-api&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Official MCP Registry entry: &lt;code&gt;io.github.gaelasao/keyword-research-api&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>mcp</category>
      <category>seo</category>
      <category>apify</category>
    </item>
  </channel>
</rss>
