← All use cases
Competitor Analysis

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.

Verid Use Cases·Published June 17, 2026·Updated June 17, 2026·11 min read
Track Google SERP Location Changes Automatically with Verid

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=0

The 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 result
  • top_result_url: The URL of the first organic result
  • ai_overview: The AI Overview block, if present
  • featured_snippet: The featured snippet text
  • people_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:

PlanMinimum IntervalPrice
Free24 hours$0/month
Starter1 hour$19/month
Pro15 minutes$49/month
Scale5 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:

Verid blog illustration
MethodWhen to UseAdvantageLimitationRecommended For
XPathJS-rendered HTML pages with complex DOM structureSupports parent/ancestor traversal, text predicates, positional selectorsExpressions can break when Google ships layout updatesPrimary choice for SERP monitoring
CSS SelectorSimple HTML pages where elements have stable class names or IDsFast and easy to writeGoogle's result markup uses generated class names that change frequentlyLess reliable for Google SERPs, better for Bing
JSONPathJSON API responsesPrecise field extraction with no parsing overheadGoogle SERPs are not JSONNot applicable for SERPs
RegexPlain text or raw HTML patternsCan count occurrences and match patterns in raw bodyWorks on raw response, not rendered DOMCounting occurrences of a domain name across a SERP
Full-page Hash"Did anything change at all?" monitoringSimplest setup, no selectors neededTriggers on any byte change including ads and timestamps, noisy on SERPsInitial exploration or low-volume monitoring
AI / LLM PromptUnstructured pages or when selectors keep breakingDescribe what you want in plain EnglishCounts against monthly LLM quota; slower per runFallback 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

  1. Open your monitor settings.
  2. Scroll to the Deliveries section.
  3. Click Add Delivery.
  4. Select Email as the delivery type.
  5. Enter the recipient email address.
  6. 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.

Verid blog illustration

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

FieldValueNotes
fetch_mode"browser"Required for Google SERPs. Auto mode will not render JS.
schedule_interval_seconds8640024 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/sdk

The 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

Verid blog illustration

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, and pws=0 in 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=... or https://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.

Ship this monitor today

5 monitors free, no credit card. Set up takes about a minute.