---
title: "How to Scrape Bing Search Results (2026) | Scrape.ly"
description: "How to scrape Bing search results in any market: rankings, related searches and news as JSON, with a real run, the cost per page and code for Python."
url: https://scrape.ly/blog/scrape-bing-search-results
markdown: https://scrape.ly/blog/scrape-bing-search-results.md
---

[Tutorials](https://scrape.ly/blog/category/tutorials.md)

# How to Scrape Bing Search Results: Rankings, Related Searches and News

Scrape Bing search results in any of 38 markets and get every results page as JSON: organic rankings with titles, URLs and dates, related searches, People Also Ask and the top news story. A real run, the cost per page, and code for curl, Python, Node.js and AI agents.

[Querystone Actor publisher on the Scrape.ly Store](https://scrape.ly/blog/author/querystone.md)

- Published

  Oct 23, 2026

- Reading time

  9 min read

![Pixel-art robot with an orange >\_ on its terminal head lifts a search result off a results page headed by the blue Bing logo and a search box, and drops it into a crate](https://scrape.ly/media/scrape-bing-search-results.png?w=1080)

To scrape Bing search results, send your queries to a scraper that loads Bing's public results pages in the market you pick and returns each page as structured data: organic results with their positions, titles, URLs, snippets and dates, plus related searches, People Also Ask and the top news story. The quickest way is the Bing Search Scraper on Scrape.ly. It costs $0.01 per 1,000 results pages plus platform usage, and it needs no Bing account, API key or proxy of your own.

This guide shows the fields you get, the no-code steps, the API (curl, Python, Node.js and MCP for AI agents), what a run costs and what to watch for. Everything comes from a real run on 23 October 2026: the German Bing market, one query, 10 results, 11 seconds.

## What data you can get from Bing

Each dataset item is **one Bing results page**, not one result. The organic results sit in a list inside that item, next to the page's other modules. A query with 10 results can span two or three pages, so it can produce two or three items.

| Field                                                | What it holds                                                                          |
| ---------------------------------------------------- | -------------------------------------------------------------------------------------- |
| `searchQuery.term`, `searchQuery.page`               | The query and the results page number                                                  |
| `searchQuery.marketCode`, `searchQuery.languageCode` | The Bing market (`setmkt`) and language (`setlang`) used                               |
| `searchQuery.url`                                    | The Bing URL that was fetched                                                          |
| `organicResults[].position`                          | Rank within the query; it counts on across pages                                       |
| `organicResults[].title`, `url`, `displayedUrl`      | Result title, destination and the breadcrumb Bing shows                                |
| `organicResults[].siteName`                          | The site name Bing prints above the title                                              |
| `organicResults[].description`, `date`               | The snippet, and the date Bing shows when there is one                                 |
| `organicResults[].sitelinks`                         | Sitelinks, when Bing shows them                                                        |
| `relatedSearches[]`                                  | Related searches, each with its text and Bing URL                                      |
| `peopleAlsoAsk[]`                                    | People Also Ask questions with the source URL                                          |
| `news[]`                                             | The top news story: title, URL, source, age and description                            |
| `resultsTotal`, `correctedQuery`, `hasNextPage`      | Bing's result count estimate, its spelling correction, and whether another page exists |

Related searches, People Also Ask and news are filled when **Include extras** (`includeExtras`) is on and Bing shows them for the query. Empty values are left out, so `date` or `sitelinks` only appear on results that have them.

## How to scrape Bing search results without code

1. Open the [Bing Search Scraper](https://scrape.ly/store/querystone/bing-search-scraper.md) in the Scrape.ly Store and sign in.
2. Pick a ready-made input. We ran the preset [German Bing results on electric cars, 10 results](https://scrape.ly/store/querystone/bing-search-scraper/presets/market-de-extras.md). "Try this input" opens it in the console.
3. Check the input. This is the exact JSON of our run:

```json
{
  "queries": ["elektroauto test"],
  "maxResultsPerQuery": 10,
  "marketCode": "de-DE",
  "includeExtras": true
}
```

4. Click **Start**. Our run finished in 11 seconds.
5. Open the **Organic results** view for one row per result, or the views for related searches, People Also Ask and news, and export as JSON, CSV, Excel or XML.

The fields that matter most:

- **`queries`** (required): one search term per line, or a full Bing URL. A URL's `q`, `setmkt`, `setlang` and `cc` are used for that line, so you can paste a search you built in the browser.
- **`maxResultsPerQuery`**: organic results per query (default 10). The Actor fetches as many pages as it needs and stops early when Bing runs out. The preset [Python tutorial search, 30 results](https://scrape.ly/store/querystone/bing-search-scraper/presets/deep-pagination.md) shows deep pagination.
- **`marketCode`** and **`languageCode`**: which Bing edition to search. 38 markets are available, from `en-US` and `en-GB` to `de-DE`, `ja-JP` and `pt-BR`. `countryCode` adds an optional country bias.
- **Operators**: `fileTypes`, `exactMatch`, `wordsInTitle` and `wordsInUrl` add `filetype:`, quotes, `intitle:` and `inurl:` to every query. `freshness` limits results to the past day, week or month.

Scrape.ly Store Bing Search Scraper Bing results in 38 markets: organic rankings with dates and sitelinks, related searches, People Also Ask and news. $0.01 per 1,000 results pages.

[Try it free](https://scrape.ly/store/querystone/bing-search-scraper.md) [Browse the Store](https://scrape.ly/store.md)

## How to scrape Bing search results with the API

Create an API token under **Settings → API & Integrations** and export it as `SCRAPELY_TOKEN`. The [Actors API docs](https://scrape.ly/docs/api-actors.md) list every endpoint.

**curl.** A query of a few pages takes seconds, well inside the 45-second limit of the synchronous endpoint. This call returns the results pages as a JSON array (add `?format=csv` for CSV):

```shell
curl -X POST "https://api.scrape.ly/v2/actors/querystone~bing-search-scraper/run-sync-get-dataset-items"
  -H "Authorization: Bearer $SCRAPELY_TOKEN"
  -H "Content-Type: application/json"
  -d '{"queries": ["elektroauto test"], "maxResultsPerQuery": 10, "marketCode": "de-DE", "includeExtras": true}'
```

**Python** (`pip install scrapely-client-python`). `call()` waits however long the run takes, which matters once you send hundreds of keywords. This example is a small rank check: it prints every result and the best position of one domain.

```python
import os
from scrapely_client import ScrapelyClient

client = ScrapelyClient(os.environ["SCRAPELY_TOKEN"], api_url="https://api.scrape.ly")

run = client.actor("querystone/bing-search-scraper").call(
    run_input={"queries": ["elektroauto test"], "maxResultsPerQuery": 10, "marketCode": "de-DE", "includeExtras": True}
)
print(run.status)  # SUCCEEDED, FAILED, ABORTED or TIMED-OUT
best = None
for page in client.dataset(run.default_dataset_id).iterate_items():
    for result in page["organicResults"]:
        print(result["position"], result.get("siteName"), result["url"])
        if "adac.de" in result["url"] and best is None:
            best = result["position"]
print("adac.de best position:", best)
```

The outer loop walks results pages (dataset items); the inner loop walks the organic results on each page.

**Node.js** (`npm install scrapely-client`):

```javascript
import { ScrapelyClient } from 'scrapely-client';

const client = new ScrapelyClient({ token: process.env.SCRAPELY_TOKEN, baseUrl: 'https://api.scrape.ly' });

const run = await client.actor('querystone/bing-search-scraper').call({
  queries: ['elektroauto test'],
  maxResultsPerQuery: 10,
  marketCode: 'de-DE',
  includeExtras: true,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
const results = items.flatMap((page) => page.organicResults);
console.log(results.map((r) => [r.position, r.siteName, r.url]));
console.log(items[0].relatedSearches?.map((s) => s.text));
```

**AI agents (MCP).** Add the hosted Scrape.ly MCP server. In Cursor, put this in `~/.cursor/mcp.json`:

```json
{
  "mcpServers": {
    "scrapely": {
      "url": "https://api.scrape.ly/mcp",
      "headers": { "Authorization": "Bearer YOUR_TOKEN" }
    }
  }
}
```

In Claude Code, run `claude mcp add --transport http scrapely https://api.scrape.ly/mcp` and sign in with `/mcp`. Then ask: "Use scrapely to run querystone/bing-search-scraper for 'best crm software' in en-US with 20 results, and give me a table of position, site and URL." The agent finds the Actor with `search-actors`, reads its input with `fetch-actor-details`, runs it with `call-actor` and reads the pages with `get-actor-output`. The [Bing Search API](https://scrape.ly/api/bing-search-api.md) page shows the same Actor as an API product.

## A real run: German Bing results for "elektroauto test"

We ran the preset on 23 October 2026. It saved 3 results pages holding exactly 10 organic results in 11 seconds of run time, and it was charged $0.0016 in total. The first five results:

| Page | Position | Title                                                         | Site        | Date shown   |
| ---- | -------- | ------------------------------------------------------------- | ----------- | ------------ |
| 1    | 1        | ADAC Test 2026: Die besten Elektroautos aller Fahrzeugklassen | ADAC        | 7. Okt. 2026 |
| 1    | 2        | Rankings: Die besten E-Autos 2026 im Test & Vergleich …       | AUTOBILD.DE | –            |
| 1    | 3        | Die besten E-Autos 2026: Modelle, Preise                      | mobile.de   | –            |
| 2    | 4        | E-Auto 2026: Testsieger, Reichweite & Zuverlässigkeit         | AutoScout24 | 28) Mai 2025 |
| 2    | 5        | E-Auto-Angebote: E-Auto-Leasing-Testsieger 2026 – CHIP        | CHIP        | –            |

What the full run shows:

- **Page 1 held only three blue links.** With extras on, Bing's full layout gave page 1 a news card and related searches but just three organic results, so the Actor took three pages to reach 10 and trimmed the last page to the cap. You still pay per page, which at $0.00001 a page is a rounding error.
- **Two publishers own four of the ten spots.** ADAC ranks at 1 and 6, AUTO BILD at 2 and 10.
- **Freshness is mixed.** Six results carry a date. The newest is from 13 October 2026, the oldest from 27 August 2014, still at position 7.
- **Keyword ideas come along.** Page 1 carried 10 related searches (such as "elektroauto testsieger" and "die besten e autos adac"), and the top news story came from BILD.de, two days old. Bing showed no People Also Ask box for this query.
- **Bing's estimate:** about 68,600 results on page 1.

The log, without the platform's start-up lines:

```plaintext
20261023T03:02:28.323Z [Scrapely] Container started (setup 5.7 s)
20261023T03:02:29.748Z [scrapely.actor] INFO  Started: 1 queries, up to 10 results each, residential proxy (market country)
20261023T03:02:32.837Z [scrapely.actor] INFO  Done: 3 pages, 10 results from 1 queries in 3s. traffic=2.3 MB wire=0.69 MB (p1 432 KB2, later 261 KB2) conns=2 early=0 retries=0 decoy=0 hedged=0 ajax=2 seeded=0 boot=0.3s
20261023T03:02:33.068Z [scrapely.actor] INFO  [Status message]: Done: 3 pages, 10 results from 1 queries in 3s.
20261023T03:02:33.562Z [Scrapely] Container state: status=exited exitCode=0 oomKilled=false
```

The scraping itself took 3 seconds; the rest was container start-up. `decoy=0` and `retries=0` mean every page Bing sent matched the query and the requested page number, so nothing had to be fetched again. The Actor used a residential exit in Germany, the market's country, without any proxy setting from us.

## What it costs

The Actor charges one event: **$0.00001 per results page**, which is $0.01 per 1,000 pages. A page holds about 10 organic results. Empty pages, errors and retries are free. Platform usage (compute and proxy traffic) is billed on top.

For our run: 3 pages × $0.00001 = $0.00003 in page fees. The run was charged $0.0016 in total: $0.0013 of residential proxy traffic, $0.00018 of compute and $0.00007 of storage writes. Proxy traffic is most of the bill, so cost scales with pages fetched. The Actor's README puts the total at roughly $0.0004–0.0005 per page on default settings, so 1,000 pages land between $0.40 and $0.50 all in. A datacenter proxy is cheaper if you only need first pages.

## What to watch out for when scraping Bing

- **Decoy pages.** Bing can answer automated requests with results for a different query. The Actor checks every page against your query, retries on a fresh IP and saves nothing (and charges nothing) when Bing keeps sending decoys. Such queries are listed under `failedInputs` in the run's `OUTPUT` record.
- **Later pages on datacenter IPs.** On datacenter proxies Bing sometimes answers every page request with page 1 again. Residential proxies, the default, paginate reliably, so keep the default for rank tracking beyond the top 10.
- **Fewer blue links per page.** Maps, shopping, video and news blocks replace organic results on some queries. Count `organicResults` instead of assuming 10 per page.
- **Organic results, not ads.** Bing loads ads with a script after the page, so the output holds the organic rankings. Bing also ignores `site:` for this kind of request; use `wordsInUrl` (`inurl:`), `filetype:`, `intitle:` or quotes instead, which all work.
- **Results move.** Bing varies results by location and between requests. For trends, run the same queries on a schedule and compare positions over time rather than trusting one snapshot.

## Is it legal to scrape Bing search results?

Bing results pages are public: the Actor reads what any visitor sees, without logging in. Bing's own rules for automated access are worth knowing, though. Its [robots.txt](https://www.bing.com/robots.txt) disallows `/search` for all user agents, and Microsoft's terms of use apply to how you use Bing, so read the current versions before you build a product on Bing data.

The results themselves are mostly titles, URLs and snippets of public web pages. Snippets belong to the sites that wrote them, so treat them as references, not content to republish. Results rarely contain personal data, but some name people; if you store those, privacy laws such as the GDPR and the CCPA apply. For rank tracking and market research on public results at a reasonable volume, those are the rules to follow. This is general information, not legal advice: for commercial use, ask a lawyer about your case.

## Why Scrape.ly for Bing data

- **The official API is gone.** Microsoft [retired the Bing Search APIs on August 11, 2025](https://learn.microsoft.com/en-us/lifecycle/announcements/bing-search-api-retirement). It points customers to Grounding with Bing Search in Azure AI Agents, a way for LLM agents to use web data in their answers, not a results export with positions.
- **Rows instead of selectors.** Typical Python tutorials parse `li.b_algo` with requests and BeautifulSoup, one page at a time with a generic user agent. The Actor handles pagination, 38 markets, decoy checks and residential exits, and returns positions, dates, related searches and news as fields.
- **The cheapest line on your bill.** $0.01 per 1,000 results pages, and the whole 10-result run above cost $0.0016. Set a maximum charge per run if you want a hard cap.
- **Built for tracking.** Schedule the same keyword list daily, send results to Google Sheets or a webhook, and run the same keywords on Google with the [Google Search Scraper](https://scrape.ly/store/querystone/google-search-scraper.md) to compare both engines. Our guide to [scraping Google search results](https://scrape.ly/blog/scrape-google-search-results.md) covers the Google side.

## FAQ

### Can you scrape Bing search results with Python?

Yes. The Python example above starts a run, waits for it and prints position, site and URL for each result. The Actor fetches and parses the pages, so your code only reads JSON. Install `scrapely-client-python` and pass your token.

### Can I still get Bing results from Microsoft's official API?

No. Microsoft retired the Bing Search APIs on August 11, 2025 and decommissioned existing instances. Its recommended replacement, Grounding with Bing Search, is part of Azure AI Agents and feeds web data into model answers rather than returning ranked result lists.

### How do I scrape Bing results for another country?

Set `marketCode`, for example `en-GB`, `de-DE` or `ja-JP`. The language follows the market unless you set `languageCode`, and the Actor uses a residential exit in the market's country by default. Our German run used a German exit without extra settings.

### How many Bing results can I get per query?

As many as Bing serves. Set `maxResultsPerQuery` and the Actor walks the pages until it has that many or Bing runs out. Each page is one dataset item and one $0.00001 event.

### Can I scrape Bing's related searches and People Also Ask?

Yes. Turn on `includeExtras`. Each page item then carries `relatedSearches`, `peopleAlsoAsk` (questions and source links) and the top `news` story whenever Bing shows them. Our run returned 10 related searches on page 1.

Scrape.ly Store Track your Bing rankings Run the German electric-car preset as-is, or paste your own keywords and pick any of 38 Bing markets. $0.01 per 1,000 results pages.

[Try it free](https://scrape.ly/store/querystone/bing-search-scraper.md) [Browse the Store](https://scrape.ly/store.md)

About the author

[Querystone](https://scrape.ly/blog/author/querystone.md) Actor publisher on the Scrape.ly Store

Search results, AI answers, web pages and market feeds as structured data. For SEO teams, developers and AI builders, plus finance, crypto and sports data for analysts. A Scrapely studio.

- [Website](https://scrape.ly/users/querystone.md)

Keep reading

## More in Tutorials

- [![Pixel-art robot with an orange >\_ on its terminal head pulls a product card with a photo and an orange price off a market stall with a striped awning, handmade goods on its counter and the orange Etsy logo on its sign, and drops it into a crate](https://scrape.ly/media/scrape-etsy.png?w=750)](https://scrape.ly/blog/scrape-etsy.md)
  ### [How to Scrape Etsy Data: Products, Prices and Shops](https://scrape.ly/blog/scrape-etsy.md)
  [Scrape Etsy by keyword or paste shop, category and listing URLs, and get each product as a row: price, sale price, shop name and rating, favorites, variations, photos and related searches. A real run, its cost, and code for curl, Python, Node.js and AI agents.](https://scrape.ly/blog/scrape-etsy.md)
- [![Pixel-art robot with an orange >\_ on its terminal head pulls a review card with five green rating bubbles out of a hotel tower whose sign shows the green Tripadvisor owl logo, and drops it into a crate](https://scrape.ly/media/scrape-tripadvisor.png?w=750)](https://scrape.ly/blog/scrape-tripadvisor.md)
  ### [How to Scrape Tripadvisor: Hotels, Restaurants, Attractions and Reviews](https://scrape.ly/blog/scrape-tripadvisor.md)
  [Scrape Tripadvisor hotels, restaurants and attractions by city or URL, then pull the reviews: ratings, rankings, prices, contacts, trip types and owner replies. Two real runs, their exact cost, and code for curl, Python, Node.js and AI agents.](https://scrape.ly/blog/scrape-tripadvisor.md)
- [![Pixel-art robot with an orange >\_ on its terminal head lifts an AI overview card marked with an orange sparkle off a search page headed by the Google G logo, where an AI answer panel sits above the results, and drops it into a crate](https://scrape.ly/media/scrape-google-ai-overviews.png?w=750)](https://scrape.ly/blog/scrape-google-ai-overviews.md)
  ### [How to Scrape Google AI Overviews and AI Mode Answers](https://scrape.ly/blog/scrape-google-ai-overviews.md)
  [Check which keywords trigger a Google AI Overview and get the answer text with every cited source, by country and language. Add AI Mode answers with brand and domain tracking. Real runs, real costs, and code for curl, Python, Node.js and AI agents.](https://scrape.ly/blog/scrape-google-ai-overviews.md)

## The internet is full of data. Start owning yours.

Scrape.ly gives you the infrastructure, the tooling, and the team to extract, process, and operationalize web data at any scale. Setup takes minutes. The advantage lasts forever.

[Get Started Free](https://my.scrape.ly/register) [Chat with Support](mailto:support@scrape.ly?subject=Question%20about%20Scrape.ly\&body=Hi%2C%20I%20have%20a%20question%20about%20Scrape.ly.)

No credit card. No setup calls.
