Bing Search Scraper avatar

Bing Search Scraper

Pricing

Pay per event

Go to Apify Store
Bing Search Scraper

Bing Search Scraper

Bing SERP scraper. Returns organic results (title, URL, displayed URL, snippet, position) for one or more queries. Drop-in alternative to the retired Bing Search API for SEO agencies, brand-monitoring tools, and AI agents.

Pricing

Pay per event

Rating

0.0

(0)

Developer

DevilScrapes

DevilScrapes

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

a day ago

Last modified

Categories

Share

Bing Search Scraper

Bing Search Scraper

We do the dirty work so your dataset stays clean. 😈

$1.05 / 1,000 SERP rows — drop-in alternative to the retired Bing Search API. Scrape Bing organic search results — title, URL, snippet, position, displayed URL — for one or more queries. Microsoft retired the official Bing Search API in August 2025, leaving SEO agencies, brand-monitoring tools, and AI agents shopping for a scraper-backed replacement. This Actor is that replacement: pure-HTTP, locale-aware, residential-proxy-backed, and priced for high-volume workloads.

One run with a list of 100 queries × 30 results returns 3,000 unified rows in under five minutes. No login. No API key. No browser automation. No Cloudflare challenge in the path we hit (verified live 2026-05-16).

🎯 What this scrapes

Bing's public www.bing.com/search SERP endpoint — the same page you'd see in a browser when you type a query into bing.com. Per query, the Actor:

  1. Issues GET https://www.bing.com/search?q=<query>&cc=<country>&setlang=<language>&count=10&first=<offset> via curl-cffi with rotating browser fingerprints (chrome131 / chrome124 / firefox147).
  2. Parses every <li class="b_algo"> block with parsel to extract title, snippet, displayed URL, and the redirect-wrapped href.
  3. Decodes the Bing redirect: bing.com/ck/a?...&u=a1<base64url> → canonical destination URL (no bing.com/ck/a URLs ever reach your dataset).
  4. Paginates via &first=0,10,20,... until maxResultsPerQuery rows are emitted or the page returns zero b_algo elements (whichever comes first).
FieldTypeDescription
querystringThe input search query that produced this row
positioninteger1-indexed organic rank within the query (across pages)
titlestringResult headline text
urlstringCanonical destination URL (decoded from bing.com/ck/a)
displayed_urlstring | nullBreadcrumb-style URL as Bing renders it (e.g. https://github.com › org › repo)
snippetstring | nullDescription excerpt shown under the result
countrystringISO-3166-1 alpha-2 country passed in (cc=)
languagestringISO-639-1 language passed in (setlang=)
scraped_atstringISO 8601 UTC timestamp of row creation

💡 Use cases

  • Bing Search API migration — Microsoft retired the official endpoint on August 11, 2025. If you still need Bing SERP data for client reports, AI search agents, or competitive intelligence, this is the drop-in replacement.
  • SEO rank tracking — schedule weekly runs across your target queries, write to a named dataset, and chart position over time per keyword × locale.
  • Brand monitoring — watch the top 30 organic results for branded queries (your brand, competitors, key product names) and alert on new entrants.
  • AI search agents — feed live SERP context into LLM agents that need fresher data than their training cutoff; Bing is a useful diversification from Google for retrieval pipelines.
  • Multi-locale SERP comparison — pass the same query with different cc= / setlang= values to compare what Bing shows in the US vs UK vs DE vs JP.
  • Content-gap analysis — pull the top 30 results for queries you want to rank for and reverse-engineer the average page structure.
  • Quality-assurance for Bing Webmaster Tools data — cross-check the impressions/positions Bing reports against what the SERP actually shows.

⚙️ How to use it

  1. Open the Actor input form.
  2. Enter at least one query in Queries (one row per (query × organic result)).
  3. (Optional) Set Country — ISO-3166-1 alpha-2 (default US; common: GB, DE, FR, JP, BR).
  4. (Optional) Set Language — ISO-639-1 (default en).
  5. (Optional) Set Max results per query — 1..100 (default 30; capped because Bing pagination quality degrades past page 5–7).
  6. Leave Use Apify Proxy on (default). Bing weights residential exits much more favourably than datacenter IPs.
  7. Click Start. Results stream into the default dataset.

Quick examples

One query, first page only (the QA fixture):

{
"queries": ["devilscrapes apify"],
"country": "US",
"language": "en",
"maxResultsPerQuery": 10,
"useProxy": true
}

Multi-query rank tracking (US, top 30 each):

{
"queries": [
"best web scraping tool",
"apify alternatives",
"bing search api replacement"
],
"country": "US",
"language": "en",
"maxResultsPerQuery": 30,
"useProxy": true
}

Multi-locale brand monitoring (top 20 in three markets):

{
"queries": ["devilscrapes"],
"country": "GB",
"language": "en",
"maxResultsPerQuery": 20,
"useProxy": true
}

(Run three times, swapping country / language, and merge the datasets on your side.)

📥 Input

FieldTypeRequiredDefaultDescription
queriesarray of stringsyesOne dataset row per (query × organic result). At least one query required.
countrystringnoUSISO-3166-1 alpha-2 country passed to Bing as cc=.
languagestringnoenISO-639-1 language passed to Bing as setlang=.
maxResultsPerQueryinteger 1..100no30Upper bound on organic results per query. Paginated in steps of 10.
useProxybooleannotrueRoute via Apify Proxy (BUYPROXIES94952 residential group).

📤 Output

One dataset row per (query × organic-result). Example record:

{
"query": "devilscrapes apify",
"position": 1,
"title": "DevilScrapes — Apify Actors for autonomous scraping",
"url": "https://apify.com/DevilScrapes",
"displayed_url": "https://apify.com › DevilScrapes",
"snippet": "Build, run, and monetize Apify Actors under the DevilScrapes brand.",
"country": "US",
"language": "en",
"scraped_at": "2026-05-16T13:40:00.000Z"
}

Download the dataset as JSON, CSV, Excel, or XML from the Export button on the run page.

💰 Pricing

Pay-Per-Event (PPE):

EventRate (USD)Trigger
actor-start$0.05Once per Actor run at boot
result-row$0.001Per organic SERP row pushed

A typical run (10 queries × 30 results = 300 rows) costs ~$0.35. Per-1,000-row extrapolation: $1.05. Intentionally priced below typical Google SERP scrapers to capture the migrant-from-Bing-Search-API audience.

🔥 Features

  • Drop-in replacement for the retired Bing Search API — same shape (query → list of organic results), no API key, no rate-limit ledger.
  • Locale-awarecc= / setlang= flow straight through to Bing; one Actor covers every market.
  • URL decodedbing.com/ck/a?...&u=a1<base64url> redirect wrappers are decoded to the canonical destination URL; your dataset never contains a Bing redirect.
  • Residential by default — Apify Proxy BUYPROXIES94952 group is enabled by default; Bing weights residential exits favourably.
  • Browser-TLS impersonation — rotating chrome131 / chrome124 / firefox147 fingerprints via curl-cffi; no Camoufox, no headless browser overhead.
  • Pydantic v2 validation — input and output are model-validated; invalid input fails fast with a clear error before any network call.
  • Per-query isolation — one query failing (zero results, network hiccup) does not abort the run; other queries continue and a partial-success status message is set.
  • Exponential backoff on 429 / 503 honouring Retry-After; max 5 attempts per page.
  • Early-stop on empty page — Bing stops returning organic results when you go too deep; we stop paginating instead of hammering empty pages.

Tips

  • For rank tracking, set maxResultsPerQuery to 30 or 50. Past page 5 (position 50+) Bing's organic results get noisier and less predictable.
  • For brand monitoring, set maxResultsPerQuery to 100 (the ceiling) so you catch new entrants deep in the SERP before they climb.
  • For AI agent retrieval, set maxResultsPerQuery to 10. The first page is what matters; latency stays under one second per query.
  • Stable across runs? Bing's SERP has some session-level personalization. Across consecutive runs from the same IP you'll see ~95% position stability for the top 10. The default proxy session_id randomization gives you a fresh exit each run.
  • Multi-locale: re-run the Actor per (country, language) pair and merge datasets on your side. We deliberately keep the input flat — one locale per run — so each row carries an unambiguous country / language field.

🚧 Limitations

  • Organic web results only — People-Also-Ask, Related Searches, news, images, videos, maps, and Bing's local pack are out of scope for v1.
  • Featured snippets are not extracted as a separate field — when Bing's featured snippet sits inside a <li class="b_algo"> block (it often does), it appears as a regular row. There is no is_featured flag in v1.
  • Up to 100 results per querymaxResultsPerQuery is capped at 100. Past page 10 Bing's organic results become highly unreliable.
  • No JavaScript rendering — we hit the server-rendered HTML directly. If Bing moves to a fully client-rendered SERP in the future, we'd need to switch to Camoufox; the current path is verified working as of 2026-05-16.
  • Country / language are passed to Bing, not validatedcc= / setlang= are interpolated raw into the URL. Pass a value Bing doesn't recognize and you'll silently get default results. Stick to standard ISO codes.
  • No historical tracking built in — every run is a fresh snapshot. Schedule runs and export to your own storage (BigQuery, S3, named Apify dataset, etc.) to build a time series. Apify's default run-scoped storage is purged after 7 days on the free plan.

❓ FAQ

Why scrape Bing instead of using the official Search API? Microsoft retired the Bing Search API on August 11, 2025. There is no longer an official endpoint. This Actor hits the public SERP that any browser hits and parses the same HTML you'd see by hand.

Is this allowed? The Actor sends well-formed HTTP requests to a public, unauthenticated endpoint and parses the publicly visible HTML. It respects HTTP retry semantics (429 / 503 / Retry-After). Your obligation as the user is to comply with Bing's Terms of Service in your jurisdiction — this Actor does not bypass any login, captcha, or paywall.

Why is position 1-indexed? That's how every SEO tool, rank tracker, and BI dashboard counts. Position 1 = the first organic result, period. It makes the data drop straight into spreadsheets without an off-by-one fix.

Why are the URLs decoded? Can I get the original bing.com/ck/a href? No — v1 always decodes. The redirect wrapper is a click-tracking detail Bing uses for analytics; it adds no information your downstream workflow can use. Keeping URLs canonical means your url column joins cleanly with any other dataset keyed on URL.

What about People-Also-Ask boxes? Out of scope for v1. Opening as a feature request — if there's demand, v2 will add an opt-in extractPaa: true input field that adds a separate kind: "paa" row per question.

Does this work for non-English locales? Yes. setlang=de / setlang=ja / setlang=fr etc. all flow through to Bing. The parser is purely structural (li.b_algo blocks); it does not depend on English text patterns.

Why the rotating browser fingerprints? curl-cffi impersonates real browser TLS+H2 fingerprints. Rotating across chrome131 / chrome124 / firefox147 per page reduces correlation between consecutive requests, which lowers the chance Bing flags a paginated burst as bot traffic.

Do I need the Apify Proxy? Strongly recommended. Bing weights residential IPs much more favourably than datacenter IPs, especially for paginated bursts. The default is ON; turn it off only if you want to use your own proxy stack.

💬 Your feedback

Found a parser that broke after a Bing SERP markup change? Want a new feature (PAA boxes, news vertical, location targeting)? Open an issue on the Actor's Apify Store page or contact us at apify.com/DevilScrapes. We monitor publish-day QA failures and ship patches the same week.