AACsearch
Аналитика

Экспорт аналитики

Выгрузка аналитики в CSV или JSON для BI, кастомных дашбордов и долговременного хранения.

Дашборд и oRPC-процедуры покрывают большинство сценариев, но два случая требуют экспорт:

  1. BI / warehouse. Подключить AACSearch в Looker, Metabase, BigQuery, Snowflake — туда, где уже живёт ваша продуктовая аналитика.
  2. Долгое хранение. Дефолтный retention — 90 дней; для compliance или долгого тренда — тяните данные и храните сами.

Эндпоинты экспорта

ФорматЭндпоинтСценарий
CSV (period)GET /v1/projects/{projectId}/analytics?format=csvЭлектронные таблицы, ad-hoc анализ
JSON (period)GET /v1/projects/{projectId}/analytics?format=jsonAPI-потребители, кастомные дашборды
WebhookPer-org конфиг — события стримятся liveLive-ингест в warehouse

CSV / JSON ограничены периодом (?period=24h|7d|30d|90d). Полный backfill — пагинируйте по from / to. Webhook стримит live — это правильный выбор, если нужна свежесть выше period.

CSV export

curl -H "Authorization: Bearer <admin-key>" \
  "https://your-app.com/v1/projects/proj_123/analytics?period=30d&format=csv" \
  > aacsearch-events-30d.csv

Колонки (стабильно, аддитивно):

КолонкаТипОписание
event_idstringСтабильный id; безопасно дедупить.
created_atISO 8601UTC.
organization_idstringTenant id (= org вызывающего).
index_slugstringИндекс события (null для cross-index).
event_typestringsearch_query, result_click, conversion, zero_results, …
querystringНормализованный запрос.
query_idstringСвязь search → click → conversion.
session_idstringПсевдоним клиентской сессии.
anonymous_user_idstringОпциональный stable pseudonymous id.
positionintДля result_click — ранг (1-based).
product_idstringDocument id события.
filters_jsonstringfilterBy на момент события.
sortstringsortBy на момент события.
localestringЛокаль.
referrerstringСанитизированный — host + path, без query string / fragment.
latency_msintЛатентность для search_query.
foundintHits для search_query.
conversion_typestringДля conversion"purchase" / "signup" / ….
value_minorbigintmetadata.value в BigInt minor units (копейки/центы).
currencystringCurrency code.

Порядок append-only: новые колонки добавляются справа, в середину не вставляются. Позиционный CSV-парсер не сломается.

JSON export

curl -H "Authorization: Bearer <admin-key>" \
  -H "Accept: application/json" \
  "https://your-app.com/v1/projects/proj_123/analytics?period=30d&format=json"
{
  "events": [
    {
      "eventId": "evt_…",
      "createdAt": "2025-…",
      "type": "search_query",
      "query": "wireless headphones",
      "queryId": "qry_…",
      "indexSlug": "products",
      "found": 47,
      "latencyMs": 38,
      "filters": { "brand": ["Sony"] },
      "metadata": {  }
    }
  ],
  "page": 1,
  "pageSize": 1000,
  "total": 12440
}

Те же поля, что в CSV, плюс развёрнутые filters и metadata. Pagination — ?page=2; max page size — 1000.

И CSV, и JSON режут период по retention тарифа. Запросили period=90d на 30-day plan — ответ обрезан до доступных 30 дней + флаг truncated: true (или хедер X-Truncated: true в CSV).

Webhook стриминг

В дашборде IntegrationsAnalytics webhook конфигурится URL. Система POST-ит батчи событий в ~30 секунд после получения:

POST <your-webhook-url>
Content-Type: application/json
X-AACSearch-Signature: t=…,v1=hmacSha256(…)

{
  "organizationId": "org_…",
  "batchId": "batch_…",
  "events": [
    { "eventId": "…", "type": "search_query",  }
  ]
}

Проверяйте HMAC так же, как у платёжного провайдера. Replay-protection: t= сверяется на принимающей стороне — отбрасывайте старше 5 минут.

Ретраи: не-2xx ретраятся exponential backoff до 24 часов, потом дроп. В дашборде webhook-панель показывает доставки/фейлы — см. Webhooks.

Auth для экспорта

  • CSV / JSON pull: admin-ключ (ss_search_* со scope admin). Read-only ss_search_* не дают аналитику.
  • Webhook: настроен серверно; caller-credential не нужен.

Admin-ключ — тот же, что и для POST /v1/projects/.../keys (ротация) — API keys.

Retention

ПоверхностьДефолтный retention
Дашборд (24h / 7d / 30d)90 дней (платный), 30 дней (free), 7 дней для 24h-only
SearchUsageEvent сырые90 дней (платный), 30 дней (free)
SearchActivityEvent365 дней
Webhook delivery log30 дней

Для большего — pull и хранение у себя. Апгрейд тарифа продлевает retention, но дороже, чем self-archive для большинства.

Privacy и PII при экспорте

  • referrer санитизирован — host + path. Без query string. Без fragment.
  • Сырого IP, email, телефона нет.
  • anonymous_user_id и session_id — псевдонимные id; в DPA считайте PII для retention.
  • Right-to-be-forgotten — erasure нужно прокатить и на warehouse-копии. AACSearch стирает по anonymous_user_id по запросу — Data privacy.

BI-паттерны

Куда сходится большинство:

  1. Ночной cron pull-ит прошлые 24 ч period=24h&format=json.
  2. Кладёт строки в таблицу aacsearch_events в warehouse.
  3. dbt / Looker / Metabase моделирует поверх — top queries, CTR, conversion rate, period-over-period.
  4. Данные старше 90 дней выживают в warehouse, доступны вечно.

Webhook лучше, если warehouse умеет stream-ингест (BigQuery streaming, Snowflake Snowpipe, Redshift Kinesis). Стрим побеждает по свежести; ночной — по простоте.

Rate limits

CSV / JSON — 6 запросов в минуту per organization. Для большого backfill — пагинируйте внутри одного экспорта, а не палите много мелких.

Связанные страницы

On this page