# Avito: как работает коннектор

В этой статье вы узнаете, как коннектор Avito выгружает данные в хранилище ROMI center: с какой периодичностью, как считаются деньги и что происходит при перезаписи данных. Полный список полей — в статье [Avito: описание выгружаемых полей](https://help-ru.romi.center/avito-opisanie-vygruzhaemyh-polej).

## Чем Avito отличается от рекламных площадок

Avito — не рекламный кабинет с кампаниями и разметкой ссылок, а статистика объявлений. Единица данных — объявление, а не кампания. Отсюда три отличия, важные при построении отчётов:

|  | Остальные площадки | Avito |
| --- | --- | --- |
| UTM-метки | шесть колонок `utm_*` в каждой строке | их нет вовсе — размечать нечего |
| Расход | одна колонка `cost` | девять денежных полей на выбор: все расходы, продвижение, размещение, комиссия, бонусы, стоимость заказов и т. д. |
| НДС | приходит без НДС, ROMI center его добавляет | приходит с НДС, ROMI center его исключает |

## Периодичность

Выгрузка идёт раз в сутки. Окно по умолчанию — от «сегодня минус 7 дней» до вчера включительно, по одному заданию на день. Текущий день не выгружается.

Avito жёстко ограничивает частоту обращений к статистике, поэтому коннектор выжидает минуту перед каждым запросом страницы (страница — до 1000 объявлений). Чем крупнее аккаунт, тем дольше идёт выгрузка: 5000 объявлений — это уже 5 минут ожидания сверх самой выгрузки.

> **Важно**
> Защита от неполной выборки. После обхода коннектор сверяет число полученных объявлений с тем, сколько их обещал API. При расхождении выгрузка падает с ошибкой, и день не перезаписывается — иначе неполная выборка затёрла бы уже собранные данные.

## Как сохраняет данные

*   **Куда:** хранилище ROMI center на движке ClickHouse.
*   **Имя таблицы:** `avito_<транслитерированное имя аккаунта>_<id подключения>` (например `avito_client_3`).
*   **Структура таблицы:** движок `MergeTree`, сортировка по `stats_day`, разбиение на партиции по дню статистики.
*   **Порядок колонок:** `stats_day` → выбранные поля объявления и метрики → колонки конвертации валют → служебные `rc_import_id`, `rc_created_at`.
*   **Структура догоняется, а не пересоздаётся.** Недостающие колонки добавляются при очередной выгрузке, существующие не удаляются.
*   **Имена колонок** получаются из имён полей API переводом в нижний регистр с подчёркиваниями: `contactsShowPhone` → `contacts_show_phone`.

## Перезапись за 7 дней

Avito уточняет статистику задним числом, поэтому каждую ночь перезагружаются последние 7 завершённых дней. Каждый день — отдельное задание: если строк нет, день пропускается и прежние данные сохраняются; если строки есть, весь день удаляется и записывается заново.

Ручная перезагрузка за произвольный период доступна в кабинете и ставит такие же посуточные задания. С учётом минутных пауз между страницами длинный период выгружается заметно дольше, чем у других площадок. При включённой опции «удалить данные» таблица сносится целиком и создаётся заново первой же выгрузкой.

## Как считаются деньги

Денежные поля обрабатываются в строгом порядке:

1.  **Копейки → рубли.** Значения делятся на 100 у полей: все расходы, расходы на объявления, размещение, продвижение, остальные расходы, списанные бонусы. Комиссия и стоимость заказанных/доставленных товаров приходят сразу в рублях — их делить не нужно.
2.  **НДС.** Выбранные «поля расходов» делятся на (100 + ставка) / 100.
3.  **Конвертация валют.** Уже очищенная от НДС сумма умножается на курс дня.

Порядок обязателен: сначала перевод в рубли, потом исключение НДС, и только затем пересчёт в другую валюту.

## Дополнительные настройки

| Настройка | Что делает |
| --- | --- |
| Аккаунт Avito | Профиль, из которого берётся статистика. Его имя входит в имя таблицы. |
| Выбор полей | Задаёт набор колонок таблицы. Идентификатор объявления выгружается всегда. Поля названия, адреса, URL и категории заставляют коннектор дополнительно обходить список объявлений. |
| Поле расходов | Указывает, к каким из девяти денежных полей применять НДС и конвертацию валют. Поля, не выбранные на шаге «Выбор полей», игнорируются. |
| НДС | Работает на исключение: расходы приходят из Avito с НДС, и при включённой настройке ROMI center делит суммы на указанную ставку — в отличие от большинства площадок серии, где НДС добавляется. |
| Конвертация валют | На каждую пару «денежное поле × валюта» добавляется колонка `<поле>_converted_<валюта>` — например `all_spending_converted_usd`. Исходная валюта всегда рубль: Avito работает только в рублях и валюту в API не возвращает. |
| Пауза коннектора | Останавливает создание новых заданий. |

> **Примечание**
> Чего у Avito нет совсем: UTM-настроек (в данных нет ни меток, ни кампаний), фильтра объявлений (выгружается весь аккаунт целиком), признака «данные пришли без UTM-меток» и нескольких отчётов — одна таблица на подключение.

Истёкший или отозванный доступ переводит подключение в состояние ошибки; до починки выгрузка не идёт.

## Технические поля

| Поле | Тип | Что означает |
| --- | --- | --- |
| `rc_import_id` | Целое число | Идентификатор прогона выгрузки, которым записана строка. |
| `rc_created_at` | Дата и время | Момент записи строки в хранилище (не время события). При перезаписи дня обновляется у всех строк дня. |

> **Примечание**
> В отличие от остальных площадок серии, обе служебные колонки Avito не допускают пустого значения. Также в таблицах Avito нет `rc_updated_at` и `rc_datasource`.
