Bing Search Results Scraper avatar

Bing Search Results Scraper

Pricing

from $1.38 / 1,000 item extracteds

Go to Apify Store
Bing Search Results Scraper

Bing Search Results Scraper

Export ranked organic Bing results by keyword and market for SEO rank tracking, domain visibility audits, and competitor research.

Pricing

from $1.38 / 1,000 item extracteds

Rating

0.0

(0)

Developer

Stas Persiianenko

Stas Persiianenko

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Categories

Share

Export Bing search results as clean, ranked organic records for recurring SEO rank tracking, competitor-result research, and domain visibility audits. Supply one or many queries and receive titles, resolved destination URLs, domains, snippets, organic positions, market settings, retrieval timestamps, and exact Bing source URLs.

The Actor uses Bing's public server-rendered search surface with a lightweight RSS fallback. It does not require a Microsoft API key, browser, or user account.

What can you do with this Bing search scraper?

  • Track where pages appear for a recurring keyword set.
  • Compare domains ranking across related search terms.
  • Audit whether a brand or product appears in Bing results.
  • Export result titles and snippets for content-gap research.
  • Feed ranked rows into a spreadsheet, database, dashboard, or agent.
  • Schedule the same input and compare datasets over time.

Each row retains its originating query and one-based organic position. The Actor produces snapshots; it does not claim to maintain rank history inside one run.

Who is it for?

SEO specialists can collect Bing positions for keyword portfolios without manually copying result pages.

Content and growth teams can inspect the pages and messaging Bing surfaces for commercial topics.

Competitive-intelligence teams can compare recurring result snapshots and detect newly visible domains.

Developers and data teams can integrate structured Bing results through the Apify API, webhooks, schedules, Make, Zapier, or MCP.

Why use this Actor?

Bing results are normalized into one stable dataset shape rather than raw HTML. Destination redirects are resolved where Bing exposes them, duplicate URLs are removed per query, and limits are enforced before result charges.

The Actor also records:

  • the requested Bing market;
  • the SafeSearch level;
  • the result page number;
  • the exact source URL;
  • the retrieval timestamp.

This evidence makes repeated exports easier to compare and audit.

Extracted Bing result fields

FieldTypeMeaning
querystringSearch term that produced the row
positionintegerOne-based organic position for that query
titlestringResult title shown by Bing
urlstringResolved destination URL
domainstringDestination hostname without leading www
snippetstring or nullBing's result description, when available
pageintegerOne-based Bing result page
marketstringLanguage-country market used for the request
safeSearchstringApplied SafeSearch level
sourceUrlstringExact Bing page or RSS URL fetched
retrievedAtISO date-timeTime the source page was retrieved

Only organic web results are emitted. Ads, image cards, maps, news modules, and People Also Ask panels are not represented as organic rows.

How to scrape Bing search results

  1. Open the Actor in Apify Console.
  2. Add one or more terms to Search queries.
  3. Choose the maximum results per query and total run limit.
  4. Select the Bing market and SafeSearch level.
  5. Click Start.
  6. Open the default dataset to download JSON, CSV, Excel, XML, or another supported format.

Start with 10–20 results per query when validating a new recurring workflow.

Input parameters

queries

Required list of 1–50 non-empty search terms. Duplicate terms are rejected so the same query is not charged twice accidentally. Each term can contain up to 300 characters.

Examples:

["bing search api", "serp api", "keyword research tool"]

Bing operators can be included, but Bing may interpret or ignore operators differently by market and over time.

maxResultsPerQuery

Maximum accepted organic rows for each query. Allowed range: 1–100. This is a cap, not a guarantee; Bing can expose fewer unique organic results.

maxItems

Run-wide cap across all queries. Allowed range: 1–1,000. The Actor stops accepting results as soon as this cap is reached.

market

Supported markets include en-US, en-GB, en-CA, en-AU, de-DE, fr-FR, es-ES, it-IT, nl-NL, and pt-BR.

The market influences language and localization, but rankings can still vary by time, index state, and Bing's own personalization logic.

safeSearch

Choose Off, Moderate, or Strict. The default is Moderate.

Example input: one keyword

{
"queries": ["bing search api"],
"maxResultsPerQuery": 10,
"maxItems": 10,
"market": "en-US",
"safeSearch": "Moderate"
}

Example input: competitor workflow

{
"queries": ["serp api", "keyword research tool", "Bing rank tracking"],
"maxResultsPerQuery": 10,
"maxItems": 30,
"market": "en-US",
"safeSearch": "Moderate"
}

Use an Apify schedule to rerun this input daily or weekly. Join snapshots by query and url, then compare position and retrievedAt outside the Actor.

Example output

A current local result for bing search api has this shape:

{
"query": "bing search api",
"position": 1,
"title": "Grounding with Bing | Microsoft Bing",
"url": "https://www.microsoft.com/en-us/bing/apis",
"domain": "microsoft.com",
"snippet": "Enhance your large language models with real-time, web-based insights.",
"page": 1,
"market": "en-US",
"safeSearch": "Moderate",
"sourceUrl": "https://www.bing.com/search?q=bing+search+api&first=1&count=10&setmkt=en-US",
"retrievedAt": "2026-09-11T06:14:21.321Z"
}

Bing can change text and ordering at any time, so this example demonstrates the schema rather than a promised current rank.

How much does it cost to scrape Bing organic results?

This Actor uses pay-per-event pricing: one small run-start charge plus one item event for every accepted organic result saved to the dataset. Duplicate, invalid, empty, or failed records are not charged as result items.

The current BRONZE prices are $0.0005 per run and $0.002304 per result. For example:

Use the BRONZE formula run start + result count × result price. For example, a 10-result run is the $0.0005 start event plus 10 item events at $0.002304 each; a 100-result run uses the same start event plus 100 item events. Your plan tier determines the exact event price shown in Console. Platform usage behavior and prices are visible before starting a paid run.

Reliability and retry behavior

The primary route requests Bing's server-rendered result HTML through an Apify datacenter proxy. A stable proxy identity is kept across pages for one query.

If Bing returns a verification page or an unrecognized HTML shape, the Actor tries Bing's public RSS representation for the same query. Network failures, proxy failures, HTTP 429, and temporary server failures are retried up to three times with exponential jitter and a fresh proxy identity.

The Actor fails visibly after retry exhaustion. It does not silently convert a challenge page into an empty successful dataset.

Pagination and result limits

Bing controls the number and composition of results on each page. Later pages can repeat earlier destinations. The Actor deduplicates URLs per query, so a request for 20 results can legitimately return fewer than 20 unique rows.

position reflects the accepted unique organic ordering in the dataset for each query. page records the source page that produced a row.

Recurring rank-tracking workflow

  1. Create a task with a stable query list, market, and SafeSearch setting.
  2. Add a daily or weekly schedule.
  3. Export or integrate each run's dataset.
  4. Match rows by query plus url.
  5. Compare position across retrievedAt snapshots.
  6. Alert in your own workflow when a tracked URL appears, disappears, or changes position.

Keeping the same inputs is important: changing market or SafeSearch can change the result set independently of organic ranking changes.

Domain visibility audit

Search for a real brand and topic, such as:

{
"queries": ["Apify web scraping platform"],
"maxResultsPerQuery": 10,
"maxItems": 10,
"market": "en-US",
"safeSearch": "Moderate"
}

Filter the resulting dataset by domain to see which pages Bing surfaced. A missing domain means it was not present in the collected snapshot, not that it is absent from Bing's entire index.

Export and integrations

The default dataset works with Apify's JSON, CSV, Excel, XML, RSS, and JSONL exports. Common patterns include:

  • send every completed dataset to a webhook;
  • append rows to Google Sheets through Make;
  • load JSONL into a warehouse;
  • compare scheduled-run datasets in Python;
  • trigger a downstream Actor through an integration;
  • let an agent retrieve current Bing evidence through MCP.

Run through the Apify API with cURL

Replace YOUR_TOKEN with your Apify API token:

curl -X POST \
"https://api.apify.com/v2/acts/automation-lab~bing-search-results-scraper/runs?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"queries": ["bing search api"],
"maxResultsPerQuery": 10,
"maxItems": 10,
"market": "en-US",
"safeSearch": "Moderate"
}'

Use the returned run ID to inspect status and retrieve the default dataset.

Run with JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/bing-search-results-scraper').call({
queries: ['bing search api'],
maxResultsPerQuery: 10,
maxItems: 10,
market: 'en-US',
safeSearch: 'Moderate',
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

Run with Python

import os
from apify_client import ApifyClient
client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("automation-lab/bing-search-results-scraper").call(run_input={
"queries": ["bing search api"],
"maxResultsPerQuery": 10,
"maxItems": 10,
"market": "en-US",
"safeSearch": "Moderate",
})
items = client.dataset(run["defaultDatasetId"]).list_items().items
print(items)

Use with MCP and AI agents

Add the Actor as an Apify MCP tool in Claude Code:

claude mcp add --transport http apify \
"https://mcp.apify.com?tools=automation-lab/bing-search-results-scraper"

Claude Desktop, Cursor, and VS Code setup

Claude Desktop, Cursor, and VS Code can use this equivalent remote MCP configuration:

{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com?tools=automation-lab/bing-search-results-scraper"
}
}
}

Example prompts:

  • "Search Bing US for bing search api and return the top 10 organic URLs."
  • "Compare the domains ranking for serp api and keyword research tool."
  • "Collect the first 20 Bing results for these keywords and group them by domain."

Legality and responsible use

Bing result pages are public, but you are responsible for complying with applicable laws, platform terms, and the rights of destination sites. Do not use the Actor to collect sensitive personal data, evade access controls, or make automated decisions about individuals.

Result snippets can quote third-party pages. Respect copyright, attribution, retention, and downstream-use obligations.

Limitations

  • Organic web results only; no ads, maps, news, images, or answer panels.
  • Rankings are snapshots and can differ by time, market, index, and source behavior.
  • Market selection does not guarantee city-level geolocation.
  • Bing can expose fewer unique rows than the requested maximum.
  • The RSS fallback can contain fewer results than the HTML page.
  • Snippets are nullable because some result cards omit them.
  • The Actor does not store historical snapshots or calculate rank changes itself.

Troubleshooting

The run returned fewer results than requested

The input is a maximum. Bing may expose a short page or duplicate URLs across pages. Inspect page, sourceUrl, and logs before increasing limits.

The run failed with a verification challenge

The Actor already retries with fresh proxy identities and uses the public RSS fallback. Retry later rather than launching many parallel runs, which can increase blocking.

Results differ from my browser

Confirm that market and safeSearch match your comparison. Browser location, cookies, experiment cohorts, and retrieval time can still affect ordering.

My input was rejected

Ensure queries is a non-empty array of unique strings, limits are integers within their documented ranges, and the market is one of the supported values.

FAQ

Does this use the paid Bing Search API?

No. It extracts the public Bing result representation and does not require an Azure or Microsoft API key.

Can I search multiple keywords in one run?

Yes. Add up to 50 unique queries and use maxItems as the total cap.

Can I schedule rank tracking?

Yes. Save the input as an Apify task and attach a schedule. Compare the separate datasets downstream using query, url, position, and retrievedAt.

Is every requested rank guaranteed?

No. Bing decides how many unique organic results are available and can change ordering at any time.

Are failed or duplicate results charged?

No result-item event is emitted for failed, rejected, duplicate, or empty records. The one-time run-start event still applies after valid input starts execution.