RankParse

Rank Tracking

Read stored Google, Bing, and Yandex keyword ranking snapshots for connected websites.

Overview

The rank-tracking endpoints return stored keyword ranking snapshots collected from connected webmaster providers, synced on a schedule -- never a live SERP check. All four endpoints require an API key, cost 0 credits, and are read-only.

Rank tracking reads snapshots collected from connected webmaster providers. Google, Bing, and Yandex report different search populations, so RankParse keeps their positions, dates, and availability separate. Use the GSC endpoints for Google-only live API dimensions and Google Ads for keyword volume.

Bing and Yandex tracking is opt-in per account, so many accounts only have Google connected. A missing engine in a response means that engine isn't connected/attached -- never a zero or bottom rank. Check enabled_engines on the rankings response to tell "not enabled for this account" apart from "enabled but not attached to this site". A present engine can also carry a non-available availability (e.g. provider_limited, common for Bing/Yandex; pending_first_sync; stale; sync_failed) together with a null position -- that's a data-quality or sync-timing signal, not evidence the keyword ranks nowhere.

GET /v1/rank-tracking/sites

Lists the websites configured for rank tracking, including each engine's attached property and sync freshness. Costs 0 credits.

Request

curl "https://api.rankparse.com/v1/rank-tracking/sites" \
  -H "X-API-Key: rp_your_key"

Response

{
  "sites": [
    {
      "site_id": "site_abc123",
      "canonical_host": "example.com",
      "display_name": "example.com",
      "providers": {
        "google": {
          "engine": "google",
          "property_id": "prop_g1",
          "property_url": "https://example.com/",
          "is_active": true,
          "last_synced_at": 1756112400000,
          "data_as_of": "2026-08-25",
          "latest_sync_status": "success",
          "latest_sync_error_code": null
        }
      }
    }
  ]
}

Only engines with an attached property for a site appear under providers -- a missing key (no bing above) means Bing isn't connected for this site, not that it has zero rankings.

GET /v1/rank-tracking/keywords

Lists the tracked keyword IDs and query text for one site. Costs 0 credits.

Parameters

ParameterTypeRequiredDescription
site_idstringYesFrom GET /v1/rank-tracking/sites
limitintegerNoMax keywords to return (default 100, max 100)
offsetintegerNoPagination offset (default 0)

Request

curl "https://api.rankparse.com/v1/rank-tracking/keywords?site_id=site_abc123" \
  -H "X-API-Key: rp_your_key"

Response

{
  "site_id": "site_abc123",
  "canonical_host": "example.com",
  "keywords": [
    { "id": "kw_1", "query": "buy widgets", "created_at": 1753900800000 }
  ],
  "total": 1,
  "limit": 100,
  "offset": 0
}

GET /v1/rank-tracking/rankings

Returns current-vs-previous-period ranking summaries for a site's tracked keywords, across every engine enabled for the account by default. Costs 0 credits.

Parameters

ParameterTypeRequiredDescription
site_idstringYesFrom GET /v1/rank-tracking/sites
keyword_idstringNoRestrict to one tracked keyword
enginestringNoall (default), google, bing, or yandex
period_daysintegerNoComparison window in days (default 28, max 90)
limitintegerNoMax keywords to return (default 100, max 100)
offsetintegerNoPagination offset (default 0)

Request: compare all engines over 28 days

curl "https://api.rankparse.com/v1/rank-tracking/rankings?site_id=site_abc123&engine=all&period_days=28" \
  -H "X-API-Key: rp_your_key"

Request: one keyword only

curl "https://api.rankparse.com/v1/rank-tracking/rankings?site_id=site_abc123&keyword_id=kw_1" \
  -H "X-API-Key: rp_your_key"

Response

{
  "site_id": "site_abc123",
  "canonical_host": "example.com",
  "enabled_engines": ["google", "bing", "yandex"],
  "period_days": 28,
  "limit": 100,
  "offset": 0,
  "total": 1,
  "keywords": [
    {
      "id": "kw_1",
      "query": "buy widgets",
      "engines": {
        "google": {
          "engine": "google",
          "property_id": "prop_g1",
          "property_url": "https://example.com/",
          "availability": "available",
          "data_as_of": "2026-08-25",
          "top_page": "https://example.com/widgets",
          "current_period": { "start_date": "2026-07-29", "end_date": "2026-08-25" },
          "previous_period": { "start_date": "2026-07-01", "end_date": "2026-07-28" },
          "current": { "clicks": 12, "impressions": 340, "ctr": 0.035, "position": 6.2, "click_position": 5.9 },
          "previous": { "clicks": 9, "impressions": 310, "ctr": 0.029, "position": 7.1, "click_position": 6.8 },
          "movement": 0.9
        },
        "bing": {
          "engine": "bing",
          "property_id": "prop_b1",
          "property_url": "https://example.com/",
          "availability": "provider_limited",
          "data_as_of": "2026-08-20",
          "top_page": null,
          "current_period": { "start_date": "2026-07-29", "end_date": "2026-08-25" },
          "previous_period": { "start_date": "2026-07-01", "end_date": "2026-07-28" },
          "current": { "clicks": null, "impressions": null, "ctr": null, "position": null, "click_position": null },
          "previous": { "clicks": null, "impressions": null, "ctr": null, "position": null, "click_position": null },
          "movement": null
        }
      }
    }
  ]
}

bing above is provider_limited with entirely null current/previous metrics -- that's a data-quality gap for that period, not a signal the keyword doesn't rank on Bing. yandex is absent from this keyword's engines even though it's listed in enabled_engines: Yandex is enabled for the account but not attached to this particular site.

movement is previous.position minus current.position; positive means the keyword moved up (a lower, better position number). It's null unless both periods have a non-null position.

GET /v1/rank-tracking/history

Returns day-by-day ranking history for one keyword on one search engine over a date range. engine is required here -- history is always single-engine (all is not accepted; call rankings first to compare engines). Costs 0 credits.

Parameters

ParameterTypeRequiredDescription
site_idstringYesFrom GET /v1/rank-tracking/sites
keyword_idstringYesFrom GET /v1/rank-tracking/keywords
enginestringYesgoogle, bing, or yandex
start_datestringYesYYYY-MM-DD, inclusive
end_datestringYesYYYY-MM-DD, inclusive. Span capped at 400 days

Request

curl "https://api.rankparse.com/v1/rank-tracking/history?site_id=site_abc123&keyword_id=kw_1&engine=google&start_date=2026-08-01&end_date=2026-08-25" \
  -H "X-API-Key: rp_your_key"

Response

{
  "site_id": "site_abc123",
  "keyword_id": "kw_1",
  "query": "buy widgets",
  "engine": "google",
  "property_id": "prop_g1",
  "property_url": "https://example.com/",
  "availability": "available",
  "data_as_of": "2026-08-25",
  "last_attempt_at": 1756112400000,
  "last_success_at": 1756112400000,
  "error_code": null,
  "start_date": "2026-08-01",
  "end_date": "2026-08-25",
  "rows": [
    { "date": "2026-08-01", "clicks": 1, "impressions": 30, "ctr": 0.033, "position": 6.8, "click_position": 6.5 },
    { "date": "2026-08-03", "clicks": 0, "impressions": 25, "ctr": 0, "position": 7.2, "click_position": null }
  ]
}

rows is ascending by date, and a missing calendar date (2026-08-02 above) simply means no synced observation that day -- never treat a gap as a zero or dropped rank.

Errors

StatusCodeMeaning
400invalid_rank_tracking_engineengine is missing, not one of the allowed values, or (on /history) is all
400invalid_rank_tracking_periodperiod_days is out of range
400invalid_rank_tracking_datestart_date/end_date are missing, malformed, out of order, or span more than 400 days
400rank_tracking_provider_disabledengine is a real engine name that isn't enabled for this account
400rank_tracking_property_not_attached(/history only) the keyword has no primary property attached for that engine
404rank_tracking_site_not_foundNo site with that site_id belongs to this API key
404rank_tracking_keyword_not_foundNo keyword with that keyword_id belongs to this API key on this site
429rate_limited60 requests/minute exceeded

Distinct from GSC and Google Ads

Rank tracking, Google Search Console, and Google Ads are three separate data products and none of them change the others:

  • The GSC endpoints expose live, Google-only Search Console dimensions (pages, devices, countries, URL inspection).
  • The Google Ads keyword tools return search volume and competition -- never organic rankings, for any engine.
  • Rank tracking is the only family that reads stored Google, Bing, and Yandex position snapshots side by side.

On this page