Keyword Rank Tracker
Pricing
from $3.50 / 1,000 rank checks
Keyword Rank Tracker
Keyword rank tracker for Google search. Track your website position for any keyword. Monitor daily ranking changes, detect drops, track competitors. Multi-keyword bulk tracking. Cheaper alternative to Ahrefs, SEMrush, Mangools.
Pricing
from $3.50 / 1,000 rank checks
Rating
0.0
(0)
Developer
Tugelbay Konabayev
Actor stats
0
Bookmarked
4
Total users
2
Monthly active users
a day ago
Last modified
Share
Keyword Rank Tracker — Monitor Your Google Rankings Daily
Try it free — Apify's free plan includes $5 of compute, enough to track ~1,000 keyword checks on this actor. No credit card, no subscription. ~2–5 seconds per keyword — track 100 keywords in under 5 minutes, scheduled daily if you want. Pay-per-use after — track 100 keywords for about $0.50. Replaces $99–$129/month from Ahrefs and SEMrush for anyone who only needs rank tracking.
Track where your website ranks in Google for target keywords. Monitor ranking positions over time, identify gains and drops, see who's outranking you, and optimize your SEO strategy with data. Built for SEO professionals, content teams, digital agencies, and anyone who needs reliable, automated rank tracking.
Perfect for daily rank monitoring, SEO reporting, competitor tracking, content performance analysis, and AI-powered SEO workflows.
Track Google Search Rankings Daily
Monitor your website's position for any keyword in Google search results. Detect ranking drops before they impact traffic.
Cheaper Alternative to Ahrefs and SEMrush Rank Tracking
Pay only per keyword check — no $99/month subscription. Track 100 keywords for under $1.
Bulk Keyword Position Monitoring
Track multiple keywords and domains in a single run. Perfect for SEO agencies monitoring client rankings.
What does Keyword Rank Tracker do?
This actor checks your domain's position in Google search results for a list of keywords. For each keyword, it searches Google via Apify's SERP proxy and returns:
- Your position — exact ranking (e.g., position 3, or null if not in top results)
- Your URL — which page from your domain is ranking for that keyword
- Your title — the page title Google shows in search results
- Top 3 competitors — the URLs currently holding positions 1-3
- Total results count — how many organic results Google returned
Run it daily, weekly, or monthly to build a historical ranking dataset. Compare performance over time, catch ranking drops early, and measure the impact of your SEO efforts.
Why use this instead of alternatives?
| Feature | Keyword Rank Tracker | Ahrefs Rank Tracker | SEMrush Position Tracking | Manual Google search |
|---|---|---|---|---|
| Price | PPE — pay per keyword checked | $99+/month (bundled) | $129+/month (bundled) | Free (tedious) |
| Pay-per-use | Yes — no monthly commitment | No — monthly subscription | No — monthly subscription | N/A |
| API access | Yes — full Apify API | Yes (limited by plan) | Yes (limited by plan) | No |
| MCP / AI ready | Yes — works with AI agents | No | No | No |
| Keyword limit | Unlimited (pay per check) | 750-5,000 by plan | 500-5,000 by plan | No limit (manual) |
| Data ownership | Full export (JSON, CSV, Excel) | Export available | Export available | None |
| Custom scheduling | Any interval (Apify scheduler) | Daily/weekly | Daily | Manual |
| Setup time | 30 seconds | Account + project setup | Account + project setup | — |
| Top competitors shown | Top 3 per keyword | Varies | Varies | Visible but manual |
Key advantage: No monthly subscription. You pay only for the keywords you actually check. Track 10 keywords daily for ~$3/month instead of $99+/month for a full SEO suite. Scale up or down anytime — no contracts, no minimums.
Features
- Multi-keyword tracking — check unlimited keywords in a single run
- Exact position detection — finds your domain's ranking position (1-100)
- Domain matching — handles
www/ non-wwwvariations automatically - Top 3 competitor visibility — see who holds the top positions for each keyword
- Automatic rate limiting — random 2-5 second delays between keywords to avoid Google blocking
- Error resilience — individual keyword failures don't stop the entire run
- Structured output — each keyword produces one clean data row
- Schedulable — daily, weekly, or monthly via Apify platform scheduler
- Date-stamped results — every result includes the run date for time-series analysis
- Export anywhere — JSON, CSV, Excel, Google Sheets, webhook, or Apify API
- MCP compatible — works with Apify MCP Server for AI agent integration
- Lightweight — runs on 256MB memory, ~2-5 seconds per keyword
Input examples
Track keywords for your domain
{"domain": "myblog.com","keywords": ["best seo tools", "keyword research tool", "content marketing"]}
Track with maximum result depth
{"domain": "myshop.com","keywords": ["buy running shoes online", "best trail running shoes 2026"],"maxResults": 100}
Competitor rank tracking
{"domain": "competitor.com","keywords": ["project management software","task management tool","team collaboration app","best project management","project planning tool"],"maxResults": 50}
Local SEO tracking
{"domain": "mybusiness.com","keywords": ["plumber near me","emergency plumber london","best plumber in london","24 hour plumber"]}
Input parameters
| Parameter | Type | Default | Required | Description |
|---|---|---|---|---|
domain | String | — | Yes | Your domain to track (e.g., myblog.com). Without https://. Handles www variations automatically. |
keywords | Array | — | Yes | List of keyword strings to track. Each keyword triggers a separate Google search. |
maxResults | Integer | 50 | No | Maximum number of results to check per keyword (10–100). Higher = finds positions deeper in SERPs, but slower. |
Output format
Each keyword produces one row in the dataset:
| Field | Type | Description |
|---|---|---|
date | String | Run date in ISO 8601 format (e.g., 2026-04-04) |
keyword | String | The tracked keyword |
domain | String | Your domain |
position | Integer | null | Your ranking position (null if not found in top results) |
url | String | null | URL of your ranking page (null if not found) |
title | String | null | Page title in search results (null if not found) |
totalResults | Integer | Total organic results parsed for the keyword |
top3 | Array | Top 3 results: [{pos, url}] — your direct competitors |
Example output
[{"date": "2026-04-04","keyword": "best seo tools","domain": "myblog.com","position": 7,"url": "https://myblog.com/best-seo-tools-2026","title": "12 Best SEO Tools in 2026 (Tested & Compared) - My Blog","totalResults": 48,"top3": [{ "pos": 1, "url": "https://ahrefs.com/blog/best-seo-tools/" },{ "pos": 2, "url": "https://backlinko.com/best-seo-tools" },{ "pos": 3, "url": "https://moz.com/blog/best-seo-tools" }]},{"date": "2026-04-04","keyword": "keyword research tool","domain": "myblog.com","position": null,"url": null,"title": null,"totalResults": 50,"top3": [{ "pos": 1, "url": "https://ahrefs.com/keyword-research" },{ "pos": 2, "url": "https://semrush.com/keyword-research/" },{ "pos": 3, "url": "https://moz.com/keyword-research" }]},{"date": "2026-04-04","keyword": "content marketing","domain": "myblog.com","position": 3,"url": "https://myblog.com/content-marketing-guide","title": "Content Marketing Guide: Strategy, Tips & Examples - My Blog","totalResults": 50,"top3": [{"pos": 1,"url": "https://contentmarketinginstitute.com/what-is-content-marketing/"},{ "pos": 2, "url": "https://hubspot.com/content-marketing" },{ "pos": 3, "url": "https://myblog.com/content-marketing-guide" }]}]
Integrations
Python
from apify_client import ApifyClientclient = ApifyClient("YOUR_API_TOKEN")run = client.actor("tugelbay/keyword-rank-tracker").call(run_input={"domain": "myblog.com","keywords": ["best seo tools", "keyword research", "content marketing"],"maxResults": 50})dataset = client.dataset(run["defaultDatasetId"])for item in dataset.iterate_items():pos = item.get("position", "NOT FOUND")print(f" [{pos}] {item['keyword']} → {item.get('url', 'N/A')}")
JavaScript / Node.js
import { ApifyClient } from "apify-client";const client = new ApifyClient({ token: "YOUR_API_TOKEN" });const run = await client.actor("tugelbay/keyword-rank-tracker").call({domain: "myblog.com",keywords: ["best seo tools", "keyword research", "content marketing"],maxResults: 50,});const { items } = await client.dataset(run.defaultDatasetId).listItems();for (const item of items) {const pos = item.position ?? "NOT FOUND";console.log(`[${pos}] ${item.keyword} → ${item.url ?? "N/A"}`);}
LangChain / AI Agents
from langchain_community.utilities import ApifyWrapperapify = ApifyWrapper(apify_api_token="YOUR_API_TOKEN")loader = apify.call_actor(actor_id="tugelbay/keyword-rank-tracker",run_input={"domain": "myblog.com","keywords": ["best seo tools", "content marketing", "link building"]},dataset_mapping_function=lambda item: (f"Keyword: {item['keyword']} | "f"Position: {item.get('position', 'Not ranked')} | "f"URL: {item.get('url', 'N/A')} | "f"Top competitor: {item['top3'][0]['url'] if item.get('top3') else 'N/A'}"))docs = loader.load()# Feed into LLM for SEO strategy recommendations
MCP Server (AI Agents)
This actor is compatible with Apify MCP Server, enabling AI agents (Claude, ChatGPT, custom LLM apps) to track keyword rankings programmatically.
{"mcpServers": {"apify": {"command": "npx","args": ["-y", "@anthropic/apify-mcp-server"],"env": {"APIFY_TOKEN": "YOUR_API_TOKEN"}}}}
Automated reporting with webhooks
Set up a webhook to trigger when the actor finishes. Use this to:
- Send ranking reports to Slack or email
- Update a Google Sheet automatically
- Trigger alerts when rankings drop below a threshold
- Feed data into a BI dashboard (Looker, Metabase, Grafana)
Export options
- JSON — default, structured output via Apify API
- CSV — export from dataset, compatible with Excel and Google Sheets
- Excel (.xlsx) — direct download from Apify Console
- Google Sheets — use Apify's Google Sheets integration for live dashboards
- Webhook — trigger on run completion for automated workflows
- API — fetch results programmatically from any language
Use cases
-
Daily rank monitoring — schedule the actor daily to track position changes. Build a historical dataset and visualize trends in Google Sheets or a BI tool.
-
SEO campaign measurement — track target keywords before and after SEO work (link building, content updates, technical fixes). Quantify the impact with hard position data.
-
Content performance tracking — after publishing a new blog post, add its target keywords to the tracker. See how quickly it enters the top 50, top 10, top 3.
-
Competitor intelligence — track a competitor's domain instead of yours. See which keywords they rank for and at what positions. Identify gaps and opportunities.
-
Client SEO reporting — agencies can run the tracker weekly for each client, export to CSV/Sheets, and include position data in monthly reports. No manual searching.
-
Ranking drop alerts — combine with webhooks to get notified when a key ranking drops by 5+ positions. Catch algorithm updates and technical issues early.
-
Local SEO tracking — track "near me" and location-specific keywords to monitor local pack rankings and organic positions.
-
SERP competitor analysis — the
top3field shows who holds positions 1-3 for each keyword. Analyze their content, backlinks, and on-page SEO to learn what's working. -
Keyword portfolio management — track 50-100 keywords across different content clusters. Identify which clusters are performing and which need more investment.
-
AI-powered SEO workflows — feed ranking data into LLMs via MCP Server. Let AI agents analyze trends, suggest content updates, and prioritize SEO tasks automatically.
Cost estimation
This actor uses Pay-Per-Event (PPE) pricing. You pay only for the keywords you check.
| What counts as an event | Cost |
|---|---|
| One keyword rank check | 1 event |
Example costs:
| Scenario | Keywords | Frequency | Monthly events | Estimated cost |
|---|---|---|---|---|
| Small blog, 10 keywords | 10 | Daily | 300 | ~$3.00 |
| Business site, 25 keywords | 25 | Weekly | 100 | ~$1.00 |
| Agency, 5 clients x 20 keywords | 100 | Weekly | 400 | ~$4.00 |
| Power user, 50 keywords | 50 | Daily | 1,500 | ~$15.00 |
| Enterprise, 200 keywords | 200 | Daily | 6,000 | ~$60.00 |
First 100 events are free — try the actor at no cost before committing.
Comparison with SEO tool subscriptions:
- Ahrefs Rank Tracker: $99+/month (750 keywords, bundled with full suite)
- SEMrush Position Tracking: $129+/month (500 keywords, bundled)
- Mangools SERPWatcher: $49+/month (200 keywords)
- This actor: ~$3/month for 10 daily keywords. Scale linearly — no cliff pricing.
FAQ
How accurate are the rankings?
The actor queries Google's live search results via Apify's SERP proxy (US-based, English). Results match what a US user would see searching on google.com. Rankings can vary by location, personalization, and time of day — this provides a consistent baseline from the same vantage point.
Why does my position show as null?
null means your domain wasn't found in the top results for that keyword. Common reasons:
- Your site doesn't rank in the top 50/100 for that keyword (increase
maxResultsto 100) - Google shows a different URL variation (e.g.,
www.domain.comvsdomain.com) — the actor handles common variations, but edge cases exist - The page is new and hasn't been indexed yet
Can I track hundreds of keywords?
Yes. The actor processes keywords sequentially with random 2-5 second delays to avoid Google blocking. A 100-keyword run takes ~4-8 minutes. For very large keyword lists (500+), consider splitting into multiple scheduled runs.
How often should I track rankings?
- Volatile keywords (news, trending): daily
- Competitive keywords (money keywords): 2-3 times per week
- Long-tail keywords (informational): weekly
- Brand keywords: weekly or monthly
Can I track rankings for different countries?
Currently, the actor searches Google with hl=en&gl=us (English, US). Support for custom geographic and language targeting is planned for a future release.
Does this track featured snippets, People Also Ask, or other SERP features?
Not currently. The actor tracks organic (blue link) positions only. SERP feature detection is on the roadmap.
How do I visualize ranking trends over time?
Export datasets to Google Sheets using Apify's integration, or fetch via API and load into any BI tool (Looker, Metabase, Grafana). Each run is date-stamped, so you can build time-series charts by keyword.
What's the difference between this and Google SERP Checker?
- Keyword Rank Tracker (this actor): checks where your domain ranks for specific keywords
- Google SERP & Index Checker: checks which of your sitemap pages are indexed in Google
Use both together for comprehensive SEO monitoring.
Can I use this for competitor analysis?
Yes. Set domain to your competitor's domain and provide the keywords you want to track. You'll see their exact positions and which pages are ranking.
Troubleshooting
Some keywords return 0 total results
Cause: Google may have blocked the specific proxy request, or the keyword triggered a CAPTCHA.
Fix: Run the actor again — Apify's SERP proxy rotates IPs automatically. If the issue persists for specific keywords, they may be triggering Google's abuse detection. Try simpler keyword variations.
Run takes too long
Cause: Each keyword takes 2-5 seconds (delay between requests). 100 keywords = ~4-8 minutes.
Fix: This is by design to avoid Google blocking. For faster results, split keywords into multiple parallel runs (each with a subset). Or reduce maxResults — checking top 20 is faster than top 100.
Position doesn't match what I see in Google
Cause: Google personalizes results based on location, search history, device, and other factors. The actor searches from US-based proxies with no personalization.
Fix: For a fair comparison, search Google in an incognito/private window with no Google account logged in. Results should be closer to what the actor returns.
"Error for keyword" messages in logs
Cause: Individual keyword searches can fail due to temporary proxy issues or Google rate limiting.
Fix: The actor continues processing remaining keywords even if one fails. Failed keywords get an error field in the output. Re-run the actor to retry failed keywords, or increase the delay between runs.
Domain not found but I know it ranks
Cause: Domain matching compares the result URLs against your input domain. Subdomains (blog.domain.com vs domain.com), path-based variations, or AMP URLs may not match.
Fix: Ensure the domain input matches exactly what Google shows in search results. Check the top3 field to see which URLs are actually ranking — this can reveal mismatches.
Limitations
- US-English results only — searches use
hl=en&gl=us. Localized rankings may differ. - Organic positions only — does not track ads, featured snippets, People Also Ask, or local pack.
- Sequential processing — keywords are checked one at a time with delays. Large keyword lists take proportionally longer.
- Maximum 100 results per keyword — if your site ranks beyond position 100, the actor won't find it.
- No historical comparison — the actor returns current positions only. You build history by running it repeatedly and storing/comparing datasets.
- Google rate limiting — very frequent runs (every few minutes) for the same keywords may trigger temporary blocks. Space runs at least 30 minutes apart.
Changelog
v1.0 (2026-04-04)
- Fixed
Actor.log→console.logfor Apify platform compatibility - Pinned cheerio to
1.0.0-rc.12for stable HTML parsing - Fixed HTML parsing for Google SERP results
- Better domain matching (handles
wwwvariations) - Improved error handling and timeouts
- Random delay between keywords (2-5 seconds) to avoid blocking
- Initial release with full rank tracking functionality
Related Actors
- Google SERP & Indexation Checker — Compare sitemap vs Google index
- Website Tech Stack Detector — Identify 80+ technologies on any website
- Google Maps Lead Extractor — Extract business leads with emails from Google Maps
- RAG Web Browser — Search Google + extract as Markdown for AI agents
- Article Extractor — Extract clean article text from any URL
See all actors: apify.com/tugelbay