How to Scrape Bing Search Results with a SERP API
Learn how to scrape Bing search results with a SERP API using Python. Extract titles, URLs, snippets, ranking positions, domains, and metadata for SEO, AI agents, RAG workflows, and competitor monitoring.
To scrape Bing search results with a SERP API, send a search query with parameters such as keyword, location, language, device, and result page. The API returns structured SERP JSON, which you can parse to extract titles, URLs, snippets, ranking positions, domains, and search metadata.
This is useful for SEO monitoring, competitor tracking, AI agents, RAG source discovery, brand visibility checks, and market research.
Instead of building your own scraper, browser automation, proxy rotation, CAPTCHA handling, and parser logic, a SERP API gives you a cleaner workflow:
Search query
→ SERP API request
→ Bing SERP JSON
→ Extract organic results
→ Store results in CSV, database, dashboard, or AI pipeline
Talordata’s documentation lists Bing Search as a supported SERP API query-parameter workflow, including localization and geographic targeting options. Its product page also positions SERP API as structured real-time search data across Google and major engines, with JSON / HTML output and geo-targeted SERP data.
What Data Can You Collect from Bing SERP?
A Bing SERP API response usually focuses on structured search result fields.
For organic results, the most useful fields are:
|
Field |
Meaning |
|
|
Ranking position in Bing search results |
|
|
Search result title |
|
|
Destination URL |
|
|
Website domain |
|
|
Search result summary |
|
|
Displayed URL or breadcrumb |
|
|
Date signal, if available |
|
|
Query, location, language, device, and page context |
Depending on the provider and query type, Bing SERP data may also include related searches, news results, images, videos, ads, local results, or other visible search modules.
For SEO and AI workflows, the key is not only whether the API returns data. The key is whether the data is clean, stable, and easy to parse.
Basic Request Parameters
Most Bing SERP API workflows need a few core parameters.
|
Parameter |
Why It Matters |
|
|
The keyword or search phrase |
|
|
Defines Bing as the target search engine |
|
|
Controls country, region, or city context |
|
|
Controls localized search experience |
|
|
Separates desktop and mobile-style results |
|
|
Controls pagination |
|
|
Controls result count, if supported |
|
|
JSON or HTML response format |
A provider-agnostic request body may look like this:
{
"engine": "bing",
"query": "best project management software",
"location": "United States",
"language": "en",
"device": "desktop",
"page": 1,
"output": "json"
}
You can test this kind of workflow with tools like SerpApi, SearchAPI, Bright Data, or Talordata. The important part is whether the response gives you clean fields your SEO tool, AI agent, or data pipeline can use directly.
Example Bing SERP JSON
A simplified Bing SERP JSON response may look like this:
{
"search_parameters": {
"engine": "bing",
"query": "best project management software",
"location": "United States",
"language": "en",
"device": "desktop",
"page": 1
},
"organic_results": [
{
"position": 1,
"title": "Best Project Management Software of 2026",
"link": "https://example.com/project-management-software",
"snippet": "Compare project management tools for teams, pricing, integrations, and workflows."
},
{
"position": 2,
"title": "Top Project Management Tools for Small Businesses",
"link": "https://example.com/small-business-tools",
"snippet": "A practical guide to choosing project management software for small teams."
}
],
"related_searches": [
"project management software for startups",
"project management tools comparison",
"free project management software"
]
}
In most workflows, organic_results is the first array you should parse.
Python Example: Send a SERP API Request
The exact endpoint and authentication method depend on your provider. The structure below keeps the example provider-neutral.
import os
import requests
SERP_API_KEY = os.getenv("SERP_API_KEY")
SERP_API_ENDPOINT = os.getenv("SERP_API_ENDPOINT")
params = {
"engine": "bing",
"query": "best project management software",
"location": "United States",
"language": "en",
"device": "desktop",
"page": 1,
"output": "json"
}
headers = {
"Authorization": f"Bearer {SERP_API_KEY}"
}
response = requests.get(
SERP_API_ENDPOINT,
params=params,
headers=headers,
timeout=30
)
response.raise_for_status()
serp_json = response.json()
print(serp_json)
In production, keep your API key in environment variables or a secret manager. Do not hard-code it into frontend code or public repositories.
Extract Titles, Links, and Snippets
After receiving Bing SERP JSON, parse the organic results.
from urllib.parse import urlparse
def get_domain(url: str | None) -> str:
if not url:
return ""
parsed = urlparse(url)
return parsed.netloc.replace("www.", "") if parsed.netloc else ""
def clean_text(value: str | None) -> str:
if not value:
return ""
return " ".join(value.split())
def extract_bing_organic_results(serp_json: dict) -> list[dict]:
organic_results = serp_json.get("organic_results", [])
extracted = []
for index, item in enumerate(organic_results, start=1):
link = item.get("link") or item.get("url")
result = {
"position": item.get("position") or index,
"title": clean_text(item.get("title")),
"link": link or "",
"domain": get_domain(link),
"snippet": clean_text(item.get("snippet") or item.get("description"))
}
if result["title"] and result["link"]:
extracted.append(result)
return extracted
Usage:
results = extract_bing_organic_results(serp_json)
for result in results:
print(result["position"], result["title"], result["link"])
This gives you a clean list of Bing organic results that can be stored, exported, or passed into another workflow.
Add Search Metadata
A ranking position without context is not very useful.
For SEO tracking, always store query, engine, location, language, device, page, and timestamp when available.
def add_search_metadata(results: list[dict], serp_json: dict) -> list[dict]:
params = serp_json.get("search_parameters", {})
for result in results:
result["query"] = params.get("query") or params.get("q") or ""
result["engine"] = params.get("engine") or "bing"
result["location"] = params.get("location") or ""
result["language"] = params.get("language") or ""
result["device"] = params.get("device") or ""
result["page"] = params.get("page") or ""
return results
This makes the data easier to compare later.
For example, the same keyword may rank differently across countries, languages, or devices. Without metadata, you will not know which market the ranking came from.
Export Bing SERP Results to CSV
CSV is useful for SEO review, reporting, spreadsheet analysis, and simple data handoff.
import csv
def save_results_to_csv(results: list[dict], filename: str = "bing_serp_results.csv") -> None:
fieldnames = [
"query",
"engine",
"location",
"language",
"device",
"page",
"position",
"title",
"link",
"domain",
"snippet"
]
with open(filename, mode="w", newline="", encoding="utf-8") as file:
writer = csv.DictWriter(file, fieldnames=fieldnames)
writer.writeheader()
writer.writerows(results)
results = extract_bing_organic_results(serp_json)
results = add_search_metadata(results, serp_json)
save_results_to_csv(results)
The output CSV can be imported into Google Sheets, Excel, a BI dashboard, or your own SEO database.
Common Use Cases
SEO Rank Tracking
Bing may not have the same search volume as Google, but it still matters for many industries, especially when teams want broader search visibility across multiple engines.
Useful fields include:
|
Field |
SEO Use |
|
|
Track ranking movement |
|
|
Check result presentation |
|
|
Identify ranking URL |
|
|
Monitor competitors |
|
|
Review search messaging |
|
|
Compare markets |
|
|
Separate device context |
Competitor Monitoring
A Bing SERP API can help you check which competitors appear for important keywords.
You can track:
-
competing domains
-
ranking changes
-
snippet changes
-
new pages entering the SERP
-
brand visibility by market
AI Agents and RAG
AI agents can use Bing SERP JSON as a source discovery layer.
A typical workflow looks like this:
User question
→ Generate Bing query
→ Get SERP JSON
→ Extract titles, links, snippets, and domains
→ Filter sources
→ Fetch selected pages
→ Generate grounded answer
The agent should not fetch every URL. It should first filter results based on title, snippet, domain, and relevance.
FAQ
What is a Bing SERP API?
A Bing SERP API is an API that returns Bing search results in a structured format, usually JSON or HTML. It helps developers collect titles, URLs, snippets, ranking positions, domains, and search metadata without building their own scraper.
Can I scrape Bing search results with Python?
Yes. You can use Python to call a SERP API, receive Bing SERP JSON, parse organic_results, and export fields such as title, link, snippet, position, and domain.
What fields should I store from Bing SERP JSON?
For SEO and data workflows, store query, engine, location, language, device, page, timestamp, position, title, link, domain, and snippet.
Is Bing SERP data useful for AI agents?
Yes. Bing SERP data can help AI agents discover sources, compare domains, filter snippets, and choose pages to fetch before generating grounded answers.
Final Thoughts
Scraping Bing search results with a SERP API is mainly about turning search pages into clean, structured data.
Start with the basics: query, location, language, device, and page. Start free testing
Then extract the fields your workflow needs: position, title, link, domain, and snippet.
For SEO, this helps track rankings and competitors. For AI agents and RAG, it helps discover sources before fetching full pages. For market research, it helps compare search visibility across topics, brands, and regions.
The best workflow is simple: send a targeted Bing query, receive structured SERP JSON, normalize the fields, store metadata, and test the same query across locations or engines when comparison matters.