SERP Rank Tracker - Google Search Position Monitor
Track where your website ranks in Google search results for any keyword. SERP Rank Tracker checks your domain's position across multiple keywords, locations, and devices in a single run. Get ranking positions, page titles, snippets, People Also Ask questions, and related searches — all the SERP intelligence you need to monitor your SEO performance over time.
Maintenance Pulse
90/100Cost Estimate
How many results do you need?
Pricing
Pay Per Event model. You only pay for what you use.
| Event | Description | Price |
|---|---|---|
| keyword-tracked | Charged per keyword SERP ranking result tracked. | $0.003 |
Example: 100 events = $0.30 · 1,000 events = $3.00
Documentation
Track where your website ranks in Google search results for any keyword. SERP Rank Tracker checks your domain's position across multiple keywords, locations, and devices in a single run. Get ranking positions, page titles, snippets, People Also Ask questions, and related searches — all the SERP intelligence you need to monitor your SEO performance over time.
Powered by the Serper.dev API, which includes 2,500 free searches when you sign up. No credit card required to get started.
Why Use SERP Rank Tracker?
Most rank-tracking tools charge $50–$300/month and lock you into their dashboards. This actor gives you the same data — live Google positions, SERP features, and competitor visibility — at a fraction of the cost, with full control over scheduling and data export. You own the raw data and can pipe it anywhere: Google Sheets, Slack alerts, or your own database.
Features
- Bulk keyword rank checking — track hundreds of keywords in a single run, with your domain's exact position reported for each one
- Domain position tracking — specify a target domain and instantly see whether it appears in the top results, plus its exact ranking position and matched URL
- Multi-location SERP data — check rankings from 15+ countries including United States, United Kingdom, Canada, Australia, Germany, France, Japan, Brazil, India, and more
- Desktop and mobile rankings — compare how your site ranks on desktop versus mobile devices, since Google uses different algorithms for each
- SERP feature extraction — captures featured snippets, People Also Ask questions, and related searches alongside organic rankings
- Top competitor visibility — every result includes the top 3 ranking URLs (or all results when enabled), so you can see exactly who outranks you
- Subdomain matching — automatically detects your domain across subdomains (e.g., tracking
example.comalso matchesblog.example.com) - Structured JSON output — clean, consistent output format ready for spreadsheets, dashboards, and automated reporting pipelines
- Free tier friendly — works with Serper.dev's free plan (2,500 searches), making it accessible for small sites and personal projects
How to Use
-
Get a Serper.dev API key — Sign up at serper.dev for a free account that includes 2,500 searches. Copy your API key from the dashboard.
-
Configure your input — Enter your API key, add the keywords you want to track (one per line), and optionally specify your target domain (e.g.,
example.com). Choose a search location, language, and device type. -
Run the actor — Click "Start" on Apify or trigger via API/scheduler. The actor queries Google for each keyword and finds your domain's position in the results.
-
Review the results — Open the dataset to see ranking positions, matched URLs, snippets, People Also Ask questions, and related searches for every keyword.
-
Schedule for ongoing tracking — Set up a daily or weekly schedule on Apify to build a historical record of your rankings. Export to Google Sheets, webhook, or API for trend analysis.
Input Parameters
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
apiKey | String | No* | — | Your Serper.dev API key. Free tier includes 2,500 searches. Get one at serper.dev. *Without a key, the actor runs in dry-run mode with setup instructions. |
keywords | String[] | Yes | — | Keywords to track rankings for. Add one keyword per line. Example: "best coffee maker", "organic dog food". |
domain | String | No | "" | Target domain to find in search results (e.g., example.com). Leave empty to get all results without domain matching. |
location | String | No | "United States" | Country or region for localized results. Supported: United States, United Kingdom, Canada, Australia, Germany, France, Spain, Italy, Brazil, India, Japan, Mexico, Netherlands, Sweden, Switzerland. |
language | String | No | "en" | Language code for search results (e.g., en, es, de, fr, ja). |
numResults | Integer | No | 10 | Number of search results to check per keyword. Range: 10–100. Higher values find domains ranking further down but use more API credits. |
device | String | No | "desktop" | Device perspective for the search. Choose desktop or mobile. Google returns different rankings for each device type. |
includeAllResults | Boolean | No | false | When enabled, includes all organic search results in output (not just top 3). Useful for full SERP analysis. |
Input Examples
Basic rank check — track your domain for a few keywords:
{
"apiKey": "YOUR_SERPER_API_KEY",
"keywords": ["best coffee maker", "top rated drip coffee machine"],
"domain": "wirecutter.com"
}
Multi-market comparison — mobile rankings in Germany:
{
"apiKey": "YOUR_SERPER_API_KEY",
"keywords": ["beste kaffeemaschine", "kaffeevollautomat test"],
"domain": "example.de",
"location": "Germany",
"language": "de",
"device": "mobile"
}
Full SERP audit — deep scan without a target domain:
{
"apiKey": "YOUR_SERPER_API_KEY",
"keywords": ["project management software", "best CRM for small business"],
"numResults": 50,
"includeAllResults": true
}
Input Tips
- Use
domainwithoutwww.— the actor stripswww.automatically during comparison, soexample.commatcheswww.example.com,blog.example.com, etc. - Use
numResults: 100if your site typically ranks on page 2–5; the default10only scans the first page. - Leave
domainempty for pure SERP analysis — you'll get top results and SERP features without domain-specific tracking.
Output
Each keyword produces one result object in the dataset:
{
"keyword": "best coffee maker",
"domain": "wirecutter.com",
"position": 3,
"url": "https://www.nytimes.com/wirecutter/reviews/best-coffee-maker/",
"title": "The 7 Best Coffee Makers of 2025 | Reviews by Wirecutter",
"snippet": "After testing 65 drip coffee makers since 2015, we think the OXO Brew 9-Cup is the best drip coffee maker for most people.",
"searchEngine": "google",
"location": "United States",
"language": "en",
"device": "desktop",
"totalResults": 1420000000,
"found": true,
"topResults": [
{
"position": 1,
"title": "Best Coffee Makers 2025 - Forbes Vetted",
"url": "https://www.forbes.com/sites/forbes-personal-shopper/article/best-coffee-makers/",
"snippet": "We tested over 40 coffee makers..."
},
{
"position": 2,
"title": "The Best Coffee Makers for 2025 | PCMag",
"url": "https://www.pcmag.com/picks/the-best-coffee-makers",
"snippet": "Whether you prefer drip, single-serve, or espresso..."
},
{
"position": 3,
"title": "The 7 Best Coffee Makers of 2025 | Reviews by Wirecutter",
"url": "https://www.nytimes.com/wirecutter/reviews/best-coffee-maker/",
"snippet": "After testing 65 drip coffee makers since 2015..."
}
],
"featuredSnippet": null,
"peopleAlsoAsk": [
"What coffee maker does Consumer Reports recommend?",
"What is the best coffee maker for home use?",
"Is it worth buying an expensive coffee maker?",
"What coffee maker makes the hottest coffee?"
],
"relatedSearches": [
"best coffee maker with grinder",
"best coffee maker 2025",
"best drip coffee maker",
"best single serve coffee maker"
],
"checkedAt": "2025-06-15T14:32:18.456Z"
}
When the target domain is not found in the results, position is null and found is false — you still get the top competing results and SERP features.
Output Fields
| Field | Type | Description |
|---|---|---|
keyword | String | The search query that was tracked |
domain | String | The target domain you specified (empty string if none) |
position | Integer / null | Your domain's ranking position (1-based), or null if not found |
url | String / null | The exact URL from your domain that ranked, or null if not found |
title | String / null | The page title shown in the SERP for your domain's result |
snippet | String / null | The meta description or snippet shown for your domain's result |
searchEngine | String | Always "google" |
location | String | The country/region used for the search |
language | String | The language code used |
device | String | "desktop" or "mobile" |
totalResults | Integer / null | Google's estimated total result count for this query |
found | Boolean | true if your domain appeared in the results, false otherwise |
topResults | Array | Top 3 organic results (or all results when includeAllResults is enabled). Each has position, title, url, snippet. |
featuredSnippet | String / null | Knowledge Graph description if present |
peopleAlsoAsk | String[] | Questions from Google's "People Also Ask" box |
relatedSearches | String[] | Queries from Google's "Related Searches" section |
checkedAt | String | ISO 8601 timestamp of when the check was performed |
Use Cases
- SEO managers monitoring daily or weekly keyword positions across client portfolios to detect ranking gains, drops, and new opportunities before competitors do
- Content marketers validating whether newly published articles are ranking for target keywords, and tracking how positions improve over the first 30–90 days after publication
- E-commerce store owners tracking product-related keywords like "best wireless headphones" or "organic dog food" to ensure product pages maintain visibility
- Digital agencies running bulk rank checks across dozens of client domains and keywords, then exporting structured data into client reporting dashboards
- Competitive analysts benchmarking their site against competitors by checking shared keywords and comparing who holds top positions across geographies
- Freelance SEO consultants generating rank tracking reports for clients without expensive enterprise SEO tools, using the Serper.dev free tier for cost-effective monitoring
How to Use the API
You can call SERP Rank Tracker programmatically from any language. Here are complete examples:
Python
import requests
import time
# Start the actor run
run = requests.post(
"https://api.apify.com/v2/acts/ryanclinton~serp-rank-tracker/runs",
params={"token": "YOUR_APIFY_TOKEN"},
json={
"apiKey": "YOUR_SERPER_API_KEY",
"keywords": ["best coffee maker", "organic dog food", "project management software"],
"domain": "wirecutter.com",
"location": "United States",
"device": "desktop",
"numResults": 20
},
timeout=30,
).json()
# Wait for completion
run_id = run["data"]["id"]
while True:
status = requests.get(
f"https://api.apify.com/v2/actor-runs/{run_id}",
params={"token": "YOUR_APIFY_TOKEN"},
timeout=10,
).json()
if status["data"]["status"] in ("SUCCEEDED", "FAILED", "ABORTED"):
break
time.sleep(3)
# Get results
dataset_id = status["data"]["defaultDatasetId"]
items = requests.get(
f"https://api.apify.com/v2/datasets/{dataset_id}/items",
params={"token": "YOUR_APIFY_TOKEN"},
timeout=30,
).json()
for item in items:
pos = item["position"] or "Not found"
print(f" {item['keyword']}: position {pos}")
JavaScript
const response = await fetch(
"https://api.apify.com/v2/acts/ryanclinton~serp-rank-tracker/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN",
{
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
apiKey: "YOUR_SERPER_API_KEY",
keywords: ["best coffee maker", "organic dog food"],
domain: "wirecutter.com",
numResults: 20,
}),
}
);
const results = await response.json();
results.forEach((r) => {
console.log(`${r.keyword}: position ${r.position ?? "not found"} (${r.found ? "found" : "missing"})`);
});
cURL
curl -X POST "https://api.apify.com/v2/acts/ryanclinton~serp-rank-tracker/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"apiKey": "YOUR_SERPER_API_KEY",
"keywords": ["best coffee maker", "organic dog food"],
"domain": "wirecutter.com",
"numResults": 20
}'
How It Works
Input (keywords, domain, location, device)
│
▼
┌─────────────────────────────────────────────┐
│ For each keyword (sequential) │
│ │
│ 1. Build search request │
│ • Map location → country code (gl) │
│ • Set language (hl), num results, query │
│ │
│ 2. Call Serper.dev API │
│ POST https://google.serper.dev/search │
│ • X-API-KEY header for authentication │
│ • Returns organic results, knowledge │
│ graph, PAA, related searches │
│ │
│ 3. Domain matching │
│ • Strip www. from both target & results │
│ • Match exact domain OR subdomain │
│ • e.g., "example.com" matches │
│ "blog.example.com" │
│ │
│ 4. Build output record │
│ • Position + URL if domain found │
│ • Top 3 (or all) organic results │
│ • SERP features (PAA, related searches) │
│ • Knowledge graph → featured snippet │
└─────────────────────────────────────────────┘
│
▼
Dataset (one row per keyword)
Country Code Mapping
The actor maps location names to ISO country codes for the Serper.dev API:
| Location | Code | Location | Code |
|---|---|---|---|
| United States | us | Japan | jp |
| United Kingdom | gb | Mexico | mx |
| Canada | ca | Netherlands | nl |
| Australia | au | Sweden | se |
| Germany | de | Switzerland | ch |
| France | fr | Brazil | br |
| Spain | es | India | in |
| Italy | it |
If the location doesn't match a known name, the first two characters are used as a fallback code.
Domain Matching Logic
The actor normalizes both the target domain and each result URL before comparison:
- Strips
www.prefix from both the target domain and result hostnames - Exact match —
example.commatchesexample.com - Subdomain match —
example.comalso matchesblog.example.com,shop.example.com, etc. (uses.endsWith('.' + domain)) - Case-insensitive — all comparisons are lowercase
This means tracking example.com will find your site whether Google surfaces the root domain, a blog subdomain, or any other subdomain.
Dry-Run Mode
When no API key is provided, the actor enters dry-run mode:
- No Serper.dev API calls are made
- Returns a single dataset item with instructions on how to get a free API key
- No errors are thrown — safe to test the actor without credentials
How Much Does It Cost?
SERP Rank Tracker runs on Apify's cloud platform and uses the Serper.dev API. Here is a breakdown of both costs:
Apify Platform Cost
| Usage | Keywords | Estimated Apify Cost |
|---|---|---|
| Quick check | 10 keywords | ~$0.001 (free tier covers this) |
| Weekly audit | 50 keywords | ~$0.005 |
| Daily monitoring | 100 keywords | ~$0.01 per run |
| Large portfolio | 500 keywords | ~$0.05 per run |
The actor uses only 256 MB of memory and completes quickly (typically under 30 seconds for 50 keywords), making it one of the cheapest actors to run on Apify.
Serper.dev API Cost
| Plan | Searches/Month | Price |
|---|---|---|
| Free | 2,500 | $0 |
| Hobby | 50,000 | $50/mo |
| Standard | 250,000 | $150/mo |
Each keyword = 1 API search. The free tier is enough to track 50 keywords daily for an entire month (50 × 30 = 1,500 searches).
Tips
- Start with the free tier — Serper.dev gives you 2,500 free searches, enough to test extensively and run daily checks on a small keyword set before committing to a paid plan.
- Use
numResults: 100for deep checks — If your domain typically ranks between positions 20–50, increase the results count to 100 so the actor can find it. Default of 10 only scans the first page. - Track desktop and mobile separately — Google serves different results for desktop and mobile. Run the actor twice with different device settings to see how rankings differ across devices.
- Schedule weekly runs — Set up a recurring Apify schedule to build historical ranking data. Export to Google Sheets to create trend charts showing position changes over time.
- Leave domain empty for SERP audits — Skip the domain field to get a pure SERP analysis for any keyword, showing who ranks in the top positions, what SERP features appear, and what related questions people ask.
- Use related searches for keyword expansion — The
relatedSearchesoutput reveals keyword opportunities. Feed these back into the actor as new keywords to discover untapped rankings. - Chain with other actors — Combine with Company Deep Research to investigate domains that outrank you, or use Brand Protection Monitor to check for brand-related keyword abuse.
Limitations
- Google only — currently supports Google search via Serper.dev. No Bing, Yahoo, DuckDuckGo, or other search engines.
- Sequential processing — keywords are processed one at a time. Very large keyword lists (500+) may take several minutes.
- No historical tracking built in — each run returns current positions only. To track changes over time, schedule recurring runs and compare datasets externally (e.g., Google Sheets).
- Position accuracy depends on
numResults— if your domain ranks at position 35 butnumResultsis set to 10, it will show as "not found". IncreasenumResultsto scan deeper. - Location granularity — the actor maps to country-level codes. City-level SERP variations (e.g., "restaurants near me" for specific cities) may not reflect your local results exactly.
- Knowledge Graph as featured snippet — the
featuredSnippetfield uses the Knowledge Graph description, which may not exactly match Google's featured snippet box for all queries. - API key required for real data — without a Serper.dev API key, the actor returns setup instructions only (dry-run mode). Serper.dev requires registration, though the free tier needs no credit card.
Responsible Use
- Respect Serper.dev rate limits — do not exceed your plan's monthly quota. The actor makes one API call per keyword.
- Avoid excessive scheduling — daily checks are reasonable for active campaigns; more frequent runs waste API credits with minimal additional insight.
- Do not scrape competitors to spam or manipulate — use ranking data for legitimate SEO analysis, not to reverse-engineer or attack competitor strategies maliciously.
- Comply with terms of service — ensure your use of ranking data complies with both Apify's and Serper.dev's terms of service.
FAQ
Do I need a paid Serper.dev account? No. Serper.dev offers a free tier with 2,500 searches per month. Sign up at serper.dev — no credit card required. Each keyword tracked counts as one search.
What happens if I run the actor without an API key? The actor enters dry-run mode and returns instructions on how to get a free Serper.dev API key. No errors are thrown, and no API calls are made.
Can I track rankings in countries other than the US?
Yes. Set the location field to any supported country such as United Kingdom, Canada, Australia, Germany, France, Spain, Italy, Brazil, India, Japan, Mexico, Netherlands, Sweden, or Switzerland.
How often should I check rankings? For most sites, weekly checks strike a good balance between freshness and API usage. If you are monitoring a fast-moving niche or running a time-sensitive campaign, daily checks may be worthwhile.
What does found: false mean?
It means your target domain was not found in the top N results for that keyword (where N is determined by numResults). Try increasing numResults to 50 or 100 to check deeper in the results.
Does this track Google only?
Currently, yes. The actor uses Google search via the Serper.dev API. The searchEngine field in the output is always set to google.
Can I track hundreds of keywords at once?
Yes. Pass as many keywords as you need in the keywords array. Each keyword is processed sequentially, with one API call per keyword. Be mindful of your Serper.dev API quota.
Is the data real-time? Yes. Each run queries Google's live search results through Serper.dev, so positions reflect the current state of the SERP at the time of the check.
What are People Also Ask and related searches? These are SERP features that Google displays alongside organic results. "People Also Ask" shows questions related to the query, while "Related Searches" shows alternative queries. Both are valuable for keyword research and content planning.
Does subdomain matching work?
Yes. If you set domain to example.com, the actor will find matches on www.example.com, blog.example.com, shop.example.com, and any other subdomain.
Integrations
SERP Rank Tracker works with all standard Apify integrations, letting you feed ranking data into your existing workflows:
- Google Sheets — Automatically export ranking results to a spreadsheet after every run. Build trend charts to visualize position changes over time.
- Zapier — Trigger Zaps when rankings change. For example, send a Slack notification when a keyword drops out of the top 10 or enters the top 3.
- Make (Integromat) — Build multi-step automation flows that combine rank tracking with other data sources for comprehensive SEO dashboards.
- Webhooks — Receive ranking data at any HTTP endpoint for custom processing, alerting, or storage in your own database.
- Apify API — Call the actor programmatically from any language. Start runs, retrieve datasets, and integrate ranking data into custom applications and reporting tools.
- Slack / Email — Configure Apify notifications to get alerts when runs complete or when specific ranking thresholds are crossed.
- Datasets & Key-Value Store — Access structured ranking data through the Apify platform for downstream processing by other actors or external systems.
Related Actors
If you find SERP Rank Tracker useful, check out these complementary actors from the same publisher:
| Actor | What it does | Use with SERP Rank Tracker |
|---|---|---|
| Brand Protection Monitor | Monitors brand mentions and impersonation across the web | Detect competitors bidding on your brand keywords |
| Website Tech Stack Detector | Identifies technologies used by any website | Analyze tech stacks of domains that outrank you |
| Website Change Monitor | Tracks changes on websites over time | Correlate competitor content changes with ranking shifts |
| SaaS Competitive Intelligence | Gathers competitive intelligence on SaaS products | Compare features and positioning of SaaS competitors found in SERPs |
| Company Deep Research Agent | Deep research on companies | Investigate companies ranking above you for target keywords |
| WHOIS Domain Lookup | Domain registration details | Look up domain info for sites discovered in your SERP results |
How it works
Configure
Set your parameters in the Apify Console or pass them via API.
Run
Click Start, trigger via API, webhook, or set up a schedule.
Get results
Download as JSON, CSV, or Excel. Integrate with 1,000+ apps.
Use cases
Sales Teams
Build targeted lead lists with verified contact data.
Marketing
Research competitors and identify outreach opportunities.
Data Teams
Automate data collection pipelines with scheduled runs.
Developers
Integrate via REST API or use as an MCP tool in AI workflows.
Related actors
Website Contact Scraper
Extract emails, phone numbers, team members, and social media links from any business website. Feed it URLs from Google Maps or your CRM and get structured contact data back. Fast HTTP requests, no browser — scrapes 1,000 sites for ~$0.50.
Email Pattern Finder
Discover the email format used by any company. Enter a domain like stripe.com and detect patterns like [email protected]. Then generate email addresses for any name. Combine with Website Contact Scraper to turn company websites into complete email lists.
Website Content to Markdown
Convert any website to clean Markdown for RAG pipelines, LLM training, and AI apps. Crawls pages, strips boilerplate, preserves headings, tables, and code blocks. GFM support.
Wayback Machine Search
Search Internet Archive for historical web snapshots. Find cached pages, track website changes over time, recover deleted content. Filter by date, status, content type. No API key needed.
Ready to try SERP Rank Tracker - Google Search Position Monitor?
Start for free on Apify. No credit card required.
Open on Apify Store