---
title: "SERP Monitoring API - Track Search Engine Rankings"
description: "SERP monitoring API: track Google rankings by country and language with parsed organic results, then scrape the ranking pages or extract SERP features with AI."
url: https://webscraping.ai/use-cases/serp-monitoring
markdown_index: https://webscraping.ai/llms.txt
---
SEO & MARKETING

# SERP Monitoring for SEO Success

Pull parsed Google results on your own schedule, track positions by country and language, and scrape the pages that outrank you - a flexible base for SERP monitoring.

[Start Free Trial](https://webscraping.ai/auth/sign_up)[View Documentation](https://webscraping.ai/docs)

## Rankings Change Constantly

Search engine rankings fluctuate daily. Algorithm updates, competitor changes, and content freshness all impact your visibility. Manual checking doesn't scale.

Enterprise SEO tools are expensive and often limited in customization. You need flexible SERP monitoring you can tailor to your needs.

#### WebScraping.AI Solution

- **Parsed Google Results:** `/serp` returns `organic_results` with `position`, `title`, `link`, and `domain` — 15 credits per search
- **Local Rankings:** Set `gl` and `hl` for the country and language you track; use `page` to go past the top 10
- **AI Extraction:** Ask for SERP features `/serp` doesn't parse, like People Also Ask boxes, in plain language
- **Custom Frequency:** Re-check rankings as often as you need

See the [Google SERP API](https://webscraping.ai/google-serp-api) page for the full response format and pricing.

## SERP Monitoring Features

Comprehensive search visibility tracking

#### Position Tracking

Store `position` from each organic result and chart your rankings for target keywords over time.

#### SERP Features

Use AI extraction on the results page for featured snippets, People Also Ask, and other features.

#### Competitor View

Group results by `domain` to see which competitors rank for your keywords.

#### Local & Global

Track rankings by country and language with the `gl` and `hl` parameters.

## Code Examples

Get parsed rankings for a keyword in one call

**cURL**

```bash
curl -G "https://api.webscraping.ai/serp" \
  --data-urlencode "api_key=YOUR_API_KEY" \
  --data-urlencode "q=web scraping api" \
  --data-urlencode "gl=us" \
  --data-urlencode "hl=en" \
  --data-urlencode "page=1"
# Response (excerpt):
# {
# "search_information": {"query_displayed": "web scraping api",
# "organic_results_state": "Results for exact spelling"},
# "organic_results": [
# {"position": 1, "title": "...", "link": "https://...", "domain": "...",
# "displayed_link": "...", "snippet": "..."},
# ...
# ],
# "pagination": {"current": 1, "next": 2}
# }
#
# position restarts at 1 on every page:
# absolute rank = (page - 1) * 10 + position
```

**Python**

```python
# pip install webscraping_ai
# https://pypi.org/project/webscraping-ai/
from webscraping_ai import Client

client = Client(api_key="YOUR_API_KEY")
results = client.serp("web scraping api", gl="us", hl="en", page=1)
for r in results["organic_results"]:
    print(r["position"], r["title"], r["link"])
# Response (excerpt):
# {
# "search_information": {"query_displayed": "web scraping api",
# "organic_results_state": "Results for exact spelling"},
# "organic_results": [
# {"position": 1, "title": "...", "link": "https://...", "domain": "...",
# "displayed_link": "...", "snippet": "..."},
# ...
# ],
# "pagination": {"current": 1, "next": 2}
# }
#
# position restarts at 1 on every page:
# absolute rank = (page - 1) * 10 + position
```

**JavaScript**

```javascript
// npm install webscraping-ai
// https://www.npmjs.com/package/webscraping-ai
import { WebScrapingAI } from 'webscraping-ai';

const client = new WebScrapingAI({ apiKey: 'YOUR_API_KEY' });
const serp = await client.serp({ q: 'web scraping api', gl: 'us', hl: 'en', page: 1 });
for (const r of serp.organic_results) {
  console.log(`${r.position}. ${r.title} — ${r.link}`);
}
// Response (excerpt):
// {
// "search_information": {"query_displayed": "web scraping api",
// "organic_results_state": "Results for exact spelling"},
// "organic_results": [
// {"position": 1, "title": "...", "link": "https://...", "domain": "...",
// "displayed_link": "...", "snippet": "..."},
// ...
// ],
// "pagination": {"current": 1, "next": 2}
// }
//
// position restarts at 1 on every page:
// absolute rank = (page - 1) * 10 + position
```

**PHP**

```php
<?php
// composer require webscraping-ai/webscraping-ai-php
// https://packagist.org/packages/webscraping-ai/webscraping-ai-php
require 'vendor/autoload.php';

use WebScrapingAI\Client;

$client = new Client('YOUR_API_KEY');
$serp = $client->serp(q: 'web scraping api', gl: 'us', hl: 'en', page: 1);
foreach ($serp['organic_results'] as $r) {
    printf("%d. %s — %s\n", $r['position'], $r['title'], $r['link']);
}
// Response (excerpt):
// {
// "search_information": {"query_displayed": "web scraping api",
// "organic_results_state": "Results for exact spelling"},
// "organic_results": [
// {"position": 1, "title": "...", "link": "https://...", "domain": "...",
// "displayed_link": "...", "snippet": "..."},
// ...
// ],
// "pagination": {"current": 1, "next": 2}
// }
//
// position restarts at 1 on every page:
// absolute rank = (page - 1) * 10 + position
```

**Ruby**

```ruby
# gem install webscraping_ai
# https://rubygems.org/gems/webscraping_ai
require 'webscraping_ai'

client = WebScrapingAI::Client.new(api_key: 'YOUR_API_KEY')
results = client.serp(q: 'web scraping api', gl: 'us', hl: 'en', page: 1)
results['organic_results'].each do |r|
  puts "#{r['position']}. #{r['title']} — #{r['link']}"
end
# Response (excerpt):
# {
# "search_information": {"query_displayed": "web scraping api",
# "organic_results_state": "Results for exact spelling"},
# "organic_results": [
# {"position": 1, "title": "...", "link": "https://...", "domain": "...",
# "displayed_link": "...", "snippet": "..."},
# ...
# ],
# "pagination": {"current": 1, "next": 2}
# }
#
# position restarts at 1 on every page:
# absolute rank = (page - 1) * 10 + position
```

**Go**

```go
// go get github.com/webscraping-ai/webscraping-ai-go/v4
// https://pkg.go.dev/github.com/webscraping-ai/webscraping-ai-go/v4
package main

import (
    "context"
    "fmt"

    webscrapingai "github.com/webscraping-ai/webscraping-ai-go/v4"
)

func main() {
    client, _ := webscrapingai.NewClient(&webscrapingai.Config{APIKey: "YOUR_API_KEY"})
    page := 1
    serp, _ := client.Serp(context.Background(), &webscrapingai.SerpOptions{
        Q: "web scraping api",
        GL: "us",
        HL: "en",
        Page: &page,
    })
    for _, r := range serp.OrganicResults {
        fmt.Println(r.Position, r.Title, r.Link)
    }
}
// Response (excerpt):
// {
// "search_information": {"query_displayed": "web scraping api",
// "organic_results_state": "Results for exact spelling"},
// "organic_results": [
// {"position": 1, "title": "...", "link": "https://...", "domain": "...",
// "displayed_link": "...", "snippet": "..."},
// ...
// ],
// "pagination": {"current": 1, "next": 2}
// }
//
// position restarts at 1 on every page:
// absolute rank = (page - 1) * 10 + position
```

**Java**

```java
// Maven: ai.webscraping:webscraping-ai:4.2.0
// https://central.sonatype.com/artifact/ai.webscraping/webscraping-ai
import ai.webscraping.Client;
import ai.webscraping.Config;
import ai.webscraping.option.SerpOptions;
import ai.webscraping.result.SerpResult;

Client client = new Client(Config.builder().apiKey("YOUR_API_KEY").build());
SerpResult serp = client.serp(SerpOptions.builder()
    .q("web scraping api")
    .gl("us")
    .hl("en")
    .page(1)
    .build());
for (SerpResult.OrganicResult r : serp.getOrganicResults()) {
    System.out.println(r.getPosition() + ". " + r.getTitle() + " — " + r.getLink());
}
// Response (excerpt):
// {
// "search_information": {"query_displayed": "web scraping api",
// "organic_results_state": "Results for exact spelling"},
// "organic_results": [
// {"position": 1, "title": "...", "link": "https://...", "domain": "...",
// "displayed_link": "...", "snippet": "..."},
// ...
// ],
// "pagination": {"current": 1, "next": 2}
// }
//
// position restarts at 1 on every page:
// absolute rank = (page - 1) * 10 + position
```

**C#**

```csharp
// dotnet add package WebScrapingAI
// https://www.nuget.org/packages/WebScrapingAI
using WebScrapingAI;

var client = new WebScrapingAIClient(new WebScrapingAIClientOptions { ApiKey = "YOUR_API_KEY" });
var serp = await client.SerpAsync(new SerpRequest {
    Q = "web scraping api",
    Gl = "us",
    Hl = "en",
    Page = 1,
});
foreach (var r in serp.OrganicResults) {
    Console.WriteLine($"{r.Position}. {r.Title} — {r.Link}");
}
// Response (excerpt):
// {
// "search_information": {"query_displayed": "web scraping api",
// "organic_results_state": "Results for exact spelling"},
// "organic_results": [
// {"position": 1, "title": "...", "link": "https://...", "domain": "...",
// "displayed_link": "...", "snippet": "..."},
// ...
// ],
// "pagination": {"current": 1, "next": 2}
// }
//
// position restarts at 1 on every page:
// absolute rank = (page - 1) * 10 + position
```

Need People Also Ask or featured snippets? Point `/ai/question` or `/ai/fields` at the Google results URL with `proxy=residential` and `js=true` (Google requires both; 30 credits per page) and describe what you want back.

## Benefits for SEO Teams

**Track Progress:** See how your SEO efforts impact rankings over time.

**Spot Opportunities:** Identify keywords where you're close to page one.

**Monitor Drops:** Get alerted when rankings fall significantly.

**Competitor Intel:** Know who's outranking you and for what.

**SERP Feature Tracking:** Monitor featured snippet wins and losses with AI extraction.

#### What You Can Track

**Organic Rankings**

Parsed positions for any keyword, country, and language via `/serp`

**Featured Snippets**

Track when you win or lose featured snippets (AI extraction)

**Ranking Pages**

Scrape the pages that outrank you with `/html`, `/text`, or AI extraction

**SERP Changes**

Detect new domains entering your keyword space

## Related Use Cases

More SEO and marketing solutions

[Competitor Content Analysis](https://webscraping.ai/use-cases/competitor-content-analysis): Analyze competitor content strategies and gaps.

[Price Monitoring](https://webscraping.ai/use-cases/price-monitoring): Track competitor pricing alongside SEO data.

[Sales Intelligence](https://webscraping.ai/use-cases/sales-intelligence): Research competitors for sales enablement.

## Start Monitoring Your Rankings

Get started with 2,000 free API credits. No credit card required.

[Start Free Trial](https://webscraping.ai/auth/sign_up)[View API Documentation](https://webscraping.ai/docs)
