Algolia meters three separate things: search requests, search operations, and records. Which of them appears on your invoice depends on which plan you're on.
Start by confirming your plan: How do I check which plan my Algolia application is on?
What each term means
| Term | Definition | Usage API metric |
|---|---|---|
| Search request | One network call to Algolia's search endpoint. Can bundle up to 50 queries. | total_search_requests |
| Search operation | One individual query executed by the engine. A request bundling 3 queries = 3 operations. | total_search_operations |
| Record | One object stored in an index, counted across all indices including standard replicas. | records |
| Indexing operation | An addition, update, or deletion of a record, Rule, synonym, API key, or index setting. | total_indexing_operations |
For a fuller explanation of the first two, see What is the difference between a Search Operation and a Search Request?
What your plan is billed on
| Plan generation | Billed on | Indexing operations |
|---|---|---|
| Plans sold since March 2023 - including free and Grow | Search requests and records, charged separately | Not charged, but subject to a protective limit (see below) |
| Standard and Premium pay-as-you-go, sold July 2020 - March 2023 | Usage units. One unit = 1,000 search requests or 1,000 records, charged on whichever is higher (not the sum) | Not charged, but subject to a contractual limit |
| Plans sold before July 2020 | Records plus operations counted against a monthly quota, with overage charges beyond it | Counted against the quota |
If you signed your plan with an Account Executive, refer to your service order for your specific limits. See also I'm on a plan that is not currently available. How am I billed? and the pricing page.
Indexing operation limits
On plans where indexing operations aren't charged, a protective limit still applies so that extreme operation volumes don't affect your cluster: 10,000 indexing operations for every 1,000 search requests and records used per month.
For detail on what counts as an indexing operation, see How does Algolia count indexing operations?
Counting search requests
Every call to the search endpoint counts as one search request, whether or not it returns results, and whether or not the query string is empty.
Search-as-you-type
In a search-as-you-type implementation, a search happens at every keystroke, and each keystroke counts as a search request. A user typing "apple" into a single index sends requests for "a", "ap", "app", "appl", and "apple" — five search requests.
Those same five requests count as one search in your Analytics dashboard, because Analytics deliberately aggregates them. This is the most common reason Billing and Analytics numbers differ; see Why are the number of search requests shown in the Billing and Analytics pages different?
Multiple indices
| Typing "apple" across three indices | Search requests | Search operations |
|---|---|---|
| As three separate calls per keystroke | 15 | 15 |
| Bundled with one multi-query call per keystroke | 5 | 15 |
On a plan billed by request, bundling is the single most effective way to reduce search cost. See How are multi-queries counted against my search request usage?
Other things that count as a search request
- Empty queries. Showing results as soon as a user lands on a page performs a search with an empty query, and it is billed. See Does an empty search count towards my bill?
- Every refinement. Applying a filter, changing a sort, or selecting a facet triggers a new search request unless the result is already cached client-side.
- Category and listing pages. A filtered listing page sends a search request on load, and another on each filter change or page change.
- searchForFacetValues. One call counts as one search request.
- Query Suggestions. Your users' searches against a Query Suggestions index are billed like any other search request. See Do Query Suggestions increase the number of billable requests?
-
Some widgets send two requests per input.
refinementList, for example, makes one search to retrieve refinement counts and one to retrieve results. See How does Algolia count InstantSearch operations? - Disjunctive faceting increases the number of operations per query in proportion to the number of disjunctive facets used.
What is not counted as a search request
| Call | How it's counted instead |
|---|---|
| browse and browseObjects | Treated as indexing-side operations, not search requests. Note that a category page is not a browse call - see Does browseObjects count against my search quota? |
getObject and getObjects
|
Record operations |
| getSettings | Not counted against search requests. See this article |
| Analytics REST API calls | Not counted. See this article |
| Insights API events | Not counted. See this article |
getLogs |
Not counted. See this article |
CORS preflight (OPTIONS) requests |
Not counted. See this article |
| Searches run from the dashboard's Index tab | Not counted, and excluded from Analytics by default. See this article |
| Indexing operations on standard replicas | Excluded — Algolia keeps replicas in sync internally |
Counting records
Your record count is the total across all your indices, including standard replicas.
Replicas
A standard replica copies its primary's records, so it adds to your total: a primary with 5,000 records plus three standard replicas gives 5,000 × 4 = 20,000 records.
A virtual replica is a view of its primary and does not increase your record count. For the full breakdown, including what happens when you detach a replica from its primary, see What is the effect of a replica on the number of records?
Your three highest-record days are ignored
To give you flexibility during reindexing and bulk updates, Algolia discards the three days in the month on which you held the most records. Those days are not counted towards your monthly record total.
This is often the explanation when a spike you can see in the dashboard doesn't appear on your invoice. See Why do I see a spike in my records usage? and Why is my record count under Billing > Usage higher than expected?
Exceeding your record limit
- On a paid plan, you're charged an over-quota based on the maximum record count you reach. Your contract may let you pre-purchase additional records at a discount.
- On the free plan, you're blocked until the next billing cycle begins.
As long as you stay within your plan's maximum record count, you can add, update, or delete as many records as you like.
Unused allowance does not roll over
Unused usage units and operations, whether included in your plan or purchased separately, do not carry over to the next service period.
Where to see your numbers
- Dashboard. API Monitoring > Usage shows records plus search and indexing volume for the current billing cycle, by day, month, or year. See Track usage and performance in the dashboard.
- Usage API. The Usage API returns per-day values retained for up to 3.5 years, which you aggregate yourself.
If you're reconciling your own numbers: total_search_requests and total_search_operations are different metrics, and on a search-as-you-type implementation they routinely differ by a factor of three to five. Pulling the operations metric when you meant requests will overstate billable usage substantially. Confirm which unit your plan bills on before comparing.
Related articles
- What is the difference between a Search Operation and a Search Request?
- How does Algolia count indexing operations?
- How does Algolia count refinement operations?
- How does Algolia calculate the Maximum QPS (Queries Per Second)?
- How do I reduce my cost while using InstantSearch?
- Why has there been a spike in my search usage?