← All use cases
Competitor Analysis

SERP Monitoring: Track Rank and Result Changes Automatically

Learn how to monitor Google search results, track competitor rankings, and detect SERP feature changes automatically using Verid's change detection API.

Written by HANZALA SALEEM·Published June 17, 2026·Updated October 13, 2026·14 min read
SERP Monitoring: Track Rank and Result Changes Automatically

Your most important keyword has ten blue links, and any of them can change overnight. A competitor can jump into position two. Someone can rewrite their title tag and take your clicks. Your own page can slip from #3 to #7 after an update, and you only notice when traffic dips a week later.

SERP monitoring fixes that by checking the search results page for a keyword on a schedule, recording what is there, and alerting you when something moves. This guide shows you how to set it up in the Verid dashboard, through the API, and with the Node.js SDK. It also covers five practical setups, the webhook payloads you will receive, what a run costs, and the limits you should know before you start.


What is SERP monitoring?

SERP monitoring means automatically checking a search engine results page (SERP) for a keyword at regular intervals, storing the organic results, and comparing each check to the last one. When the results change in a way you care about, you get an alert.

A SERP monitor differs from a classic rank tracker in one useful way. A rank tracker answers "where does my site rank?". A SERP monitor can also answer "what changed on the page?": who entered, who left, whose title or snippet was rewritten.

Verid supports both questions with two modes:

Mode Question it answers What triggers an alert
Rank Tracking (rank_tracking) Where does my domain rank for this keyword? Your rank moves by a threshold you set, or your domain enters or drops out of the results
SERP Analysis (full_analysis) What is on the results page, and when does any of it change? Any change in the result list: a rank, a title, a snippet, a domain entering or leaving

Both modes keep a full history of every check, so you also get a SERP history for the keyword that you can read in the dashboard or pull through the API.

Why teams monitor SERPs

  • SEO teams watch rank after content updates, link building, or a Google core update.
  • Competitive intelligence teams see when a rival enters the top results or rewrites a listing.
  • Agencies keep timestamped evidence of ranking changes for client reports.
  • Product and brand teams watch branded queries for new competitors or unwanted results.
  • Developers pipe SERP data into their own tools through a SERP tracking API instead of building a scraper.

How do you monitor SERP changes?

You monitor SERP changes in four steps, whether you use a dashboard or code:

  1. Pick a keyword, engine, country, and language. For example: "best invoicing software", Google, US, English.
  2. Choose a mode. Use Rank Tracking to follow one domain, or SERP Analysis to watch the whole result list.
  3. Set a check frequency. Daily is the default. The fastest option is every 10 minutes.
  4. Add a delivery. Email, Slack, Discord, or a signed webhook.

Verid then loads the results page in a real headless browser, reads between 1 and 5 pages of organic results, and stores each result's position, title, URL, domain, and description. You do not build a search URL, write XPath, or maintain selectors. That was how SERP monitoring worked with a generic page monitor. A dedicated SERP monitor removes all of it.

The next three sections walk through each way to set it up.


SERP monitoring in the Verid dashboard

You do not need code for this. Start a 14-day free trial (no credit card), open SERP tracking in the dashboard, and choose New SERP monitor.

The form has four sections: Basics, Targeting, Schedule & alerts, and Notifications. A live panel on the right shows the exact API request your choices produce, so the form doubles as an API reference.

Step 1: Pick a mode (Basics)

Two buttons sit at the top of the form:

  • Rank Tracking: "Track one domain's position for a keyword."
  • SERP Analysis: "Get the full result list as JSON."

The rest of the form adapts to your choice. In SERP Analysis mode, the target domain and rank threshold fields disappear because that mode watches the whole list.

Step 2: Enter the keyword and name (Basics)

Type the Keyword exactly as a searcher would, for example best project management software. The Name field fills itself from the keyword when you leave the keyword box, so you can accept it or change it.

One monitor per keyword keeps results clean. If you track 40 keywords, you get 40 monitors, and monitors are unlimited on every plan.

Step 3: Choose the search engine (Basics)

The Search engine menu offers Google, Bing, Yahoo, DuckDuckGo, and Yandex. Google and Bing are the most tested. The others are supported, but treat them as newer.

Step 4: Set the market (Targeting)

  • Target domain (Rank Tracking only, optional): enter yourdomain.com. Verid finds it in the organic results and tracks its position. Matching ignores https:// and www.. Leave it blank to just record the results without tracking a rank.
  • Location: a two-letter country code such as us, gb, or de.
  • Language: a two-letter language code such as en.
  • Device: the form shows Desktop and Mobile, but results are desktop only today. Leave it on Desktop.
  • Pages to scrape: 1 to 5. One page is about 10 organic results, so 5 pages reach roughly the top 50.

Step 5: Set the schedule and alert rule (Schedule & alerts)

Check frequency offers: every 10 minutes, 30 minutes, hour, 6 hours, 12 hours, once a day, every 2 days, and once a week. New monitors start at once a day, which is a sensible default for most keywords.

In Rank Tracking mode, Alert on rank change takes a number of positions. Set it to 3 and you are alerted when your domain moves three or more positions, or enters or leaves the results. Leave it blank and Verid still records every check but never alerts on movement.

In SERP Analysis mode there is no threshold. An alert fires whenever the result list changes.

Step 6: Add notifications (Notifications)

Use the + Email, + Slack, + Discord, and + Webhook buttons to add destinations. You can add up to 25 per monitor. If you add none, changes stay visible in the dashboard only.

Click Create SERP monitor. Then use run now to queue a first check instead of waiting for the schedule.

Step 7: Read the history and the diff

Every check lands in the monitor's run history: status, time, rank, and the full organic result list. For any two runs, the dashboard has a diff page showing what moved between them. That is your SERP history for the keyword, and it is the fastest way to see what happened on the day your rank fell.


SERP monitoring with the API

If you manage many keywords, create monitors from code. The base URL is https://api.verid.dev, and every request needs an Authorization: Bearer vrd_your_api_key header. If you want the full reference, see the SERP tracking docs.

Create a rank tracking monitor

curl -X POST https://api.verid.dev/v1/serp-monitors \
  -H "Authorization: Bearer vrd_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "best invoicing software - us",
    "keyword": "best invoicing software",
    "mode": "rank_tracking",
    "engine": "google",
    "target_domain": "yoursite.com",
    "location_code": "us",
    "language_code": "en",
    "pages": 1,
    "schedule_interval_seconds": 86400,
    "rank_change_threshold": 3,
    "deliveries": [
      { "type": "email", "to": "you@yourcompany.com" }
    ]
  }'

Create a SERP analysis monitor

For the whole result list, switch the mode and drop the target domain. Sending target_domain with full_analysis is rejected with a 422.

curl -X POST https://api.verid.dev/v1/serp-monitors \
  -H "Authorization: Bearer vrd_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "SERP analysis - best invoicing software",
    "keyword": "best invoicing software",
    "mode": "full_analysis",
    "engine": "google",
    "location_code": "us",
    "language_code": "en",
    "pages": 3,
    "schedule_interval_seconds": 21600,
    "deliveries": [
      { "type": "webhook", "url": "https://your-app.com/hooks/serp" }
    ]
  }'

Field reference

Field Type Default Notes
name string required 1 to 200 characters
keyword string required 1 to 500 characters
mode rank_tracking or full_analysis rank_tracking See the two modes above
engine google, bing, yahoo, duckduckgo, yandex google Google and Bing are the most tested
target_domain string none rank_tracking only. Rejected with a 422 in full_analysis
location_code two-letter country code us Country level only
language_code two-letter language code en
device desktop or mobile desktop Results are desktop only today
pages 1 to 5 1 Each page costs one run per check
schedule_interval_seconds integer required Minimum 600 (10 minutes)
rank_change_threshold positive integer none rank_tracking only. No threshold means no rank alerts
deliveries array [] Up to 25. Webhook, Slack, Discord, email

Run a check now

Do not wait for the schedule when you are testing. Queue a check on demand:

curl -X POST https://api.verid.dev/v1/serp-monitors/YOUR_MONITOR_ID/run \
  -H "Authorization: Bearer vrd_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{}'

Run now has no daily cap. Each check still uses one run per page from your monthly allowance.

Read run history and a per-run diff

List the runs, newest first:

curl https://api.verid.dev/v1/serp-monitors/YOUR_MONITOR_ID/runs \
  -H "Authorization: Bearer vrd_your_api_key"

Each run returns id, status (running, success, error, or skipped), started_at, completed_at, organic_results (an array of position, title, url, domain, description), target_rank, rank_delta, ai_overview_present, featured_snippet_present, delivery_triggered, duration_ms, and error_message.

To compare a run against the one before it, fetch a single run:

curl https://api.verid.dev/v1/serp-monitors/YOUR_MONITOR_ID/runs/RUN_ID \
  -H "Authorization: Bearer vrd_your_api_key"

That response includes the run and the previous run, so you can compute the diff yourself or just read the two result lists side by side.

The same family of endpoints lets you list, update, delete, pause, and resume monitors. You can also fetch a monitor's webhook signing secret.


SERP monitoring with the Node.js SDK

Install the official SDK:

npm install @verid.dev/sdk

Then create a monitor, queue a check, and read history:

import { VeridClient } from '@verid.dev/sdk';

const client = new VeridClient({
  apiKey: process.env.VERID_API_KEY!,
});

const monitor = await client.serpMonitors.create({
  name: 'best invoicing software - us',
  keyword: 'best invoicing software',
  mode: 'rank_tracking',
  engine: 'google',
  target_domain: 'yoursite.com',
  location_code: 'us',
  language_code: 'en',
  schedule_interval_seconds: 86400,
  rank_change_threshold: 3,
  deliveries: [{ type: 'email', to: 'you@yourcompany.com' }],
});

// Queue a check right now
await client.serpMonitors.runNow(monitor.id);

// Newest-first run history
const { data: runs } = await client.serpMonitors.runs(monitor.id, { limit: 10 });
for (const run of runs) {
  console.log(run.started_at, run.status, run.target_rank, run.rank_delta);
}

Need to track a whole keyword list? Loop over it and create one monitor per keyword. The client also exposes list, get, update, delete, pause, resume, and signingSecret.

const keywords = ['best invoicing software', 'invoice generator', 'freelance invoicing'];

for (const keyword of keywords) {
  await client.serpMonitors.create({
    name: `${keyword} - us`,
    keyword,
    mode: 'rank_tracking',
    target_domain: 'yoursite.com',
    schedule_interval_seconds: 86400,
    rank_change_threshold: 3,
    deliveries: [{ type: 'email', to: 'you@yourcompany.com' }],
  });
}

That is a working SERP tracking API workflow with no scraper, no proxy pool, and no scheduler to maintain.


What the alerts look like

Email, Slack, and Discord deliver a readable summary. Webhooks deliver JSON. Every webhook is signed with a Verid-Signature header in the form t=<unix>,v1=<hex HMAC-SHA256>, and you should reject anything older than five minutes.

Rank tracking payload

{
  "id": "d_2h8Kq...",
  "version": "2026-05-01",
  "monitor_id": "9f3c...",
  "run_id": "r_71ba...",
  "fired_at": "2026-10-13T09:14:02.418Z",
  "diff": { "fields_changed": [], "before": {}, "after": {} },
  "serp": {
    "keyword": "best invoicing software",
    "target_domain": "yoursite.com",
    "rank": 7,
    "previous_rank": 3,
    "rank_delta": 4
  },
  "monitor": {
    "name": "best invoicing software - us",
    "url": "https://www.google.com/search?q=..."
  }
}

A positive rank_delta means your domain moved down the page (from #3 to #7 here). The diff object is always empty on SERP alerts. The change lives in the serp block.

SERP analysis payload

{
  "id": "d_9xLp2...",
  "version": "2026-05-01",
  "monitor_id": "4b1e...",
  "run_id": "r_a03c...",
  "fired_at": "2026-10-13T09:14:02.418Z",
  "diff": { "fields_changed": [], "before": {}, "after": {} },
  "serp_analysis": {
    "keyword": "best invoicing software",
    "results": [
      { "rank": 1, "title": "Best invoicing software of 2026", "description": "Compare the top invoicing tools side by side.", "domain": "https://www.capterra.com/" },
      { "rank": 2, "title": "Top-rated invoicing software - G2", "description": "Real user reviews for every invoicing platform.", "domain": "https://www.g2.com/" }
    ],
    "previous_results": [
      { "rank": 1, "title": "Top-rated invoicing software - G2", "description": "Real user reviews for every invoicing platform.", "domain": "https://www.g2.com/" },
      { "rank": 2, "title": "Best invoicing software of 2026", "description": "Compare the top invoicing tools side by side.", "domain": "https://www.capterra.com/" }
    ]
  },
  "monitor": {
    "name": "SERP analysis - best invoicing software",
    "url": "https://www.google.com/search?q=..."
  }
}

results and previous_results cover every page you asked for. Diff the two lists in your code, or read the same comparison on the dashboard's diff page. Here, capterra.com and g2.com swapped places.

Failed webhook deliveries are retried up to 6 times over about four hours, and only on server errors or network failures.


Five practical SERP monitoring examples

Example 1: Watch your rank with threshold alerts

Goal: know when your page slips on a keyword you care about.

Setup: Rank Tracking mode, your domain as the target, a daily schedule, and rank_change_threshold set to 3.

  • You get an alert when your rank moves by 3 or more positions in either direction.
  • You also get one if your domain drops out of the results, or enters them.
  • Smaller wobbles (#4 to #5) stay quiet but are still recorded in the history.

Use a threshold of 1 for a keyword that drives revenue, and 5 for one you check casually. If you leave the threshold blank you get a pure SERP history with no alerts.

Example 2: Alert when a competitor enters the top results

Goal: find out when a specific rival appears for your keyword.

Setup: SERP Analysis mode with pages set to 1 or 2 and a daily schedule.

{
  "name": "SERP analysis - best CRM software",
  "keyword": "best CRM software",
  "mode": "full_analysis",
  "pages": 2,
  "schedule_interval_seconds": 86400,
  "deliveries": [{ "type": "webhook", "url": "https://your-app.com/hooks/serp" }]
}

An alert fires whenever a domain enters or leaves the list. In your webhook handler, check whether the rival's domain appears in results but not in previous_results. That gives you a precise "competitor entered the top 20" signal that you can route to Slack.

Example 3: Detect title and snippet rewrites in the top results

Goal: see when a competitor changes how their listing reads.

Setup: the same SERP Analysis monitor. Every result carries its title and description, and an alert fires on any change to either.

When a top-three result rewrites its title tag or Google starts showing a new snippet, the payload shows the old and new text side by side. This is a cheap way to learn which angle is winning, and to spot when a rival tests a new headline against yours.

Example 4: Compare the same keyword across countries

Goal: see how one keyword ranks in different markets.

Setup: create one monitor per country with the same keyword and a different location_code and language_code.

const markets = [
  { location_code: 'us', language_code: 'en' },
  { location_code: 'gb', language_code: 'en' },
  { location_code: 'de', language_code: 'de' },
];

for (const market of markets) {
  await client.serpMonitors.create({
    name: `best invoicing software - ${market.location_code}`,
    keyword: 'best invoicing software',
    mode: 'rank_tracking',
    target_domain: 'yoursite.com',
    schedule_interval_seconds: 86400,
    rank_change_threshold: 3,
    ...market,
  });
}

Targeting is country plus language, not city. It works best on Google, Bing, and DuckDuckGo. Yahoo applies language only, and Yandex applies neither.

Example 5: Compare Google and Bing for the same keyword

Goal: check whether your rank holds up outside Google.

Setup: two monitors with the same keyword, one with engine: "google" and one with engine: "bing".

Engines rank pages differently, so a rank on Google tells you little about Bing. Google and Bing are the two most tested engines in Verid, which makes them the best pair to compare.

Be careful here, because many tools overstate what they do. Verid does not capture AI Overview text and does not alert when one appears. What it does record is a pair of yes/no flags on every Google run: ai_overview_present and featured_snippet_present.

You can read those flags in run history or pull them through the runs endpoint. That is enough to answer "did Google show an AI Overview on this keyword last Tuesday?", and to spot when a keyword's page layout changed. They are informational only and do not trigger a SERP features change alert. If you need an alert when your organic rank is hurt by a new feature, use a rank threshold in Example 1. The rank drop is what pages you.


How much does SERP monitoring cost in runs?

Each page of results Verid reads uses one run. That makes the math simple:

runs per month = checks per month x pages per check

Setup Runs per month
1 keyword, 1 page, once a day about 30
1 keyword, 3 pages, once a day about 90
1 keyword, 1 page, every hour about 720
1 keyword, 1 page, every 10 minutes about 4,320

SERP monitoring is included on the + SERP plans: Lite + SERP ($14/month, 1,000 runs), Starter + SERP ($29/month, 5,000 runs), Pro + SERP ($74/month, 15,000 runs), and Scale + SERP ($224/month, 100,000 runs). Runs are shared with your other monitors. Monitors themselves are unlimited, and every plan can use the same 10-minute minimum interval.

For example, the Lite + SERP plan covers roughly 33 keywords checked daily at one page each. You can also buy run credits at $10 per 1,000 runs, which unlock SERP on any plan.

The 14-day free trial includes 200 runs plus 100 SERP runs and needs no credit card. A daily one-page keyword uses about 14 of those over the trial, so you can test around seven keywords properly. See pricing for current details.


Tips for reliable SERP monitoring

  • Start daily. Most keywords do not move every hour. Move to hourly only for the few that drive revenue.
  • Use rank tracking for your site and SERP analysis for the market. They answer different questions, and you can run both on the same keyword.
  • Set a threshold you will act on. A threshold of 1 on a volatile keyword creates noise. Pick the smallest move you would actually respond to.
  • Mind the page count. Tracking position 31 needs 4 pages, which is four runs per check. Do not pay for depth you do not need.
  • Check the history before you panic. One bad check can be a temporary reshuffle. Look at the last few runs on the diff page first.
  • Name monitors with the market. keyword - us beats keyword once you have the same term in three countries.
  • Test with run now. Queue a check right after creating the monitor to confirm the target domain matches before you wait a day.

If you also want to know when your own pages change what they show Google, pair this with SEO title and meta description drift. To see what rivals say on their own pages, use competitor ad and landing page copy changes. The SERP tracking API product page has the full feature list.


What SERP monitoring in Verid does not do

Better to know these up front:

  • Desktop only. The device option exists, but results are desktop results. There are no mobile rankings today.
  • Country and language, not city. You cannot target a city, ZIP code, or coordinates.
  • 10-minute minimum. Checks cannot run more often than every 10 minutes, which also keeps search engines from blocking the check.
  • Organic results only. Each result has position, title, URL, domain, and description. It does not extract ads, People Also Ask, or AI Overview text.
  • Up to 5 pages. Depth tops out at roughly the top 50 results.
  • No keyword data. There is no volume or difficulty data. Pair it with your keyword research tool.
  • Google and Bing are the most tested. Yahoo, DuckDuckGo, and Yandex work but have had less mileage.
  • Run history follows your plan. Retention is 14 days on the trial, then 90, 180, 365, or 730 days on paid plans.

Frequently asked questions

What is SERP monitoring?

SERP monitoring is the practice of checking a search engine results page for a keyword on a schedule, recording the organic results, and alerting you when they change. It shows you not only where your site ranks but who else moved, and how their listings read.

How do you monitor SERP changes?

Pick a keyword, engine, country, and language. Choose Rank Tracking to follow one domain or SERP Analysis to watch the whole list. Set a check frequency and add a delivery such as email or a webhook. Verid checks on schedule, stores every result, and alerts you when your rank moves past your threshold or the result list changes.

What is a SERP alerts tool?

A SERP alerts tool notifies you when a search results page changes. With Verid, rank alerts fire when your domain moves by your chosen number of positions or enters or leaves the results, and result-list alerts fire when any rank, title, snippet, or domain changes. Alerts go to email, Slack, Discord, or a signed webhook.

How do I monitor Google SERP changes for a specific country?

Set location_code to a two-letter country code and language_code to a two-letter language code, in the dashboard's Targeting section or in the API. Google uses both. Targeting is country level only, not city.

Can I see SERP history for a keyword?

Yes. Every check is stored, with the full organic result list, your rank if you set a target domain, and the AI Overview and featured snippet flags for Google. You can read it in the dashboard, compare any run with the previous one on the diff page, or pull it from the runs endpoint. Retention depends on your plan.

How often should I check a SERP?

Daily works for most keywords. Use hourly or every 10 minutes only for a few revenue-critical ones, since every check costs one run per page. A daily one-page check is about 30 runs a month.

Does Verid alert me when an AI Overview appears?

No. Each Google run records whether an AI Overview and a featured snippet were present, and you can read those flags in the run history. They do not trigger alerts, and Verid does not capture AI Overview text.

Is there a SERP tracking API?

Yes. The /v1/serp-monitors endpoints let you create, update, pause, resume, run, and delete monitors, and read run history, with a Node.js SDK for convenience. See the SERP tracking API page for details.


Start SERP monitoring today

SERP monitoring comes down to a keyword, a schedule, and an alert you will act on. With Verid you set all three in one form, or in one API call.

  • Rank Tracking follows your domain and alerts on the movement you choose.
  • SERP Analysis watches the whole result list for entries, exits, and rewrites.
  • Run history gives you a SERP history to explain every drop.

Start your 14-day free trial (no credit card), create your first SERP monitor, and let the results page tell you when it changes. Prefer to read first? The SERP tracking docs cover every field.

Want this running on your own URL? Spin up the same monitor in about a minute. 5 free, no credit card.

About the author

HANZALA SALEEM

HANZALA SALEEM

Software Engineer & Technical Writer

Hanzala is a software engineer and technical writer. He splits his time between shipping features in Verid’s monitoring stack and turning them into documentation and guides a developer can follow without guessing.

More from HANZALA SALEEM →

Ship this monitor today

200 free runs a month, no credit card. Set up takes about a minute.