# Rank tracking: check keyword positions on Google

URL: https://serpel.app/docs/rank-tracking

Updated: 2026-11-05

Rank tracking in Serpel checks where your domain appears in Google’s organic results for each keyword you track, in the country, language, location and device you choose. The position is the first result from your domain or its subdomains within the depth you set, and a keyword outside that depth shows as not found. You can check keywords right now or on a schedule, and every check is kept as history.

## How does rank tracking work in Serpel?

Rank tracking turns a keyword into a position. You add the keyword with its market. A check asks Google, through the data provider DataForSEO, for the organic results of exactly that search. Serpel looks for your domain in those results and stores the position, the ranking URL and the top results of that moment. Each later check adds a point to the history.

**How a rank check runs**

1. **Add the keyword** (Free): Choose country, language, location and device. Adding is free and uses one slot.
2. **Start a check** (Credits): Click **Check now** or let your schedule run it.
3. **Read the results**: Serpel requests the organic Google results up to the depth you set.
4. **Find your domain**: The first result from your domain or its subdomains sets the position.
5. **Store the check** (History): Position, ranking URL, AI Overview status and the top results are saved.

Only organic results count as positions. Ads, map packs and other result boxes are not positions, although the **Absolute** column in the check history shows the rank among all elements of the results page. The [rank tracking feature page](https://serpel.app/features/rank-tracking) gives the overview, and [mobile rank tracking](https://serpel.app/features/mobile-rank-tracking) explains why the device matters.

Illustration: The tracked keywords page with the visibility chart and a keyword table with position, URL, volume, device and AI Overview, shown with demo data.

## How is a position determined?

Serpel reads the organic results of a check from the top down, up to the depth in your project settings. The first result whose host is your domain, its `www.` version or any subdomain of it sets the position, and its URL is stored as the ranking page. If several of your pages rank, the highest one counts. If none appears within the depth, the keyword shows as not found.

| What Google returns | What Serpel records |
| --- | --- |
| Your page `example.com/guide` at organic position 4 | Position 4, with `example.com/guide` as the ranking URL. |
| `example.com/guide` at position 3 and `example.com/shop` at position 7 | Position 3 with the guide, because the first match counts. |
| `blog.example.com` at position 5 and no other page of your domain | Position 5 for the project `example.com`, because subdomains match. |
| No page of your domain within the depth | Not found. The keyword page shows `> 50` at depth 50, the keyword table shows `> 100` whatever the depth, and the CLI says “not in top 50”. |
| Only part of the results arrive, and your domain is not in them | An **Error** for this check. It is not charged, and the position stays unknown. |

The change compares a check with the previous successful one. The keyword table shows arrows with the places gained or lost, **NEW** for a keyword that enters the results and **OUT** for one that drops out. The **Change** card on the keyword page says the same in words. A check is a snapshot of one moment for one exact combination of country, language, location and device, so it can differ from what you see in your own browser.

### What does the depth setting do?

Depth is the number of organic results a check reads. You set it once per project under **Settings → Ranking check**, and it applies to every keyword of the project. A deeper check can find you further down the results, but the deepest level costs more credits.

**Rank depths and the credits per keyword for Check now and for scheduled checks**
| Range | Meaning | Details |
| --- | --- | --- |
| Top 10 | 10 results | Shows whether you reach the first results. 5 credits now, 2 scheduled. |
| Top 20 | 20 results | Adds the near misses just behind them. 5 credits now, 2 scheduled. |
| Top 30 | 30 results | Follows a keyword a little further down. 5 credits now, 2 scheduled. |
| Top 50 | 50 results | The default depth for new projects. 5 credits now, 2 scheduled. |
| Top 100 | 100 results | Finds weak rankings, at a higher price. 9 credits now, 3 scheduled. |

## How do you add keywords to track?

1. **Open Tracked keywords.** Choose **Tracked keywords** under **Monitoring** in the sidebar.

2. **Open the dialog.** Click **Keywords** in the page header, or **Add keywords** on a project without keywords. Viewers do not see the button.

3. **Enter the keywords.** In **Track keywords**, type one keyword per line or separate them with commas. You can add up to 200 per request, and each keyword may have at most 80 characters and 10 words.

4. **Choose the market.** Set **Country**, **Language**, **Location** and **Device**. The dialog starts with the defaults of your project.

5. **Add them.** Click **Add**. Serpel tells you how many keywords it added and how many were already tracked.

Adding keywords costs nothing and starts no check. A new keyword shows “not checked yet” until the next check, so use **Check now** or wait for your schedule. You can also add keywords straight from the results of [keyword research](https://serpel.app/docs/keyword-research) with the **Track** button. Your [project settings](https://serpel.app/docs/projects) hold the default market, depth and device.

### How many keywords can you track?

Each combination of keyword, country, language, location and device is one tracked keyword and uses one slot. Tracking “running shoes” on desktop and on mobile uses two slots, and so does tracking it in two cities. A keyword that is already tracked in the same combination does not use another slot. The limit applies per project and follows your plan.

| Plan | Slots per project |
| --- | --- |
| No subscription | 50 |
| Starter | 200 |
| Pro | 500 |

When all slots are used, the dialog says so and asks you to remove a tracked keyword first. See [credits and billing](https://serpel.app/docs/credits-and-billing) to change your plan.

### How do you track local results?

Set a **Location** when the results depend on a place. The picker searches “Place or postal code” in Google’s list of locations, and **All of** followed by the country name means no specific place. Serpel covers 43 countries and 22 languages. The location of the project is only the default for new keywords. Each tracked keyword keeps its own.

> **Mobile and desktop are separate keywords:** Mobile and desktop results can differ. Track a keyword on both devices only where both matter, because each device uses its own slot.

## What is the difference between Check now and a scheduled check?

**Check now or on a schedule**

- **Check now** (5 credits per keyword): Starts at once for the keywords you select, or for the one on the keyword page. Reads Google live, so the result is there when the job finishes. Shows its price on the button before you click. Costs 9 credits per keyword at depth 100.
- **Scheduled** (2 credits per keyword): Runs as part of monitoring at the frequency and hour you choose. Uses queued requests that cost less but take longer to return. If queued results are 45 minutes late, Serpel checks the rest at once, still at the lower price. Costs 3 credits per keyword at depth 100.

To run **Check now**, select one or more keywords in the table and click **Check now** in the bar above it. Use the **Select all rows** checkbox to check every keyword, or use the **Check now** button on the project overview, which runs a full monitoring run with your AI prompts and a report. The prices above apply to checks up to depth 50. Deeper checks use the depth 100 price.

### What does a rank check cost?

| Check | Credits per keyword | Credits for 100 keywords |
| --- | --- | --- |
| Check now, depth up to 50 | 5 | 500 |
| Check now, depth 100 | 9 | 900 |
| Scheduled run, depth up to 50 | 2 | 200 |
| Scheduled run, depth 100 | 3 | 300 |

Serpel charges only for results it delivers. A keyword that fails is not charged. A result that comes from the provider cache is charged like a fresh one, and the **Source** column of the check history marks it with “cache”. Serpel can reuse a stored copy of the same search for a short time, 12 hours by default, so two checks of one keyword close together may show the same results.

Search volume is a separate, small charge. When **Add search volume automatically** is on, Serpel fetches volume and CPC before a check for keywords that have none or whose data is older than 30 days. A request costs 4 credits plus 2 per block of 50 keywords, and one request covers up to 700 keywords. For 100 new keywords that is 8 credits. If your balance is too low, Serpel skips the search volume and still runs the check.

## How do you schedule rank checks?

1. **Open the monitoring settings.** Choose **Settings** in the project menu, then **Monitoring**.

2. **Pick a frequency.** Set **Frequency** to one of the options in the table below.

3. **Pick the hour.** Set **Time**. The field is only active while a schedule or the weekly crawl is on.

4. **Save.** Check the credits per month in the forecast, then click **Save** in the bar that appears.

| Frequency | When it runs | Plan |
| --- | --- | --- |
| **Manual only** | Only when you start a check. | All plans |
| **Daily** | Every day. | Pro only |
| **Every 3 days** | Every third day. | All plans |
| **Weekly** | Once a week. | All plans |

The hour is in Europe/Berlin time, not in your local time. The **Time** field in the project settings doesn’t say so, but the email report dialog does. A run starts at that hour or shortly after. A scheduled run needs at least one tracked keyword or AI prompt, and your balance must cover the whole run. If it does not, the schedule pauses and Serpel emails the workspace owner once. It resumes when credits are available. A schedule also pauses, without an email, when the project is over a plan limit, for example after a downgrade. Scheduled runs are [monitoring runs](https://serpel.app/docs/monitoring-and-reports): they check rankings and AI prompts and then write a report.

## How do you read the results?

### The tracked keywords page

The top of the page charts three metrics for the last 90 days: **Visibility**, **Avg. position** and **Keywords in top 10**. Visibility is the estimated share of possible clicks across your tracked keywords, calculated from position and search volume. [Competitors](https://serpel.app/docs/competitors) shows how that estimate works. Below the chart, the table lists **Keyword**, **Position**, **URL**, **Search volume**, **Location**, **Device**, **AI Overview** and **Checked**.

- The view picker above the table offers **All keywords**, **Top 3**, **Top 10**, **Moved up**, **Dropped** and **Not found**.
- **Filter**, **Sort** and **Options** narrow and arrange the rows. **Options** also shows or hides columns and resets the view.
- Click a keyword to open its page. Select rows to get **Check now** and **Remove**.

### The keyword page

A keyword page starts with cards for **Position**, **Change**, **Search volume**, **Location**, **Device** and **AI Overview**. **Position history** charts one position per day from the last 180 checks, lower is better, and days on which your domain was outside the depth have no point. **Search results at the latest check** lists the first 10 results plus your domain and your competitors when they rank further down, with you marked blue and competitors red. **Checks** lists the latest checks with **Checked**, **Position**, **Absolute**, **Found URL**, **AI Overview** and **Source**.

**Check now** and **Remove** sit in the page header. Removing a keyword deletes its position history and stored results and frees its slot. The positions stay in the history until you remove the keyword, while the stored top results of a check are cleared after 400 days.

### What does the AI Overview column mean?

With **Also check Google AI Overview** on, which is the default, each check also reads whether Google shows an AI Overview for the keyword. **Cited** means the AI Overview links to your domain, **Not cited** means Google shows one without you, and **none** means Google shows no AI Overview. An empty cell means the check did not look. Rank checks cost the same with or without the setting. [AI visibility](https://serpel.app/docs/ai-visibility) measures citations in prompts, and [AI Overview tracking](https://serpel.app/features/ai-overview-tracking) explains the feature.

## How do you export rank tracking data?

Open **Options** above the keyword table and choose **Export as CSV**. The file contains the rows currently shown, with the fields Keyword, Position, Change, Search volume, Device, URL and AI Overview, separated by semicolons. For a full export of rankings as CSV or JSON, use `serpel export` or `GET /projects/{id}/export`. [History and exports](https://serpel.app/docs/history-and-exports) lists every export.

## How do you use rank tracking from the CLI, API and MCP?

The [CLI](https://serpel.app/docs/cli) can add keywords, search locations, start checks and read results. `serpel rankings run --wait` waits until the check has finished. The history of a keyword holds up to 365 checks per request and defaults to 90, and `serpel rankings serp` prints the stored results of the latest check.

```bash
serpel rankings locations Austin --country US
serpel rankings add --project <id> --keyword "cold brew concentrate" --keyword "cold brew coffee" --device mobile --location Austin --country US --language en
serpel rankings run --project <id> --wait
serpel rankings list --project <id>
serpel rankings summary --project <id>
serpel rankings history <keywordId> --limit 30
serpel rankings serp <keywordId>
serpel projects update <id> --rank-depth 50 --schedule weekly --schedule-hour 6 --ai-overview on
serpel export --project <id> --type rankings --format csv --output rankings.csv
```

The [REST API](https://serpel.app/docs/api) offers the same operations. Adding keywords needs the `rankings:write` scope, and reading needs `rankings:read`. The check endpoint answers at once with a job that you can follow.

```bash
curl -X POST https://serpel.app/api/v1/projects/$PROJECT_ID/rankings \
  -H "Authorization: Bearer $SERPEL_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"keywords": ["cold brew concentrate"], "country": "US", "language": "en", "device": "mobile"}'

curl -X POST https://serpel.app/api/v1/projects/$PROJECT_ID/rankings/run \
  -H "Authorization: Bearer $SERPEL_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{}'

curl "https://serpel.app/api/v1/rank-keywords/$KEYWORD_ID/history?limit=30" \
  -H "Authorization: Bearer $SERPEL_TOKEN"
```

The MCP server is read-only for rankings. `get_keyword_rankings` returns the tracked keywords with their latest and previous position and a summary, and `get_job_status` follows a check that you started elsewhere. `find_keyword_opportunities` is different: it uses your Search Console data for queries on positions 4 to 20, not your rank checks. See the [Claude Code guide](https://serpel.app/docs/mcp/claude-code) for all tools.

## Why does a keyword show no position?

| What you see | What it means and what to do |
| --- | --- |
| “not checked yet” | No check has run for the keyword. Select it and click **Check now**, or wait for the next scheduled run. |
| Not found, or `> 100` in the table | Your domain is not within the depth. The table always shows `> 100`, so open the keyword page for the real depth. Raise the depth under **Settings → Ranking check**, or confirm that country, language, location and device match the market you care about. |
| An **Error** badge | The check failed, for example because the provider returned no usable results. Hover over the badge to read the message. Failed keywords are not charged, so run the check again. |
| The dialog says all slots are used | Remove a tracked keyword or move to a larger plan. |
| Checks are rejected with `plan_limit` | The project tracks more keywords than the plan allows, for example after a downgrade. Remove keywords until the project fits the limit. |
| The schedule stopped running | It is paused because of low credits or a plan limit. Open **Settings → Billing**, then check the monitoring settings. |
| The position differs from your own search | Google results depend on place and device. Serpel asks for the exact market you set, which may not match your browser. |

## Where to go next

- [Keyword research](https://serpel.app/docs/keyword-research): Find keywords worth tracking and add them with one click.
- [Competitors](https://serpel.app/docs/competitors): See who ranks ahead of you for the same keywords.
- [Monitoring and reports](https://serpel.app/docs/monitoring-and-reports): Schedule checks and receive a report after every run.
- [AI visibility](https://serpel.app/docs/ai-visibility): Track whether ChatGPT and Google cite your site.