Bing Search Scraper – SERP Results avatar

Bing Search Scraper – SERP Results

Pricing

$0.60 / 1,000 organic results

Go to Apify Store
Bing Search Scraper – SERP Results

Bing Search Scraper – SERP Results

Scrape Bing organic search results for any keyword. Get rank, URLs, domains, snippets, dates, sitelinks and SERP features across 50 countries with pagination.

Pricing

$0.60 / 1,000 organic results

Rating

0.0

(0)

Developer

DataScraperES

DataScraperES

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

Bing Search Scraper

Run the Actor on Apify

Get structured Bing organic web-search results for one or many keywords. The Actor returns each result as a separate dataset row with its rank, title, destination URL, domain, snippet, date (when Bing shows one), sitelinks, rich facts and optional SERP features.

It is intended for Bing web search research: it does not scrape Bing Images, News, Maps, Copilot chats or logged-in/private content.

Who is it for?

  • SEO teams tracking Bing rankings by keyword and country.
  • Competitor researchers comparing domains and result-page visibility.
  • Content and topic researchers discovering related searches, questions and answer cards.
  • Analysts and developers building reproducible SERP datasets for reporting or downstream workflows.
  • Lead-research teams finding public websites that match targeted commercial searches.

What the Actor does

  • Runs from 1 to 1,000 unique search queries in one run.
  • Localizes results to one of 50 countries. You select a country code; the Actor selects the matching Bing market automatically.
  • Retrieves 1–20 Bing pages per query, subject to a maximum of 50 unique organic results per query.
  • Decodes Bing redirect links where possible, so url contains the destination instead of a Bing tracking link.
  • Removes duplicate organic URLs between pages.
  • Optionally extracts query-level SERP modules: result-count text, related searches, People Also Ask links, answer cards, knowledge-panel summary and ads.
  • Writes progress incrementally and a SUMMARY record at the end of the run.

Quick start

  1. Open Bing Search Scraper on Apify.
  2. Enter one or more terms in Search queries.
  3. Select the Search country where you want Bing results localized.
  4. Set the desired number of pages and maximum results per query.
  5. Click Start. When the run finishes, open the Dataset tab to export JSON, CSV, Excel, JSONL, XML or RSS.

Example input:

{
"queries": [
"best project management software",
"web scraping tools"
],
"country": "US",
"pagesPerQuery": 2,
"maxResultsPerQuery": 20,
"safeSearch": "Moderate",
"includeSerpFeatures": true,
"includeAds": false
}

Input reference

FieldTypeRequiredDefaultAccepted valuesDescription
queriesstring[]Yes1–1,000 items; each query up to 500 charactersSearch terms to run. Blank entries and duplicate terms are discarded before processing.
countrystringNoUSOne of the 50 country codes listed belowCountry used to localize Bing results and interface.
pagesPerQueryintegerNo11–20Maximum Bing result pages to retrieve for each query. Retrieval can finish earlier; see Pagination.
maxResultsPerQueryintegerNo101–50Maximum number of unique organic results returned for each query across all pages.
safeSearchstringNoModerateStrict, Moderate, OffBing SafeSearch setting.
includeSerpFeaturesbooleanNotruetrue or falseAdds optional query-level SERP modules from the first fetched page.
includeAdsbooleanNofalsetrue or falseAdds ads to serpFeatures.ads. Ads never appear as organic-result rows. Only relevant when includeSerpFeatures is enabled.

Supported countries

CodeCountryCodeCountryCodeCountryCodeCountry
USUnited StatesESSpainGBUnited KingdomDEGermany
FRFranceITItalyCACanadaMXMexico
BRBrazilAUAustraliaJPJapanINIndia
NLNetherlandsPLPolandTRTurkeyKRSouth Korea
IDIndonesiaARArgentinaCOColombiaSESweden
CHSwitzerlandATAustriaBEBelgiumDKDenmark
FIFinlandNONorwayIEIrelandPTPortugal
CZCzechiaRORomaniaHUHungaryGRGreece
ILIsraelSASaudi ArabiaAEUnited Arab EmiratesZASouth Africa
NZNew ZealandSGSingaporeMYMalaysiaTHThailand
VNVietnamPHPhilippinesTWTaiwanHKHong Kong
CNChinaCLChilePEPeruUYUruguay
ECEcuadorVEVenezuela

Pagination and result limits

pagesPerQuery controls how far the Actor may paginate. maxResultsPerQuery controls how many unique organic rows it can return. For example, setting 10 pages and 20 results lets the Actor inspect pages until it has 20 unique results, but never returns more than 20.

Pagination stops early when any of these conditions is reached:

  • The requested maximum result count has been reached.
  • A page contains no new organic URLs after de-duplication.
  • Bing returns a request error.
  • The query time budget is reached.
  • The configured number of pages has been processed.

The stop reason is exposed as paginationStoppedReason in every output row for that query.

Output

The default dataset contains two record types.

1. Organic result rows

Every delivered organic result is one row with type: "organicResult". These are the rows used for billing and export.

{
"type": "organicResult",
"query": "web scraping tools",
"queryId": "a stable query identifier",
"country": "US",
"market": "en-US",
"pagesRequested": 2,
"pagesFetched": 2,
"paginationStoppedReason": "max_results_reached",
"organicResultsFound": 20,
"page": 1,
"position": 1,
"title": "Example search-result title",
"url": "https://example.com/page",
"sourceDomain": "example.com",
"displayUrl": "https://example.com/page",
"description": "Snippet text shown by Bing.",
"date": null,
"sitelinks": [{"title": "Example subpage", "url": "https://example.com/subpage"}],
"richFacts": ["Optional fact shown by Bing"],
"serpFeatures": {
"estimatedResultsText": "About 1,000 results",
"relatedSearches": [],
"peopleAlsoAsk": [],
"answerCards": [],
"knowledgePanel": {"title": null, "description": null}
},
"fetchedAt": "2026-07-13T12:00:00+00:00"
}
FieldDescription
query / queryIdOriginal normalized query and its stable identifier within the run.
country / marketSelected country and Bing locale used, for example US and en-US.
page / positionBing page number and 1-based organic position on that page.
title, url, sourceDomain, displayUrl, description, dateMetadata displayed by Bing. date may be null when Bing does not show one.
sitelinks / richFactsOptional extensions that Bing shows below an organic result.
serpFeaturesOptional query-level modules from the first page. The same value is attached to each organic row for convenient exports.
pagesRequested, pagesFetched, paginationStoppedReason, organicResultsFoundQuery-level pagination diagnostics.
fetchedAtUTC timestamp when the query was processed.

2. Query-status rows

If a query produces no chargeable organic results, the Actor writes one free row with type: "queryStatus". It includes resultCount: 0, page diagnostics in pages, the stop reason and a structured error object when one exists. These rows make empty results and request failures visible without mixing them into the organic export.

SERP features

When includeSerpFeatures is true, serpFeatures can contain the following optional fields. They depend on what Bing renders, so an empty list or null is normal.

FieldContent
estimatedResultsTextText of Bing's displayed result estimate.
relatedSearchesRelated-search links, with title and url.
peopleAlsoAskLinks found in Bing's People Also Ask area, with title and url.
answerCardsAnswer-card title, description and URL when available.
knowledgePanelKnowledge-panel title and description when available.
adsSponsored-result title, URL and description. Included only when includeAds is true.

Run summary

The default Key-Value Store keeps a SUMMARY record, linked from the Actor output. It contains counters for requested, started, succeeded, failed, empty, organic_results_found, organic_results_delivered, organic_results_charged, skipped_by_budget, persistence_failures and stop_requested, plus chargedEventName and updatedAt.

Pricing

$1 per 1,000 organic results delivered ($0.001 each).

One delivered organicResult dataset row is one billable event. Run starts, result pages, retries, empty queries, failed queries and queryStatus rows are not charged separately. The Actor checks the Apify spending limit before starting additional paid work; it may leave remaining queries pending when the configured budget cannot cover another result.

Use through the Apify API

Use the Actor identifier datascraperes/bing-search-scraper in SDKs, or datascraperes~bing-search-scraper in REST endpoints. Replace YOUR_APIFY_TOKEN with an Apify API token and keep it private.

cURL

The synchronous endpoint waits for the run, then returns default-dataset items:

curl --request POST \
"https://api.apify.com/v2/acts/datascraperes~bing-search-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
--header "Content-Type: application/json" \
--data '{
"queries": ["best crm software"],
"country": "GB",
"pagesPerQuery": 2,
"maxResultsPerQuery": 20
}'

Python

from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("datascraperes/bing-search-scraper").call(
run_input={
"queries": ["best crm software"],
"country": "GB",
"pagesPerQuery": 2,
"maxResultsPerQuery": 20,
}
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)

JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('datascraperes/bing-search-scraper').call({
queries: ['best crm software'],
country: 'GB',
pagesPerQuery: 2,
maxResultsPerQuery: 20,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

Reliability, data quality and responsible use

  • Transient request failures are retried up to three times with exponential backoff and jitter.
  • A query has a bounded processing time, so one slow Bing response cannot hold a run indefinitely.
  • Completed query data is persisted incrementally and the Actor handles Apify migration events gracefully.
  • Bing controls the result layout and content. Titles, snippets, dates, SERP modules and ranks can differ between runs and some optional fields can be empty.
  • The Actor does not solve CAPTCHAs, bypass access controls or access private content.
  • You are responsible for using exported data lawfully and in accordance with Bing's applicable terms, policies and data-protection obligations.

Troubleshooting

SituationWhat to check
Fewer results than requestedBing may have fewer unique results, duplicate URLs may have been removed, or pagination may have stopped early. Check paginationStoppedReason and pagesFetched.
No date, sitelinks or SERP modulesThese fields are only available when Bing displays them for that query and market.
A query has queryStatus instead of resultsInspect its pages and error fields. The row is diagnostic and is not an organic, billable result.
The run stops before all queriesReview the run's spending limit and the SUMMARY record, particularly skipped_by_budget.
Different results than a browser sessionResults can vary by time, country, Bing experiment and SafeSearch setting. Use the same input values for comparable runs.

Local development

The published Actor is intended to be run from Apify. For contributors, the project requires Python 3.11+ and a BING_PROXY_URL environment variable configured with an HTTP proxy URL.

python -m venv .venv
.venv\Scripts\Activate.ps1
pip install -r requirements.txt
$env:BING_PROXY_URL = "http://user:password@host:port"
python -m pytest -q

Support

For questions or support, contact the Actor developer through the Apify Actor page.