GeoGrid
Proves a local business is invisible — and prices the damage.
A local-search auditor for service-area businesses. It answers a question the owner cannot answer by googling themselves: not “do I rank?”, but “where do I disappear?”
- Open the live tool — Gated by a passphrase — the endpoint spends real money per run
Visibility audit · 7×7 grid · 18 miles across
Coverage
38%
of the service area
Avg. rank
7.4
where it appears
Dead zones
26
invisible entirely
Grid heatmap
Estimated leak
Invisible across 62% of the service area. At this business’s own job value, the gap is worth roughly $14,200/month in enquiries going to competitors.
Sample figures, shown to illustrate the report’s shape. Every number in a real audit is computed from live search data.
Why this
exists.
A roofer, dentist or plumber googles their own business from the office, sees themselves at the top, and concludes local search is handled. Three miles away — where half their customers actually live — they are not on the map at all.
Rank is not one number. It is a surface that changes with every mile you move. Nobody sells that surface to the business owner in a form they can act on, and the agencies that do measure it rarely put a currency figure next to the gap.
Meanwhile the search box is moving. When a customer asks ChatGPT or Gemini for a roofer instead of Google, being invisible there is a second, newer hole nobody is checking.
Everything that’s actually built.
The scan
- A geographic grid of map searches — up to 9×9 points, about 24 miles across at the default spacing
- Every point searched for every keyword in the set, concurrently
- The business is matched by its Google place id, so an audit can never silently profile a similarly-named competitor
- A dry run prints the grid and the exact credit cost before a single API call is made
What comes out
- Average true rank, share of local voice, coverage percentage and a dead-zone count
- The competitors occupying the space where the business vanishes, with their review gap
- AI-assistant visibility — whether ChatGPT and Gemini name the business when asked for one
- Cited competitor and market research, with uncited claims discarded rather than printed
- Revenue leakage modelled from the business's own job value and close rates
The artifact
- A single self-contained HTML report — inline SVG heatmaps, no JavaScript, no CDN
- Opens offline, prints straight to PDF, survives being emailed to a client
- A plain-English narrative that names the gaps without prescribing the fix
- Runs as a CLI for me, or as a one-page web form for a client
The stack,
without mystique.
Standard, boring technology your next developer will recognise. That’s the point — nothing here is a proprietary runtime you’d be locked into.
- Language
- Python
- Hosting
- Vercel serverless — one function
- Database
- None. Each audit is one-shot
- Search data
- Serper
- AI layer
- OpenRouter — Perplexity Sonar for research, a writing model for the narrative
- Report
- Jinja2 + inline SVG
- Tests
- pytest
The decisions that took the longest.
Anyone can list features. These are the calls that decide whether the thing survives contact with real customers and real money — explained without jargon, because you should be able to judge them without being an engineer.
- 01
The model is never allowed to touch a number
Every figure in the report is computed in Python from API data. The AI layer only writes prose about a finished set of facts — and a guard checks the prose against those facts, rejecting any number that does not appear in them. It retries once, then falls back to deterministic template text. An audit that quietly hallucinates a revenue figure is worse than no audit, so the architecture makes it impossible rather than unlikely.
- 02
Unknown reads “not measured”
Where a value could not be established, the report says so. It never fills a gap with a plausible estimate. This is the difference between a document a business can act on and a document that looks like one.
- 03
Every raw response is cached to disk
Re-running a report, fixing a typo in the template or re-rendering months later costs zero API credits. The expensive part of an audit is bought once.
- 04
Spend is visible, confirmed and capped
The grid maths means cost scales with grid size times keyword count, so it is quoted up front on a dry run, confirmed before the AI layer fires, hard-capped by a flag, and logged per run. A tool that spends real money per click needs a brake before it needs features.
- 05
No database, on purpose
There are no accounts, no stored client data and nothing to breach. The deliverable is a file. That decision is what let the whole thing ship as one serverless function — and it is also the constraint I would revisit first if it were ever sold self-serve rather than delivered.
- ≈$0.29
- API cost per standard audit
- 8
- pipeline steps, all built
- 0
- databases
- 81
- grid points at maximum
One copy of GeoGrid has been sold, for $250, to a single client. That is the entire commercial history of this tool.
Want one of these for your business?
GeoGridtook the shape it did because of one specific business problem. Tell me yours and I’ll tell you what it would take — or watch me drive the back end of these first.
Got a project to scope? Start there. Just want to see it working first? Book the demo.