Track Google SERP Location Changes Automatically with Verid
Learn how to monitor Google search results, track competitor rankings, and detect SERP feature changes automatically using Verid's change detection API.
Search rankings are not static. The Google results page for your most important keyword can look completely different from one week to the next. A new AI Overview can push your listing below the fold. A competitor can steal the featured snippet you have held for months. A new domain can appear in position one overnight.
Most teams find out about these shifts days later, after traffic has already dropped.
This guide shows you how to set up an automated SERP location changer using Verid, a developer-first web change detection API. You will learn how to monitor Google search results, track competitor rankings, detect SERP feature changes, and get instant alerts, all without building or maintaining a scraping stack yourself.
What Is SERP Monitoring?
A SERP (Search Engine Results Page) is the page Google shows when someone types a query. Every result on that page, including the organic listings, featured snippet, AI Overview, People Also Ask boxes, and ads, makes up the SERP for that keyword.
SERP monitoring means automatically checking that page on a schedule and recording what changed between runs. According to Google Search Central, Google updates its index continuously, which means the results for any given keyword can shift at any time.
Why Businesses Monitor SERPs
- SEO teams track keyword rankings to measure the impact of content updates and link building efforts.
- Growth and marketing teams watch for AI Overviews and featured snippets that reduce organic click-through rates even when position stays the same.
- Competitive intelligence teams monitor when rivals enter or leave the first page, change their titles, or take SERP features.
- Agencies report on ranking changes for multiple clients and need reliable, timestamped data.
- Product teams watch branded keywords for reputation shifts, negative press, or new competitor messaging.
According to research from Semrush, the click-through rate for the first organic position on Google averages around 27 percent. Dropping from position one to position three can cut traffic by more than half. SERP location changes like AI Overviews can further reduce clicks even without a position change.
How to Monitor SERP Changes Using the Verid Dashboard
The fastest way to get started is through the Verid dashboard. You do not need to write any code. The free plan gives you 5 monitors with daily checks and 14-day history, no credit card required.
Step 1: Create a New Monitor
Sign in to your Verid account. From the dashboard, click New Monitor. Give your monitor a descriptive name such as "SERP - best CRM software."
Step 2: Add a Real Google Search URL
Paste the Google search URL for the keyword you want to track. Always include the locale and personalization parameters so results are consistent across runs.
For example, to track the keyword "best CRM software":
https://www.google.com/search?q=best+CRM+software&hl=en&gl=us&pws=0The parameters hl=en (language), gl=us (country), and pws=0 (disable personalized results) keep your data clean. Without them, two runs from the same monitor can return different SERPs based on server-side state, and your diffs will be noisy.
Step 3: Choose the Extraction Method
For SERP monitoring, choose XPath. Google's search results page is JavaScript-rendered and XPath gives you precise control over which elements to track. Set up fields for the elements you care about:
top_result_title: The title of the first organic resulttop_result_url: The URL of the first organic resultai_overview: The AI Overview block, if presentfeatured_snippet: The featured snippet textpeople_also_ask: The first heading inside the People Also Ask section
You will also need to set Fetch Mode to Browser. Google's results page is JavaScript-rendered, so a plain HTTP fetch returns mostly inert HTML. Browser mode renders the full page before extraction runs.
Step 4: Set the Schedule
On the free plan, the minimum interval is 86,400 seconds (24 hours). This means your monitor checks the SERP once per day.
If you need more frequent checks, paid plans support:
| Plan | Minimum Interval | Price |
|---|---|---|
| Free | 24 hours | $0/month |
| Starter | 1 hour | $19/month |
| Pro | 15 minutes | $49/month |
| Scale | 5 minutes | $149/month |
For high-value commercial keywords with significant traffic, the Pro plan's 15-minute interval is worth considering.
Step 5: Configure Deliveries
Choose how you want to be notified when a SERP change is detected. Add an email delivery by entering your email address. When the monitor detects a change, you will receive a plain-language summary of exactly what changed, no dashboard login required.
Step 6: View Detected Changes
After the monitor runs, the dashboard shows a timestamped history of each run. For any run where a change was detected, you can see a field-level diff showing the before and after value for every tracked field. You can also trigger a manual run from the dashboard to get an immediate snapshot.
Choosing the Best Extraction Method for SERP Monitoring
Verid supports six extraction methods. Here is how each one applies to SERP monitoring:

| Method | When to Use | Advantage | Limitation | Recommended For |
|---|---|---|---|---|
| XPath | JS-rendered HTML pages with complex DOM structure | Supports parent/ancestor traversal, text predicates, positional selectors | Expressions can break when Google ships layout updates | Primary choice for SERP monitoring |
| CSS Selector | Simple HTML pages where elements have stable class names or IDs | Fast and easy to write | Google's result markup uses generated class names that change frequently | Less reliable for Google SERPs, better for Bing |
| JSONPath | JSON API responses | Precise field extraction with no parsing overhead | Google SERPs are not JSON | Not applicable for SERPs |
| Regex | Plain text or raw HTML patterns | Can count occurrences and match patterns in raw body | Works on raw response, not rendered DOM | Counting occurrences of a domain name across a SERP |
| Full-page Hash | "Did anything change at all?" monitoring | Simplest setup, no selectors needed | Triggers on any byte change including ads and timestamps, noisy on SERPs | Initial exploration or low-volume monitoring |
| AI / LLM Prompt | Unstructured pages or when selectors keep breaking | Describe what you want in plain English | Counts against monthly LLM quota; slower per run | Fallback when XPath selectors stop returning values after a Google layout change |
Recommendation: Use XPath as your primary extraction method for SERP monitoring. When Google's layout changes and your XPath expressions stop returning values, switch to the AI/LLM prompt method as a fallback by describing the field you need in plain English.
Setting Up Email Alerts and Other Deliveries
When a predicate fires, Verid pushes the before-and-after diff to every delivery channel you have configured. You can set up deliveries when creating a monitor or edit them at any time from the monitor settings page.
Available delivery channels:
- Email: A plain readable summary of what changed. No login required to read it. Best for individual contributors and small teams.
- Webhook: An HMAC-signed POST request to your own endpoint. Best for developers who want to trigger downstream workflows, update a spreadsheet, post to a custom Slack message format, or log changes to a database.
- Slack: Sends the before-and-after diff directly to any Slack channel via an incoming webhook URL.
- Discord: Same as Slack, routed to a Discord webhook.
Verid retries failed deliveries up to 6 times with exponential backoff. Anything that still fails lands in a dead-letter queue and can be replayed manually from the dashboard or via the API.
Configuring Email Delivery from the Dashboard
- Open your monitor settings.
- Scroll to the Deliveries section.
- Click Add Delivery.
- Select Email as the delivery type.
- Enter the recipient email address.
- Save the monitor.
The free plan supports 1 delivery per monitor. Starter allows 3, Pro allows 10, and Scale allows 25.
Monitoring SERP Changes Using the Verid API
If you prefer to automate monitor creation, manage monitors programmatically, or integrate SERP monitoring into a larger workflow, the Verid REST API gives you full control. The base URL is https://api.verid.dev and every request requires an Authorization: Bearer vrd_your_api_key header.

Creating a SERP Monitor via API
The example below creates a monitor for the keyword "best password managers." It uses XPath extraction, a 24-hour schedule (compatible with the free plan), and email delivery.
curl -X POST https://api.verid.dev/v1/monitors \
-H "Authorization: Bearer vrd_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"name": "SERP - best password managers",
"url": "https://www.google.com/search?q=best+password+managers&hl=en&gl=us&pws=0",
"fetch_mode": "browser",
"schedule_interval_seconds": 86400,
"extract_config": {
"method": "xpath",
"fields": {
"top_result_title": "(//div[@id=\"search\"]//h3)[1]",
"top_result_url": "(//div[@id=\"search\"]//a[h3])[1]/@href",
"ai_overview": "//div[contains(@aria-label,\"AI Overview\")]",
"featured_snippet": "//div[@data-attrid=\"wa:/description\"]",
"people_also_ask": "//div[contains(@jsname,\"Cpkphb\")]//span[@role=\"heading\"]"
}
},
"diff_predicate": { "type": "any_field_changes" },
"deliveries": [
{ "type": "email", "to": "you@yourcompany.com" }
]
}'Replace vrd_your_api_key with your actual API key and you@yourcompany.com with your email address. The monitor is immediately active after this call returns.
API Field Reference
| Field | Value | Notes |
|---|---|---|
fetch_mode | "browser" | Required for Google SERPs. Auto mode will not render JS. |
schedule_interval_seconds | 86400 | 24 hours. Free plan minimum. |
extract_config.method | "xpath" | Best choice for structured SERP field extraction. |
diff_predicate.type | "any_field_changes" | Fires when any tracked field changes. |
deliveries[].type | "email" | Can also use "webhook", "slack", or "discord". |
Triggering a Manual Run
After creating a monitor, you can trigger an immediate run without waiting for the schedule:
curl -X POST https://api.verid.dev/v1/monitors/YOUR_MONITOR_ID/run \
-H "Authorization: Bearer vrd_your_api_key" \
-H "Content-Type: application/json" \
-d '{}'The free plan allows 5 manual runs per day.
Monitoring SERP Changes Using the Verid Node.js SDK
Verid has an official Node.js SDK. Install it from npm:
npm install @verid.dev/sdkThe example below creates the same SERP monitor from the API section, this time using the SDK. You only need to replace the API key and email address before running it.
import { VeridClient } from '@verid.dev/sdk';
const client = new VeridClient({
apiKey: process.env.VERID_API_KEY!, // set VERID_API_KEY in your environment
});
const monitor = await client.monitors.create({
name: 'SERP - best password managers',
url: 'https://www.google.com/search?q=best+password+managers&hl=en&gl=us&pws=0',
fetch_mode: 'browser',
schedule_interval_seconds: 86400,
extract_config: {
method: 'xpath',
fields: {
top_result_title: '(//div[@id="search"]//h3)[1]',
top_result_url: '(//div[@id="search"]//a[h3])[1]/@href',
ai_overview: '//div[contains(@aria-label,"AI Overview")]',
featured_snippet: '//div[@data-attrid="wa:/description"]',
people_also_ask: '//div[contains(@jsname,"Cpkphb")]//span[@role="heading"]',
},
},
diff_predicate: { type: 'any_field_changes' },
deliveries: [
{ type: 'email', to: 'you@yourcompany.com' },
],
});
console.log('Monitor created:', monitor.id);
// Trigger an immediate run
await client.monitors.runNow(monitor.id);
console.log('Manual run queued');Listing Your Monitors
const { data } = await client.monitors.list();
data.forEach(m => {
console.log(m.name, m.status, m.last_run_at);
});Practical SERP Monitoring Examples

Example 1: Tracking the Top Organic Result for a Target Keyword
Goal: Know immediately when a different domain takes the top organic result for your most important keyword.
Setup: Create a monitor for your target keyword's Google search URL. Use the top_result_url XPath field and set the predicate to field_changes on that specific field.
curl -X POST https://api.verid.dev/v1/monitors \
-H "Authorization: Bearer vrd_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"name": "SERP - top result for best project management software",
"url": "https://www.google.com/search?q=best+project+management+software&hl=en&gl=us&pws=0",
"fetch_mode": "browser",
"schedule_interval_seconds": 86400,
"extract_config": {
"method": "xpath",
"fields": {
"top_result_url": "(//div[@id=\"search\"]//a[h3])[1]/@href"
}
},
"diff_predicate": { "type": "field_changes", "field": "top_result_url" },
"deliveries": [{ "type": "email", "to": "you@yourcompany.com" }]
}'This monitor only fires when the top result URL changes. It stays quiet if the title is reworded but the same domain holds position one.
Example 2: Alert When a Competitor Enters the First Page
Goal: Get notified the moment a specific competitor domain appears anywhere in the SERP for a keyword.
Setup: Extract a field that captures the raw HTML of the entire results block and use the field_matches_regex predicate to watch for the competitor's domain name.
curl -X POST https://api.verid.dev/v1/monitors \
-H "Authorization: Bearer vrd_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"name": "SERP - competitor X enters page 1 for best CRM software",
"url": "https://www.google.com/search?q=best+CRM+software&hl=en&gl=us&pws=0",
"fetch_mode": "browser",
"schedule_interval_seconds": 86400,
"extract_config": {
"method": "xpath",
"fields": {
"results_block": "//div[@id=\"search\"]"
}
},
"diff_predicate": {
"type": "field_matches_regex",
"field": "results_block",
"pattern": "competitor-domain\\.com"
},
"deliveries": [{ "type": "email", "to": "you@yourcompany.com" }]
}'Replace competitor-domain\\.com with the actual domain you are watching. The \\ double-escaping is required inside JSON strings.
Example 3: Detecting Title or Description Changes in Top Results
Goal: Track when a competitor changes the page title or meta description of their listing.
Setup: Extract the top result's title and a description field. Use any_field_changes so you get alerted on either change.
curl -X POST https://api.verid.dev/v1/monitors \
-H "Authorization: Bearer vrd_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"name": "SERP - title change for best invoicing software",
"url": "https://www.google.com/search?q=best+invoicing+software&hl=en&gl=us&pws=0",
"fetch_mode": "browser",
"schedule_interval_seconds": 86400,
"extract_config": {
"method": "xpath",
"fields": {
"top_result_title": "(//div[@id=\"search\"]//h3)[1]",
"top_result_description": "(//div[@id=\"search\"]//div[@data-sncf])[1]"
}
},
"diff_predicate": { "type": "any_field_changes" },
"deliveries": [{ "type": "email", "to": "you@yourcompany.com" }]
}'When a competitor updates their page title or Google generates a new snippet, you will see the before and after values side by side in the delivery payload.
Example 4: Monitoring the AI Overview for a Keyword
Goal: Know when an AI Overview appears, disappears, or changes content for a keyword you care about.
Setup: Extract only the AI Overview field and fire on field_changes.
curl -X POST https://api.verid.dev/v1/monitors \
-H "Authorization: Bearer vrd_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"name": "SERP - AI Overview for best password managers",
"url": "https://www.google.com/search?q=best+password+managers&hl=en&gl=us&pws=0",
"fetch_mode": "browser",
"schedule_interval_seconds": 86400,
"extract_config": {
"method": "xpath",
"fields": {
"ai_overview": "//div[contains(@aria-label,\"AI Overview\")]"
}
},
"diff_predicate": { "type": "field_changes", "field": "ai_overview" },
"deliveries": [{ "type": "email", "to": "you@yourcompany.com" }]
}'When no AI Overview is present, the field returns an empty string. When one appears, the field changes from empty to populated, and the predicate fires. When it disappears, it fires again in the other direction.
Tips for Reliable SERP Monitoring
- Always use
fetch_mode: "browser". Google SERPs are JavaScript-rendered. Static fetch returns mostly inert markup and your XPath expressions will return empty. - Pin your locale parameters. Include
hl,gl, andpws=0in every search URL. This prevents two consecutive runs from returning different SERPs because of personalization. - Expect to update XPath expressions occasionally. Google ships SERP layout changes regularly. When a field starts returning empty values but looks correct in DevTools, the DOM structure has probably shifted. Switch to the AI/LLM extraction method temporarily while you fix the XPath.
- Start with
any_field_changes. When setting up a new keyword monitor, use the broadest predicate first to understand what noise looks like. Then narrow it to the specific fields that matter. - One monitor per keyword. Do not try to combine multiple keywords into a single URL. Each keyword has its own SERP dynamics and needs independent tracking.
- Bing and DuckDuckGo work too. The same monitor pattern works with
https://www.bing.com/search?q=...orhttps://duckduckgo.com/?q=....
For related use cases, see SEO title and meta description drift to track how your own indexed pages change over time, and competitor ad and landing page copy changes to monitor what competitors are saying directly on their landing pages.
Frequently Asked Questions
What is SERP monitoring?
SERP monitoring is the practice of automatically checking a search engine results page on a schedule and recording what changed between checks. A SERP monitor tracks structured fields like the top organic result, AI Overviews, featured snippets, and People Also Ask questions, then sends an alert when any of those fields change. This is different from rank tracking, which only records a numeric position without capturing layout changes that affect whether users actually see your listing.
How often should I monitor Google search results?
For high-value commercial keywords, daily monitoring is the minimum and hourly monitoring is better. SERPs for competitive keywords can shift multiple times in a day, especially after major algorithm updates or when a competitor publishes new content. The Verid free plan supports daily monitoring. The Pro plan ($49/month) supports checks every 15 minutes, which is appropriate for keywords that drive significant revenue.
How can I track when a competitor enters the first page of Google?
Point a Verid monitor at the Google search URL for your target keyword. Use XPath or regex extraction to capture the results block or a set of top-result URLs. Set the predicate to field_matches_regex with your competitor's domain name as the pattern. When their domain appears anywhere in the extracted content, the predicate fires and you receive an alert with the before and after state of the SERP.
What is the best way to automate SERP monitoring at scale?
Use the Verid REST API or the official Node.js SDK to create monitors programmatically. Write a script that loops over your keyword list, builds the corresponding Google search URL for each one, and calls POST /v1/monitors with your extraction config and delivery settings. You can manage up to 1,500 monitors on the Scale plan ($149/month) with 5-minute check intervals. This approach requires no scraping infrastructure, no scheduler, and no state management on your end. Verid handles fetching, extraction, diffing, and delivery end to end.
Want this running on your own URL? Spin up the same monitor in about a minute — 5 free, no credit card.
Related use cases
How to Track Competitor Tech Stack Changes Automatically
Learn how to detect when competitors change their tech stack, update their tools, or ship new features using Verid's web change detection API.
View blueprint →Competitor AnalysisHow to Detect SEO Title and Meta Description Drift Using Verid
Learn how to detect SEO title and meta description drift automatically using Verid. Monitor metadata changes across your site and get instant alerts before rankings drop.
View blueprint →Competitor AnalysisHow to Monitor SaaS Competitor Pricing Changes Automatically
Learn how to monitor SaaS competitor pricing pages automatically with Verid. Get instant alerts when plans, prices, or features change - no manual checks needed.
View blueprint →