Bing Search API: Bing SERP Scraper & Web Search Results
Pricing
from $0.85 / 1,000 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
Maintained by CommunityActor 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 requestsr = 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 requestsAPIFY_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 v7 | This Actor |
|---|---|
q | queries (a list, so one call can carry many searches) |
mkt (en-US, de-DE...) | market, same codes |
count | maxResultsPerQuery (up to 10) |
webPages.value[].name | title |
webPages.value[].url | url (the real page address) |
webPages.value[].displayUrl | displayUrl |
webPages.value[].snippet | snippet |
webPages.value[].datePublishedDisplayText | date |
webPages.totalEstimatedMatches | totalResultsEstimate |
| (none) | position, domain, siteName |
offset, freshness, responseFilter, safeSearch | not offered (see Limits) |
Ocp-Apim-Subscription-Key header | Apify token, as Authorization: Bearer header or ?token= |
What it costs next to the alternatives
| Option | Price | Returns 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 calls | yes, until it was switched off |
| Grounding with Bing Search (Azure AI Agents) | $35 per 1,000 transactions, plus the model | no, an agent's written answer |
| Google Custom Search JSON API | closed to new customers; Google switches it off 1 January 2027 | yes, until then |
| This Actor (Bing results) | $1 per 1,000 results: $10 per 1,000 searches at 10 results, $3 at 3 results | yes, 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
- Put one search per line in Search queries, in plain words.
- Optional: Market (language-COUNTRY, default
en-US) and Results per query. - 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"}
urlis the real page address, not a Bing redirect.dateis the date Bing shows next to the snippet, when it shows one.totalResultsEstimateis Bing's own "About N results" figure.askedAsis the search as sent to Bing. It differs fromqueryonly when Bing answered the original word order in part and the same words in another order in full (for examplecrm pricing comparisonasked aspricing comparison crm).offTopicistruewhen 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:
| Event | Price |
|---|---|
| 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 ApifyClientclient = 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 softwarecomes back as Best Buy,notion reviewsas Notion's home page,latest iphone release dateas 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 answerspricing comparison crmin full when it won't answercrm pricing comparison; those rows show the order used inaskedAs). 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 flaggedoffTopic: true, if you chooseinclude). 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 inen-GBcame back only in part (0 of 20 on 4 Oct 2026), while the same searches inen-USmostly 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.
Related Actors
- Google Trends API: search interest over time, by region, related and rising queries.
- Google Ads Transparency API: every ad an advertiser runs on Google.
- YouTube Transcript Scraper: transcripts of any YouTube video, channel or playlist.
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.