RankParse

Issues and indexing

The problems RankParse found on your websites, the same list as the dashboard's Issues tab, and the stored Google index status of your tracked pages.

GET/v1/issuesFreeAPI key

Returns the problems RankParse has found on your websites, worst first. It is the same list the Issues tab shows in the dashboard, built from the same stored data with the same rules, so an agent sees what you see.

Both endpoints read stored data that RankParse syncs in the background. Neither runs a live crawl or calls Google while you wait. For a live check of one URL, use GET /v1/gsc/url-inspection.

Issue types

TypeWhat it meansSource
not-indexedTracked pages older than two days that Google has not indexed (inspected, verdict not PASS) or has not confirmed yet. Pages not checked yet count only when the website has an active Google propertyStored Google URL Inspection results
click-dropTracked queries with at least 20 clicks in the earlier 4 weeks that either lost at least 30% of those clicks or moved off the first page. Each compares the last 4 weeks with the 4 before. Properties not synced in the last 3 days are skippedStored Search Console, Bing and Yandex metrics
low-ctrGoogle queries at positions 1 to 10 with at least 500 impressions in the last 4 weeks whose click-through rate is under half of what their position normally earnsStored Search Console metrics
connectionA Search Console, Bing or Yandex source that needs reconnecting, is switched off, or failed to syncSync status
ai-visibilityA failing check from the daily AI visibility scan, for example robots.txt blocking AI search agentsSite scan
site-healthA failing site health check from the same scan, for example a noindex on the home pageSite scan

ai-visibility and site-health issues appear only for verified websites in workspaces on a paid plan.

Request

Parameters

NameTypeRequiredDefaultDescription
site_idstringNoA website id from /v1/websites. Omit it to list issues across the workspace.
typestringNoallComma-separated issue types, for example not-indexed,click-drop.
limitintegerNo50Issues to return, 1 to 100. Out-of-range values are clamped. There is no offset: issues come worst first, and total gives the full count.

Example

curl "https://api.rankparse.com/v1/issues?site_id=site_abc123" \
  -H "X-API-Key: rp_your_key"
import requests

res = requests.get(
    "https://api.rankparse.com/v1/issues",
    params={"site_id": "site_abc123"},
    headers={"X-API-Key": "rp_your_key"},
)
for issue in res.json()["issues"]:
    print(issue["severity"], issue["title"])
const res = await fetch("https://api.rankparse.com/v1/issues?site_id=site_abc123", {
  headers: { "X-API-Key": "rp_your_key" },
});
const { issues } = await res.json();
for (const issue of issues) console.log(issue.severity, issue.title);

Response

{
  "site_id": "site_abc123",
  "checked_at": "2026-10-27T12:00:00.000Z",
  "total": 1,
  "issues": [
    {
      "id": "not-indexed:site_abc123",
      "site_id": "site_abc123",
      "host": "example.com",
      "type": "not-indexed",
      "severity": "bad",
      "title": "2 pages are not in Google's index",
      "detail": "2 were checked and Google did not index them. Pages that are not in Google's index cannot appear in search results.",
      "source": "google",
      "detected_at": "2026-10-19T09:30:00.000Z",
      "pages": ["https://example.com/pricing", "https://example.com/blog/launch"],
      "evidence": null,
      "fix": null,
      "suggested_task": "find out why 2 pages are not in Google's index, fix what you can, and tell me what I need to do myself",
      "indexnow_urls": ["https://example.com/pricing", "https://example.com/blog/launch"],
      "connection": null,
      "links": [{ "label": "See pages", "url": "https://rankparse.com/dashboard/sites/site_abc123/indexing" }]
    }
  ],
  "skipped": [],
  "truncated": false
}

Response fields

FieldTypeDescription
site_idstring or nullThe website asked for, or null for a workspace-wide list.
checked_atstringWhen the list was computed (ISO 8601).
totalintegerIssues matching the filter, before limit.
issues[].idstringStable for the same problem on the same website.
issues[].typestringOne of the issue types above.
issues[].severitystringbad or warn.
issues[].title / detailstringPlain-English summary and explanation, as the dashboard shows them.
issues[].sourcestringgoogle, bing, yandex or rankparse (the site scan).
issues[].detected_atstringWhen the problem became detectable, from the data where possible.
issues[].pagesarray or nullAffected pages (not-indexed, up to 50).
issues[].evidencearray or nullOne short line per affected query, page or scan finding.
issues[].fixstring or nullThe concrete fix (ai-visibility and site-health).
issues[].suggested_taskstringOne sentence an agent can act on.
issues[].indexnow_urlsarray or nullnot-indexed only: pages not submitted to IndexNow in the last 24 hours (up to 85).
issues[].connectionobject or nullconnection only: provider, error_code of the last failed sync, last_synced_at.
issues[].linksarrayDashboard pages where the issue is reviewed or fixed.
skippedarrayChecks that could not run: "<type>" for every website, or "<type>:<site_id>" for one.
truncatedbooleanWorkspace-wide only: true when not-indexed, click-drop, low-ctr and connection issues covered only the 25 most recently synced websites. ai-visibility and site-health issues cover up to 500 websites.
GET/v1/indexingFreeAPI key

Returns the pages tracked on a website's Indexing page with the last stored Google URL Inspection result for each. RankParse re-inspects tracked pages in the background about once a day.

Parameters

NameTypeRequiredDefaultDescription
site_idstringYesA website id from /v1/websites.
statusstringNoallnot_indexed (inspected, verdict not PASS), unchecked (no verdict yet), indexed (PASS), error (the last inspection failed) or all.
limitintegerNo100Pages to return, 1 to 500.
offsetintegerNo0Pages to skip, for paging.

Pages come back not indexed first, then unchecked, then indexed, newest first within each group.

Response

{
  "site_id": "site_abc123",
  "host": "example.com",
  "google_inspection_available": true,
  "summary": { "total": 42, "indexed": 38, "not_indexed": 2, "unchecked": 2, "inspection_errors": 0 },
  "status": "all",
  "limit": 100,
  "offset": 0,
  "urls": [
    {
      "url": "https://example.com/pricing",
      "added_at": "2026-10-10T08:00:00.000Z",
      "google": {
        "verdict": "NEUTRAL",
        "coverage_state": "Crawled - currently not indexed",
        "robots_txt_state": "ALLOWED",
        "indexing_state": "INDEXING_ALLOWED",
        "page_fetch_state": "SUCCESSFUL",
        "last_crawl_time": "2026-10-25T03:12:44Z",
        "google_canonical": "https://example.com/pricing",
        "inspected_at": "2026-10-27T06:00:00.000Z",
        "error": null
      },
      "indexnow": { "submitted_at": null, "error": null }
    }
  ]
}

google_inspection_available is false when no verified Google property covers the website. Its pages are then never inspected and stay unchecked.

Behavior and limits

  • Cost: 0 credits for both endpoints.
  • Stored data: metrics sync daily and pages are re-inspected about once a day, so a fix shows up after the next sync, not immediately.
  • Rate limit: 60 requests per minute per key.
  • Scope: your own workspace only. A website id from another workspace returns 404.

Errors

HTTPCodeWhen
400invalid_issue_typetype names an unknown issue type.
400invalid_indexing_statusstatus is not one of the allowed values.
401invalid_api_keyMissing, invalid or revoked API key.
404issues_site_not_foundsite_id is not a website in your workspace (/v1/issues).
404indexing_site_not_foundsite_id is missing or not a website in your workspace (/v1/indexing).
429rate_limitedMore than 60 requests in a minute.

See Error codes.

MCP tools: list_site_issues and get_indexing_status (API-key endpoint only).

On this page