Usage-Based vs Cluster Pricing for Search: Which Actually Wins?
Usage pricing wins below roughly half a million selective searches a month — about 17,000 a day — and wins by a wide margin whenever traffic is spiky, seasonal, or split across indexes that sit idle. A rented node wins above that line, because once you have paid its floor, the next query is free. The whole decision is one division: your monthly search volume against the floor you would otherwise be renting.
The two models, stated plainly
Almost every managed search product bills one of two ways, and the plan names obscure more than they reveal.
- Rent a cluster. A node (or three) runs around the clock and you pay by the hour whether anyone searches or not. Elastic Cloud, AWS OpenSearch, Typesense Cloud and Meilisearch Cloud all work this way. Fixed floor, near-zero marginal cost per query — until you outgrow the node and step up a size.
- Pay per use. No machine to size; you are metered on the searches you run and the bytes you keep. Algolia works this way, and so does altengine. No floor, but every query is on the meter.
Those are different cost curves, not different prices. One is a horizontal line with a step in it; the other starts at zero and slopes up. They cross somewhere, and the only useful question is which side of the crossing your workload sits on.
What a search actually costs on altengine
Build the per-query number from the rate card rather than guessing at it. Search bills on four axes: queries, reads, writes, and stored data.
- Queries — $0.50 per 10,000. Flat, per search request. That is $0.00005 a search, cached or not.
- Reads — $1.00 per million, where one read covers up to 100 rows examined. A selective query — fielded filters over indexed values — examines a page's worth of rows and costs a read or two, so add about $0.000002. A repeated identical query is served from cache and bills zero reads: just its query.
- Writes — $2.50 per million rows written. Putting a document writes its row plus its index rows, so this is your initial load and your update rate, not your query traffic.
- Stored data — $0.80 per GB-month, covering documents and their index together.
So a typical selective search costs about $0.000052, or $0.52 per 10,000. That one number drives everything below.
monthly search cost = searches × $0.000052
monthly storage cost = GB stored × $0.80
one-off load cost = index rows written × $0.0000025
(documents + their index rows)
total bill = (search + storage + writes) − $3.00 free, floored at $0Where the curves cross
Here is the search-traffic side of the bill at a range of volumes, before storage and before the free $3:
| Searches per month | Per day | altengine cost |
|---|---|---|
| 10,000 | ~330 | $0.52 |
| 100,000 | ~3,300 | $5.20 |
| 250,000 | ~8,300 | $13.00 |
| 500,000 | ~17,000 | $26.00 |
| 1,000,000 | ~33,000 | $52.00 |
| 2,000,000 | ~67,000 | $104.00 |
Now put the floors beside it. The figures below are the smallest running configuration of each service at the list prices we collected in July 2026 — one small node, single zone, no redundancy. Divide the floor by $0.000052 and you get the volume at which usage pricing stops being cheaper:
| If your alternative floor is | Crossover volume | Searches per day |
|---|---|---|
| ≈ $22 (small Typesense Cloud node) | ~420,000 | ~14,000 |
| ≈ $26 (small AWS OpenSearch node) | ~500,000 | ~17,000 |
| $30 (Meilisearch Cloud Build) | ~580,000 | ~19,000 |
| ≈ $95 (small Elastic Cloud cluster) | ~1,800,000 | ~61,000 |
Two honest adjustments in opposite directions. Those floors buy a single node with no replica — add redundancy and the floor roughly doubles, pushing the crossover out with it. Against that, altengine's numbers here are search traffic only; a real bill adds storage, and a 2 GB index is another $1.60 a month. Both corrections are small relative to the gap at either end of the table, which is the point: near the crossover the two models cost about the same, and the choice should be made on shape, not on price.
Where cluster pricing genuinely wins
Three cases, and they are real ones:
- High, steady volume against a modest index. At 5 million searches a month, a small node you are keeping busy is far cheaper than the meter. You are buying hardware and saturating it, which is exactly what hourly pricing is for. Note that 5 million searches a month is under 2 per second on average — plenty of apps at that volume are already renting the node they need.
- Unselective queries you cannot avoid. altengine meters reads by rows examined, so a broad scan pays for the rows it touches. On a rented node, the cost of a badly-shaped query is latency, not money — the machine is already paid for. If your workload is inherently scan-heavy, the meter notices and the node does not.
- Constant full reindexing. Writes bill per row, and a document costs its own row plus its index rows. Rebuilding a large index nightly is a recurring charge on a usage model and a background chore on a rented one.
The flip side of the second point is worth saying too: on a rented node, an expensive query is still expensive — you just pay for it in headroom and in the size of the next node you buy, rather than on a line item. Metering makes that cost visible. Visible is better, but it is not free.
Where usage pricing wins
- Spiky or seasonal traffic. A node is sized for your peak and billed for your trough. A meter charges for the peak and nothing for the trough.
- Many indexes, most of them quiet. There is no idle cluster to keep running: an index you are not querying costs only its storage. Per-tenant indexes, an archive you search twice a month, a staging environment that matches production — each of those is a fraction of a cent on a meter and a whole second node on a floor.
- Small and early. The first $3.00 of usage each month is free for every organization, shared across every service, and there is no card to start. At $0.52 per 10,000 searches, that covers roughly 55,000 searches and a small index before you pay anything — and the arithmetic for small catalogs specifically is in our post on cheap search for small apps.
- Storage that grows faster than traffic. Bytes are linear at $0.80 per GB-month. A node's capacity is a step function: fine, fine, fine, then a size up and a new floor.
Deciding in five minutes
Pull three numbers out of your current logs and do the arithmetic yourself:
- Searches per month. Multiply by $0.000052. If most of your traffic is a small set of repeated popular queries, use $0.00005 instead — cached repeats bill the query and no reads.
- Gigabytes stored. Documents plus index, times $0.80. If you only know your raw content size, budget roughly 2–3× it once the full-text index is counted.
- Documents written per month. Rows written times $0.0000025, remembering a put writes the document row plus its index rows.
Add them, subtract $3, and compare with the floor you are renting or about to rent. If the answer is close, pick on operational shape — whether you want to size, patch and scale a cluster at all — because at the crossover the money is a wash. If the answer is not close, you already have your answer, and it is probably not the one the plan names suggested.
One thing the meter does not change: the semantics. altengine preserves App Engine Search's query language, field types, facets and sorting, reached over a REST/JSON API rather than a language SDK — see the Search API reference for the request shapes and the full cost table.
← Back to the blog