Quick overview
This workflow runs every Monday to map your Google local pack presence across a grid of nearby coordinates using Bright Data SERP requests, summarizes the results with OpenAI (GPT-5.6), stores weekly metrics in an n8n Data Table, and shares the report to Slack and via Gmail.
How it works
- Runs every Monday morning on a schedule and loads your business name, keyword, center coordinates, grid size, and reporting destinations.
- Generates a square geo grid around the center point and builds a Google search URL for each coordinate using a uule location parameter.
- Queries Google from each grid point one at a time via the Bright Data SERP API and extracts the local pack entries, your position (or absence), and which competitors rank above you.
- Aggregates all points into coverage and average-rank metrics, stops the run if Google does not resolve a location for any point, and looks up the most recent prior result for the same business+keyword in an n8n Data Table.
- Stores the current week’s metrics back to the Data Table and tallies the competitors that outrank you most often across the grid.
- Draws an ASCII map of rankings laid out in grid order, asks OpenAI to write a two-sentence plain-language owner summary, and builds Slack and HTML email versions of the report.
- Posts the report to the configured Slack channel and emails the same report via Gmail.
Setup
- Create a Bright Data SERP zone and add an HTTP Header Auth credential in n8n that the workflow uses to call the Bright Data request API.
- Add OpenAI credentials (for the GPT-5.6 model), a Slack credential, and a Gmail credential.
- Create an n8n Data Table named
local_grid with columns watch_key, business, keyword, run_on, coverage_pct, avg_rank, and in_pack.
- Update the Settings values for
business_name, keyword, centre_lat, centre_lng, serp_zone, slack_channel, and report_to, then start with a small grid_size (for example 3) and adjust spacing/radius as needed.