<?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: Global-Match-Hub</title>
    <description>The latest articles on DEV Community by Global-Match-Hub (@globalmatchhub_b7ad9cba).</description>
    <link>https://dev.to/globalmatchhub_b7ad9cba</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%2F4133533%2F792bf7a7-4835-4751-8944-848601fe60e3.png</url>
      <title>DEV Community: Global-Match-Hub</title>
      <link>https://dev.to/globalmatchhub_b7ad9cba</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/globalmatchhub_b7ad9cba"/>
    <language>en</language>
    <item>
      <title>Why your Search Console API impressions don't match the UI</title>
      <dc:creator>Global-Match-Hub</dc:creator>
      <pubDate>Mon, 21 Sep 2026 04:38:18 +0000</pubDate>
      <link>https://dev.to/globalmatchhub_b7ad9cba/why-your-search-console-api-impressions-dont-match-the-ui-2cef</link>
      <guid>https://dev.to/globalmatchhub_b7ad9cba/why-your-search-console-api-impressions-dont-match-the-ui-2cef</guid>
      <description>&lt;p&gt;I was building a small tool that pulls Google Search Console data into Claude, and the first thing that broke was trust. My impressions total was higher than the number in the Search Console UI. Not by a rounding error. Noticeably higher.&lt;/p&gt;

&lt;p&gt;Here is what was going on, in case you hit the same thing.&lt;/p&gt;

&lt;h2&gt;
  
  
  The mistake: summing page rows
&lt;/h2&gt;

&lt;p&gt;The obvious way to get totals is to query by &lt;code&gt;page&lt;/code&gt;, then add up clicks and impressions across all rows.&lt;/p&gt;

&lt;p&gt;Clicks come out close. Impressions do not.&lt;/p&gt;

&lt;p&gt;The reason: Search Console counts impressions differently depending on how you group the data. Grouped by property, one results page counts once. Grouped by page, every one of your URLs on that results page gets its own impression. If two of your pages show up for the same search, that is one impression for the site but two when you add up the page rows.&lt;/p&gt;

&lt;h2&gt;
  
  
  The fix: take totals from the date dimension
&lt;/h2&gt;

&lt;p&gt;If you want numbers that match the UI, query with &lt;code&gt;dimensions: ["date"]&lt;/code&gt; and sum those rows instead. Each day is counted once at the property level, so impressions line up with what Search Console shows.&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;"startDate"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2026-08-24"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"endDate"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2026-09-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;"dimensions"&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;"date"&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Use page or query dimensions for breakdowns ("which pages lost clicks"), and the date dimension for the headline totals. Don't mix the two in the same number.&lt;/p&gt;

&lt;h2&gt;
  
  
  Two smaller gotchas
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Data lag.&lt;/strong&gt; The most recent two or three days are usually incomplete. If you compare "last 7 days" to "the 7 before", end both ranges a few days back, or the latest week always looks worse than it is.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Average position is not additive.&lt;/strong&gt; You can't take a plain average of the position column across rows. Weight it by impressions, or take it from the same date-level query.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What I ended up building
&lt;/h2&gt;

&lt;p&gt;I wrapped this into a small MCP server so I can ask Claude or Cursor things like "which pages lost clicks this month" without exporting a CSV first. It is read-only, runs locally, and takes totals from the date dimension.&lt;/p&gt;

&lt;p&gt;Disclosure: I built it. It's free and MIT: &lt;a href="https://go.namubase.com/slite?s=devto-0921" rel="noopener noreferrer"&gt;https://go.namubase.com/slite?s=devto-0921&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you've found other places where the API and the UI disagree, I'd like to hear them.&lt;/p&gt;

</description>
      <category>seo</category>
      <category>api</category>
      <category>webdev</category>
      <category>mcp</category>
    </item>
  </channel>
</rss>
