The report goes out on Monday. On Tuesday the client replies with one line: what am I paying for. Attached is the same PDF, and someone has drawn a circle around the page where fourteen keywords moved up two places each.
The keywords did move. The report is not wrong. It just never answered the question the client was holding when they opened it, which is whether the money is producing anything a customer would notice. Most SEO reporting for clients fails at that specific point, and it fails the same way every month: the document proves activity instead of explaining a result.
Disclosure: I build Rankfinity, a rank tracker, so I have a commercial interest in how people measure local search. Everything below is checkable against the search data APIs that most trackers buy from, and the field names are the real ones you can ask any vendor about.
This guide covers the five decisions that make a client report survive a hostile read: the measurement contract, the numbers you keep, the geography you show, the narrative you write, and the version history you can produce eighteen months later. It assumes you already have a tracker and a Google Business Profile you can see data for. Working through it once takes an afternoon. Reporting after that takes about twenty minutes a month.
Write down what a position means before the first report, keep five numbers, show the grid instead of an average, put three plain paragraphs before any chart, and date every number. The rest of this guide is how.
Step 1: Agree the measurement contract before the first report
By the end of this step you should have one paragraph, in writing, that says what a position number in your report means. Send it with the first report and never change it silently.
Three things belong in that paragraph, and every argument I have watched between a consultant and a client traces back to one of them being unstated.
The first is which position field you report. Search data comes back with two. rank_absolute counts every block on the page in order, so ads, the map pack, People Also Ask and the AI Overview all consume numbers. rank_group counts organic results only. When a person says position, they mean rank_group. A tool reporting the other one will show a page sinking every time Google adds a feature above it, and you will spend a call defending a drop that never happened. The related trap: a Featured Snippet is counted as position one, which pushes the standard organic listings down by one place without anything changing on your side.
The second is where the measurement was taken. A location code in most data providers resolves to a metro area, not a street corner, and the map pack is decided at a resolution of a few hundred metres. A coordinate pair is a place. A location code is a region. If your report says the client sits third, the honest footnote says third at 41.8781, -87.6298, checked weekly, and not third in Chicago.
The third is which business listing you matched. Matching by business name breaks the moment a competitor opens under a similar name or the client changes their signage. Matching by place_id does not. Ask your vendor which one they do. If the answer is vague, that is the answer.
Write those three down. The measurement contract is the only part of a client reporting process that stops next quarter’s disagreement before it starts.
Which position field
Report rank_group, organic results only. Say so in the footnote.
Where it was measured
“Third at 41.8781, -87.6298, checked weekly”, not “third in Chicago”.
Which listing was matched
Match by place_id, not by business name.
Positions in this report are organic rank_group, measured at the coordinates shown, sampled weekly, for the listing with the place_id shown. Featured snippets count as position one. We will tell you in writing before any of this changes.
Step 2: Keep five numbers and delete the rest
A report with forty metrics is a report with no argument in it. The client cannot tell which number they are supposed to care about, so they care about none of them and ask about the invoice instead.
Five is enough for a monthly local SEO report. Here is the set I would defend, what each one answers, and the way each one usually goes wrong.
| Metric | Question it answers | How it should be measured | Common failure |
|---|---|---|---|
| Map pack position for the money term | Can a nearby customer find them at all | Grid of coordinate points, matched by place_id | Single city-level reading, averaged into meaninglessness |
| Organic position, top 10 commercial terms | Is the site earning the click below the map | rank_group, same coordinates, weekly |
Reported as rank_absolute, so SERP features look like losses |
| Share of the visible grid | How much of the service area they own | Percentage of grid points where they appear in the top three | Grid too small, so it only covers the office |
| Calls and direction requests | Did the visibility turn into contact | Google Business Profile insights, month over month | Compared against a month with a holiday in it |
| Pages gaining or losing positions | Where to spend next month | Position deltas grouped by landing page | Listed as keywords, so nobody can act on it |
Notice that four of the five are outcome numbers and one is a work number. That ratio is the point. If a client has to read past three activity charts to reach a result, they have already decided the report is a bill in disguise.
If a client has to read past three activity charts to reach a result, they have already decided the report is a bill in disguise.
Step 3: Show the geography instead of averaging it
A single number for a local business is a summary of many different truths. A plumber can hold position two beside the depot and position fourteen across the river, and the average of those, position eight, describes a situation that exists nowhere.
The fix is a grid. You sample the same keyword at many coordinate points across the service area and you show the shape of the result. Grid based measurement turns a disputed number into a picture the client can argue with productively: they will point at the weak corner and tell you which suburb the good customers come from, which is information you did not have.
Grid density matters more than grid size. A seven by seven grid over a dense city block tells you something. The same grid stretched over a county is measuring farmland. Set the spacing to the distance a customer would plausibly travel, then keep it fixed, because changing the grid changes every historical comparison you have.
This is also the section where a client report earns its fee. Anyone can send a list of positions. Showing that the client owns the north half of their market and loses the south half every time is the sentence that leads to a bigger scope of work.
Position eight
An average of two beside the depot and fourteen across the river. It describes a situation that exists nowhere.
The shape of the market
The client points at the weak corner and tells you which suburb the good customers come from. That is information you did not have.
Changing the spacing changes every historical comparison you have. Set it to the distance a customer would plausibly travel, then leave it.
Step 4: Write three paragraphs before you attach a single chart
The narrative goes first, in plain sentences, and it has exactly three parts: what changed, why it changed, and what happens next month.
What changed is one honest sentence. Positions improved on eleven terms, held on nine, and slipped on four. If the month was flat, say the month was flat. Nothing burns credibility faster than a chart cropped to make a two place move look like a mountain, and a client who catches that once reads every future report as marketing.
Why it changed is where your judgement is visible. Perhaps a competitor added service area pages. Perhaps a review streak ended. Perhaps you rewrote the location page in week two and the movement follows it. If you do not know why, write that you do not know and say what you will test. Consultants are hired for reasoning, and an admitted uncertainty reads as competence.
What happens next is two or three specific actions with names attached. Not improve content. Rather, rewrite the Riverside page, request review responses for the four unanswered ones, add the missing service to the profile. The client should be able to check next month whether you did the things you said.
Three paragraphs, then the data. If a stakeholder reads only the first page and can still repeat your argument in a meeting, the report has done its work.
“Improve content.”
Nothing for the client to check next month.
Actions with names
Rewrite the Riverside page, request review responses for the four unanswered ones, add the missing service to the profile.
- What changedOne honest sentence. Improved on eleven terms, held on nine, slipped on four. If the month was flat, say so.
- Why it changedYour judgement made visible. If you do not know, say that and say what you will test.
- What happens nextTwo or three specific actions the client can check next month.
Step 5: Date, version and freeze everything
Every number in the report needs a date and a method next to it. Checked 3 August 2026, coordinate grid, rank_group, weekly sampling. This costs nothing and it settles the argument that arrives in month nine when a new marketing manager finds an old PDF and asks why a number moved.
Keep the exported files. Do not overwrite last month’s report with a refreshed dashboard link, because a dashboard shows today and a client dispute is always about a specific past day. If your tooling supports it, snapshot the underlying data too. Positions are recomputed constantly by every provider, and a link that once said four can quietly say six.
One more habit worth building: reconcile a sample by hand once a quarter. Take two keywords, run the search from the client’s own area in a clean browser session, and see whether your tool agrees. When it does not, the reasons are usually the ones in this breakdown of tracker disagreements, and finding them yourself is better than having the client find them.
- The check date
- The method: coordinate grid or single point
- The position field: rank_group or rank_absolute
- The sampling cadence: weekly or monthly
- The export file saved, not replaced by a refreshed dashboard link
Reports that print the date and location
Branded client reports in Rankfinity print the check date and location next to each position, and you can share them as a link or a PDF.
What to cut from the template you inherited
Most agency reports carry sections that nobody has read since the template was made. These are the ones I would remove first:
- Domain authority scores from third party tools, which are vendor estimates and move for reasons unrelated to the client’s business
- Keyword counts with no revenue relationship, such as ranking for four hundred terms nobody searches
- Bounce rate presented without context, where a fast answer and a bad page look identical
- Screenshots of tool dashboards, which show that you own software rather than that you did work
- Traffic charts covering the whole site when only three pages carry commercial intent
Cutting these makes the report shorter and the argument louder. If a client asks where a removed section went, that question is a better conversation than the section ever was.
Send the report without one of the sections above and see whether anyone asks. If nobody does, you have your answer. If someone does, that question is a better conversation than the section ever was.
Where competitor context belongs
Client reports usually mention competitors badly, either as a list of names with no numbers or as a chart nobody can act on. The useful version is narrow: for the two or three businesses that appear above your client at the grid points that matter, show where they win and what is visibly different about their listing or page.
That comparison belongs at the end, after your own numbers, because it is context rather than performance. Share of voice measurement across a fixed keyword set is the version of this that stays honest over time, since it moves when the market moves rather than when you pick a flattering rival.
Quarterly reconciliation, step by step
- Pick two keywordsChoose one the client cares about and one that moved recently.
- Search from the client’s own areaUse a clean browser session and the same device type as your tracker.
- Compare with your toolWrite both numbers down with the time of day.
- If they differ, check the usual causesLocation resolution, the position field and the featured snippet offset, in that order.
- File the result with the reportSo the next dispute starts with evidence.
Common questions
How often should a client SEO report go out?
Monthly for the report, weekly for the underlying measurement. Local positions fluctuate enough day to day that a single monthly reading is noise, and sampling weekly gives you a trend line you can defend. Reporting more often than monthly usually produces reaction to variance rather than decisions.
Should the report be a PDF, a dashboard or a live link?
Both, with the PDF as the record. A live view is useful for the client who wants to poke at data between calls, and a dated export is what you need when a disagreement arrives months later. If you only keep one, keep the export.
What do I say when positions have not moved?
Say so in the first paragraph, then show what did change underneath. Grid coverage often widens before the headline position improves, and review volume, page speed and listing completeness all move earlier than positions do. A flat month with a clear explanation retains more clients than a good month with none.
Do I need to report on AI assistant visibility yet?
It is becoming a fair question from clients, and the honest answer today is that measurement here is far less settled than organic position tracking. Assistant answers vary by session and personalisation, so a single reading proves little. If you include it, label it as directional. Rankfinity has a working AI visibility module for this, and until any such measurement stabilises across the industry it belongs as context rather than as a headline metric.
How much of this can be automated?
The measurement and the assembly can be. The three narrative paragraphs cannot, and that is the part the client is paying a person for. Automate the grid, the position pull and the export, then spend the saved twenty minutes writing the reasoning.
Start with the measurement contract
Pick the one client most likely to challenge a number, write the three sentence measurement contract for their account, and attach it to this month’s report. It is the smallest change here and it prevents the most expensive conversation. If you want the grid, the position history and the branded export to come from one place, see how Rankfinity handles client reporting.