Quick overview
For SEO freelancers, agencies and site owners who want a rank tracker they own, in Google Sheets, with alerts only when something matters.
How it works
- Runs every day at 7:00 or starts immediately when the “Check Google rankings now” form is submitted.
- Loads your rank tracking configuration (domain, keywords, market, alert rules) and stops with an error if the Google Sheet URL, domain, or Slack channel (when enabled) is missing.
- Builds and validates the Apify Google Rank Tracker input by merging and deduplicating keywords (using form keywords when provided) and enforcing depth and keyword-count limits.
- Runs the Apify Google Rank Tracker actor to fetch each keyword’s current position, ranking URL, SERP features, competitors, AI Overview presence/citation, and change versus the previous run.
- Reads existing ranking history from Google Sheets and calculates per-keyword metrics like 7-day change, best-ever position, URL changes, and alert flags for drops, lost rankings, top-3 entries/exits, and uncited AI Overviews.
- Upserts one row per keyword per day into the Google Sheets History tab, appends a single run summary row to the Runs tab, and posts a Slack message only when alerts are present (or posts a failure message and stops if the Apify run fails).
Setup
- Install the Apify community node (@apify/n8n-nodes-apify) and add an Apify API token credential.
- Create a Google Sheet with History and Runs tabs (with the expected header columns) and add Google Sheets credentials in n8n.
- Update the Google Sheet URL, target domain, keywords, location/language/device, and cost cap (maxCostPerRunUsd) in the “Rank tracker settings” section.
- If you want notifications, add Slack credentials, set sendSlackAlerts to true, and set the Slack channel name to post to.
Requirements
- Apify account and API token; Google Sheets and Slack accounts
Customization
- Change depth to 30 or 100 to see beyond page 1, add up to 10 competitors, tune alertOnDropOf, or point the Slack node at email or Teams. The alert rules are plain JavaScript in the "Compare with history and flag changes" node.