Web Search
curl --request GET \
--url https://scrapebadger.com/v1/bing/search \
--header 'X-API-Key: <x-api-key>'import requests
url = "https://scrapebadger.com/v1/bing/search"
headers = {"X-API-Key": "<x-api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<x-api-key>'}};
fetch('https://scrapebadger.com/v1/bing/search', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://scrapebadger.com/v1/bing/search",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-Key: <x-api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://scrapebadger.com/v1/bing/search"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<x-api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://scrapebadger.com/v1/bing/search")
.header("X-API-Key", "<x-api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://scrapebadger.com/v1/bing/search")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<x-api-key>'
response = http.request(request)
puts response.read_body{
"query": "<string>",
"market": "<string>",
"total_results": 123,
"total_results_text": "<string>",
"result_count": 123,
"results": [
{
"position": 123,
"title": "<string>",
"url": "<string>",
"display_url": "<string>",
"site_name": "<string>",
"snippet": "<string>",
"deep_links": [
{}
]
}
],
"ads": [
{
"position": 123,
"title": "<string>",
"url": "<string>",
"display_url": "<string>",
"snippet": "<string>"
}
],
"related_searches": [
"<string>"
]
}Search
Web Search
Search the Bing web SERP — organic results, ads, related searches and the reported total match count.
GET
/
v1
/
bing
/
search
Web Search
curl --request GET \
--url https://scrapebadger.com/v1/bing/search \
--header 'X-API-Key: <x-api-key>'import requests
url = "https://scrapebadger.com/v1/bing/search"
headers = {"X-API-Key": "<x-api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<x-api-key>'}};
fetch('https://scrapebadger.com/v1/bing/search', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://scrapebadger.com/v1/bing/search",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-Key: <x-api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://scrapebadger.com/v1/bing/search"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<x-api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://scrapebadger.com/v1/bing/search")
.header("X-API-Key", "<x-api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://scrapebadger.com/v1/bing/search")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<x-api-key>'
response = http.request(request)
puts response.read_body{
"query": "<string>",
"market": "<string>",
"total_results": 123,
"total_results_text": "<string>",
"result_count": 123,
"results": [
{
"position": 123,
"title": "<string>",
"url": "<string>",
"display_url": "<string>",
"site_name": "<string>",
"snippet": "<string>",
"deep_links": [
{}
]
}
],
"ads": [
{
"position": 123,
"title": "<string>",
"url": "<string>",
"display_url": "<string>",
"snippet": "<string>"
}
],
"related_searches": [
"<string>"
]
}Search Bing’s web SERP. Organic results carry the resolved destination URL
(Bing’s
/ck/a tracking redirects are decoded), display URL, site name,
snippet and deep links.
Credits: 5
Authorization
string
required
Your ScrapeBadger API key.
Query Parameters
string
required
Search keywords, e.g.
coffee machine.integer
default:"10"
Results per page,
1–50. An upper bound, not a guarantee — see
Result depth.integer
default:"0"
Zero-based result offset for pagination.
string
One of
off, moderate, strict.Response
string
Echo of the requested query.
string
The market the results were fetched for.
integer
Bing’s reported total match count (approximate), e.g.
59300.string
The count as displayed, e.g.
About 59,300 results.integer
Organic results returned in this response.
SearchResult[]
string[]
Bing’s related query suggestions.
Example
curl "https://scrapebadger.com/v1/bing/search?query=coffee+machine&market=en-GB" \
-H "X-API-Key: YOUR_API_KEY"
const res = await fetch(
"https://scrapebadger.com/v1/bing/search?" +
new URLSearchParams({ query: "coffee machine", market: "en-GB" }),
{ headers: { "X-API-Key": process.env.SCRAPEBADGER_API_KEY } },
);
const data = await res.json();
import requests
res = requests.get(
"https://scrapebadger.com/v1/bing/search",
headers={"X-API-Key": "YOUR_API_KEY"},
params={"query": "coffee machine", "market": "en-GB"},
)
data = res.json()
Response
{
"query": "coffee machine",
"market": "en-GB",
"total_results": 59300,
"total_results_text": "About 59,300 results",
"result_count": 8,
"results": [
{
"position": 1,
"title": "The 9 Best Coffee Makers of 2026, Tested & Reviewed",
"url": "https://www.seriouseats.com/best-coffee-makers-5069325",
"display_url": "https://www.seriouseats.com/best-coffee-makers",
"site_name": "Serious Eats",
"snippet": "We brewed hundreds of cups to find the best drip coffee makers...",
"deep_links": [
{ "title": "Our Top Picks", "url": "https://www.seriouseats.com/best-coffee-makers-5069325#toc-our-top-picks" }
]
}
],
"ads": [
{
"position": 1,
"title": "Coffee Machines - Free Delivery",
"url": "https://www.example-retailer.com/coffee",
"display_url": "www.example-retailer.com",
"snippet": "Shop our range of bean-to-cup machines."
}
],
"related_searches": ["best coffee machine 2026", "espresso machine", "bean to cup coffee machine"]
}
Result depth
Bing serves non-JS clients a server-rendered layout carrying the first
~4–10 organic results; the rest are lazy-loaded only in a real JS
browser. The API returns everything Bing renders plus the true
total_results — treat count as an upper bound and result_count as the
truth.⌘I

