> ## Documentation Index
> Fetch the complete documentation index at: https://docs.keenable.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# LibreChat

> Keenable is the keyless search provider and content scraper built into LibreChat's web search.

*Search provider and content scraper*

Keenable ships inside [LibreChat](https://github.com/danny-avila/LibreChat)'s web-search pipeline as both a **search provider** and a **content scraper** — the only entry in either category that needs no key.

→ [View the change on GitHub](https://github.com/danny-avila/LibreChat/pull/15288)

LibreChat authenticates three categories for web search: a provider, a scraper, and a reranker. Every other provider and scraper requires an account; rerankers all do. Keenable fills the first two keylessly, and the `None` reranker choice completes the stack — so web search works on a fresh LibreChat install with no signup for any of the three.

<Note>
  Merged to `dev` on 2026-08-27, after `v0.8.8-rc1` — available now in the `librechat-dev` Docker images, and in the next tagged release. The backend package [`@librechat/agents`](https://www.npmjs.com/package/@librechat/agents) carries the provider since 3.2.58 and the scraper since 3.3.5.
</Note>

## Setup

### Pin the keyless stack for every user

In `librechat.yaml`:

```yaml theme={"system"}
webSearch:
  searchProvider: keenable
  scraperProvider: keenable
  rerankerType: none          # rerankers all require a key; 'none' skips reranking
  keenableSearchOptions:
    maxResults: 5             # 1-20 (default 8)
    # site: example.com       # restrict search to a single domain
```

That is the whole setup — no key for any category. An optional `KEENABLE_API_KEY` in `.env` lifts the rate limit; `KEENABLE_API_URL` and `KEENABLE_FETCH_URL` override the endpoints.

### Or let each user pick it

Leave the providers unpinned and every user can save the same keyless combination themselves: in the agent search dialog, choose **Keenable** as the search provider and the scraper, and **None** as the reranker. The selection persists without a key.

### Mixing categories

Each category is configured independently, so Keenable search with a Firecrawl scraper works, and so does the reverse — another provider's search with the Keenable scraper:

```yaml theme={"system"}
webSearch:
  searchProvider: searxng
  searxngInstanceUrl: '${SEARXNG_INSTANCE_URL}'
  scraperProvider: keenable
  rerankerType: none
```

<Note>
  Set `KEENABLE_API_KEY` to authenticate — this removes the hourly request cap. Without a key, calls run on the shared public tier at [lower rate limits](/rate-limits).
</Note>
