The usual pitch for AI-powered reporting is speed: a model pulls the data, writes the commentary and fills the deck. I built that, and the speed is real, but it isn't the interesting part.
The interesting part is a check that caught a 24-point error in a headline number before it went to a client.
What the pipeline does
At the agency where I lead SEO, the SEO section of our monthly client decks is now built by scripts instead of by hand. It runs in three stages:
- Collect pulls Search Console data for each property over fixed date windows.
- Prepare derives every figure in the section into a single data file. Every number on a slide traces back to that file.
- Build renders the slides from that file in the deck's existing visual style.
Next month, you change the date windows and re-run it. Nobody hand-edits the exported deck, because a hand edit is a number with no source. Agents (Claude and Codex) do a lot of the build and analysis work under my direction. I decide what the section is allowed to claim.
The error it caught
In August 2026, the July numbers for one RV brand looked bad: impressions down 15.1% month over month, click-through rate up about a point. That combination invites an easy story: visibility is slipping, but the listings we still have are working harder.
The story was wrong. When we lined up the agency's other Search Console properties, unrelated verticals showed the same shape. Of 26 sites with meaningful volume, 18 had impressions down and click-through up in the same month. Independent SEO events don't do that across a school, a country club, a software company and an RV maker at once. Splitting by device showed the whole effect was desktop: desktop impressions fell 18% while mobile rose 7.6%.
For the RV brand specifically, the distortion was in June, not July. A burst of zero-click, deep-position desktop impressions had inflated the June baseline. Restated on burst-free windows, the brand's impressions were up 8.4%, not down 15.1%. The sign flipped, a 24-point swing in the headline number, and without the check the deck would have carried the wrong one.
The check that runs every month now
The rule that came out of it: before anyone writes a sentence about impressions, CTR or average position, run the artifact check.
- Do unrelated properties move together? If several sites all lose impressions and gain CTR in the same month, it's a change in how impressions are counted rather than in performance.
- Split by device. Both counting shifts we found were desktop-only.
- Lead with clicks. Clicks held up through both counting shifts. Year-over-year impressions and average position didn't, because Google's September 2025 removal of the 100-results-per-page parameter caused a desktop-only step change in impressions and average position.
- Compare equal windows. Full-month July against full-month June gives July an extra day. That alone inflated every brand by about 3% and flipped two brands from negative to positive in a draft.
- Watch the retention edge. Search Console keeps about 16 months of data, so the oldest prior-year month in a comparison is often partial. One partial month produced a bogus +179% spike before the pipeline started dropping it automatically.
Testing trend claims
The other failure mode is a plausible trend sentence the data doesn't support. A draft for one brand said its year-over-year gap was "narrowing." Checked against a monthly prior-year series, it wasn't. The deficit had held roughly steady for four months, and the month-over-month gains were just tracking last year's seasonal climb. Now the prepare step computes whether each gap is actually narrowing, so that sentence gets tested on every rebuild instead of being taken on faith.
Same idea for seasonality. RV search peaks in July, so every brand drops in August and a raw month-over-month table makes a whole portfolio look broken. Comparing this year's July-to-August change with last year's shows which property is genuinely off its normal pattern. That's the one that needs attention, and the raw table hides it.
What AI is good for here, and what it isn't
Models are fast at the plumbing: API pulls, joins, chart-ready tables, first-draft commentary. They're also fluent at writing a confident paragraph about a number that's wrong. That fluency is the risk: the more readable the commentary, the less likely anyone is to question the figure under it.
So the pipeline's job is to make sure every number has a source and the known artifacts are ruled out before anyone writes a story. A person still reviews the section before it goes into a deck.
If you want to build one
The simplest useful version:
1. Pull your data by API into a file, not a spreadsheet you edit by hand 2. Compute every figure in a script, so each one has a source 3. Run the artifact checks above before any commentary gets written 4. Let a model draft commentary from the computed figures, not the raw export 5. Render the slides from the data, and review before anything is sent
The data pull is a weekend project. The checks are where the value is, and you mostly learn which ones you need by catching your first false story.
What clients actually care about
What clients care about is whether the report is true. Automation makes a wrong number cheaper to produce and easier to believe, so the time it saves on assembly should go into verification.