<?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: MaxAEO</title>
    <description>The latest articles on DEV Community by MaxAEO (@maxaeo).</description>
    <link>https://dev.to/maxaeo</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%2F4211325%2Fb0e49cb5-0e66-41b0-ad62-4080b4555e96.png</url>
      <title>DEV Community: MaxAEO</title>
      <link>https://dev.to/maxaeo</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/maxaeo"/>
    <language>en</language>
    <item>
      <title>How we track which tools AI assistants recommend (40 questions, 8 platforms, 2,124 answers)</title>
      <dc:creator>MaxAEO</dc:creator>
      <pubDate>Mon, 02 Nov 2026 00:28:11 +0000</pubDate>
      <link>https://dev.to/maxaeohq/how-we-track-which-tools-ai-assistants-recommend-40-questions-8-platforms-2124-answers-4o21</link>
      <guid>https://dev.to/maxaeohq/how-we-track-which-tools-ai-assistants-recommend-40-questions-8-platforms-2124-answers-4o21</guid>
      <description>&lt;p&gt;&lt;em&gt;Chris Han, Head of Product at MaxAEO&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Some context first. I work on MaxAEO, a tool that tracks how AI assistants mention brands. So I'm a player in the category I'm measuring here, and our own product is in the results, competitors included. Every number below comes from our tracker and I checked them against the raw export.&lt;/p&gt;

&lt;p&gt;The question is simple. When someone asks an AI assistant which tool to buy, which names come back, and how often?&lt;/p&gt;

&lt;p&gt;You can answer that for your own category without much code. Here is what we ran.&lt;/p&gt;

&lt;h2&gt;
  
  
  The setup
&lt;/h2&gt;

&lt;p&gt;You need a fixed set of questions, a list of platforms, and a schedule.&lt;/p&gt;

&lt;p&gt;We wrote 40 questions the way a buyer would actually type them. Two of them:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;What are the best AEO tools for tracking brand visibility in AI search?&lt;/p&gt;

&lt;p&gt;Our agency needs GEO software to monitor AI search visibility for multiple clients. Which platforms should we evaluate?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;None of the 40 mention a brand. If your prompt names a product, you're mostly testing whether the model repeats your prompt back to you.&lt;/p&gt;

&lt;p&gt;The platforms were ChatGPT, Gemini, Perplexity, Claude, Grok, Microsoft Copilot, Google AI Overviews and Google AI Mode. Each question went to each platform once a day for 7 days, October 22 to 28, 2026. That came to 2,124 completed answers.&lt;/p&gt;

&lt;p&gt;Freeze the question set before you start. Edit a prompt mid-run and your day-over-day numbers stop meaning anything.&lt;/p&gt;

&lt;h2&gt;
  
  
  Counting
&lt;/h2&gt;

&lt;p&gt;From each answer, pull out the tool names and normalize them. Ours does this automatically and merges variants, so "Scrunch AI" and "Scrunch" are one tool. Then:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;naming rate = answers that named the tool at least once / completed answers
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Three mentions in one answer still count once. Only completed answers go in the denominator.&lt;/p&gt;

&lt;p&gt;Compute it per platform, not just overall. A bare-bones version:&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;// answers: [{ platform: "chatgpt", tools: ["Profound", "Peec AI"] }, ...]&lt;/span&gt;
&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;namingRates&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;answers&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;total&lt;/span&gt; &lt;span class="o"&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;hits&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{};&lt;/span&gt;
  &lt;span class="k"&gt;for &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;a&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nx"&gt;answers&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;total&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;platform&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="nx"&gt;total&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;platform&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;for &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;tool&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;tools&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;hits&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;tool&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="nx"&gt;hits&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;tool&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;platform&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="nx"&gt;hits&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;tool&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;platform&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&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;rates&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{};&lt;/span&gt;
  &lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;tool&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;byPlatform&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nb"&gt;Object&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;entries&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;hits&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;rates&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;tool&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;for &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;p&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nb"&gt;Object&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;keys&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;total&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;rates&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;tool&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="nx"&gt;p&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="nx"&gt;byPlatform&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;p&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="nx"&gt;total&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;p&lt;/span&gt;&lt;span class="p"&gt;];&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;rates&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;The counting is the easy bit. Getting clean names out of free text and merging aliases is where it gets fiddly.&lt;/p&gt;

&lt;h2&gt;
  
  
  One week of results
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;Share of all 2,124 answers&lt;/th&gt;
&lt;th&gt;Named most by&lt;/th&gt;
&lt;th&gt;Named least by&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Profound&lt;/td&gt;
&lt;td&gt;79.5%&lt;/td&gt;
&lt;td&gt;Copilot (96%), ChatGPT (93%)&lt;/td&gt;
&lt;td&gt;AI Mode (55%)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Peec AI&lt;/td&gt;
&lt;td&gt;70.7%&lt;/td&gt;
&lt;td&gt;Claude (89%), ChatGPT (85%), Grok (85%)&lt;/td&gt;
&lt;td&gt;AI Mode (40%)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Otterly.AI&lt;/td&gt;
&lt;td&gt;67.5%&lt;/td&gt;
&lt;td&gt;Grok (85%), Claude (81%)&lt;/td&gt;
&lt;td&gt;Perplexity (45%)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Semrush&lt;/td&gt;
&lt;td&gt;62.3%&lt;/td&gt;
&lt;td&gt;Gemini (71%), AI Overviews (71%)&lt;/td&gt;
&lt;td&gt;AI Mode (47%)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ahrefs&lt;/td&gt;
&lt;td&gt;52.4%&lt;/td&gt;
&lt;td&gt;Grok (78%), Claude (73%)&lt;/td&gt;
&lt;td&gt;Perplexity (29%)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Scrunch&lt;/td&gt;
&lt;td&gt;33.2%&lt;/td&gt;
&lt;td&gt;Grok (62%), Claude (56%)&lt;/td&gt;
&lt;td&gt;AI Mode (6%)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AthenaHQ&lt;/td&gt;
&lt;td&gt;30.4%&lt;/td&gt;
&lt;td&gt;Grok (65%), Claude (45%)&lt;/td&gt;
&lt;td&gt;Perplexity (9%)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HubSpot&lt;/td&gt;
&lt;td&gt;24.4%&lt;/td&gt;
&lt;td&gt;Perplexity (37%)&lt;/td&gt;
&lt;td&gt;Copilot (14%)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SE Ranking&lt;/td&gt;
&lt;td&gt;15.1%&lt;/td&gt;
&lt;td&gt;AI Overviews (34%)&lt;/td&gt;
&lt;td&gt;Copilot (1%)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Rankscale&lt;/td&gt;
&lt;td&gt;13.9%&lt;/td&gt;
&lt;td&gt;Grok (40%)&lt;/td&gt;
&lt;td&gt;ChatGPT (2%)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Writesonic&lt;/td&gt;
&lt;td&gt;13.5%&lt;/td&gt;
&lt;td&gt;Grok (28%), Claude (25%)&lt;/td&gt;
&lt;td&gt;ChatGPT, AI Overviews and AI Mode (6%)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Conductor&lt;/td&gt;
&lt;td&gt;7.8%&lt;/td&gt;
&lt;td&gt;Copilot (19%), Claude (18%)&lt;/td&gt;
&lt;td&gt;ChatGPT and AI Mode (2%)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MaxAEO (us)&lt;/td&gt;
&lt;td&gt;7.8%&lt;/td&gt;
&lt;td&gt;AI Mode (23%), AI Overviews (18%)&lt;/td&gt;
&lt;td&gt;ChatGPT (0%)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Just under the cutoff: ZipTie (7.7%), Goodie AI (7.6%) and Promptwatch (7.5%).&lt;/p&gt;

&lt;p&gt;The top four held up everywhere. Profound, Peec AI, Otterly.AI and Semrush were each above 60% overall and never dropped under 40% on any single platform. Below them it gets messy.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why platform has to be its own column
&lt;/h2&gt;

&lt;p&gt;If you build one of these, don't ship a single blended score.&lt;/p&gt;

&lt;p&gt;AthenaHQ was in 65% of Grok answers and 9% of Perplexity answers. SE Ranking was in 34% of AI Overviews answers and 1% of Copilot's. Average those and you get a number that describes no real platform.&lt;/p&gt;

&lt;p&gt;Our own row shows it best. MaxAEO was in 23% of Google AI Mode answers and 0 of 247 ChatGPT answers. Track only ChatGPT and you'd think nobody recommends us. Track only AI Mode and you'd think we're doing fine. Neither is true.&lt;/p&gt;

&lt;p&gt;List length plays into it too. Grok named 11.8 tools per answer on average and Claude 10.7. Perplexity named 4.6 and ChatGPT 5.3. A five-name list doesn't leave much room after the usual suspects. My guess is that's part of why Grok and Claude keep turning up in the "named most by" column, but we haven't tested it directly.&lt;/p&gt;

&lt;p&gt;So make platform a real dimension in your schema from day one. If your buyers mostly use one assistant, that platform's numbers will tell you more than the overall column anyway.&lt;/p&gt;

&lt;h2&gt;
  
  
  Run it every day
&lt;/h2&gt;

&lt;p&gt;A single run is noise. I compared each ChatGPT answer's #1 pick with the #1 for the same question the day before, and they matched only 38% of the time. Even a full week of 40 questions is a snapshot, not a settled ranking.&lt;/p&gt;

&lt;h2&gt;
  
  
  What this doesn't tell you
&lt;/h2&gt;

&lt;p&gt;It shows who gets recommended, not who's best. A good tool can be rarely named, and a tool can get named a lot for reasons that have little to do with quality.&lt;/p&gt;

&lt;p&gt;It also ran on our own tracker, in a category we compete in. The questions are generic and none of them names us, but weigh that however you think is fair.&lt;/p&gt;

&lt;p&gt;If you'd rather not build it yourself, this per-platform breakdown is what &lt;a href="https://maxaeo.ai/?utm_source=devto&amp;amp;utm_medium=social&amp;amp;utm_campaign=hw-devto-01" rel="noopener noreferrer"&gt;MaxAEO&lt;/a&gt; does. We'll rerun the same 40 questions each month and update this post with the new numbers, our row included.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This article was written with AI assistance. The data and analysis are ours, and I checked every number against our export.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>webdev</category>
      <category>seo</category>
    </item>
  </channel>
</rss>
