Migration guide
Migrate from Tavily
Tavily returns results from its own index, cleaned for LLMs. SerpKite returns what Google shows, as LLM-ready Markdown, with page content on request. For most agent tools the swap is a single function.
Why switch
Why teams move from Tavily to SerpKite
Real Google results
Your agent sees the same ranking, answer box and People Also Ask that a person sees on google.com.
A fraction of the price
$0.80 vs $7.50 per 1k at entry and $0.60 vs $5.00 around 100k a month. Credits never expire.
LLM-ready without a second model
format=markdown and fields= cut tokens; include_content=N fetches the top N pages as Markdown in the same call.
Your queries stay yours
Query text is never logged. We don't use queries for training or share them.
The change
Before and after
import os
from tavily import TavilyClient
client = TavilyClient(api_key=os.environ["TAVILY_API_KEY"])
res = client.search(
"latest EU AI Act guidance for startups",
max_results=5,
topic="general",
include_raw_content=True,
)
context = "\n\n".join(r["raw_content"] or r["content"] for r in res["results"])from serpkite import SerpKite # pip install serpkite
sk = SerpKite(timeout=60) # reads SERPKITE_API_KEY
context = sk.search(
"latest EU AI Act guidance for startups",
format="markdown",
include_content=3,
) # str: results and top-3 pages as MarkdownWith format=markdown the response body is ready to paste into a prompt. include_content=3 adds the top three pages as Markdown for +1 credit each.
Reference
Parameter and field mapping
Request parameters
| Tavily | SerpKite | Notes |
|---|---|---|
api_key / Authorization: Bearer tvly-… |
Authorization: Bearer skt_live_… |
The SDKs read SERPKITE_API_KEY. |
query |
q |
|
max_results |
num |
10 per page is 1 credit. Trim client-side or with fields. |
topic="news" |
POST /v1/news |
|
time_range=day|week|month|year |
time=day|week|month|year |
|
include_domains=[…] |
site:a.com OR site:b.com in q |
|
exclude_domains=[…] |
-site:a.com in q |
|
include_raw_content=True |
include_content=1…5 |
+1 credit per fetched page. |
include_answer=True |
answer_box (in the response) |
Google's own answer box or featured snippet, when Google shows one. We don't generate answers. |
country |
country |
Two-letter code (us, de…). |
search_depth |
(none) | Every call is a live Google results page. |
Response fields
| Tavily | SerpKite | Notes |
|---|---|---|
results[].title |
results[].title |
|
results[].url |
results[].link |
Plus a canonical domain. |
results[].content |
results[].snippet |
Google's snippet, not an extracted chunk. |
results[].raw_content |
results[].content |
Page Markdown when include_content covered this result. |
results[].score |
results[].position |
Google's rank instead of a relevance score. |
answer |
answer_box.answer |
Or answer_box.snippet, with its link. |
images |
POST /v1/images |
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
{
"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
- No
score. Useposition. If your code filters on a score threshold, filter on position (e.g. top 5) instead. answer_boxis often missing. Google doesn't show an answer box for every query. If your agent relied onanswer, fall back to the top snippets.- Snippets are short. Google snippets are one or two sentences. For grounding, use
include_contentor the Webpage to Markdown API. - Latency.
include_contentfetches pages, so budget a few extra seconds and raise your HTTP timeout. - Called Tavily through a framework tool? Use
langchain-serpkite(SerpKiteSearch,SerpKiteRetriever),serpkite[crewai](SerpKiteSearchTool) or our MCP server. See LangChain and LangGraph.
Checklist
Step by step
-
1
Create a free account and copy your
skt_live_…key. -
2
Replace the Tavily client with the SerpKite SDK (
pip install serpkiteornpm install serpkite), aPOST /v1/search, or our framework tool. -
3
Map
query→q,topic=news→/v1/news,time_range→time, domain filters →site:operators. -
4
Choose an output:
format=markdownfor prompts,compactorfieldsfor structured tools. -
5
Replace
include_raw_contentwithinclude_content=Nwhere you need full pages. - 6 Compare answers on 20–50 real agent tasks, then switch.
Pricing
SerpKite vs Tavily: price
| SerpKite | Tavily | |
|---|---|---|
| Free tier | 2,500 on signup + 1,000/mo, no card | 1k/mo |
| Entry, ~$50 pack $ per 1k searches | $0.80 | $7.50 |
| ~100k searches / month $ per 1k | $0.60 | $5.00 |
| ~1M searches / month $ per 1k | $0.60 | enterprise |
| Best public list price $ per 1k | $0.60 | |
| Credit expiry | Never | Monthly |
Tavily lists $7.50 per 1k at entry and $5.00 around 100k a month, with monthly credits. Volume pricing is enterprise-only. 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 Tavily
Start building
Leave Tavily today
2,500 free credits, then 1,000 every month. No credit card.