Skip to content

New Official SDKs for TypeScript, Python and Go

SerpKite
Get API key

Migration guide

Migrate from SerpApi

If you use SerpApi for Google, SerpKite covers the same core engines at a fraction of the list price. Each engine becomes its own /v1 endpoint, the key moves to a Bearer header, and the response stays snake_case with the main list under results. Here is the full mapping.

Why switch

Why teams move from SerpApi to SerpKite

01

Far lower list price

$0.80 vs $15–25 per 1k at entry, $0.60 vs $7.25 around 100k a month. SerpKite credits also never expire.

02

LLM-ready output

format=markdown and compact return what an agent needs in far fewer tokens than raw JSON, and fields= projects only the keys you read.

03

Batch lane at half price

POST /v1/batches queues up to 100 queries per call at half price, with signed webhooks. Built for rank trackers.

04

Honest about the gaps

SerpApi has 100+ engines, SOC 2 and a legal shield. SerpKite is Google-only today. If you need Amazon, YouTube or Baidu, stay, or split traffic.

The change

Before and after

search.py (SerpApi) −17 lines
import os, requests

res = requests.get(
    "https://serpapi.com/search.json",
    params={
        "engine": "google",
        "q": "best espresso machine 2026",
        "gl": "us",
        "hl": "en",
        "start": 10,
        "api_key": os.environ["SERPAPI_KEY"],
    },
    timeout=30,
)
data = res.json()
for r in data["organic_results"]:
    print(r["position"], r["title"], r["link"])
print(data.get("knowledge_graph"))
search.py (SerpKite) +6 lines
from serpkite import SerpKite  # pip install serpkite

sk = SerpKite()  # reads SERPKITE_API_KEY
res = sk.search("best espresso machine 2026", country="us", language="en", page=2)
for r in res.results:
    print(r.position, r.title, r.link)
print(res.knowledge_graph)

engine becomes an SDK method or /v1 endpoint path, gl/hl become country/language, start becomes page, the key moves to Authorization: Bearer, and organic_results becomes results. Most other keys (knowledge_graph, answer_box, related_searches, top_stories) keep their snake_case names.

Reference

Parameter and field mapping

Endpoints

Endpoint mapping
SerpApi SerpKite Notes
engine=google POST /v1/search sk.search(…)
engine=google_news POST /v1/news
engine=google_images · google_videos POST /v1/images · /v1/videos
engine=google_maps · google_local POST /v1/maps · /v1/places
engine=google_maps_reviews POST /v1/reviews
engine=google_shopping POST /v1/shopping
engine=google_scholar · google_patents POST /v1/scholar · /v1/patents
engine=google_autocomplete POST /v1/autocomplete 0.5 credits.
engine=google_lens POST /v1/lens 2 credits.
engine=google_ai_mode Not supported
bing, baidu, yandex, amazon, youtube… Not supported Bing, DuckDuckGo, Brave, Yandex planned for Q1 2027.

Request parameters

Request parameter mapping
SerpApi SerpKite Notes
api_key Authorization: Bearer skt_live_… ?api_key= also works on GET. The SDKs read SERPKITE_API_KEY.
q, location, uule q, location, uule
gl, hl country, language Same values (us, en…).
start page page = start / 10 + 1.
num num num=100 = top 100 for 7 credits.
tbs, safe, device tbs, safe, device
async=true POST /v1/batches Half price. Poll GET /v1/batches/{id} (sk.batches.wait(id)) or get a signed webhook.
no_cache=true (default) Realtime by default. Opt in to cache with max_age (50% of credits on a hit).
output=md format=markdown Also format=compact and fields=.

Response fields

Response field mapping
SerpApi SerpKite Notes
organic_results results
ai_overview (not returned) SerpKite doesn't parse AI Overviews.
knowledge_graph knowledge_graph
answer_box answer_box
related_questions people_also_ask
related_searches related_searches
top_stories top_stories
local_results places
search_metadata meta + X-Request-Id header
search_parameters request

Live example

Google Search: request and response

curl https://api.serpkite.com/v1/search \
  -H "Authorization: Bearer $SERPKITE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"q":"best espresso machine 2026","country":"us","language":"en"}'

1 credit per call. Failed and empty results are free. Run it in the playground

200 OK (abridged)
{
  "request": {
    "endpoint": "search",
    "engine": "google",
    "q": "best espresso machine 2026",
    "country": "us",
    "language": "en",
    "num": 10,
    "page": 1,
    "device": "desktop",
    "autocorrect": true
  },
  "results": [
    {
      "position": 1,
      "title": "The Best Espresso Machines of 2026, Tested and Reviewed",
      "link": "https://www.example.com/best-espresso-machines",
      "domain": "example.com",
      "displayed_link": "https://www.example.com › best-espresso-machines",
      "snippet": "We pulled more than 1,200 shots on 42 machines to find the best espresso makers for every budget, from beginner-friendly to prosumer.",
      "date": "Sep 12, 2026",
      "sitelinks": [
        {
          "title": "Best budget pick",
          "link": "https://www.example.com/best-espresso-machines#budget"
        },
        {
          "title": "Best dual boiler",
          "link": "https://www.example.com/best-espresso-machines#dual-boiler"
        }
      ]
    },
    {
      "position": 2,
      "title": "Espresso Machine Buying Guide (2026)",
      "link": "https://coffee.example.org/guides/espresso",
      "domain": "coffee.example.org",
      "displayed_link": "https://coffee.example.org › guides › espresso",
      "snippet": "Single boiler, heat exchanger or dual boiler? What the specs mean and which features are worth paying for."
    },
    {
      "position": 3,
      "title": "r/espresso: What machine would you buy in 2026?",
      "link": "https://www.reddit.com/r/espresso/comments/abc123/",
      "domain": "reddit.com",
      "displayed_link": "https://www.reddit.com › r › espresso",
      "snippet": "Discussion thread with 480 comments comparing entry-level and prosumer machines."
    }
  ],
  "people_also_ask": [
    {
      "question": "What is the #1 rated espresso machine?",
      "snippet": "Reviewers most often rank dual-boiler machines with PID control at the top…",
      "link": "https://www.example.com/best-espresso-machines"
    },
    {
      "question": "Is a $500 espresso machine worth it?",
      "snippet": "For daily drinkers, a mid-range machine usually pays for itself within a year…",
      "link": "https://coffee.example.org/guides/espresso"
    }
  ],
  "related_searches": [
    {
      "query": "best espresso machine under $500"
    },
    {
      "query": "best espresso machine for beginners"
    },
    {
      "query": "dual boiler vs heat exchanger"
    }
  ],
  "meta": {
    "request_id": "req_01J8ZK4M6Q2V7",
    "credits_used": 1,
    "cached": false,
    "engine": "google",
    "latency_ms": 942,
    "parse_quality": "ok",
    "resolved_urls": true
  }
}

Watch out

Gotchas

  • A few renamed keys. organic_results → results, related_questions → people_also_ask, local_results → places, search_parameters → request. A small adapter lets the rest of your code stay untouched while you migrate.
  • Fewer fields on exotic SERP features. SerpApi parses a very long tail of Google widgets. SerpKite covers the ones that matter for agents and SEO: organic, PAA, knowledge graph, answer box, top stories, local pack, related searches, sitelinks, ads (opt-in). Check the Google Search API schema for anything niche.
  • No search archive. SerpApi stores searches and lets you fetch them by ID. SerpKite never logs queries and only caches results for a few hours; store what you need on your side.
  • Throughput is per second (20–100 requests/second by pack) rather than per hour.
  • Legal and compliance. SerpApi offers SOC 2 and a $2M legal shield. SerpKite has neither yet (SOC 2 is planned); read how we collect data.

Checklist

Step by step

  1. 1 Create a free account and copy your skt_live_… key.
  2. 2 Map each engine= value to a SerpKite endpoint path (table above).
  3. 3 Install an SDK (pip install serpkite, npm install serpkite, or the Go module) or send Authorization: Bearer on raw HTTP calls. Convert gl/hl to country/language and start to page.
  4. 4 Add an adapter for the few renamed keys (organic_results → results), or update your parsers.
  5. 5 Replace async=true polling with POST /v1/batches + webhook_url for bulk jobs.
  6. 6 Run both APIs side by side on a sample of queries and diff the top 10 links.
  7. 7 Set spend caps and alerts in the dashboard, then cut traffic over.

Pricing

SerpKite vs SerpApi: price

Price comparison with SerpApi
SerpKite SerpApi
Free tier 2,500 on signup + 1,000/mo, no card 250/mo
Entry, ~$50 pack $ per 1k searches $0.80 $15–25
~100k searches / month $ per 1k $0.60 $7.25
~1M searches / month $ per 1k $0.60 $3.75
Best public list price $ per 1k $0.60 $1.96
Credit expiry Never Monthly reset

SerpApi plans reset monthly and are $15–25 per 1k at entry, $7.25 around 100k/month, $3.75 at 1M and ~$1.96 at their best list price. SerpKite packs: $1.00 per 1k on the $10 pack down to $0.60 on the largest self-serve pack; larger volumes on request, enterprise from $0.18. Competitor list prices verified on vendor pages on 2026-09-28. See pricing.

FAQ

Migrating from SerpApi

Start building

Leave SerpApi today

2,500 free credits, then 1,000 every month. No credit card.