# Analytics, chat, reporting, and search tools | answer.cloud Docs

> Canonical source: [Analytics, chat, reporting, and search tools | answer.cloud Docs](https://www.answer.cloud/docs/reference/reporting-tools/)

Read analytics, export chats in stable batches, retrieve saved visibility audits, and search indexed site content using current tool contracts.

reference

Analytics, chat, reporting, and search tools

Read analytics, export chats in stable batches, retrieve saved visibility audits, and search indexed site content using current tool contracts.

Reviewed November 1, 2026

Reporting tools require read access and the selected `organization_id` when required. They read site data; `get_aeo_report` does not start an audit and `search_site` does not publish or ingest content.

## get_analytics

| Argument     | Type             | Default / meaning       |
|--------------|------------------|------------------------|
| `site_slug`  | String, required | Intended site.          |
| `period_days`| Integer, 1–90    | 7.                     |

Returns `site`, `period_days`, `human_pageviews`, `bot_crawls_by_bot`, `llm_referrals_by_source`, `top_pages`, `chat_conversations`, `chat_answers`, `traffic_scope`, and `reporting_window`.

The report uses consolidated reporting dates ending on the previous day. Inspect `reporting_window` for the actual date coverage and freshness; this is not a live request log. `traffic_scope.unit` is `pageview_events`, configured site hosts are included, and internal test activity is not automatically excluded. Top pages are limited to ten in this response.

```json
{ "site_slug": "example-site", "period_days": 30 }
```

Human pageviews, bot requests, referral activity, conversations, and answers are distinct units. A successful crawl does not establish a citation. Analytics access is plan-gated after the Free trial; see [limits](https://www.answer.cloud/docs/account/limits/).

## get_chats

| Argument          | Type                  | Default / meaning                          |
|-------------------|-----------------------|-------------------------------------------|
| `site_slug`       | Optional string       | Omit for eligible conversations across the organization. |
| `created_after`   | ISO 8601 date/time    | Inclusive conversation-creation lower bound. |
| `created_before`  | ISO 8601 date/time    | Exclusive conversation-creation upper bound. |
| `cursor`          | Optional string       | Opaque `next_cursor` from the previous response. |
| `limit`           | Integer, 1–100        | 25 conversations.                         |
| `include_messages`| Boolean               | true; false provides an inventory.       |
| `message_roles`   | Unique array of `user` and/or `assistant` | Both roles.                              |

```json
{
  "site_slug": "example-site",
  "created_after": "2026-10-01T00:00:00Z",
  "created_before": "2026-11-01T00:00:00Z",
  "limit": 25,
  "include_messages": true,
  "message_roles": ["user"]
}
```

Returns `site`, `total_count`, `returned_count`, `has_more`, `next_cursor`, and `chats[]`. Conversations are ordered newest first by creation time then ID. The time range filters conversation creation, not the timestamps of every included message.

Each chat includes `id`, `site_slug`, `title`, `status`, `llm_model`, creation/update timestamps, and `message_count` for the chosen roles. With messages included, `messages[]` is ordered oldest first and contains `id`, `role`, `sender_type`, `content`, `token_count`, and `created_at`.

Continue with the same filters and returned `next_cursor` until `has_more` is false. Do not invent or decode a cursor to advance manually. Save compact analysis between batches instead of loading all transcripts into one prompt. An inventory still counts messages matching the selected roles.

Dedicated contact fields and internal message metadata are excluded. Message text can still contain personal information volunteered by a visitor; the export is not automatically redacted. Handle it according to [data practices](https://www.answer.cloud/docs/account/data/).

Errors include `chat_invalid_date`, `chat_invalid_roles`, and `chat_invalid_cursor`. Correct the filter or restart from the first page with a consistent range.

## get_aeo_report

Requires `site_slug` string; optionally supply integer `report_id` for a known earlier audit. Without that ID, the tool looks for the latest audit matching configured site hosts, with a fallback to the organization's latest audit when it has only one site.

Returns `report_id`, `site`, `domain`, `score`, `score_breakdown`, `ran_at`, `model`, `findings`, and `report_url`. Findings contain `technical_foundation`, `brand_entity`, `market_presence`, `llm_inclusion`, and `recommended_pages`.

Check the returned domain and date before attributing the audit to a site. `aeo_report_not_found` means arrange an audit through the available application action or support; repeated reads do not refresh it. See [report interpretation](https://www.answer.cloud/docs/ai-visibility/reports/) and [methodology](https://www.answer.cloud/docs/ai-visibility/methodology/).

## search_site

| Argument    | Type                      | Default / meaning       |
|-------------|---------------------------|------------------------|
| `site_slug` | String, required          | Intended published site.|
| `query`     | Nonblank string, required | Search question or terms.|
| `limit`     | Integer, 1–20             | 10.                    |
| `mode`      | `keyword`, `semantic`, or `hybrid` | hybrid.          |

Returns `site`, `query`, `mode`, and `results[]`. Result fields include `source`, `title`, `url`, `slug`, `match_sources`, `snippet`, `summary`, `content`, `page_category`, `score`, `normalized_score`, and `percent`. Scores describe result ranking, not citation probability.

Try a distinctive published phrase, then a relevant paraphrase. Follow result URLs to confirm they point to the intended page. Empty results alone do not prove the content is absent: inspect published state, indexing warnings, query/mode, and a direct chat test. `search_invalid` requires a nonblank query and supported mode; `upgrade_required` indicates the site's search entitlement.