<!-- twin of https://specstream.ai/web-search/semantic-kernel -->
# Semantic Kernel web search after Bing and Google: the option to set

Compared on Nov 10, 2026. The page: https://specstream.ai/web-search/semantic-kernel

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.

[Get an API key](https://specstream.ai/signup?src=alternatives-web-search-semantic-kernel&utm_source=alternatives-md&utm_campaign=web-search-semantic-kernel&returnTo=%2Fworkspace%2Fagents%3Ftab%3Dkeys) 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/search
```

### The 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](https://specstream.ai/migrate/bing-web-search-v7?utm_source=alternatives&utm_campaign=web-search-semantic-kernel) and the [Google Custom Search guide](https://specstream.ai/migrate/google-custom-search?utm_source=alternatives&utm_campaign=web-search-semantic-kernel).

### $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](https://specstream.ai/benchmarks?utm_source=alternatives&utm_campaign=web-search-semantic-kernel) 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](https://specstream.ai/extract-api?utm_source=alternatives&utm_campaign=web-search-semantic-kernel) at $0.80 per 1,000 pages, and a page with no text is not charged. [Deep Search](https://specstream.ai/deep-search?utm_source=alternatives&utm_campaign=web-search-semantic-kernel) 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 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

### Why is Semantic Kernel Bing search not working?

Microsoft retired the Bing Search APIs on August 11, 2025 and decommissioned every instance, so `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?

Only until January 1, 2027, and only for existing customers: Google closed the Custom Search JSON API to new customers. Give `GoogleTextSearch` an initializer with `BaseUri = "https://api.specstream.ai/"` and a SpecStream key.

### What is the best Semantic Kernel web search plugin alternative?

SpecStream, at $5 per 1,000 searches with no daily limit and 97.9 F-score on all 1,000 SimpleQA Verified questions. It answers the Bing and Google connectors you already have, so your plugin code stays.

### What value does BingTextSearch Endpoint take?

The full search address: `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?

Yes, `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?

$0.005 a search of up to 10 results, or $5 per 1,000; both connectors ask for 3 results unless you set `Top`. The first $10 of credit covers 2,000 searches, and credit you buy never expires.

### Does it work in Semantic Kernel for Java?

Yes: set `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.cs](https://raw.githubusercontent.com/microsoft/semantic-kernel/main/dotnet/src/Plugins/Plugins.Web/Google/GoogleTextSearch.cs), read Nov 10, 2026
- [Semantic Kernel BingTextSearch.cs](https://raw.githubusercontent.com/microsoft/semantic-kernel/main/dotnet/src/Plugins/Plugins.Web/Bing/BingTextSearch.cs), read Nov 10, 2026
- [Semantic Kernel BingTextSearchOptions.cs](https://raw.githubusercontent.com/microsoft/semantic-kernel/main/dotnet/src/Plugins/Plugins.Web/Bing/BingTextSearchOptions.cs), read Nov 10, 2026
- [Semantic Kernel Java BingConnector sample](https://raw.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.cs](https://raw.githubusercontent.com/microsoft/semantic-kernel/main/dotnet/src/Plugins/Plugins.Web/Brave/BraveTextSearch.cs), read Nov 10, 2026
- [Semantic Kernel TavilyTextSearch.cs](https://raw.githubusercontent.com/microsoft/semantic-kernel/main/dotnet/src/Plugins/Plugins.Web/Tavily/TavilyTextSearch.cs), read Nov 10, 2026
- [Bing Search API retirement](https://learn.microsoft.com/en-us/lifecycle/announcements/bing-search-api-retirement), read Nov 10, 2026
- [Google Custom Search JSON API overview](https://developers.google.com/custom-search/v1/overview), read Nov 10, 2026
- [Grounding with Bing Search pricing](https://www.microsoft.com/en-us/bing/apis/grounding-pricing), read Nov 10, 2026
- [Bing APIs](https://www.microsoft.com/en-us/bing/apis), read Nov 10, 2026
- [Grounding with Bing Search tools](https://learn.microsoft.com/en-us/azure/foundry/agents/how-to/tools/bing-tools), read Nov 10, 2026
- [Brave Search API](https://brave.com/search/api/), read Nov 10, 2026
- [Brave Search API documentation](https://api-dashboard.search.brave.com/app/documentation/web-search/get-started), read Nov 10, 2026
- [Tavily API credits](https://docs.tavily.com/documentation/api-credits.md), read Nov 10, 2026
- [Tavily pricing](https://tavily.com/pricing), read Nov 10, 2026
- [SpecStream benchmarks](https://specstream.ai/benchmarks), read Nov 10, 2026
- [SpecStream pricing](https://specstream.ai/pricing), read Nov 10, 2026
- [SpecStream for agents](https://specstream.ai/agents.md), read Nov 10, 2026
