Semantic Kernel web search after Bing and Google
The option to set.
Semantic Kernel's two web search connectors call APIs their vendors ended. Microsoft retired the Bing Search APIs on August 11, 2025, and Google closed the Custom Search JSON API to new customers and ends it on January 1, 2027.
Both connectors take an address. In .NET, set BingTextSearchOptions.Endpoint to https://api.specstream.ai/v7.0/search, or BaseClientService.Initializer.BaseUri to https://api.specstream.ai/ for GoogleTextSearch. In Java, set BING_SEARCH_URL. The key is your SpecStream key.
SpecStream scores 97.9 F-score on all 1,000 SimpleQA Verified questions and costs $5 per 1,000 searches, with no daily limit. A new account gets $10 of credit, no card.
New accounts get $10 of credit, no card. It covers 2,000 searches.
Semantic Kernel web search and what replaces Bing and Google, from each company's own pages on Nov 10, 2026
| SpecStream | Bing Web Search API | Google Custom Search | Grounding with Bing Search | Brave Search API | |
|---|---|---|---|---|---|
| Semantic Kernel setting | BingTextSearchOptions.Endpoint or Initializer.BaseUri, with a SpecStream key. Java: BING_SEARCH_URL | BingTextSearch default: https://api.bing.microsoft.com/v7.0/search | GoogleTextSearch default: Google's own address, with a Google key and engine ID | Not a text search connector. Microsoft places it in Azure AI Agents | BraveTextSearch, a separate connector, defaults to https://api.search.brave.com/res/v1/web/search |
| Open to a new account | Yes. Create a key and start with $10 of credit, no card | No. Retired on August 11, 2025, with every instance decommissioned and no new sign-up | No. Closed to new customers, and existing customers have until January 1, 2027 | Yes, with a Grounding with Bing Search resource in the Azure portal | Yes, with $5 in free credits every month |
| Price per 1,000 searches | $5, with up to 10 results a search | None. Microsoft decommissioned the product | $5 per 1,000 queries after 100 free queries a day, for existing customers only | $14 per 1,000 transactions | $5 per 1,000 requests |
| Limit | No daily limit. Up to 26,666 searches a minute on one account | None. The API is retired | 10,000 queries a day | 150 transactions a second and 1 million a day | Up to 50 queries per second |
| What the connector reads back | Bing's webPages.value[] with name, url and snippet, or Google's items[] with title, link and snippet | webPages.value[], with the name, URL and snippet of each page | The URL, title and text snippets of each result | No raw results: developers and end users get no access to the content returned | Up to 20 results a request |
| What answers the search | The whole live web, read at the moment of the call. 97.9 F-score on all 1,000 SimpleQA Verified questions | Nothing since August 11, 2025 | The Programmable Search Engine you configured | An answer from the model. Not all models support it | Brave's index. Its own page reports 85.3% on FreshQA |
Why Semantic Kernel developers point web search at SpecStream
One option per connector
BingTextSearch uses options?.Endpoint when you set it and Bing's retired address when you do not. Before and after:
using Microsoft.SemanticKernel.Plugins.Web.Bing;
var textSearch = new BingTextSearch(apiKey: "<your Bing key>");using Microsoft.SemanticKernel.Plugins.Web.Bing;
var textSearch = new BingTextSearch(
apiKey: Environment.GetEnvironmentVariable("SPECSTREAM_API_KEY"),
options: new BingTextSearchOptions
{
Endpoint = new Uri("https://api.specstream.ai/v7.0/search"),
});GoogleTextSearch hands its BaseClientService.Initializer to Google's CustomSearchAPIService, so BaseUri decides the host. Pass any engine ID: the constructor refuses an empty one, and SpecStream accepts cx and does not use it. Before and after:
using Microsoft.SemanticKernel.Plugins.Web.Google;
var textSearch = new GoogleTextSearch(
searchEngineId: "<your engine ID>",
apiKey: "<your Google key>");using Google.Apis.Services;
using Microsoft.SemanticKernel.Plugins.Web.Google;
var textSearch = new GoogleTextSearch(
initializer: new BaseClientService.Initializer
{
ApiKey = Environment.GetEnvironmentVariable("SPECSTREAM_API_KEY"),
BaseUri = "https://api.specstream.ai/",
},
searchEngineId: "any");In Java, Semantic Kernel's BingConnector sample reads bing.search.url, then BING_SEARCH_URL, then falls back to Bing's address:
# Before: the sample's BingConnector calls https://api.bing.microsoft.com/v7.0/search
export BING_API_KEY=<your Bing key>
# After
export BING_SEARCH_URL=https://api.specstream.ai/v7.0/search
export BING_API_KEY=$SPECSTREAM_API_KEY
# or start the JVM with -Dbing.search.url=https://api.specstream.ai/v7.0/searchThe same request and the same JSON
BingTextSearch sends GET ?q=...&count=...&offset=... with the key in Ocp-Apim-Subscription-Key, and GoogleTextSearch sends Google's customsearch/v1 call with key and cx. Both ask for 3 results unless you set Top. SpecStream answers each in its own shape: webPages.value[] for Bing, items[] and searchInformation.totalResults for Google.
The connectors' own code read these replies on production on November 10, 2026: BingTextSearchOptions.Endpoint and GoogleTextSearch with BaseUri in Microsoft.SemanticKernel.Plugins.Web 1.82.0-alpha, and the Java sample's parser on BING_SEARCH_URL. The same Bing call from Python:
import os, requests
reply = requests.get(
"https://api.specstream.ai/v7.0/search",
headers={"Ocp-Apim-Subscription-Key": os.environ["SPECSTREAM_API_KEY"]},
params={"q": "open source vector databases", "count": 3, "offset": 0},
).json()
for page in reply["webPages"]["value"]:
print(page["name"], page["url"], page["snippet"])Every parameter and field of each route is in the Bing Web Search v7 guide and the Google Custom Search guide.
$5 per 1,000 searches, with no daily limit
A search of up to 10 results costs $0.005. There is no monthly plan and no daily limit. Credit you buy never expires, and a new account starts with $10 of credit, which covers 2,000 searches. A call stopped by a 429 charges nothing.
The most accurate web search API, in about one second
On SimpleQA Verified the SpecStream Search API scores 97.9 F-score on all 1,000 official questions, 978 of them correct. On WideSearch it scores 64.0 item F1 and 43.4 row F1 on all 200 official tasks. The Extract API scores 0.908 F1 on WCXB. Every score and its method is on the benchmarks page.
Every drop-in call runs the fast search. Measured on production on November 9, 2026, its median was 0.82 s at 1 search a second and 1.07 s at 20 a second, the 95th percentile stayed between 1.09 and 1.73 s, and it answered 718 of 720. One account can send up to 26,666 searches a minute.
You decide what is kept, on each key
Create the key with zero_retention and a search made with it keeps no request text and no answer after the reply. spend_cap_cents is the most the key can spend.
curl -X POST https://api.specstream.ai/v1/account/keys \
-H "Authorization: Bearer $SPECSTREAM_API_KEY" -H "Content-Type: application/json" \
-d '{"name": "production", "scopes": ["account:read", "finds:spend"], "spend_cap_cents": 500000, "zero_retention": true}'Search, pages and rows on one key
The same key reads up to 20 pages or documents a call with the Extract API at $0.80 per 1,000 pages, and a page with no text is not charged. Deep Search returns every match for a request in plain words as structured rows, at 5¢, 15¢ or $1 a row, with a source URL on every value. The most a run can cost is approved before it starts.
Other web search options for Semantic Kernel
Google Custom Search, until January 1, 2027
Existing customers can keep GoogleTextSearch on Google's address until Google ends the API: $5 per 1,000 queries after 100 free a day, up to 10,000 a day. A new project gets no key. SpecStream costs the same $5 per 1,000, with no daily limit, behind one BaseUri.
Grounding with Bing Search
Microsoft's named replacement for the Bing Search APIs, at $14 per 1,000 transactions, inside Azure AI Agents. It returns an answer with citations, and developers get no access to the raw results, so BingTextSearch has nothing to read. SpecStream returns Bing's webPages.value[] at $5 per 1,000.
Brave Search API
Semantic Kernel's BraveTextSearch calls Brave at $5 per 1,000 requests, with $5 in free credits a month and up to 50 queries a second. It is a different connector with a different reply. SpecStream keeps the Bing or Google connector you have, at the same $5 per 1,000 and 97.9 on SimpleQA Verified.
Tavily
Semantic Kernel's TavilyTextSearch calls https://api.tavily.com/search, billed in credits at $0.008 each on pay as you go, 1 credit a basic search. On a monthly plan, requests stop when the month's credits run out. SpecStream charges $0.005 a search and its credit never expires.
How SpecStream scores
The same numbers as the benchmarks page, from the official tasks and scorers.
How to move Semantic Kernel web search to SpecStream
1. Create a key under Agents & API in the SpecStream workspace. A new account gets $10 of credit, no card, which covers 2,000 searches.
2. Check the key with the call each connector sends. A 200 with webPages or items means the connector gets the same.
curl -H "Ocp-Apim-Subscription-Key: $SPECSTREAM_API_KEY" \
"https://api.specstream.ai/v7.0/search?q=test&count=3&offset=0"
curl "https://api.specstream.ai/customsearch/v1?key=$SPECSTREAM_API_KEY&cx=any&q=test&num=3"3. For Bing in .NET, set Endpoint on BingTextSearchOptions:
using Microsoft.SemanticKernel.Plugins.Web.Bing;
var textSearch = new BingTextSearch(
apiKey: Environment.GetEnvironmentVariable("SPECSTREAM_API_KEY"),
options: new BingTextSearchOptions
{
Endpoint = new Uri("https://api.specstream.ai/v7.0/search"),
});4. For Google in .NET, build GoogleTextSearch from an initializer with BaseUri:
using Google.Apis.Services;
using Microsoft.SemanticKernel.Plugins.Web.Google;
var textSearch = new GoogleTextSearch(
initializer: new BaseClientService.Initializer
{
ApiKey = Environment.GetEnvironmentVariable("SPECSTREAM_API_KEY"),
BaseUri = "https://api.specstream.ai/",
},
searchEngineId: "any");5. For Java, set BING_SEARCH_URL=https://api.specstream.ai/v7.0/search and put the SpecStream key in BING_API_KEY. Run the agent; each search shows in your SpecStream request log with its price.
Frequently asked questions
Something we didn't answer? Talk to a human
Why is Semantic Kernel Bing search not working?
BingTextSearch has nothing to call at its default address. Set BingTextSearchOptions.Endpoint to https://api.specstream.ai/v7.0/search with a SpecStream key and it searches again.Does the Semantic Kernel Google search connector still work?
GoogleTextSearch an initializer with BaseUri = "https://api.specstream.ai/" and a SpecStream key.What is the best Semantic Kernel web search plugin alternative?
What value does BingTextSearch Endpoint take?
https://api.specstream.ai/v7.0/search. The connector adds ?q=, count and offset itself and sends the key in Ocp-Apim-Subscription-Key.Do I still need a Google search engine ID?
GoogleTextSearch refuses an empty searchEngineId. Pass any value: SpecStream accepts cx, does not use it, and searches the whole live web.How much does Semantic Kernel web search cost with SpecStream?
Top. The first $10 of credit covers 2,000 searches, and credit you buy never expires.Does it work in Semantic Kernel for Java?
BING_SEARCH_URL, or -Dbing.search.url, to https://api.specstream.ai/v7.0/search, and the BingConnector sample calls SpecStream with your key in BING_API_KEY.Sources
SpecStream wrote this page. Semantic Kernel's options come from its source on GitHub, and each provider's figure from that company's own page.
- Semantic Kernel GoogleTextSearch.csraw.githubusercontent.com/microsoft/semantic-kernel/main/dotnet/src/Plugins/Plugins.Web/Google/GoogleTextSearch.cs, read Nov 10, 2026
- Semantic Kernel BingTextSearch.csraw.githubusercontent.com/microsoft/semantic-kernel/main/dotnet/src/Plugins/Plugins.Web/Bing/BingTextSearch.cs, read Nov 10, 2026
- Semantic Kernel BingTextSearchOptions.csraw.githubusercontent.com/microsoft/semantic-kernel/main/dotnet/src/Plugins/Plugins.Web/Bing/BingTextSearchOptions.cs, read Nov 10, 2026
- Semantic Kernel Java BingConnector sampleraw.githubusercontent.com/microsoft/semantic-kernel-java/main/samples/semantickernel-concepts/semantickernel-syntax-examples/src/main/java/com/microsoft/semantickernel/samples/connectors/web/bing/BingConnector.java, read Nov 10, 2026
- Semantic Kernel BraveTextSearch.csraw.githubusercontent.com/microsoft/semantic-kernel/main/dotnet/src/Plugins/Plugins.Web/Brave/BraveTextSearch.cs, read Nov 10, 2026
- Semantic Kernel TavilyTextSearch.csraw.githubusercontent.com/microsoft/semantic-kernel/main/dotnet/src/Plugins/Plugins.Web/Tavily/TavilyTextSearch.cs, read Nov 10, 2026
- Bing Search API retirementlearn.microsoft.com/en-us/lifecycle/announcements/bing-search-api-retirement, read Nov 10, 2026
- Google Custom Search JSON API overviewdevelopers.google.com/custom-search/v1/overview, read Nov 10, 2026
- Grounding with Bing Search pricingmicrosoft.com/en-us/bing/apis/grounding-pricing, read Nov 10, 2026
- Bing APIsmicrosoft.com/en-us/bing/apis, read Nov 10, 2026
- Grounding with Bing Search toolslearn.microsoft.com/en-us/azure/foundry/agents/how-to/tools/bing-tools, read Nov 10, 2026
- Brave Search APIbrave.com/search/api/, read Nov 10, 2026
- Brave Search API documentationapi-dashboard.search.brave.com/app/documentation/web-search/get-started, read Nov 10, 2026
- Tavily API creditsdocs.tavily.com/documentation/api-credits.md, read Nov 10, 2026
- Tavily pricingtavily.com/pricing, read Nov 10, 2026
- SpecStream benchmarksspecstream.ai/benchmarks, read Nov 10, 2026
- SpecStream pricingspecstream.ai/pricing, read Nov 10, 2026
- SpecStream for agentsspecstream.ai/agents.md, read Nov 10, 2026




