NestDaddy
Search API

Bing Search API is retired: how to get raw web and news results as JSON again

Microsoft shut down the Bing Search APIs on 11 August 2025. Its suggested replacement gives AI answers inside Azure agents, not raw results. Here is how to move web search, news search and page reading to NestDaddy, with code.

NestDaddy team · · 5 min read

On 11 August 2025 Microsoft retired the Bing Search APIs. Every existing Bing Web Search, News Search and Custom Search resource was switched off, and new sign-ups closed. If your app, scraper replacement, research tool or AI agent called api.bing.microsoft.com/v7.0/search, it stopped working that day.

This guide explains what Microsoft offers instead, why it does not fit many projects, and how to move your web search, news search and page reading to the NestDaddy API with a few lines of code.

What Microsoft offers instead

Microsoft's retirement notice points customers to Grounding with Bing Search, a tool inside Azure AI Agents. It lets a language model running in Azure use web results while it writes an answer.

That works if all you want is a chatbot answer inside Azure. It does not work if you need what the old API gave you:

  • Raw results as JSON: titles, URLs, snippets and dates you can store, rank, filter and show in your own UI.
  • Search outside Azure: from your own backend, a cron job, a data pipeline or any agent framework.
  • News search you can query by topic and country.

If that is your situation, you need a search API that returns plain results.

Map your Bing calls to NestDaddy

NestDaddy is an independent search engine with its own web index and its own news collection from 45+ countries. Its REST API returns plain JSON.

You used Use now Notes
Bing Web Search /v7.0/search?q= GET /api/v1/search?q= Results from NestDaddy's own index
Bing News Search /v7.0/news/search?q= GET /api/v1/news/search?q= Key words across 45+ countries, last 120 days
News by market (mkt=en-MY) country=MY on /api/v1/news/search or /api/v1/news/local Two-letter country codes
Trending or category news GET /api/v1/news/global, /tech, /financial Latest headlines with summaries
Fetching the page behind a result GET /api/v1/extract?url= Readable text of the page, without menus or ads
Bing Custom Search No direct equivalent NestDaddy searches its whole index, not a list of your sites

Authentication is one header: X-API-Key: YOUR_KEY (Bing used Ocp-Apim-Subscription-Key).

The old Bing call:

import requests

r = requests.get(
    "https://api.bing.microsoft.com/v7.0/search",
    headers={"Ocp-Apim-Subscription-Key": BING_KEY},
    params={"q": "python asyncio guide", "count": 10},
)
for item in r.json()["webPages"]["value"]:
    print(item["name"], item["url"], item["snippet"])

The same search on NestDaddy:

import requests

r = requests.get(
    "https://nestdaddy.com/api/v1/search",
    headers={"X-API-Key": NESTDADDY_KEY},
    params={"q": "python asyncio guide", "limit": 10},
)
for item in r.json()["results"]:
    print(item["title"], item["url"], item["snippet"])

Three things change: the URL, the key header, and the field names (name becomes title, and the list is results instead of webPages.value).

Bing News Search returned value items with name, url, description, datePublished and provider. NestDaddy news search returns results with title, url, description, published_timestamp and source_domain:

r = requests.get(
    "https://nestdaddy.com/api/v1/news/search",
    headers={"X-API-Key": NESTDADDY_KEY},
    params={"q": "interest rate", "country": "MY", "days": 7, "limit": 10},
)
data = r.json()
print(data["total"], "articles")
for a in data["results"]:
    print(a["published_timestamp"], a["title"], a["source_domain"], a["url"])

country takes a two-letter code (MY, SG, ID, US, GB and more), topic can be global, tech, financial or local, and days goes back up to 120.

Keep your old code: a small adapter

If many parts of your code expect Bing's response shape, wrap the new API once and keep the rest untouched:

import requests

NESTDADDY = "https://nestdaddy.com/api/v1"


def bing_like_web_search(query, count=10, key=None):
    """Return a dict shaped like Bing's /v7.0/search response, using NestDaddy."""
    r = requests.get(f"{NESTDADDY}/search", headers={"X-API-Key": key},
                     params={"q": query, "limit": count}, timeout=30)
    r.raise_for_status()
    return {"webPages": {"value": [
        {"name": x["title"], "url": x["url"], "snippet": x.get("snippet", "")}
        for x in r.json().get("results", [])
    ]}}


def bing_like_news_search(query, count=10, key=None, country=None):
    """Return a dict shaped like Bing's /v7.0/news/search response, using NestDaddy."""
    r = requests.get(f"{NESTDADDY}/news/search", headers={"X-API-Key": key},
                     params={"q": query, "limit": count, "country": country}, timeout=30)
    r.raise_for_status()
    return {"value": [
        {"name": a["title"], "url": a["url"], "description": a.get("description", ""),
         "datePublished": a.get("published_timestamp"),
         "provider": [{"name": a.get("source_domain", "")}]}
        for a in r.json().get("results", [])
    ]}

Swap your old function for these and most callers will not notice.

For AI agents: use the MCP server instead

If your Bing integration fed an AI agent, there is a simpler route. NestDaddy runs a remote MCP server at https://mcp.nestdaddy.com/mcp. Claude, Cursor, VS Code, n8n and any MCP client can connect to it, and the model calls web search, news search and page reading by itself. Setup takes one line or one config block: see How to give Claude live web search and news with one MCP server.

Test before you switch everything

Every search engine has a different index, and NestDaddy's is its own, not Bing's. Results for the same query will differ. Before you move production traffic:

  1. Run your 20 to 50 most common real queries through both your old logs and NestDaddy.
  2. Check that the results your users click are there.
  3. Move the queries that work, and keep an eye on the rest.

Each response includes a quota object (used, limit, remaining), so you can track usage from your own code.

Pricing and a free trial

One All-in-One key covers web search, news, page reading, research papers and the MCP server. Plans start at $9.99 a month for 10,000 calls, and there is a free 7-day trial with 5,000 calls. Details are on the NestDaddy MCP page and in the API docs.

Working examples in Python, JavaScript and curl are on GitHub: nestdaddy/nestdaddy-examples.

More guides