Skip to content

Rank Tracking API

The rank tracking service syncs keyword rankings from VisibilityIQ’s data index into the organic_keywords_current and organic_overview_history tables. These are accessible via the API once a sync has completed.

Terminal window
curl "https://visibilityiq365.com/api/v1/projects/proj_abc123/organic/keywords?domain=example.com&database=us" \
-H "Authorization: Bearer vis_live_YOUR_KEY_HERE"

Response:

{
"ok": true,
"data": {
"domain": "example.com",
"database": "us",
"lastSyncAt": "2026-06-14T08:00:00Z",
"total": 1247,
"keywords": [
{
"keyword": "site audit tool",
"keywordHash": "a3f2...",
"position": 4,
"previousPosition": 6,
"positionChange": -2,
"searchVolume": 2400,
"cpc": 8.50,
"url": "https://example.com/features/site-audit",
"intent": "commercial",
"isBranded": false,
"trafficEstimate": 312
}
]
}
}

Note: positionChange is current minus previous (positive = dropped, negative = improved).

Terminal window
# Only keywords in positions 1-10
curl "https://visibilityiq365.com/api/v1/projects/proj_abc123/organic/keywords?domain=example.com&positionMin=1&positionMax=10"
# Only non-branded transactional keywords
curl "https://visibilityiq365.com/api/v1/projects/proj_abc123/organic/keywords?branded=false&intent=transactional"
# Keywords that improved since last sync
curl "https://visibilityiq365.com/api/v1/projects/proj_abc123/organic/keywords?positionChangeLt=0"
Terminal window
curl "https://visibilityiq365.com/api/v1/projects/proj_abc123/organic/history?domain=example.com&database=us" \
-H "Authorization: Bearer vis_live_YOUR_KEY_HERE"

Response shows daily rows for the last 90 days, then weekly Monday snapshots beyond that (history compression per the organic rankings data retention rules).

The keyword landscape table shows how your keyword footprint compares to competitors:

Terminal window
curl "https://visibilityiq365.com/api/v1/projects/proj_abc123/landscape?domain=example.com" \
-H "Authorization: Bearer vis_live_YOUR_KEY_HERE"

Gap types:

Gap TypeMeaning
missingCompetitor ranks, you don’t
weakYou rank 50+, competitor ranks in top 10
competitiveBoth rank in top 20
dominantYou rank top 10, competitor doesn’t
opportunityHigh volume, low competition
uncontestedOnly you rank; competitor has no presence
Terminal window
curl -X POST "https://visibilityiq365.com/api/v1/projects/proj_abc123/organic/sync" \
-H "Authorization: Bearer vis_live_YOUR_KEY_HERE" \
-H "Content-Type: application/json" \
-d '{"domain": "example.com", "database": "us"}'

Manual syncs consume units from your monthly budget. Check remaining budget before triggering:

Terminal window
curl "https://visibilityiq365.com/api/v1/projects/proj_abc123/organic/settings" \
-H "Authorization: Bearer vis_live_YOUR_KEY_HERE"

Response includes monthlyUnitBudget, unitsConsumedThisMonth, syncStatus.

The intent field uses the rank-tracking service’s intent bitmask mapped to a simplified four-value enum:

ValueDescription
informationalUser seeking information (“how to…”)
navigationalUser looking for a specific site
commercialUser comparing options before purchase
transactionalUser ready to buy or act

Multi-intent keywords (where the bitmask has multiple bits set) are classified by the highest commercial intent present — a keyword that’s both informational and transactional is stored as transactional.