Analytics

Reports

Every analytics report with the definition of each column, the opportunities list and its fix buttons, the per-query view with before and after, and the CSV download.

Find the reports

Open an index, click Analytics, and scroll past the headline numbers and the timeline. Each report is a table over the same window and filters as the rest of the page; see Window, comparison and filters.

  • Opportunities sits at the top of the page, above the headline numbers.
  • The other reports are tabs under Searches over time: Queries, No clicks, Products, Click positions, Filters, Autocomplete, Rules and Refinements.

Click a column header to sort a table by it, and again to reverse the order. Click a query to open the one-query view. Download CSV above each table saves its rows; see CSV.

Queries are grouped after lowercasing, trimming and collapsing spaces, so "Bubble Wrap" and "bubble wrap" count as one. Empty queries count as searches but never appear in a list. Rates are shares of distinct searches. A table shows at most 50 rows.

Opportunities

The queries that cost you the most, ordered by the revenue at stake, then by searches. The table has the columns Query, Problem, Searches and Revenue at stake. Problem is one of three kinds:

Problemkind in the APIThe querySearches counts
No resultszero_resultsfound nothingevery search
No clicksno_clickfound results but got no clickevery search
Clicks, no saleno_salegot clicks but no purchasethe share of searches that were clicked

Revenue at stake (revenueAtStake) is what those searches would have brought in had they converted like the rest of the index: the counted searches, times the index's own conversion rate in the window, times its average order value. It is an estimate for ranking, not a forecast. Without purchase events the conversion rate is unknown and the estimate is 0, so the list falls back to ordering by searches.

Fix a query from the list

Each row has two buttons. Only organization owners and admins see them.

To add a synonym for the query:

  1. Click Add synonym in its row. A form opens under the table with the query in Terms.
  2. Type what shoppers mean under Means (target), for example tape for the query scotch.
  3. Click Add synonym. The page confirms it with Added synonym and the rule.

The cabinet creates a one-way synonym, so the query also searches the target from the next search on. No reindex is needed.

To pin or boost products for the query, click Pin or boost with a rule. The rule editor opens with the query already filled in. Pick the products to put first, or lift a brand or category, test it and save.

Both show up as markers in the per-query view, with the numbers before and after.

Why a query finds nothingWhat to do
Shoppers use another word for a product you have ("scotch" for tape, "carton" for box)Add a synonym.
A misspelling the typo tolerance does not catchAdd a one-way synonym from the misspelling to the right word.
The word is in a field the profile does not search (a SKU, a color)Add the field to the profile's query fields, with a modest weight.
You want to show specific products for that queryAdd a rule that pins them.
You do not sell itNothing to fix. A custom autocomplete suggestion can steer shoppers to what you do sell.

Queries

The 50 most searched queries, with per query: searches, zeroResultRate, ctr, addToCartRate, conversionRate, revenue, avgClickPosition and previousSearches (searches over the comparison window, null with compare=none). The cabinet shows the comparison as the Before column.

Queries without clicks

The No clicks tab. Queries that found results but never got a click: searches and avgResults, the mean number of results they found. A query with many results and no clicks usually ranks the wrong products first; a query with one or two results probably matches by accident.

Top products

The Products tab. The 50 most clicked products from search: itemId, clicks, addToCarts, purchases, revenue and topQueries, the queries that led to the product most often. Use it to check that the products you merchandise are the ones shoppers pick, and to find products that get clicks but no sales.

Click positions

Clicks per result position, from 1: clicks and share of all clicks. A long tail means shoppers scroll because the first results miss; a steep first position after a pin rule means the pin works.

Filters

Which facets shoppers use: one row per field and value with searches that applied it and the ctr of those searches. value is null for the row that sums a whole field, and range for range filters. Values are logged for keyword and boolean filters only.

Autocomplete

Which suggestions shoppers click, from suggestion_click events: suggestion and clicks. Suggest requests themselves are not logged, so this report is empty until the storefront sends the events.

Ranking rules

The Rules tab. Per rule that fired in the window: ruleId, name (null when the rule was deleted since), searches, ctr, ctrLift, conversionRate and revenue. ctrLift (CTR vs. index) is the rule's click-through rate relative to the index's overall rate, minus 1: 0.25 means a quarter more clicks than the average search. A campaign rule that lowers it is costing you clicks.

Refinements

Zero-result queries that the same session fixed by hand: from (the query that found nothing), to (what they searched within 60 seconds that found results) and count. In the cabinet the columns are Found nothing, Then searched and Times. Each row is a synonym candidate written by your shoppers: from => to. Click the query under Found nothing to open it and add the synonym from there.

One query

Click a query in any table to see it on its own. A panel opens from the side with:

  • Add synonym and Pin or boost with a rule at the top, for owners and admins.
  • Searches per day, a bar chart over the window.
  • Fixes in this window: every synonym and rule that mentions the query and was added or changed in the window.
  • 14 days before and after the latest fix, side by side.
  • By day: searches, CTR and revenue per day.

With the API, call the query route:

GET/v1/projects/:projectId/indices/:indexId/analytics/queryProject member or any secret key

q is the query, plus the usual window and filter parameters. Over MCP the tool is get_query_analytics.

curl "https://api.search.zaproo.cloud/v1/projects/$PROJECT_ID/indices/$INDEX_ID/analytics/query?q=scotch&from=2026-10-01T00:00:00Z&to=2026-10-15T00:00:00Z" \
  -H "Authorization: Bearer $ZS_KEY"

The answer holds:

  • daily: one row per day with searches, ctr and revenue.
  • markers: every synonym and rule of the index that mentions the query and was created or updated in the window, with ts, kind, id, name and change.
  • beforeAfter: the 14 days before and after the latest marker, each with searches, ctr, conversionRate and revenue; null without markers.

CSV

Download CSV on each table writes the rows the table shows, with the table's column labels as the header. Lists, such as the top queries of a product, are joined with "; ". The file is built in your browser from the JSON the cabinet loaded, so a filtered table downloads filtered rows, in the order you sorted them.

With the API

All nine reports come from one route. Use it to pull a report into your own tools.

GET/v1/projects/:projectId/indices/:indexId/analytics/:reportProject member or any secret key

report is one of queries, no-click, products, positions, filters, autocomplete, rules, refinements or opportunities. The query parameters are the same as the overview's: from, to, compare, device, country, includeInternal. The answer is { report, from, to, rows }, at most 50 rows. Rates are null when there is nothing to divide by.

curl "https://api.search.zaproo.cloud/v1/projects/$PROJECT_ID/indices/$INDEX_ID/analytics/opportunities?from=2026-10-01T00:00:00Z&to=2026-10-15T00:00:00Z" \
  -H "Authorization: Bearer $ZS_KEY"

Over MCP, get_analytics_report takes report and the same parameters.