Keyword Rank Tracker avatar

Keyword Rank Tracker

Pricing

from $3.50 / 1,000 rank checks

Go to Apify Store
Keyword Rank Tracker

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

Tugelbay Konabayev

Maintained by Community

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?

FeatureKeyword Rank TrackerAhrefs Rank TrackerSEMrush Position TrackingManual Google search
PricePPE — pay per keyword checked$99+/month (bundled)$129+/month (bundled)Free (tedious)
Pay-per-useYes — no monthly commitmentNo — monthly subscriptionNo — monthly subscriptionN/A
API accessYes — full Apify APIYes (limited by plan)Yes (limited by plan)No
MCP / AI readyYes — works with AI agentsNoNoNo
Keyword limitUnlimited (pay per check)750-5,000 by plan500-5,000 by planNo limit (manual)
Data ownershipFull export (JSON, CSV, Excel)Export availableExport availableNone
Custom schedulingAny interval (Apify scheduler)Daily/weeklyDailyManual
Setup time30 secondsAccount + project setupAccount + project setup
Top competitors shownTop 3 per keywordVariesVariesVisible 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-www variations 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

ParameterTypeDefaultRequiredDescription
domainStringYesYour domain to track (e.g., myblog.com). Without https://. Handles www variations automatically.
keywordsArrayYesList of keyword strings to track. Each keyword triggers a separate Google search.
maxResultsInteger50NoMaximum 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:

FieldTypeDescription
dateStringRun date in ISO 8601 format (e.g., 2026-04-04)
keywordStringThe tracked keyword
domainStringYour domain
positionInteger | nullYour ranking position (null if not found in top results)
urlString | nullURL of your ranking page (null if not found)
titleString | nullPage title in search results (null if not found)
totalResultsIntegerTotal organic results parsed for the keyword
top3ArrayTop 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 ApifyClient
client = 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 ApifyWrapper
apify = 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

  1. 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.

  2. SEO campaign measurement — track target keywords before and after SEO work (link building, content updates, technical fixes). Quantify the impact with hard position data.

  3. 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.

  4. Competitor intelligence — track a competitor's domain instead of yours. See which keywords they rank for and at what positions. Identify gaps and opportunities.

  5. 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.

  6. Ranking drop alerts — combine with webhooks to get notified when a key ranking drops by 5+ positions. Catch algorithm updates and technical issues early.

  7. Local SEO tracking — track "near me" and location-specific keywords to monitor local pack rankings and organic positions.

  8. SERP competitor analysis — the top3 field shows who holds positions 1-3 for each keyword. Analyze their content, backlinks, and on-page SEO to learn what's working.

  9. Keyword portfolio management — track 50-100 keywords across different content clusters. Identify which clusters are performing and which need more investment.

  10. 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 eventCost
One keyword rank check1 event

Example costs:

ScenarioKeywordsFrequencyMonthly eventsEstimated cost
Small blog, 10 keywords10Daily300~$3.00
Business site, 25 keywords25Weekly100~$1.00
Agency, 5 clients x 20 keywords100Weekly400~$4.00
Power user, 50 keywords50Daily1,500~$15.00
Enterprise, 200 keywords200Daily6,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 maxResults to 100)
  • Google shows a different URL variation (e.g., www.domain.com vs domain.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.

Not currently. The actor tracks organic (blue link) positions only. SERP feature detection is on the roadmap.

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.logconsole.log for Apify platform compatibility
  • Pinned cheerio to 1.0.0-rc.12 for stable HTML parsing
  • Fixed HTML parsing for Google SERP results
  • Better domain matching (handles www variations)
  • Improved error handling and timeouts
  • Random delay between keywords (2-5 seconds) to avoid blocking
  • Initial release with full rank tracking functionality

See all actors: apify.com/tugelbay