Local Rank Tracking API

A webhook that measures local-pack position keyword by keyword, rate-paced through a batch loop, treating "not ranking" as a recordable answer rather than an error.

Client
EpsolDev
Category
SEO Engineering
Completed
2026-08-15
Built with
n8n, REST API
Topics
Analytics, Automation, SEO
Local Rank Tracking API

n8n Local SEO Webhook API In production

Two workflows that answer one question a business actually cares about: where do we rank in the local pack, for the searches that bring customers in?

The position tracker: a keyword loop calling Places, resolving rank, and aggregating one JSON response


An API, not a scheduled job

The tracker is a webhook, deliberately. Rank checks are requested — by an operator opening the dashboard, or by the platform's own scan queue — not fired on a fixed timer that nobody asked for.

GBP Tracker Webhook -> Prepare Keywords -> Loop Keywords ─┬─> Google Places Search
                                               ^          │           │
                                               └──────────┴──── Find Position
                                                          │
                                                          └─> Aggregate Results -> Respond JSON

Loop Keywords is a batch loop, and it is what keeps the workflow inside the Places API's rate limits. Firing every keyword concurrently is faster right up until the point where half the responses come back throttled and the ranks are wrong — and a wrong rank is worse than a slow one, because it silently becomes a data point on a trend chart.


Rank is resolved, not requested

Google Places Search returns a result set; it does not return "you are number 4". Find Position walks that set and locates the tracked business by identity — which is the whole trick, and the reason this is a code node rather than a field mapping.

Two things it has to survive:

  • the business appearing under a slightly different display name
  • not appearing at all — which is a valid, recordable answer, not an error

Absence is data. A keyword the business does not rank for is the most actionable row on the report, so the aggregator records it rather than dropping it.


The dashboard

The workflow serving the rank tracker dashboard

Three nodes serving the operator interface straight from the automation platform — the same pattern as the indexing checker's front end. For an internal tool with a handful of users, a workflow that returns HTML is the entire deployment story.


Where it fits

This measures local pack position. The indexing suite measures index coverage. They are routinely confused and they fail differently: a page can be perfectly indexed and rank nowhere, and a business can dominate the map pack with a page Google has never crawled.

Results feed the geo-grid rank tracker inside Custom Blog Management, which plots them as a visibility heatmap across a grid of measurement points.


Stack

n8n Google Places API JavaScript REST API

All projects