2026-09-10 · 11 min read
Cloudflare AI Search vs Algolia 2026: Markdown Sites
Cloudflare's managed RAG search is free during beta and it will index your own site. Here is what a Markdown publisher gives up by leaving Algolia, and the exact limits that decide it.
For most of the last decade, "add search to your site" meant one of two things: pay Algolia, or wire up a self-hosted index and babysit it forever. Static Markdown sites felt that choice most sharply, because the whole point of a static site is that there is no server to run a search backend on. So the search box either became a third-party paid dependency or it quietly did not exist.
In late August 2026, Cloudflare's AI Search documentation went into open beta, and it reframes that trade. It is a managed search service that connects to a website, an R2 bucket, or files you upload directly, indexes the content, and answers natural-language queries from a Workers binding, a REST API, a Python SDK, or a built-in MCP server. If you publish Markdown, the interesting part is not the vector search. It is that the entire retrieval layer now sits inside infrastructure you may already be paying for, and it is free while the beta lasts.
I spent a morning reading the actual limits page rather than the announcement, because the limits are where "free" usually turns out to be a trial. Then I mapped out what a swap would look like for a static Markdown site — the kind of site md2rich is built around. This is that write-up.
What AI Search actually is
Strip the marketing and AI Search is four things bolted together:
- Ingestion. It pulls content from a website it crawls, from an R2 bucket, or from files you upload to built-in storage powered by R2 and Vectorize.
- Indexing. It chunks the content and supports vector search, BM25 keyword search, and hybrid search that combines both. You choose the embedding, generation, reranking, and query-rewriting models.
- Retrieval. You query it by natural language from a Worker binding, the REST API, a Python SDK, or the dashboard.
- Exposure. You can attach it to a website through pre-built web components, or expose it as a public MCP endpoint that any agent can call.
That last piece is the one that makes this more than an Algolia clone. A traditional search product gives you an index and a query API. AI Search additionally hands you an MCP endpoint for free, which means the content you spent months writing becomes searchable by agents and IDE assistants without you writing an integration.
The limits page, read honestly
Here is the table that decides whether this is real, pulled from Cloudflare's Limits and pricing page last updated 2026-08-26:
| Limit | Workers Free | Workers Paid |
|---|---|---|
| AI Search instances per account | 100 | 5,000 |
| Files per instance | 100,000 | 1M (500K for hybrid search) |
| Max file size | 4 MB | 4 MB |
| Queries per month | 20,000 | Unlimited |
| Max pages crawled per day | 500 | Unlimited |
| Pages per crawl (discover type) | 100,000 | 100,000 |
| Max custom metadata fields | 5 per instance | 5 per instance |
Two lines in that table matter more than the rest. The first is 20,000 queries per month on the free plan. For a small publishing site that is effectively unlimited — it is roughly 650 queries a day, and most Markdown blogs do not see that. The second is 500 pages crawled per day, and this is the one that bites, because Cloudflare is explicit that website crawling is bounded by several limits at once and the lowest value wins:
A discover crawl accepts up to 100,000 pages, but the files per instance and maximum pages crawled per day limits also apply, so the number of pages you end up with is whichever of those values is lowest. On Workers Free, the daily limit of 500 pages is the binding one.
So on the free plan, a 3,000-page archive takes six days to fully index if you let it crawl. That is not a dealbreaker, but it changes the onboarding plan, and it is the kind of constraint the launch post conveniently skips. There is a limit increase request form, but the honest read is: under 500 pages, crawling is fine; over it, upload files instead.
Pricing, stated plainly
The pricing section is short enough to quote directly. During the open beta, AI Search is free within the plan limits. Storage, vector indexing, and the Browser Run usage that website crawling consumes are included, not billed separately. Workers AI and AI Gateway usage is still billed separately. And the commitment on cost predictability is unusually specific: pricing details will be communicated at least 30 days before any billing begins.
That is a real improvement over the historical model. Cloudflare notes that instances created before the move to managed infrastructure ran on services in your own account, so older invoices carried separate R2, Vectorize, Workers AI, AI Gateway, and Browser Run charges. If you had an early instance, the dedicated R2 bucket it created is no longer written to and can be deleted — worth a look if you are still paying storage for objects nothing reads.
The comparison to Algolia is therefore not per-query pricing against per-query pricing. It is "free during beta, bundled with an account you probably already have" against a metered search SaaS with record and operation tiers. For a site of a few hundred Markdown posts, that gap is the entire argument.
What a swap actually takes
Here is the concrete path, from Cloudflare's own docs, with the parts that matter for a static site. The CLI route creates an instance and starts indexing a domain you own:
npx wrangler ai-search create docs-search --type web-crawler --source example.com
npx wrangler ai-search stats docs-search
The stats command is how you watch indexing progress. If you would rather not crawl — which is the right call for a static Markdown site, given the 500-pages-per-day ceiling — create the instance with built-in storage and upload files directly:
npx wrangler ai-search create docs-search --type builtin
Then bind a Worker to the instance. In wrangler.jsonc that is three fields:
{
"ai_search_namespaces": [
{
"binding": "AI_SEARCH",
"namespace": "default",
"remote": true
}
]
}
And the search call inside the Worker is a single method. Cloudflare's "create a simple search engine" recipe returns filenames matching a query, and its two tuning notes are the useful part: disable query rewriting so the original user query is matched directly, and use small chunks — 256 tokens is usually enough — because the raw-query pattern performs better with tight chunks.
The MCP endpoint is the sleeper feature
This is where AI Search diverges from a pure Algolia replacement, and it is the reason a Markdown publisher should care. Every instance can expose a built-in MCP endpoint providing one search tool over your indexed content, so any MCP client or agent can search your knowledge base without custom code.
Enabling it is a dashboard switch: open the instance, go to Settings, then Public Endpoint, turn on Enable Public Endpoint, then turn on the MCP endpoint. Copy the host, and your MCP URL is that host plus /mcp:
https://<PUBLIC_ENDPOINT_ID>.search.ai.cloudflare.com/mcp
Connecting a client is a standard remote MCP server entry:
{
"mcpServers": {
"ai-search": {
"url": "https://<PUBLIC_ENDPOINT_ID>.search.ai.cloudflare.com/mcp"
}
}
}
One detail in the docs is easy to skip and expensive to get wrong: set the Tool Description under Settings, Public Endpoint. MCP clients read that field to decide when to call your tool. A vague description means your search never fires; a specific one — "search this site for Markdown publishing workflows and rich-text formatting" — is what makes an agent reach for it at the right moment. You can also gate the public endpoint behind Cloudflare Access so only authenticated users and agents can query it.
Two real Markdown-to-rich-text examples
The reason this matters for a Markdown writer specifically is the pipeline shape. AI Search indexes what you published. It does not help you get the draft out of your editor and into a platform's rich-text box. Those are separate problems, and keeping them separate is what makes the search swap low-risk.
Example one: a short post where the front matter and heading structure are what you want the index to see. Write it as plain Markdown on disk:
# Site search without a search backend
Static sites skip search because a static site has no server.
Cloudflare AI Search changes that: point it at your content,
and retrieval becomes a binding call instead of a product.
- [x] Write the post in Markdown
- [x] Publish the rendered HTML
- [ ] Index it with AI Search
- [ ] Convert the announcement to rich text with md2rich
The headings and list structure survive into the published page, which is what the crawler and the chunker both read. Convert the same source to rich text for the LinkedIn or X announcement with md2rich, and the task list and heading stay as a task list and a heading instead of collapsing into a paragraph of literal dashes.
Example two: the announcement post itself, which is the piece most people paste badly. A short Markdown file with a heading, a code block, and a link:
# We swapped Algolia for Cloudflare AI Search
The beta is free within plan limits, and the retrieval layer
now sits in the same account as the site.
Queries: 20,000/month on Free
Crawl budget: 500 pages/day on Free
File size cap: 4 MB
Read the limits before you migrate.
Both convert through md2rich entirely client-side — the site is a pure front-end tool with zero upload. That is the same principle AI Search applies on the retrieval side, except AI Search does run on Cloudflare's infrastructure once you opt in. Your drafts never have to. Write and convert locally; let the published, already-public page be the thing that gets indexed.
Where this does not fit yet
- It is beta, and the pricing is a promise, not a contract. Cloudflare commits to 30 days' notice before billing starts. That is better than most, but it is still a future price you have not seen.
- You can only crawl domains you onboarded. You cannot point it at someone else's site. For a Markdown publisher that is fine, but it rules out the "index the whole web for me" mental model.
- 500 pages per day on Free is the real ceiling. Under that, crawling just works. Over it, budget six days or switch to file uploads.
- Five custom metadata fields. If your filtering needs are elaborate — many facets, many fields — this is a hard cap, and metadata per vector is 10 KiB total including system overhead.
- Hybrid search halves your file ceiling. 1M files drops to 500K when you turn on hybrid search on Workers Paid. Worth knowing before you design around a number.
- Billing is split. AI Search itself is bundled, but Workers AI and AI Gateway are billed on their own meters. A busy generation workload is not free just because search is.
The bottom line
If you run a static Markdown site of a few hundred posts and you have been paying for hosted search, this is the first genuinely credible reason in years to reconsider. Twenty thousand free queries a month, indexing included, no separate vector database to operate, and a public MCP endpoint that makes your archive queryable by agents — that is a different product from an index-as-a-service.
If you run thousands of pages, read the crawl limit before you commit, and plan to upload files rather than let a crawler work through your archive at 500 pages a day. And treat the beta pricing as a placeholder that will change; the 30-day notice is your window to re-evaluate.
What does not change is the writing side. Search is how people find what you published; it is not how the draft gets written or how it lands in a platform's rich-text editor. Keep your Markdown source local, keep the conversion step client-side, and let the published page be the thing you index. Try md2rich to convert your next finished draft into rich text for LinkedIn, X Articles, Medium, or Notion.
Make it findable, then make it readable.
AI Search indexes the page you published; md2rich turns the finished Markdown into rich text for LinkedIn, X Articles, Medium, and Notion — all in your browser, nothing uploaded.
Try md2rich