Quickstart
Five steps from zero to your first result.
1. Get an API key
Section titled “1. Get an API key”Sign in to the SEO Checker dashboard, open the
API section, and create a key. Copy it — it’s shown only once and looks like
sk_live_…. See Authentication for details.
2. Submit a task
Section titled “2. Submit a task”Send the keyword, region, and device. You get back a task_id.
curl -X POST https://api.seo-checker.com.ua/v1/serp/tasks \ -H "Authorization: Bearer sk_live_your_key" \ -H "Content-Type: application/json" \ -d '{"keyword":"best running shoes","region":"us","device":"desktop","depth":1}'{ "task_id": "58e6ea50-492b-494c-9767-f6f1396e9298", "status": "queued" }3. Poll for the result
Section titled “3. Poll for the result”Poll GET /serp/tasks/{id} until status is done (or error). Results
usually land within a few seconds; back off between polls.
curl https://api.seo-checker.com.ua/v1/serp/tasks/58e6ea50-492b-494c-9767-f6f1396e9298 \ -H "Authorization: Bearer sk_live_your_key"{ "task_id": "58e6ea50-492b-494c-9767-f6f1396e9298", "status": "done", "result": { "keyword": "best running shoes", "region": "us", "device": "desktop", "total_results": 1010, "items": [ { "position": 1, "url": "https://example.com/best-running-shoes", "title": "Best Running Shoes — 2026 Guide", "snippet": "…", "displayed_url": "example.com" } ] }, "cost": 1}4. The same flow in code
Section titled “4. The same flow in code”import os, time, requests
BASE = "https://api.seo-checker.com.ua/v1"headers = {"Authorization": f"Bearer {os.environ['SEO_CHECKER_API_KEY']}"}
task = requests.post(f"{BASE}/serp/tasks", headers=headers, json={ "keyword": "best running shoes", "region": "us", "device": "desktop",}).json()
task_id = task["task_id"]while True: res = requests.get(f"{BASE}/serp/tasks/{task_id}", headers=headers).json() if res["status"] in ("done", "error"): break time.sleep(2)
print(res["result"]["items"] if res["status"] == "done" else res["error"])const BASE = "https://api.seo-checker.com.ua/v1";const headers = { Authorization: `Bearer ${process.env.SEO_CHECKER_API_KEY}`, "Content-Type": "application/json",};
const { task_id } = await fetch(`${BASE}/serp/tasks`, { method: "POST", headers, body: JSON.stringify({ keyword: "best running shoes", region: "us", device: "desktop" }),}).then((r) => r.json());
let res;do { await new Promise((r) => setTimeout(r, 2000)); res = await fetch(`${BASE}/serp/tasks/${task_id}`, { headers }).then((r) => r.json());} while (res.status !== "done" && res.status !== "error");
console.log(res.status === "done" ? res.result.items : res.error);5. Where to go next
Section titled “5. Where to go next”- Task lifecycle — states, polling, and caching.
- Credits & billing — what a task costs.
- Errors — every error code and how to fix it.
- API Reference — the full endpoint reference.