How to Run a Local SEO Audit Before You Quote a Retainer

18 min readUpdated

On this page 11 sections
  1. What a local SEO audit is for
  2. Start on the map, not on the site
  3. Confirm you are measuring the right business
  4. Audit the profile before you audit the site
  5. Decide which number goes in the report
  6. Then, and only then, look at the site
  7. The competition sets the ceiling
  8. Turning the readings into a quote
  9. What you hand over
  10. A running order for the afternoon
  11. Common questions

The call always goes the same way. A dentist four miles out from the centre says she has disappeared from the map, her partner checked on his phone at home and she was nowhere, and can you sort it before the quarter ends. You have not opened the account yet. You are being asked to price the work before anyone has established what is broken.

A local SEO audit is the part that belongs before the quote. Done well it takes an afternoon and tells you whether the problem sits in the profile, the site, the competition, or in the measurement itself. Done badly it produces forty pages of crawl warnings and no answer to the only question the client asked.

Disclosure: I build a rank tracker, so I have an interest in how local visibility gets measured. Where I name an API field below it is the name used by the search data API that Rankfinity reads, and each of those fields is linked to the provider’s own documentation with the date it was checked. Other providers return the same underlying readings under different labels, which is part of the point.

The short version

Run the grid before you open the site. Pin the listing by its identifier before you trust a single position. Write down which convention your tool uses to count a position. Only then decide what the site work is worth.

1 afternoonfor a single location, mostly waiting for scans
49scans in one 7 by 7 grid
6sections in the deliverable
3grid patterns that decide the quote

What a local SEO audit is for

The question is narrow: where can this business be found, by whom, and what is holding the ceiling down. Everything in the audit either helps answer that or belongs in a different engagement.

This is why a general site crawl makes a poor local audit. A crawler is good at finding a missing canonical tag on an old blog archive. It has nothing to say about the fact that the business is visible for two blocks and invisible for the next twenty, which is the thing the client can feel and the thing you are being hired to change. The geo-grid view of local visibility is where that gap turns into a picture rather than a complaint.

Four things need to be in front of you before you start:

  • Access to the Google Business Profile itself, not a screenshot of it
  • The site, including every location page and service page, even the ones nobody links to
  • A list of the terms that bring money into this business, which is rarely the same list as the terms with volume
  • The names of the two or three competitors the client keeps mentioning without being asked

The third item on that list is the one people skate over. Volume and commercial value come apart, and you can watch it happen in your own market before you go looking in the client’s. Pulling Google Ads figures for the United States on 1 September 2026, seo report template and white label seo reporting both return 590 searches a month. The average cost per click is $17.05 on the first and $55.23 on the second. Identical traffic, more than three times what a bidder will pay for it, and no report that counts positions alone would tell you which of the two was worth chasing. Client terms come apart the same way, and a ranking report that weighs them equally is the one that makes a good month look flat.

590 searches a month

seo report template

Average cost per click: $17.05

590 searches a month

white label seo reporting

Average cost per click: $55.23

Identical traffic, more than three times what a bidder will pay for it.

Where the figures come from

Google Ads figures for the United States, pulled on 1 September 2026. They show that volume and commercial value come apart. Your client’s terms will do the same.

Start on the map, not on the site

A single rank number for a local business answers a question nobody asked. Local ranking depends on where the searcher is standing, so a position measured from a city centroid describes an experience most of the client’s customers never have.

The distinction shows up directly in how a scan is configured. Most search data APIs accept either a coded location, which resolves to a country or a city, or a literal coordinate pair. In that API those are location_code and location_coordinate, and they are not two ways of doing the same thing.

Location setting What it answers Where it fails locally
Coded location (country or city) How the market as a whole tends to rank for the term Averages away the ten blocks you are being paid to fix
Coordinate pair (exact latitude and longitude) What a searcher standing at that point sees Only in the sense that one point is one point; it tells you nothing about the next street
A grid of coordinate pairs How far visibility reaches before it drops off, and in which direction A 7 by 7 grid is 49 scans instead of one, and that cost is the trade you are making

The coordinate carries more than a position. the provider guide to building a grid-based rank tracker for Google Maps sets the value out as latitude, longitude and zoom together, caps the latitude and longitude at seven decimal places, and defaults the zoom to 17z on a scale running from 3z to 21z. That third component is the one agencies forget. Two grids over the same address at different zoom levels are not the same measurement, and a history that silently changed zoom is a history that cannot be compared. The same guide prices a 7 by 7 grid at 49 separate tasks, which is the number to put in front of a client who asks why the scan costs more than a rank check. Both checked on 1 September 2026.

Seven by seven grid of scan points around a business address, green squares near the centre turning orange and red towards the edges, showing local search position falling off with distance
A geo-grid reading is one position per scan point, not one position for the business. The pattern above is a schematic drawn to show the shape of a drop-off, not a scan of a real business.

Run the grid first, because it reorders everything after it. Say the client sits third at her own front door and twelfth half a mile north. That is a proximity pattern, and no amount of title tag work will move it. Now say she is nowhere on the whole grid, including the square her building sits in. Different problem, different quote, and a week saved.

location_code a coded location. It resolves to a country or a city and averages away the blocks you are being paid to fix.

location_coordinate a literal latitude and longitude. One point, one reading.

zoom travels with each coordinate: 17z by default on a scale from 3z to 21z in the provider guide checked on 1 September 2026.

Do not change the zoom mid-history

Two grids over the same address at different zoom levels are not the same measurement. A history that silently changed zoom cannot be compared.

Confirm you are measuring the right business

Two practices in the same city share a name. A franchise has eleven locations and the client owns one. A business changed its trading name and the old listing is still live. In each case a tracker that matches results by business name will report somebody else’s position, and the report will look perfectly normal on the way out the door.

Pin the listing by its place_id rather than by its name. That identifier belongs to the listing itself, so it survives a change of trading name and it does not collide with a similarly named business two streets over. Treat it as stable rather than permanent: re-check it when a listing has been merged, rebuilt, or moved.

If your current tool cannot tell you which identifier it is tracking, that is the first finding of the audit and it is a serious one. It means you cannot demonstrate that last year’s position history describes this client at all. A history built against the wrong entity is worse than no history, because it looks like evidence.

Case 1

Two practices share a name

Name matching reports somebody else’s position and the report looks normal.

Case 2

A franchise with eleven locations

The client owns one. Name matching cannot tell which.

Case 3

A renamed business

The old listing is still live and the tracker follows the wrong one.

If the tool cannot name its identifier

That is the first finding of the audit, and a serious one. A history built against the wrong entity is worse than no history, because it looks like evidence.

Audit the profile before you audit the site

Most local visibility problems that are not proximity problems live in the profile, and the profile takes twenty minutes to check properly. The prize is narrow. The local pack shows three listings, checked on 1 September 2026, so fourth place and fortieth place look the same to a customer who never scrolls.

Start with the primary category. It is the field that tells Google what kind of business this is, it is usually set once during setup by somebody who has since left, and almost nobody goes back to it. Read it against what the business genuinely sells today. Then search the business name and the address separately and look for duplicates: an old listing from a previous owner, a service-area profile created alongside a storefront one, a listing a franchisor made. Duplicates split the signal, and clearing them is dull work nobody schedules, which is why they sit there for years.

Then the parts that are visible to a customer standing at the decision. Are the hours right, including the ones that changed. Is there a photo taken this decade. How many reviews are there against the competitors you listed at the start, and how many of them have a reply. A profile with strong positions and no replies is a conversion problem sitting behind a visibility report, and it is worth naming as one in the audit, before month three names it for you.

Finally NAP consistency: the name, address and phone number as they appear on the site, on the profile, and on the handful of directories the client genuinely holds citations on. Consistency here is hygiene, not a growth lever. Check it, note it, and do not build the engagement around it.

  • Primary category matches what the business sells today
  • No duplicate listings: old owner, service-area plus storefront, franchisor
  • Hours are right, including the ones that changed
  • At least one photo taken this decade
  • Review count and reply rate against the competitors you listed
  • Name, address and phone consistent on site, profile and the directories the client really uses
Google Business Profile editor with the primary category field highlighted and a side panel listing duplicate listings found by searching the business name and the address separately
The twenty minute profile check: category first, duplicates second, then what a customer sees.

Decide which number goes in the report

Search results stopped being a numbered list some time ago. A page might open with an AI overview, then a local pack, then a video carousel, then the organic results, and every tracker has to decide what counts as position one. Most APIs expose two readings and give them different names.

Field What it counts What happens when you report it
rank_group Position counted within results of the same type, so a multi-result block counts once Stays comparable month to month; this is the number that belongs in a client report
rank_absolute Every element on the page in order, blocks and paid results included Moves whenever Google adds an element above the client, and the client reads that movement as a drop you caused

Those are the working definitions, and the provider’s own note on rank absolute against rank group, checked on 1 September 2026, states them plainly: rank absolute is the position among all the elements found in the results, while rank group counts position within a group of elements sharing the same type. That page also carries a detail worth knowing before you explain a chart to a client. Elements placed in the right-hand column are counted separately, starting again from 1, so a knowledge panel and a top organic result can both read as position one in an export without either number being wrong.

The featured snippet is where this gets expensive. Trackers disagree about whether it counts as an organic position at all. Where a tool counts it as position one, the results below it report a place lower than the same pages did last week, and nothing on the site changed. The exception is worth knowing: when the snippet is pulled from the page that already held the top organic spot, that page is not listed twice, and nothing underneath moves at all. Where a tool keeps the snippet in a separate element type, the organic numbering does not move and only the absolute position does. Neither convention is wrong. Reporting one of them in January and the other in March is.

So write the convention into the audit, in plain words, along with which field the tool exposes. It is the most common reason two rank trackers disagree about the same keyword, and it is the easiest thing to standardise across an agency before anybody sends a report. Whatever you settle on, keep organic position tracking on that one definition for every client and every month.

Report this

rank_group

Counts within results of the same type. Stays comparable month to month.

Handle with care

rank_absolute

Moves whenever Google adds an element above the client, and the client reads that as a drop you caused.

Neither convention is wrong. Reporting one of them in January and the other in March is.

Then, and only then, look at the site

By this point you know whether the site is the constraint. Often it is not. When it is, the local checks are narrower than a general technical audit, and they mostly test whether the site can support what the profile claims.

Does each location have a page a human would want to land on, carrying the address, the hours and the services that location genuinely offers, rather than a template with the city name swapped in. Is the primary category on the profile something the site visibly sells. Can a crawler reach the location pages without going through a footer that lists forty of them. Does the page load on the phone the client’s customers are holding.

None of this is exotic, and you will find the same list in every checklist on the subject. What makes it part of a local SEO audit rather than a generic one is that each item is now attached to a gap you measured two hours ago. Anything you cannot attach that way goes in an appendix, or goes nowhere.

  • Does each location have a page a human would want to land on, not a template with the city swapped
  • Is the profile’s primary category something the site visibly sells
  • Can a crawler reach location pages without a footer that lists forty of them
  • Does the page load on the phone the client’s customers hold
The filter

Every item attaches to a gap you measured two hours ago. Anything you cannot attach that way goes in an appendix, or nowhere.

The competition sets the ceiling

The grid tells you where the client is invisible. It does not tell you why, and the answer is usually sitting in the same squares.

Take the three or four squares where the client ranks worst and look at who holds the top positions in them. One name recurring across all of them means the engagement is a fight with a single business, and it should be priced as one. Scattered names usually mean distance is doing the work and no rival is, and the honest answer may be that the map has a hard edge here and the budget belongs on the organic side instead. Competitor and share of voice analysis is how that impression becomes something you can put in front of a client without arguing about it.

This section is also where you find out whether the retainer is winnable at all. Better to learn that during the audit than in month four.

IF ONE NAME RECURS IN THE WORST SQUARESThe engagement is a fight with a single business and should be priced as one.→ Price a longer horizon
IF THE NAMES ARE SCATTEREDDistance is doing the work and no rival is. The map may have a hard edge here.→ Shift budget to organic

Turning the readings into a quote

The audit earns its place only if it changes the number at the bottom of the proposal. Three grid patterns come up often enough to price against, and each one points at a different engagement.

Three schematic geo-grids side by side: visibility fading with distance, absent everywhere, and a rival owning one side, each with the scope decision it implies
The same grid answers a pricing question as well as a visibility one. Schematic patterns, drawn to show the shapes rather than any particular business.

The first pattern is a healthy listing with a short reach. Positions are strong at the address and decay evenly outward in every direction. Nothing is broken, so there is little to fix, and the honest scope is narrow: tighten the profile, work the reviews, and set targets inside the radius the business can hold. Quoting a city-wide campaign against a proximity ceiling is how retainers get cancelled in month four.

The second is the one that looks alarming and is usually cheap. Nothing ranks anywhere, including the square the building sits on. That is rarely a content problem. It is a duplicate listing, a wrong primary category, a suspended profile, or a tracker pointed at the wrong place_id. Price a short diagnostic, fix the fault, and let the recovery speak for itself before you propose anything longer.

The third is expensive. The grid is split, and a rival holds every square in the direction the client wants to grow. Distance is not the constraint here and neither is the profile. That is a competitive position, and moving it takes sustained work across content, links and reviews. Quote it with a horizon measured in quarters, and say so during the audit rather than in month six.

Whichever pattern is in front of you, the number in the proposal should trace back to a square on the grid. That is the difference between a quote you can defend and a quote you end up negotiating.

Pattern 1

Healthy, short reach

Strong at the address, decaying evenly. Narrow scope: profile, reviews, targets inside the radius.

Pattern 2

Nothing ranks anywhere

Usually cheap: duplicate, wrong category, suspended profile or wrong place_id. Price a short diagnostic.

Pattern 3

A rival owns one side

A competitive position. Quote it with a horizon measured in quarters.

Run the grid before you write the quote

Rankfinity scans a coordinate grid around the address and shows where visibility drops off, so the number in your proposal traces back to a square.

See geo-grid trackingDisclosure: this is our product

What you hand over

An audit that ends in a spreadsheet of issues has failed, because neither the client nor you can act on it. The deliverable should be short enough to read in one sitting, and built so that each section answers a question the client would recognise as theirs.

Section The question it answers The evidence you show
Coverage How far does visibility reach from the front door The grid, with the drop-off visible on it
Identity Are we tracking the right listing The place_id and the profile it resolves to
Profile Is the listing itself doing its job Primary category, duplicates found, review count and reply rate
Position Where do we sit, and by which definition The field named, with one convention used throughout
Site Is the site holding us back Only the findings tied to a measured gap
Competition Who is taking the space, and is it winnable The squares where they win, and the name that recurs

Keep those six sections stable and the audit becomes something an agency runs rather than something one person performs from memory. It also becomes comparable: the audit from month one is the baseline that the client report is measured against in month six, which is a much easier conversation than defending a number nobody agreed on in the first place.

One page audit deliverable with six labelled blocks: coverage grid, identity, profile, position, site and competition, each with a single line of evidence beside it
Six stable sections, one page each. Keep them fixed and the audit becomes something an agency runs.

A running order for the afternoon

  1. First: start the gridScans take the longest, so queue them before anything else.
  2. While scans return: pin the listingConfirm the place_id, then check the profile.
  3. Then: write the convention downWhich position field, how featured snippets are counted.
  4. Then: read the grid and the squaresFind the pattern and who holds the worst squares. Look at the site only where a gap needs it.
  5. Last: write the quoteEach line of the proposal traces back to a square.

Common questions

How long should a local SEO audit take?

An afternoon for a single location, and most of that is waiting for scans to return. The parts that consume real time are agreeing the money terms with the client and reading the grid properly. An audit that runs into a second week has usually drifted into being a general site audit.

Is a grid worth it for a business with one location?

That is the case where it matters most. A multi-location business gets a crude coverage picture for free, because it has several addresses to compare. A single location has one address and one question, which is how far the visibility reaches before it stops, and a single rank number cannot answer it.

How large should the grid be, and how far apart should the points sit?

Size it to the trading area rather than to a habit. A dense city practice whose customers walk in may be fully described by a grid a mile across, while a service business covering three towns needs a wider spread and will still miss the gaps between points. Remember that the zoom value travels with each coordinate, so keep it fixed across scans if you want month to month comparisons to mean anything.

The rankings look fine and the phone is not ringing. What did the audit miss?

Usually one of three things. The rankings were measured from a point the customers do not stand at, so they are real and irrelevant at the same time. The tracked terms carry volume but no purchase intent. Or the visibility is genuine and the loss happens after the click, on a profile with no recent photos and unanswered reviews, which the profile section above is there to catch.

Should a local SEO audit cover AI assistants?

It is worth a look, though not with the same tooling. Assistants answer local questions differently from a results page, and they do not expose a position you can track the way an organic rank is tracked. The practical version is to ask the assistants what the client’s customers would ask and record what comes back, which is a check you can run by hand before deciding whether it earns a line in the report.

Rankfinity is a rank tracker from Smart Noud EOOD, with the grid, the organic positions, the competitor view and AI visibility reading off the same scan data. If you take one change from this into your next audit, make it the ordering: run the grid before you open the site. That reading is what the geo-grid module is built to measure.

Published by Rankfinity, a product of Smart Noud EOOD, which is responsible for the content of this article. Keyword figures come from the Google Ads search volume data returned through our search data provider for the United States in English. Every external claim above links to the page it came from and carries the date it was checked. Corrections can be sent through the contact details on the site and will be noted here.

← All articles

Keep reading

All articles →