SEO TOOLSWEBAI API MCP READY

Bing Search API

The largest non-Google search surface, returned as clean rows. Each result carries page, position, title, snippet, the real destination URL rather than a tracking redirect, and a date when Bing shows one. City-level location, market and country targeting, three device views, and optional ad rows at no extra cost. Billing is per page rather than per result, because Bing's organic depth swings between two and ten results on the same page.

RECORDS10
MEDIAN LAGon demand
PARAMETERS8
TOTAL USERS3
MONTHLY ACTIVE2
TOTAL RUNS30
SUCCESS (30D)100.0%
RATINGno ratings yet
LAST MODIFIED2026-08-08
PUBLISHED2026-08

Input parameters

PARAMETERTYPEREQDEFAULTDESCRIPTION
query string yes The search term. Bing operators work, so 'site:example.com pricing' behaves as you would expect.
max_pages integer no 1 Pages to fetch, and the billing unit: one charge per page whatever that page holds. — drives your bill
include_ads boolean no false Also return paid placements, marked with resultType 'ad'. They are already on the page you paid for, so they add no cost.
country string no Two letter country code. Cannot be combined with market; market wins if both are set.
market string no A language and country pair such as en-US. More precise than country because it sets the result language too.
location string no City to search from, such as 'Seattle, Washington'. This is the control for local rank tracking.
safe_search enum no Moderate Adult content filter: moderate filters adult text, strict removes adult content, off applies no filter.
device enum no desktop Device to emulate. Rankings differ between desktop and mobile, so pick the one you actually track.

Worked examples

Basic — one page, cheapest possible run
{
  "query": "web scraping tools",
  "max_pages": 1
}
Local rank check — city plus device is the rank-tracking shape
{
  "query": "plumber near me",
  "location": "Seattle, Washington",
  "device": "mobile"
}
Competitor ads — ad rows cost nothing extra
{
  "query": "crm software",
  "include_ads": true,
  "max_pages": 2
}
Site audit — Bing operators work as written
{
  "query": "site:example.com",
  "max_pages": 5
}
POWER-USER TIP
Per page, and that is deliberate — Bing gives no page-size control and its organic depth swings from about two results on a commercial query to ten on an informational one. A per-result price cannot cover a two-result page, so the page is the honest unit. Every result on a charged page is returned in full.
POWER-USER TIP
Country and market do not stack — Setting both country and market is not additive; market wins, because it pins the result language as well as the region. Pick market when you care about language, country when you only care about the region.

Coverage

3
device views — desktop · mobile · tablet
3
safe search levels — moderate · strict · off
3
targeting controls — country · market · city location

Tasks

Saved runs with the inputs already filled in — each one a standalone page and a working configuration example.

Request a task →

Code

curl

curl -X POST "https://api.apify.com/v2/acts/johnvc~bing-search-api/run-sync-get-dataset-items" \
  -H "Authorization: Bearer $APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"query":"web scraping tools","max_pages":1}'

Python

from apify_client import ApifyClient

client = ApifyClient("APIFY_TOKEN")
run = client.actor("johnvc/bing-search-api").call(
    run_input={"query": "web scraping tools", "max_pages": 1}
)
for row in client.dataset(run.default_dataset_id).iterate_items():
    print(row.get("position"), row.get("title"), row.get("url"))

What people use it for

Alternatives