Get Your API Key
Sign in at hasdata.com, go to your account settings, and copy your API key. All requests must include your key in thex-api-key header.
Request Cost and API Credits
Each request to the Bing SERP API consumes API Credits from your account balance.- Cost per request: 10 API Credits
- Credits are deducted only for successful requests.
- Your total available credits depend on your active plan.
You can use your credits across all HasData APIs. The same credit balance is shared platform-wide.
Unused credits do not roll over. Any remaining credits expire at the end of the current billing period.
Make Your First Request
curl --request GET -G \
--url 'https://api.hasdata.com/scrape/bing/serp' \
--data-urlencode 'q=Coffee' \
--data-urlencode 'location=Austin, Texas, United States' \
--data-urlencode 'deviceType=desktop' \
--header 'Content-Type: application/json' \
--header 'x-api-key: <your-api-key>'
hasdata bing-serp \
--q Coffee \
--location 'Austin, Texas, United States' \
--device-type desktop
const axios = require('axios').default;
const options = {
method: 'GET',
url: 'https://api.hasdata.com/scrape/bing/serp',
params: {q: 'Coffee', location: 'Austin, Texas, United States', deviceType: 'desktop'},
headers: {'Content-Type': 'application/json', 'x-api-key': '<your-api-key>'}
};
try {
const { data } = await axios.request(options);
console.log(data);
} catch (error) {
console.error(error);
}
import requests
url = "https://api.hasdata.com/scrape/bing/serp"
querystring = {"q":"Coffee","location":"Austin, Texas, United States","deviceType":"desktop"}
headers = {
"Content-Type": "application/json",
"x-api-key": "<your-api-key>"
}
response = requests.get(url, headers=headers, params=querystring)
print(response.json())
<?php
$params = [
"q" => "Coffee",
"location" => "Austin, Texas, United States",
"deviceType" => "desktop",
];
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.hasdata.com/scrape/bing/serp?" . http_build_query($params),
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-key: <your-api-key>",
],
]);
$response = curl_exec($curl);
curl_close($curl);
echo $response;
OkHttpClient client = new OkHttpClient();
HttpUrl url = HttpUrl.parse("https://api.hasdata.com/scrape/bing/serp")
.newBuilder()
.addQueryParameter("q", "Coffee")
.addQueryParameter("location", "Austin, Texas, United States")
.addQueryParameter("deviceType", "desktop")
.build();
Request request = new Request.Builder()
.url(url)
.get()
.addHeader("Content-Type", "application/json")
.addHeader("x-api-key", "<your-api-key>")
.build();
Response response = client.newCall(request).execute();
using System.Net.Http;
using System.Web;
var client = new HttpClient();
var query = HttpUtility.ParseQueryString(string.Empty);
query["q"] = "Coffee";
query["location"] = "Austin, Texas, United States";
query["deviceType"] = "desktop";
var url = $"https://api.hasdata.com/scrape/bing/serp?{query}";
var request = new HttpRequestMessage(new HttpMethod("GET"), url);
request.Headers.Add("x-api-key", "<your-api-key>");
using var response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
var content = await response.Content.ReadAsStringAsync();
Console.WriteLine(content);
require 'net/http'
require 'uri'
uri = URI("https://api.hasdata.com/scrape/bing/serp")
params = {
"q" => "Coffee",
"location" => "Austin, Texas, United States",
"deviceType" => "desktop",
}
uri.query = URI.encode_www_form(params)
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Get.new(uri)
request["Content-Type"] = 'application/json'
request["x-api-key"] = '<your-api-key>'
response = http.request(request)
puts response.read_body
use reqwest::blocking::Client;
fn main() -> Result<(), Box<dyn std::error::Error>> {
let client = Client::new();
let res = client
.get("https://api.hasdata.com/scrape/bing/serp")
.query(&[("q", "Coffee")])
.query(&[("location", "Austin, Texas, United States")])
.query(&[("deviceType", "desktop")])
.header("Content-Type", "application/json")
.header("x-api-key", "<your-api-key>")
.send()?
.text()?;
println!("{}", res);
Ok(())
}
package main
import (
"fmt"
"io"
"net/http"
"net/url"
)
func main() {
params := url.Values{}
params.Set("q", "Coffee")
params.Set("location", "Austin, Texas, United States")
params.Set("deviceType", "desktop")
u := "https://api.hasdata.com/scrape/bing/serp?" + params.Encode()
req, _ := http.NewRequest("GET", u, nil)
req.Header.Add("Content-Type", "application/json")
req.Header.Add("x-api-key", "<your-api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}
API Parameters
| Parameter | Default Value | Required | Description |
|---|---|---|---|
q | Coffee | Yes | Specify the search term for which you want to scrape the SERP. |
location | Austin, Texas, United States | No | Defines the search’s origin location as free text (e.g. Austin, Texas). It is resolved to coordinates to localize the results. For realistic results, set location at the city level. If both lat and lon are provided, they take precedence and location is ignored. If omitted, the proxy’s location may be used. |
lat | - | No | GPS latitude for the search origin. |
lon | - | No | GPS longitude for the search origin. |
mkt | - | No | The two-letter country code for the country to search from. |
cc | - | No | The two-letter country code for the country to search from. |
setLang | - | No | The language of the user interface and preferred result language. Accepts a two-letter language code (e.g. en, de) or a locale/script variant (e.g. en-gb, zh-hans, pt-br). |
safeSearch | - | No | Adult Content Filtering option. |
filters | - | No | Allows applying various filters to narrow search results, including date-based options: - ex1:"ez1" – past 24 hours- ex1:"ez2" – past week- ex1:"ez3" – past monthFor complex filters, run a Bing search and copy the filters parameter from the URL. |
deviceType | desktop | No | Specify the device type for the search. |
first | - | No | This parameter specifies the number of search results to skip and is used for implementing pagination. For example, a value of 1 (default) indicates the first page of results, 11 refers to the second page, and 21 to the third page. |