The visibility and recommendation reports of the Genezio API measure how often answer engines mention and recommend your brand. Two reports read the presence of a brand in the answers of the engines: The two reports have the same shape. Only the name of the value changes.

A row of the visibility report

Each row is one brand in one period: your brand and, with competitors=true (the default), each competitor.

The summary and the rank of your brand

info.summary gives the last period of your brand, and its place among each brand of that period:

One series for each answer engine

Add group_by=model for one series for each answer engine. Each row then has model, and info.summary has one item for each engine.

Filters of the visibility reports

Visibility and recommendation by topic

Two more routes give one value for each topic, and for each scenario of the topic, in place of one value for each period: These are the numbers of the Topics page of the dashboard. Each row is one topic that has answers in the range:
The filters are start_date, end_date, models and topic_ids, as above. Add scenarios=false to get the topics only. That report is faster.

The report of one scenario, day by day

Two routes give the report of one scenario, with one row for each day and each brand: The rows and info.summary have the shape of the report of the brand, thus the same code reads the two reports. change and significant compare a day with the previous day with answers. The filters are start_date, end_date, models and competitors. A scenario has one period for each day, thus these routes have no granularity, no group_by and no topic_ids. A scenario of another brand gets 404.

How the platform calculates the value of a period

The value of a day is not the share of the answers of that day only. The platform reads a sliding window: the newest answers up to the end of that day. The dashboard shows the same values.

The sliding window of one day

For each day with answers, the platform does these steps:
  1. For each scenario and each answer engine, the platform starts at the newest answer of the day. Then it adds older answers, one at a time.
  2. It stops when the confidence interval is narrow enough, or when the range has no older answer. The confidence level and the maximum width of the interval are settings of your brand.
  3. The value of the scenario on the engine is the share of the answers in the window that mention the brand.
  4. The value of the day is the average of the engines of each scenario, and then the average of the scenarios.
A scenario with many answers each day gets a short window, of one or two days. A scenario with few answers gets a longer window.

An example of a sliding window

A scenario runs on ChatGPT once each day, with 8 answers each time. The window needs 24 answers for a narrow interval. The two windows share the answers of 9 and 10 September. Thus the value changes slowly from one day to the next day. One bad day does not make the value fall to zero.

Weeks and months

conversations gives the answers of the sliding window of the last day of the period. A day with no answers has no row.

The first days of a range

The sliding window does not read an answer before start_date. Thus the first days of a range read fewer answers, and their intervals are wider. To get a full window for each day that you need, start the range some days earlier.
To alert on a change, use significant and not a fixed threshold. A drop of 5 points can be noise on a small brand and real on a large one.