Daily rank tracking

Every tracked keyword is checked against a live Google SERP each morning, and the position, the URL Google returned and the top ten are all kept.

What it is

A daily cron that runs a live organic SERP lookup to depth 100 for each tracked keyword, finds the site's own domain in the results and records the absolute position, the exact URL that ranked and a snapshot of the top ten. Results are stored one row per keyword per day, so history is a fact rather than a screenshot. A keyword already checked today is skipped, which makes the pass safe to re-run.

Also called: rank checker · keyword position tracking · where do I rank on google

See it
Daily rank tracking
Won
38%
Avg cycle
20d
Pipeline
$435k
JanSep
The Rankings tab: keyword, page, baseline → now, seven-day delta arrow and 'positions to top 10'. Rendered by src/app/platform/seo/page.tsx. Sample data — no customer information appears here.
How it works
  1. 1checkRanking() runs /serp/google/organic/live/regular at depth 100 for the keyword's own location setting.
  2. 2The site's domain is matched with the www prefix stripped from both sides.
  3. 3seo_rankings is upserted on (keyword_id, checked_on), so a re-run of the same day corrects rather than duplicates.
  4. 4found_url is stored, which is what later reveals cannibalisation and which page actually earns a term.
  5. 5Publishing a post automatically adds its target keyword to tracking, so measurement starts the next morning.
Why we built it

The route carries the scar: "Up to 200 LIVE SERP calls in one pass, each a round trip to DataForSEO. On the platform default this died partway through and only the first handful of keywords were ever checked — silently, because the ones already done get skipped next run and it looked like progress. (Keith 08-24)" The fix was raising maxDuration to 800 seconds. The 'skip what's done' rule that made the failure invisible is the same rule that makes the pass idempotent — it just needed the run to be able to finish.

The problem
  • Rank history was anecdotal, so improvement could not be proved or disproved.
  • Nobody knew which URL Google was actually returning for a term.
  • A partially-completed check looked identical to a completed one.
Sound familiar?
What you get
A dated position for every tracked term, every day
The exact URL Google returns is recorded, not assumed
Re-running a check corrects the day instead of duplicating it
What's inside

See it on your own jobs

Twenty minutes, your numbers, no slide deck. We’ll build one of your real buildings in front of you and send you the estimate link at the end — yours to keep either way.

or keep browsing features →