REST API · v1 · Senkron

SERP API (Sıra Bulucu)

Google sıra sorgulamasını sitenize veya uygulamanıza entegre edin — tek istek, anında sonuç.

Temel URLhttps://www.spindorai.com/api/public-rank-finder
OpenAPI JSON

Bu sayfa ve OpenAPI dosyası AI asistanlarına (ChatGPT, Claude, Cursor vb.) verilebilir — entegrasyon kodunu otomatik üretirler.

4 Adımda Entegrasyon

  1. SERP API anahtarı oluştur

    Kayıt olup giriş yapın → https://www.spindorai.com/api-keysSERP API sekmesi. Format: sp_serp_…

  2. POST https://www.spindorai.com/api/public-rank-finder/check

    Content-Type: application/json, X-Spindora-Key: sp_serp_…

  3. JSON yanıtı işle

    found, position, page ve results[] alanlarını kullanın. Poll gerekmez — tek istek yeterli.

  4. Attribution göster

    Sonuçların yanında: Powered by Spindora → https://www.spindorai.com

Genel Bakış

Spindora SERP API, bir domain ve anahtar kelime için Google (veya DuckDuckGo / Yandex) arama sonuçlarında sıra tespiti yapar. Sonuç anında döner; asenkron kuyruk veya poll yoktur. API key ile kullanımda aylık kota kullanıcı hesabına bağlıdır — tüm SERP anahtarlarınız aynı kotayı paylaşır.

API key zorunlu

Harici isteklerde

Senkron yanıt

POST /check → 200

Attribution

Zorunlu link

Kimlik Doğrulama

Harici entegrasyonlar için geçerli bir SERP API anahtarı zorunludur. Anahtarı panelden oluşturun; tam değer yalnızca oluşturma anında gösterilir.

YöntemDeğer
Header (önerilen)X-Spindora-Key: sp_serp_…
BearerAuthorization: Bearer sp_serp_…

Anahtar oluşturma: https://www.spindorai.com/api-keys (giriş gerekli)

Kota & Planlar

API key ile (harici entegrasyon)

  • Kota kullanıcı bazlı aylıktır — tüm SERP anahtarları paylaşır.
  • Planlar: Free 50 · Starter 100 · Pro 200 · Pro+ 400 · Enterprise 800 istek/ay.
  • Kalan kota: GET https://www.spindorai.com/api/api-hub/status (Spindora oturum token'ı ile, panelde otomatik görünür).
  • En fazla 10 aktif SERP anahtarı.

Web arayüzü (/sira-bulucu)

  • API key olmadan IP başına günlük limit uygulanır (varsayılan 30/gün).

Plan satın alma: https://www.spindorai.com/api-key-satin-al

İstek Akışı

1

POST /check

url + keyword gönder

2

Bekle (≤60s)

SERP taraması sunucuda

3

200 OK

position + results[]

SEO Analiz API'den farklı olarak task_id ve poll döngüsü yoktur.

İstek Şeması

AlanTipZorunluAçıklama
urlstringEvetHedef site (domain veya tam URL)
keywordstringEvetAranacak anahtar kelime
engine"google" | "duckduckgo" | "yandex"HayırVarsayılan: google
locationstringHayırBölge slug: tr, ankara, istanbul, us, uk, de…
locale"tr" | "en"HayırHata mesajı dili
max_pagesinteger 1–10HayırTaranacak max SERP sayfası (varsayılan 5)

Uç Noktalar

POST/check

Sıra sorgula — ana entegrasyon uç noktası.

cURL
curl -X POST "https://www.spindorai.com/api/public-rank-finder/check" \
  -H "Content-Type: application/json" \
  -H "X-Spindora-Key: sp_serp_YOUR_KEY_HERE" \
  -d '{
    "url": "example.com",
    "keyword": "seo aracı",
    "engine": "google",
    "location": "tr",
    "locale": "tr",
    "max_pages": 5
  }'
GET/quota

Web arayüzü için IP bazlı günlük kota. API key gönderilirse aylık kota için /api-hub/status kullanın.

JSON Yanıt Örnekleri

Bulundu (200)

JSON
{
  "success": true,
  "url": "example.com",
  "keyword": "seo aracı",
  "engine": "google",
  "source": "google",
  "location": "tr",
  "found": true,
  "position": 3,
  "page": 1,
  "results": [
    {
      "position": 1,
      "page": 1,
      "title": "En İyi SEO Araçları",
      "url": "https://competitor.com/seo-araclari",
      "description": "…",
      "is_target": false
    },
    {
      "position": 3,
      "page": 1,
      "title": "Example — SEO Aracı",
      "url": "https://example.com/",
      "description": "…",
      "is_target": true
    }
  ],
  "message": "Siteniz 3. sırada (1. sayfa).",
  "attribution": {
    "text": "Powered by Spindora",
    "url": "https://www.spindorai.com",
    "required": true
  }
}

Bulunamadı (200)

JSON
{
  "success": true,
  "url": "example.com",
  "keyword": "çok nadir kelime",
  "engine": "google",
  "location": "tr",
  "found": false,
  "position": null,
  "page": null,
  "results": [],
  "message": "İlk 5 sayfada bulunamadı.",
  "attribution": {
    "text": "Powered by Spindora",
    "url": "https://www.spindorai.com",
    "required": true
  }
}

Attribution (Zorunlu)

API modunda yanıtta attribution nesnesi döner. Entegrasyonunuzda sonuçların yakınında görünür olmalıdır:

<a href="https://www.spindorai.com" target="_blank" rel="noopener noreferrer">
  Powered by Spindora
</a>

Kod Örnekleri

JavaScript (fetch)

const API = 'https://www.spindorai.com/api/public-rank-finder';
const KEY = 'sp_serp_YOUR_KEY_HERE';

async function checkRank(url, keyword) {
  const res = await fetch(`${API}/check`, {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'X-Spindora-Key': KEY,
    },
    body: JSON.stringify({
      url,
      keyword,
      engine: 'google',
      location: 'tr',
      locale: 'tr',
      max_pages: 5,
    }),
  });

  if (!res.ok) {
    const err = await res.json().catch(() => ({}));
    throw new Error(err.detail?.message || err.detail || res.statusText);
  }

  const data = await res.json();
  // data.found, data.position, data.page, data.results
  return data;
}

Python (requests)

import requests

API = "https://www.spindorai.com/api/public-rank-finder"
KEY = "sp_serp_YOUR_KEY_HERE"
HEADERS = {"X-Spindora-Key": KEY, "Content-Type": "application/json"}

def check_rank(url: str, keyword: str) -> dict:
    r = requests.post(
        f"{API}/check",
        headers=HEADERS,
        json={
            "url": url,
            "keyword": keyword,
            "engine": "google",
            "location": "tr",
            "locale": "tr",
            "max_pages": 5,
        },
        timeout=60,
    )
    r.raise_for_status()
    return r.json()

# result["found"], result["position"], result["results"]

Node.js

const API = 'https://www.spindorai.com/api/public-rank-finder';
const KEY = 'sp_serp_YOUR_KEY_HERE';

async function checkRank(url, keyword) {
  const res = await fetch(`${API}/check`, {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'X-Spindora-Key': KEY,
    },
    body: JSON.stringify({
      url,
      keyword,
      engine: 'google',
      location: 'tr',
      locale: 'tr',
      max_pages: 5,
    }),
  });

  if (!res.ok) {
    const err = await res.json().catch(() => ({}));
    throw new Error(err.detail?.message || err.detail || res.statusText);
  }

  const data = await res.json();
  // data.found, data.position, data.page, data.results
  return data;
}

PHP

<?php
$api = 'https://www.spindorai.com/api/public-rank-finder';
$key = 'sp_serp_YOUR_KEY_HERE';

function checkRank(string $url, string $keyword): array {
    global $api, $key;

    $ch = curl_init("$api/check");
    curl_setopt_array($ch, [
        CURLOPT_POST => true,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_HTTPHEADER => [
            'Content-Type: application/json',
            "X-Spindora-Key: $key",
        ],
        CURLOPT_POSTFIELDS => json_encode([
            'url' => $url,
            'keyword' => $keyword,
            'engine' => 'google',
            'location' => 'tr',
            'locale' => 'tr',
            'max_pages' => 5,
        ]),
        CURLOPT_TIMEOUT => 60,
    ]);
    $body = curl_exec($ch);
    $code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);

    if ($code !== 200) {
        throw new RuntimeException($body ?: "HTTP $code");
    }
    return json_decode($body, true);
}

Yanıt Alanları

AlanAçıklama
foundHedef domain SERP'te bulundu mu
positionGlobal sıra (1 = birinci)
pageBulunduğu SERP sayfa numarası
results[]SERP snippet listesi (position, title, url, is_target)
engineİstenen arama motoru
sourceKullanılan veri kaynağı (google, searxng, vb.)
messageİnsan okunur özet mesaj
attributionZorunlu gösterim bilgisi

Hata Kodları

HTTPAnlamNe yapmalı
401Geçersiz veya eksik API anahtarısp_serp_ prefix kontrol et
403API planının süresi dolmuşPlan yenile / api-key-satin-al
429Aylık kota dolduPlan yükselt veya gelecek ay bekle
400keyword boş veya geçersiz bodykeyword alanını doldur
500Geçici SERP / sunucu hatasıKısa süre sonra tekrar dene

Entegrasyon Kontrol Listesi

  • SERP API anahtarı oluşturuldu (sp_serp_…)
  • Her POST /check isteğinde X-Spindora-Key gönderiliyor
  • found=false durumunda UI kullanıcıya anlamlı mesaj gösteriyor
  • 429 aylık kota için plan yükseltme yönlendirmesi var
  • Sonuç ekranında Powered by Spindora linki görünür
  • İstek timeout en az 60 saniye (SERP taraması uzun sürebilir)

AI / LLM için özet

Bir AI asistanına entegrasyon yazdırırken bu metni veya OpenAPI JSON linkini yapıştırın:

Kopyala — AI prompt
# Spindora SERP API — Entegrasyon Özeti

Base URL: https://www.spindorai.com/api/public-rank-finder
Dokümantasyon: https://www.spindorai.com/developers/serp-api
OpenAPI JSON: https://www.spindorai.com/developers/serp-api.openapi.json
API Key: Kayıt ol → giriş yap → https://www.spindorai.com/api-keys → SERP API sekmesinden anahtar oluştur (sp_serp_*)

## Kimlik doğrulama
Header: X-Spindora-Key: sp_serp_YOUR_KEY
Alternatif: Authorization: Bearer sp_serp_YOUR_KEY

## Akış (senkron — poll yok)
POST /check
Body: {"url":"example.com","keyword":"seo aracı","engine":"google","location":"tr","locale":"tr","max_pages":5}
→ HTTP 200 ile position, page, results[] döner

## Kota
Aylık, kullanıcı bazlı (tüm SERP anahtarları paylaşır):
Free 50 | Starter 100 | Pro 200 | Pro+ 400 | Enterprise 800 / ay
Kalan kota: GET https://www.spindorai.com/api/api-hub/status (Spindora oturum JWT ile)

## Zorunluluklar
- Harici entegrasyonda API key zorunlu
- Sonuç UI'ında attribution: Powered by Spindora → https://www.spindorai.com

## Hata kodları
401 geçersiz key | 403 plan süresi dolmuş | 429 aylık kota doldu | 400 eksik keyword | 500 geçici SERP hatası

OpenAPI: https://www.spindorai.com/developers/serp-api.openapi.json