Map local pack rankings across a geo grid with Bright Data, GPT-5.6, Slack and Gmail

Go to Workflow
0 views
Built by Daniel Shashko Daniel Shashko
Created on August 28, 2026

Description

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.

Nodes Used (6)

Basic LLM Chain
@n8n/n8n-nodes-langchain.chainLlm
Code
n8n-nodes-base.code
Gmail
n8n-nodes-base.gmail
HTTP Request
n8n-nodes-base.httpRequest
OpenAI Chat Model
@n8n/n8n-nodes-langchain.lmChatOpenAi
Slack
n8n-nodes-base.slack