# Google Rank Tracker - Keyword Positions & SERP Features (`seemuapps/google-rank-tracker`) Actor

Track your website's Google ranking for any keyword by country, city and device, with position changes, competitor positions and SERP features.

- **URL**: https://apify.com/seemuapps/google-rank-tracker.md
- **Developed by:** [Seemu Scraping](https://apify.com/seemuapps) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $10.00 / 1,000 results page checkeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Google Rank Tracker - Keyword Positions & SERP Features

Track where your website ranks on Google for any keyword, in any country or city, on desktop or mobile. Every run records your position, the ranking URL and the change since your last check. You also get competitor positions, the top 10 results, featured snippets and whether your site is cited in Google's AI Overview. Schedule it daily or weekly for a pay-as-you-go alternative to SEO rank tracking tools, with no subscription.

### What you get

One row per keyword with:

- **found**, **position** and **absolutePosition**: your organic rank (absolutePosition counts every element on the page)
- **url**, **title** and **description**: the page of yours that ranks
- **otherPositions**: positions of any additional pages from your site
- **previousPosition**, **positionChange** and **movement** (first-check, up, down, unchanged, entered, dropped, not-found), compared with your previous run
- **inFeaturedSnippet** and **featuredSnippetDomain**
- **aiOverviewShown**, **inAiOverview** and **aiOverviewSources**: whether Google showed an AI Overview, and whether your site is cited in it (optional)
- **competitors**: position and URL for each competitor domain on the same results page
- **topResults**: the top 10 organic results with domain, URL and title
- **serpFeatures**: everything on the page (people also ask, video, local pack, shopping…)
- **totalResults**, **depthChecked**, **location**, **device**, **googleUrl** and **checkedAt**

Export to JSON, CSV, Excel or Google Sheets from the **Dataset** tab, or use the API.

### Use cases

- **Daily rank tracking**: schedule the actor and watch positions move over time
- **Local SEO**: check rankings in a specific city, such as "Austin,Texas,United States"
- **Competitor monitoring**: see who outranks you for every keyword you care about
- **AI Overview tracking**: find out which keywords cite your site in Google's AI Overview
- **Client reporting**: export positions and changes to Google Sheets for every client

### How to use

1. Enter your **Keywords**, one per line.
2. Enter **Your domain**, e.g. `example.com`. Subdomains count as a match.
3. Optional: add **Competitor domains** (up to 10).
4. Pick a **Country & language**, and optionally a **City or region**.
5. Pick a **Device** (desktop or mobile) and how many **Results to check** (top 10 to top 100).
6. Optional: turn on **Check Google's AI Overview**.
7. Run the actor, or schedule it. Each run compares positions with your previous run of the same keyword, domain, location and device.

### Output example

```json
{
  "keyword": "web scraping api",
  "domain": "apify.com",
  "found": true,
  "position": 28,
  "url": "https://blog.apify.com/web-scraping-vs-api/",
  "previousPosition": 31,
  "positionChange": 3,
  "movement": "up",
  "inFeaturedSnippet": false,
  "aiOverviewShown": true,
  "inAiOverview": false,
  "competitors": [{ "domain": "scrapfly.io", "found": true, "position": 6, "url": "https://scrapfly.io/blog/…" }],
  "serpFeatures": ["ai_overview", "organic", "people_also_ask", "related_searches"],
  "location": "United States",
  "device": "desktop"
}
```

### Pricing

Pay per event, no subscription:

- **Results page**: charged per 10 Google results checked. The search stops as soon as your domain is found, so if you rank #4 you pay for one page even with Top 100 selected. Adding competitors checks the full depth.
- **AI Overview check**: charged per keyword when **Check Google's AI Overview** is on.

See the **Pricing** tab for current prices. Failed checks are not charged.

### Free plan limits

Free Apify plans can check 3 keywords in the top 30 results per run, 3 runs per day, with 30 minutes between runs. Upgrade to any paid Apify plan to remove these limits.

### FAQ

**Are the results live?** Yes. Every keyword is searched on Google at run time from the location and device you pick.

**How is position counted?** `position` counts organic results only (1 = first organic result). `absolutePosition` counts every element on the page, including ads, snippets and boxes.

**Where is my ranking history stored?** In a key-value store named `google-rank-tracker-history` in your Apify account, so every run can compare with the last one.

# Actor input Schema

## `keywords` (type: `array`):

Search queries to check, one per line (up to 1000).

## `domain` (type: `string`):

The website whose Google position you want to track, e.g. example.com. Subdomains count as a match.

## `competitors` (type: `array`):

Optional: up to 10 competitor domains to report positions for on the same results pages. Adding competitors means every keyword is checked to the full depth.

## `market` (type: `string`):

Google country and interface language to search in.

## `locationName` (type: `string`):

Track local rankings for a specific city or region instead of the whole country, in the format City,Region,Country, e.g. Austin,Texas,United States. The language still comes from Country & language.

## `device` (type: `string`):

Check desktop or mobile results.

## `depth` (type: `string`):

How deep to look for your domain. Each block of 10 results is billed as one results page, but the search stops as soon as your domain is found (unless competitors are set), so you only pay for the pages actually checked.

## `includeAiOverview` (type: `boolean`):

Also load the AI Overview box shown above the results and report whether your domain is cited as a source. Billed as an extra event per keyword.

## Actor input object example

```json
{
  "keywords": [
    "web scraping api"
  ],
  "domain": "apify.com",
  "market": "2840:en",
  "device": "desktop",
  "depth": "100",
  "includeAiOverview": false
}
```

# Actor output Schema

## `results` (type: `string`):

One keyword per record: keyword, domain, found, position, url, previousPosition, positionChange, movement, inFeaturedSnippet, aiOverviewShown, inAiOverview, competitors, topResults, serpFeatures, location, device.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "keywords": [
        "web scraping api"
    ],
    "domain": "apify.com"
};

// Run the Actor and wait for it to finish
const run = await client.actor("seemuapps/google-rank-tracker").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "keywords": ["web scraping api"],
    "domain": "apify.com",
}

# Run the Actor and wait for it to finish
run = client.actor("seemuapps/google-rank-tracker").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "keywords": [
    "web scraping api"
  ],
  "domain": "apify.com"
}' |
apify call seemuapps/google-rank-tracker --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,seemuapps/google-rank-tracker"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/vqIsK3WXHcfban88a/builds/axzNW0UrQrEPcIbta/openapi.json
