SerpAPI to Google Sheets, rank tracking made easy
You check rankings, paste numbers into a sheet, then realize you missed a drop two days ago. And now you’re guessing if it’s a real issue or just you forgetting to update the file.
This is the kind of mess that hits SEO specialists first. But agency owners juggling client keywords and busy site operators feel it too. A solid rank tracking automation gives you a clean log in Google Sheets and only pings you when something actually moves.
Below, you’ll see how this n8n workflow checks Google via SerpAPI, writes the results to a spreadsheet, and alerts you by WhatsApp or email when rankings change.
How This Automation Works
See how this solves the problem:
n8n Workflow Template: SerpAPI to Google Sheets, rank tracking made easy
flowchart LR
subgraph sg0["When clicking ‘Test workflow’ Flow"]
direction LR
n1@{ icon: "mdi:swap-vertical", form: "rounded", label: "Map Organic Results Array", pos: "b", h: 48 }
n2["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Google Serp Request"]
n3["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Set Keyword (s)"]
n4["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Web URL Position Finder"]
n5@{ icon: "mdi:play-circle", form: "rounded", label: "When clicking ‘Test workflow’", pos: "b", h: 48 }
n8@{ icon: "mdi:play-circle", form: "rounded", label: "Google Sheets Trigger", pos: "b", h: 48 }
n9@{ icon: "mdi:database", form: "rounded", label: "Get Row (notChecked Column)", pos: "b", h: 48 }
n10@{ icon: "mdi:database", form: "rounded", label: "Update Check Status Column (..", pos: "b", h: 48 }
n13@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Notifications Switch", pos: "b", h: 48 }
n14@{ icon: "mdi:message-outline", form: "rounded", label: "Send Email Improved", pos: "b", h: 48 }
n15["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/whatsapp.svg' width='40' height='40' /></div><br/>Send WA Message Improved"]
n16@{ icon: "mdi:message-outline", form: "rounded", label: "Send Email Dropped", pos: "b", h: 48 }
n17["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/whatsapp.svg' width='40' height='40' /></div><br/>Send WA Message Dropped"]
n3 --> n2
n2 --> n1
n13 --> n16
n13 --> n17
n13 --> n14
n13 --> n15
n8 --> n9
n4 --> n10
n1 --> n4
n9 --> n3
n5 --> n9
n10 --> n13
end
subgraph sg1["Schedule Flow"]
direction LR
n0@{ icon: "mdi:play-circle", form: "rounded", label: "Schedule Trigger", pos: "b", h: 48 }
n6@{ icon: "mdi:database", form: "rounded", label: "Google Sheets", pos: "b", h: 48 }
n7@{ icon: "mdi:database", form: "rounded", label: "Google Sheets2", pos: "b", h: 48 }
n11["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/whatsapp.svg' width='40' height='40' /></div><br/>WA Start Checks Notification"]
n12@{ icon: "mdi:message-outline", form: "rounded", label: "GMAIL Start Checks Notificat..", pos: "b", h: 48 }
n6 --> n11
n6 --> n12
n7 --> n6
n0 --> n7
end
%% Styling
classDef trigger fill:#e8f5e9,stroke:#388e3c,stroke-width:2px
classDef ai fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
classDef aiModel fill:#e8eaf6,stroke:#3f51b5,stroke-width:2px
classDef decision fill:#fff8e1,stroke:#f9a825,stroke-width:2px
classDef database fill:#fce4ec,stroke:#c2185b,stroke-width:2px
classDef api fill:#fff3e0,stroke:#e65100,stroke-width:2px
classDef code fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
classDef disabled stroke-dasharray: 5 5,opacity: 0.5
class n5,n8,n0 trigger
class n13 decision
class n9,n10,n6,n7 database
class n2 api
class n3,n4 code
classDef customIcon fill:none,stroke:none
class n2,n3,n4,n15,n17,n11 customIcon
The Challenge: Keyword Rank Tracking That Turns Into Busywork
Rank tracking sounds simple until you’re doing it for real campaigns. You’re bouncing between keywords, locations, and URLs, then trying to keep “current,” “previous,” and “notes” consistent across a spreadsheet. One missed update and the whole history becomes suspicious. Worse, you usually find problems late, after traffic dips and someone asks why. The manual routine also kills momentum: instead of improving pages, you’re collecting numbers.
It adds up fast. Here’s where it breaks down in day-to-day work.
- You end up spending about an hour a week just running searches and recording positions.
- Incognito checks still vary by location and personalization, so the “truth” changes depending on who’s looking.
- Small rank drops get buried until they become big drops, because nobody wants daily noise.
- Clients and stakeholders ask for proof, but you only have a screenshot or a half-updated sheet.
The Fix: Automated SERP Checks Logged to Google Sheets
This workflow turns rank tracking into a repeatable system. On a schedule you choose, it marks your keyword rows as “not checked,” then processes them one-by-one. For each keyword, n8n calls SerpAPI to fetch the Google organic results, then a small script finds where your target URL appears and extracts the position. That new position gets written back into Google Sheets with an updated timestamp and status, creating a reliable history you can filter, chart, and share. If a keyword improves or drops compared to its previous position, the workflow routes the result to a notification step and messages you via WhatsApp and/or email. If nothing changes, it stays quiet.
The flow starts with a scheduled run and a sheet update to flag what needs checking. SerpAPI returns the SERP, the workflow parses the ranking position for your URL, then Google Sheets becomes your logbook. Finally, alerts only fire on movement, so you’re not drowning in updates.
What Changes: Before vs. After
| What This Eliminates | Impact You’ll See |
|---|---|
|
|
Real-World Impact
Say you track 40 keywords for one site. Manually, you might spend about 2 minutes per keyword between searching, confirming the right URL, and logging the result, which is roughly 80 minutes each run. If you do that weekly, that’s basically half a workday gone every month. With this workflow, you spend maybe 10 minutes setting up the sheet and scanning the alerts; the checks run in the background and the results are already logged when you open Google Sheets.
Requirements
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- SerpAPI to fetch Google organic results.
- Google Sheets to store keyword and rank history.
- SerpAPI API key (get it from serpapi.com/manage-api-key).
Skill level: Beginner. You’ll connect accounts, paste an API key, and match your sheet columns to the workflow fields.
Need help implementing this? Talk to an automation expert (free 15-minute consultation).
The Workflow Flow
A scheduled run flags what needs checking. The supporting schedule trigger marks rows in your Google Sheet as “notchecked” so the system knows what to process this cycle.
The sheet becomes the queue. A trigger watches for rows with that “notchecked” status, then pulls the next unchecked keyword and its target URL so you don’t process the same row twice.
SerpAPI pulls the live SERP, then the workflow finds your URL. n8n sends an HTTP request to SerpAPI, maps the organic results into a usable format, and a code step locates the position of your website URL inside the results list.
Google Sheets is updated and alerts are routed. The workflow writes the current position back to the sheet, marks the row as checked, compares “previous” vs. “current,” and only then sends an email or WhatsApp message if something improved or dropped.
You can easily modify the check frequency to run daily instead of weekly based on your needs. See the full implementation guide below for customization options.
Step-by-Step Implementation Guide
Step 1: Configure the Scheduled Trigger
This workflow can start on a schedule, from a sheet change, or manually for testing. Configure all trigger nodes to match your monitoring cadence and data updates.
- Open Scheduled Run Trigger and set your preferred schedule (e.g., daily or hourly) to automate routine checks.
- Open Sheet Change Trigger and connect it to the keywords sheet so updates can trigger checks immediately.
- Keep Manual Test Launch enabled to allow on-demand runs while you validate the workflow.
Step 2: Connect Google Sheets
These nodes read the keyword list, write status updates, and mark rows as checked. Connect the same spreadsheet and sheet tabs used in your monitoring process.
- Open Read Keywords Sheet and select the spreadsheet and sheet tab that stores your keywords.
- Open Write Status to Sheet and map it to the same sheet or a status log sheet to track run metadata.
- Open Fetch Unchecked Row and configure it to read only rows that have not been checked yet.
- Open Mark Row as Checked and set it to update the status column for processed rows.
Step 3: Set Up Keyword Processing and SERP Lookup
This section assembles the keyword list, requests SERP data, and computes positions for your target URLs.
- Review Assign Keyword List to confirm it outputs the keywords and target URL(s) required for the SERP call.
- Open SERP API Request and set the request URL, headers, and query parameters required by your SERP provider.
- Open Map Organic Results and define the output fields for organic results parsing.
- Review Locate URL Position to ensure the code correctly identifies the target URL position.
Step 4: Configure Notifications and Routing
Status alerts are sent at the start and after ranking changes are evaluated. The switch node routes to different alert types.
- Confirm that Write Status to Sheet outputs to both WhatsApp Start Notice and Gmail Start Notice in parallel to notify that a run has started.
- Open Notification Route Switch and verify the rules that determine whether rankings dropped or improved.
- Configure Email Dropped Alert and WhatsApp Dropped Alert with message templates for ranking declines.
- Configure Email Improved Alert and WhatsApp Improved Alert with message templates for ranking gains.
Step 5: Test and Activate Your Workflow
Run a manual test to validate data flow, then enable scheduled execution.
- Click Execute Workflow and trigger Manual Test Launch to process a test row.
- Confirm that Fetch Unchecked Row retrieves a keyword, SERP API Request returns results, and Mark Row as Checked updates the sheet.
- Verify start notifications from WhatsApp Start Notice and Gmail Start Notice, then confirm alert routing via Notification Route Switch.
- When results are correct, toggle the workflow to Active to enable Scheduled Run Trigger and Sheet Change Trigger.
Watch Out For
- SerpAPI credentials can fail if you paste the key into the wrong credential type. In n8n, use the Generic credential type as noted, and check the SerpAPI dashboard if requests suddenly return errors.
- If you’re sending WhatsApp notifications (Twilio or another provider), template rules and sender approvals can block messages without much warning. Check the provider’s message logs first before blaming the workflow.
- Google Sheets column names have to match what the workflow expects (like checkstatus and currentposition). If alerts stop or positions look blank, the first thing to inspect is the sheet mapping in the Google Sheets nodes.
Common Questions
About 30 minutes if your sheet and accounts are ready.
Yes. No coding is required in normal use, because you’re mostly connecting SerpAPI and Google Sheets and mapping a few fields.
Yes. n8n has a free self-hosted option and a free trial on n8n Cloud. Cloud plans start at $20/month for higher volume. You’ll also need to factor in SerpAPI usage costs based on how many keyword checks you run.
Two options: n8n Cloud (managed, easiest setup) or self-hosting on a VPS. For self-hosting, Hostinger VPS is affordable and handles n8n well. Self-hosting gives you unlimited executions but requires basic server management.
You can. Most customizations happen in the SERP API Request (to change location, device, or engine), Locate URL Position (to match different URL patterns), and the Email/WhatsApp alert nodes (to change message wording). Common tweaks include tracking Bing instead of Google (SerpAPI supports more engines), checking multiple URLs per keyword for “hub vs. blog” pages, and adding a second Google Sheet tab per client so reporting stays clean.
Usually it’s a permissions issue or the sheet was moved. Reconnect the Google Sheets credential in n8n, confirm the selected spreadsheet and worksheet are still correct, and double-check the workflow is writing to the columns you actually have in the template.
If you self-host n8n, there’s no hard execution cap; the practical limit is your server and SerpAPI quota. On n8n Cloud, capacity depends on your plan’s monthly executions, and keyword checks can add up quickly if you track lots of terms daily. For many small teams, running a few hundred keyword checks per week is fine. If you’re monitoring thousands of keywords, you’ll want batching, longer schedules, and tighter alert rules so you don’t overwhelm your WhatsApp/email channels.
Often, yes. This workflow relies on parsing SERP results, looping through rows, and branching logic for “improved” vs “dropped,” which is exactly where n8n tends to feel easier to control (and cheaper at volume). Zapier and Make can do it, but the moment you add code-like processing or lots of keyword rows, you’ll feel the limits and the task costs. n8n also gives you the option to self-host, which is a big deal for agencies running checks across multiple clients. If you’re unsure, Talk to an automation expert and we’ll help you pick the cleanest setup.
Once this is running, your sheet stays accurate and your alerts stay meaningful. The workflow does the checking, so you can spend that time fixing what actually moves the needle.
Need Help Setting This Up?
Our automation experts can build and customize this workflow for your specific needs. Free 15-minute consultation—no commitment required.