Bing Search API: Bing SERP Scraper & Web Search Results avatar

Bing Search API: Bing SERP Scraper & Web Search Results

Pricing

from $0.85 / 1,000 search results

Go to Apify Store
Bing Search API: Bing SERP Scraper & Web Search Results

Bing Search API: Bing SERP Scraper & Web Search Results

Bing SERP API and Bing search scraper for any list of queries: title, URL, snippet, date, site and position of every organic result, in any market, with freshness and safe-search filters. A drop-in Bing API alternative for the retired Bing Web Search API. $1 per 1,000 results.

Pricing

from $0.85 / 1,000 search results

Rating

0.0

(0)

Developer

Saulius AutomatesIT

Saulius AutomatesIT

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

16 days ago

Last modified

Share

Get Bing web search results for any list of queries, in bulk. Every result comes with its position, title, URL, domain, snippet, date and the site name Bing shows, for the market you choose (en-US, en-GB, de-DE, ja-JP...).

Microsoft retired the official Bing Web Search API in August 2025. This Actor gives you the same core answer, the organic results, as clean JSON with no Azure account, no API key and no browser. $1 per 1,000 results, and queries that find nothing cost nothing.

Know this before you run it. Bing answers some multi-word searches from automated clients with the results for the first word only: best password manager software can come back as Best Buy. The Actor checks every answer, asks again on fresh IPs and tries the same words in another order. In our 30-search test on 5 Oct 2026, 23 of 30 came back in full. A search Bing still answers only in part is not charged: you get one free row that says so, with Bing's top answers as evidence. Short searches and brand, product and topic names (crm software, hubspot crm, python web scraping) are almost always answered in full. Details under Limits.

What you can use it for

  • Web search for AI agents and RAG: give your agent or LLM app fresh web results through the API or the Apify MCP server.
  • Rank tracking: schedule a run every day for your keywords and see where your pages sit on Bing, which also powers Yahoo search and much of DuckDuckGo.
  • Brand monitoring: see which pages Bing ranks for your brand and your competitors' names, every day.
  • SEO and content research: who ranks for a topic in each market, with what titles and snippets.
  • Bulk research: thousands of keywords in one run, with the domains that rank for each.

Bing Search API retired: what to use instead

Microsoft announced on 15 May 2025 that every Bing Search API (Web, News, Image, Video, Custom Search and the rest of the v7 family) would be decommissioned, and switched them off on 11 August 2025. Calls to api.bing.microsoft.com/v7.0/search no longer return results, and new keys cannot be created.

Microsoft's suggested successor is Grounding with Bing Search inside Azure AI Agents. It does not return a list of results to your code: an Azure agent reads the web and writes an answer. If your code needs the result list itself (titles, URLs, snippets, positions) for rank tracking, SEO tools, RAG pipelines or your own ranking, you need a search results API.

This Actor is that: Bing's organic web results as JSON, one HTTP call per batch of queries, no Azure subscription.

Migrating from the Bing Web Search API v7

Before (stopped working 11 August 2025):

import requests
r = requests.get("https://api.bing.microsoft.com/v7.0/search",
headers={"Ocp-Apim-Subscription-Key": BING_KEY},
params={"q": "best crm software", "mkt": "en-US", "count": 10})
results = r.json()["webPages"]["value"]

After: the same function shape, so the rest of your code keeps reading webPages.value:

import requests
APIFY_TOKEN = "YOUR_APIFY_TOKEN"
ENDPOINT = "https://api.apify.com/v2/acts/sauliusautomatesit~bing-search-api/run-sync-get-dataset-items"
def bing_web_search(q, mkt="en-US", count=10):
"""Drop-in for Bing Web Search API v7: returns {"webPages": {"value": [...]}} with v7 field names."""
r = requests.post(ENDPOINT, headers={"Authorization": f"Bearer {APIFY_TOKEN}"},
json={"queries": [q], "market": mkt, "maxResultsPerQuery": min(count, 10)}, timeout=120)
r.raise_for_status()
rows = [x for x in r.json() if x.get("type") != "error" and not x.get("offTopic")]
return {"webPages": {
"totalEstimatedMatches": rows[0]["totalResultsEstimate"] if rows else 0,
"value": [{"name": x["title"], "url": x["url"], "displayUrl": x["displayUrl"],
"snippet": x["snippet"], "datePublishedDisplayText": x.get("date")} for x in rows],
}}
for page in bing_web_search("crm software")["webPages"]["value"]:
print(page["name"], page["url"])

The same in JavaScript (Node 18+, no packages needed):

const APIFY_TOKEN = 'YOUR_APIFY_TOKEN';
const ENDPOINT = 'https://api.apify.com/v2/acts/sauliusautomatesit~bing-search-api/run-sync-get-dataset-items';
async function bingWebSearch(q, mkt = 'en-US', count = 10) {
const res = await fetch(ENDPOINT, {
method: 'POST',
headers: { Authorization: `Bearer ${APIFY_TOKEN}`, 'Content-Type': 'application/json' },
body: JSON.stringify({ queries: [q], market: mkt, maxResultsPerQuery: Math.min(count, 10) }),
});
if (!res.ok) throw new Error(`HTTP ${res.status}`);
const rows = (await res.json()).filter((x) => x.type !== 'error' && !x.offTopic);
return {
webPages: {
totalEstimatedMatches: rows[0]?.totalResultsEstimate ?? 0,
value: rows.map((x) => ({ name: x.title, url: x.url, displayUrl: x.displayUrl, snippet: x.snippet })),
},
};
}
const { webPages } = await bingWebSearch('crm software');
webPages.value.forEach((p) => console.log(p.name, p.url));

Many queries at once? Put them all in queries in one call (up to 20 run in parallel) and group the rows by query; that is much faster than one call per query.

Bing Web Search API v7This Actor
qqueries (a list, so one call can carry many searches)
mkt (en-US, de-DE...)market, same codes
countmaxResultsPerQuery (up to 10)
webPages.value[].nametitle
webPages.value[].urlurl (the real page address)
webPages.value[].displayUrldisplayUrl
webPages.value[].snippetsnippet
webPages.value[].datePublishedDisplayTextdate
webPages.totalEstimatedMatchestotalResultsEstimate
(none)position, domain, siteName
offset, freshness, responseFilter, safeSearchnot offered (see Limits)
Ocp-Apim-Subscription-Key headerApify token, as Authorization: Bearer header or ?token=

What it costs next to the alternatives

OptionPriceReturns a result list to your code?
Bing Web Search API v7 (retired 11 Aug 2025)was $25 (S1), $15 (S2) or $6 (S3) per 1,000 callsyes, until it was switched off
Grounding with Bing Search (Azure AI Agents)$35 per 1,000 transactions, plus the modelno, an agent's written answer
Google Custom Search JSON APIclosed to new customers; Google switches it off 1 January 2027yes, until then
This Actor (Bing results)$1 per 1,000 results: $10 per 1,000 searches at 10 results, $3 at 3 resultsyes, Bing's own ranking

Prices as published by each provider in 2025 and 2026. If you only need Bing's top 3 or top 5, set Results per query lower and pay for those only.

How to use it

  1. Put one search per line in Search queries, in plain words.
  2. Optional: Market (language-COUNTRY, default en-US) and Results per query.
  3. Run it and download the results as JSON, CSV or Excel, or read them through the API.

Input example

{
"queries": ["crm software", "python web scraping", "apify"],
"market": "en-US",
"maxResultsPerQuery": 10
}

Output

One item per organic result, in Bing's order:

{
"query": "best crm software",
"position": 1,
"title": "10 Best CRM Software Of 2026 – Forbes Advisor",
"url": "https://www.forbes.com/advisor/business/software/best-crm-software/",
"domain": "forbes.com",
"siteName": "forbes.com",
"displayUrl": "https://www.forbes.com › advisor › business › software › best-crm-software",
"snippet": "Compare top CRM options to find the best fit for your needs and budget, and explore features, pricing and support …",
"date": "Sep 16, 2026",
"market": "en-US",
"totalResultsEstimate": 7760,
"offTopic": false,
"searchUrl": "https://www.bing.com/search?q=best+crm+software&setlang=en-US&cc=US&mkt=en-US",
"scrapedAt": "2026-10-03T18:00:00.000Z"
}
  • url is the real page address, not a Bing redirect.
  • date is the date Bing shows next to the snippet, when it shows one.
  • totalResultsEstimate is Bing's own "About N results" figure.
  • askedAs is the search as sent to Bing. It differs from query only when Bing answered the original word order in part and the same words in another order in full (for example crm pricing comparison asked as pricing comparison crm).
  • offTopic is true when Bing would only answer part of the query (see Limits). Those rows are free.

A search Bing answers only in part on every try gets one free row instead of results:

{
"query": "best password manager software",
"type": "off-topic",
"title": "No full answer from Bing for this search (not charged)",
"url": null,
"position": null,
"offTopic": true,
"note": "Bing answered this search only in part (usually with the results for its first word) on every try, so no results are delivered and nothing is charged. ...",
"bingAnsweredWith": [{ "title": "Best Buy | Official Online Store | Shop Now & Save", "url": "https://www.bestbuy.com/" }],
"market": "en-US"
}

Set Searches Bing answers only in part (offTopicResults) to include to get Bing's rows for those searches instead, flagged offTopic: true and still free.

The run summary (queries, results delivered, queries without results, queries asked again, queries Bing answered only in part, failures) is saved as OUTPUT in the run's key-value store.

Pricing

Pay per result, no subscription:

EventPrice
Search result$0.001 ($1 per 1,000 results)
Actor start$0.00005

A query with 10 results costs $0.01. 1,000 queries with 10 results each cost about $10. Queries that return nothing are free, and so are searches Bing answers only in part (note rows and rows flagged offTopic). Bronze, Silver and Gold Apify plans get 5%, 10% and 15% off. Proxy and compute are included.

Use it from code

API (cURL)

curl -X POST "https://api.apify.com/v2/acts/sauliusautomatesit~bing-search-api/run-sync-get-dataset-items?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"queries": ["crm software"], "market": "en-US"}'

Python

$pip install apify-client
from apify_client import ApifyClient
client = ApifyClient("YOUR_TOKEN")
run = client.actor("sauliusautomatesit/bing-search-api").call(run_input={
"queries": ["crm software", "web scraping tools"],
"market": "en-US",
})
for item in client.dataset(run.default_dataset_id).iterate_items():
print(item["query"], item["position"], item["title"], item["url"])

run.default_dataset_id is for apify-client 3.x (the current release); on 2.x write run["defaultDatasetId"]. Pass max_total_charge_usd=1 to .call() to cap a run at $1.

JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_TOKEN' });
const run = await client.actor('sauliusautomatesit/bing-search-api').call({ queries: ['crm software'] });
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.map((r) => `${r.position}. ${r.title} ${r.url}`));

MCP (Claude, Cursor, any MCP client)

Add https://mcp.apify.com/?tools=sauliusautomatesit/bing-search-api as a remote MCP server and your agent can search Bing as a tool.

Limits, honestly

  • Up to 10 results per query. Bing gives automated clients its first results page only; the "next page" returns the same results again. For more coverage, split a topic into several more specific queries.
  • Plain keyword search. For automated clients Bing ignores search operators (site:, quotes, -exclude) and the date filter, so this Actor does not offer them.
  • Organic web results only: no ads, images, videos, news carousels or "people also ask" boxes.
  • Bing sometimes answers only the first word of a query. To automated clients, Bing answers some multi-word searches with the results for the first word alone: best password manager software comes back as Best Buy, notion reviews as Notion's home page, latest iphone release date as news sites. Which searches it does this to changes from hour to hour; searches with words like best, free, latest, reviews or comparison are hit most. The Actor checks every answer for most of the query's words, asks again on a fresh IP up to 4 times, then asks the same words in another order (Bing often answers pricing comparison crm in full when it won't answer crm pricing comparison; those rows show the order used in askedAs). In our 30-search test on 5 Oct 2026, 23 of 30 came back in full. A search still answered only in part is not charged and gets one note row (or Bing's rows flagged offTopic: true, if you choose include). Quotes, operators, other markets and a real browser do not change Bing's answer; we tested them.
  • The UK market (en-GB) is hit hardest. In our tests most multi-word searches in en-GB came back only in part (0 of 20 on 4 Oct 2026), while the same searches in en-US mostly came back in full. Those searches are free, but if you need UK results, test a few of your own searches first.
  • Bing sometimes shows 7 to 9 organic results instead of 10. The Actor asks again and keeps the fullest answer, so a few queries may still have fewer than 10 results.
  • Results reflect what Bing shows an anonymous visitor in the chosen market, without personalisation.

FAQ

Is this the official Bing API? No. Microsoft retired the Bing Search APIs on 11 August 2025. This Actor reads Bing's public results page and returns the organic results as structured data.

Do I need a Microsoft or Azure account? No. You only need an Apify account.

Can I still get a Bing Search API key? No. Microsoft stopped issuing Bing Search API keys and switched the endpoints off on 11 August 2025. An Apify token replaces the key; Apify's free plan includes $5 of monthly credit, about 500 searches of 10 results.

Is it a drop-in replacement for my v7 code? For organic web results, the Python and JavaScript functions in "Migrating from the Bing Web Search API v7" return the same webPages.value shape and field names. Two differences: up to 10 results per query, and some multi-word queries come back as a free note row instead of results because Bing would only answer their first word (see Limits). News, image and video search, offset paging and freshness are not covered.

What about the Google Custom Search JSON API? It is closed to new customers and Google switches it off on 1 January 2027. If you used it for "the top results for a keyword", Bing's results through this Actor are a ready replacement today.

Can AI agents use it? Yes. Add the MCP URL above to Claude, Cursor or any MCP client, or call the API from LangChain, LlamaIndex or your own tool definitions; each result has the title, URL and snippet an LLM needs.

Can I search in other countries and languages? Yes: set Market to any Bing market, for example en-GB, de-DE, fr-FR, es-ES, it-IT, ja-JP, pt-BR.

How fast is it? About one second per query, 5 queries in parallel by default (up to 20).

Is it legal? It collects publicly visible search results. You are responsible for how you use the data and for complying with the laws that apply to you.