Migration guide
Migrate from the Bing Search API
Microsoft retired the Bing Search APIs on August 11, 2025. The suggested replacement, Grounding with Bing, is tied to Azure AI agents and costs about $14 per 1,000 calls. If you need raw web results as JSON, SerpKite returns Google's.
Bing Search API retired:
This API is already gone. Existing integrations have stopped working.
Why switch
Why teams move from Bing Search API to SerpKite
The full results page as JSON or Markdown
You get the results page as JSON (or Markdown) and decide what to do with it, from any language or agent framework.
Richer than webPages
Organic results plus Google's answer box, People Also Ask, knowledge graph, top stories and related searches in one call.
Verticals in one API
News, Images, Videos, Maps, Places and Shopping have their own endpoints with the same auth and billing.
Bing engine is on the roadmap
Bing, DuckDuckGo and Brave behind the same API are planned for Q1 2027 via engine=. Until then, results come from Google.
The change
Before and after
import os, requests
res = requests.get(
"https://api.bing.microsoft.com/v7.0/search",
headers={"Ocp-Apim-Subscription-Key": os.environ["BING_KEY"]},
params={"q": "vector database benchmarks", "mkt": "en-US", "count": 10, "offset": 0},
timeout=30,
)
for page in res.json()["webPages"]["value"]:
print(page["name"], page["url"], page["snippet"])from serpkite import SerpKite # pip install serpkite
sk = SerpKite() # reads SERPKITE_API_KEY
res = sk.search("vector database benchmarks", country="us", language="en", page=1)
for r in res.results:
print(r.title, r.link, r.snippet)The Bing client call becomes one SDK call (or a JSON POST https://api.serpkite.com/v1/search with Authorization: Bearer). mkt splits into country and language, offset becomes page, and webPages.value becomes results.
Reference
Parameter and field mapping
Request parameters
| Bing Search API | SerpKite | Notes |
|---|---|---|
Ocp-Apim-Subscription-Key |
Authorization: Bearer skt_live_… |
The SDKs read SERPKITE_API_KEY and set the header for you. |
q |
q |
|
mkt=en-US |
country=us, language=en |
Country and language are separate parameters. |
setLang |
language |
|
count |
num |
10 per page. num=100 returns the top 100 for 7 credits. |
offset |
page |
page = offset / count + 1, from 1 to 10. |
safeSearch=Off|Moderate|Strict |
safe=off|active |
|
freshness=Day|Week|Month |
time=day|week|month |
Also hour and year, or a raw tbs. |
responseFilter=News |
POST /v1/news |
Each vertical is its own endpoint (sk.news(…) in the SDKs). |
/v7.0/images/search, /videos/search |
POST /v1/images, /v1/videos |
Response fields
| Bing Search API | SerpKite | Notes |
|---|---|---|
webPages.value[].name |
results[].title |
|
webPages.value[].url |
results[].link |
Resolved destination URL, plus a canonical domain. |
webPages.value[].snippet |
results[].snippet |
|
webPages.value[].dateLastCrawled |
results[].date |
The date Google shows, when it shows one. |
Bing related-search suggestions (.text) |
related_searches[].query |
|
entities.value[] |
knowledge_graph |
|
news.value[] |
top_stories[] (or POST /v1/news) |
|
| (none) | people_also_ask, answer_box |
New fields Bing never returned. |
| (none) | meta |
request_id, credits_used, cached, latency_ms. |
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
- Rankings differ. Results are Google's, not Bing's. If you compared against Bing baselines, re-baseline.
- No
totalEstimatedMatchesin the/v1/searchresponse. If you rely on a result count, the CSE-compatible endpoint returnssearchInformation.totalResults. - Markets are not one parameter. Map
mkttocountry+language, and uselocation(e.g."Austin, Texas, United States") for city-level results. - Bing returned up to 50 results per call. SerpKite bills per page of 10; top 100 is a 7-credit bundle with
num=100. - For agents,
format=markdownorformat=compactcuts response tokens substantially. See JSON vs Markdown SERPs.
Checklist
Step by step
-
1
Create a free account and copy your
skt_live_…key. -
2
Install an SDK (
pip install serpkiteornpm install serpkite), or switch the request fromGET api.bing.microsoft.com/v7.0/searchtoPOST api.serpkite.com/v1/searchwith a JSON body andAuthorization: Bearer. -
3
Map
mkttocountryandlanguage,count/offsettonum/page, andfreshnesstotime. -
4
Rename response fields:
webPages.value→results,name→title,url→link. -
5
Move news, image and video calls to
/v1/news,/v1/imagesand/v1/videos. - 6 Re-baseline any ranking or relevance tests against Google results.
- 7 Set a spend cap in the dashboard and deploy.
Pricing
SerpKite vs Bing Search API: price
| SerpKite | Bing Search API | |
|---|---|---|
| Free tier | 2,500 on signup + 1,000/mo | None (retired) |
| List price | $1.00 → $0.60 per 1k | Grounding with Bing: ~$14 per 1k |
| Raw results as JSON | Yes | No (grounded answers inside Azure AI agents) |
| Credit expiry | Never | Azure billing |
Grounding with Bing lists at about $14 per 1,000 and only works inside Azure AI agents (docs/01). There is no cheap raw Bing JSON API today. 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 Bing Search API
Start building
Leave Bing Search API today
2,500 free credits, then 1,000 every month. No credit card.