Что ads.txt и sellers.json говорят о продавцах и посредниках и чего не доказывают?
Файлы ads.txt на сайте и app-ads.txt на сайте разработчика приложения публикует владелец площадки: в них перечислены пары «рекламная система и ID аккаунта», которым он разрешил продавать свой инвентарь, с пометкой DIRECT для аккаунта, которым владелец управляет сам, или RESELLER для перепродавца. Файл sellers.json выкладывает рекламная система: по ID продавца из него видно, кому она платит за инвентарь и кто это, владелец площадки (PUBLISHER) или посредник (INTERMEDIARY). Объект SupplyChain (schain) передаётся внутри запроса на показ и по порядку перечисляет участников оплаты этого показа, от владельца площадки до отправителя запроса, с флагом полноты цепочки. Вместе они отвечают, разрешена ли продажа и сколько звеньев между покупателем и площадкой, но это заявления самих участников, а не замер. Где открылась реклама, был ли трафик валидным и мог ли её увидеть человек, из файлов не узнать, и спецификация app-ads.txt напоминает покупателям, что авторизованный инвентарь тоже нужно проверять и отслеживать на невалидный трафик.
- 14:02:17.482news•••.ruВебRU · МоскваCLEAN
- 14:02:17.391app · Кино•••In-appRU · КазаньCLEAN
- 14:02:17.305prem1um•••.ruподмена доменаВебRU · МоскваSIVT
- 14:02:17.244Smart TV · Онлайн-кинотеатр•••Smart TVRU · Санкт-ПетербургCLEAN
- 14:02:17.160sport•••.ruбот · автотрафикВебдата-центр · NLGIVT
Что записано в ads.txt и app-ads.txt?
IAB Tech Lab разработала спецификацию ads.txt в 2017 году, действующая версия 1.1 принята в июле 2022 года. Файл лежит по адресу /ads.txt на корневом домене сайта, и каждая строка продавца описывает одно разрешение:
| Поле | Что в нём | Пример из спецификации |
|---|---|---|
| 1 | домен рекламной системы, к которой подключаются покупатели: SSP (платформы продажи показов), биржи или обёртки для header bidding | greenadexchange.com |
| 2 | ID аккаунта продавца в этой системе, то же значение, что уходит в запрос на показ (в OpenRTB, протоколе аукциона в реальном времени, обычно publisher.id) | 12345 |
| 3 | тип связи, DIRECT или RESELLER | DIRECT |
| 4 | необязательный ID системы у сертифицирующей организации, например TAG (Trustworthy Accountability Group); спецификация предпочитает объявлять его в sellers.json и предупреждает, что поле могут упразднить | d75815a79 |
Кроме строк продавцов, в файле бывают переменные. CONTACT даёт контакт владельца файла, SUBDOMAIN отсылает к поддомену со своим списком, INVENTORYPARTNERDOMAIN указывает домен партнёра, которому принадлежит часть рекламных мест на сайте или в приложении, обычно владельца показанного там контента: эту переменную добавили ради CTV, рекламы на подключённых телевизорах, и похожих случаев. Версия 1.1 ввела OWNERDOMAIN, бизнес-домен компании-владельца сайта, и MANAGERDOMAIN, домен основного или эксклюзивного партнёра по монетизации, если владелец не продаёт инвентарь сам; его можно задать для отдельной страны.
Отсутствие файла не означает запрета. При ответе 404 система, по спецификации, может считать, что неавторизованных продавцов у сайта нет. Сайт, который не разрешает продажу никому, публикует строку-заглушку placeholder.example.com, placeholder, DIRECT, placeholder: пустой файл с 1 марта 2020 года системы должны игнорировать.
Файл app-ads.txt устроен так же, но для приложений из мобильных и телевизионных магазинов. Его размещают на сайте разработчика, адрес которого записан в карточке приложения в магазине. Проверяющая система берёт ссылку на магазин из прошлых запросов, находит по карточке сайт разработчика и сравнивает идентификаторы приложения из карточки (bundle ID и ID в магазине) с теми, что пришли в запросе; переменная SUBDOMAIN в app-ads.txt не действует.
Что значат DIRECT и RESELLER?
DIRECT по спецификации значит, что аккаунтом из второго поля в системе из первого поля управляет сам владелец контента; обычно за этим стоит прямой договор площадки с рекламной системой. RESELLER значит, что владелец разрешил другой компании управлять этим аккаунтом и перепродавать свои рекламные места через эту систему. Справки Рекламной сети Яндекса и Рекламной сети VK для партнёров объясняют то же по-русски: DIRECT для сетей, с которыми площадка работает напрямую, RESELLER для посредников.
Из определений следуют три правила чтения:
- разрешение выдано паре «система и ID», а не компании вообще: строка с той же системой, но с другим ID продажу через этот аккаунт не разрешает;
- RESELLER не признак фрода, а объявленный посредник, и каждый такой посредник добавляет звено между площадкой и покупателем;
- пометку ставит владелец сайта, а кто стоит за аккаунтом, ads.txt не раскрывает: для этого есть sellers.json.
Что показывает sellers.json?
Этот файл рекламная система выкладывает по адресу /sellers.json на своём корневом домене. По спецификации 1.0 (июль 2019 года) его должна выложить каждая система, которая упомянута в чьём-либо ads.txt или в узле цепочки SupplyChain, и в нём перечислены все её продавцы, конфиденциальные тоже.
| Поле | Что означает |
|---|---|
| seller_id | тот же ID, что во втором поле ads.txt и в поле sid цепочки; один ID принадлежит одной компании, которой платят, а у одной компании ID может быть несколько |
| seller_type | PUBLISHER: инвентарь на сайте или в приложении этой компании, и система платит ей напрямую; INTERMEDIARY: инвентарь ей не принадлежит или система платит ей не напрямую; BOTH: через продавца идут оба вида |
| name и domain | юридическое лицо, которое получает деньги за инвентарь под этим ID, и его бизнес-домен; у посредника это домен, где лежит его собственный sellers.json |
| is_confidential | значение 1 позволяет не показывать имя и домен, но запись в файле остаётся |
Связку двух файлов задаёт OWNERDOMAIN: по версии 1.1 он должен совпадать с доменом этого издателя в sellers.json, а в полной цепочке SupplyChain первый узел должен вести к продавцу с тем же доменом. Если переменной нет, владельцем считают домен, на котором лежит ads.txt. Спецификации sellers.json и SupplyChain рабочая группа OpenRTB утвердила для отрасли 31 июля 2019 года.
Что такое SupplyChain (schain)?
Это не файл, а объект внутри запроса на показ: в OpenRTB 2.6 он стоит в source.schain, в 2.5 в source.ext.schain. Цепочка состоит из узлов, и каждый узел описывает одного участника оплаты показа:
- asi: домен рекламной системы, тот же, что в ads.txt;
- sid: ID продавца в этой системе, тот же, что в sellers.json;
- hp: участвует ли узел в оплате, в версии 1.0 всегда 1;
- rid, name, domain: ID запроса у этого продавца, а имя и домен, только если их нет в sellers.json.
Флаг complete говорит, доходит ли цепочка до владельца площадки: при 1 первый узел и есть владелец сайта или приложения, при 0 это лишь первый известный участник. Последний узел всегда тот, кто отправил запрос. Перепродавец копирует полученную цепочку и дописывает себя в конец, не трогая complete; если он себя не добавил, объекта в его запросе быть не должно вовсе, а если цепочки не было, он создаёт её сам с complete, равным 0. Когда реклама вызывается тегом или ссылкой VAST, стандарта IAB для видеорекламы, а не по OpenRTB, цепочку передают строкой; параметр для неё спецификация советует называть schain.
Как прочитать цепочку по трём источникам?
Пример условный, домены вымышленные. Покупатель получил запрос на показ на сайте news.example от биржи ssp-b.example, ID продавца в запросе b-77.
| Шаг | Где смотреть | Что нашли | Вывод |
|---|---|---|---|
| 1 | news.example/ads.txt | ssp-a.example, 1001, DIRECT и ssp-b.example, b-77, RESELLER |
продажу через аккаунт b-77 сайт разрешил, но как перепродавцу |
| 2 | ssp-b.example/sellers.json, ID b-77 | INTERMEDIARY, домен ssp-a.example | за аккаунтом стоит другая биржа |
| 3 | source.schain в запросе | complete 1, узлы ssp-a.example 1001, затем ssp-b.example b-77 | цепочка полная: площадка и один посредник |
| 4 | ssp-a.example/sellers.json, ID 1001 | PUBLISHER, домен media.example | первый узел ведёт к издателю |
| 5 | OWNERDOMAIN в news.example/ads.txt | media.example | владелец сайта совпадает с продавцом из шага 4 |
Если бы в шаге 1 пары ssp-b.example и b-77 не нашлось, этот аккаунт сайт не уполномочивал. При complete, равном 0, неизвестно, кто стоит до первого узла, и это вопрос к продавцу. Если узлов больше, чем подразумевает медиаплан с прямыми сделками, вы видите, сколько компаний на самом деле участвуют в оплате показа.
Чего эти файлы не доказывают?
| Что легко предположить | Что следует из спецификаций |
|---|---|
| Строка DIRECT доказывает, что инвентарь продавца свой | DIRECT описывает один аккаунт владельца сайта в одной системе; через какой аккаунт продан ваш показ, видно только по запросу и цепочке |
| Тип PUBLISHER в sellers.json подтверждает площадку | тип объявляет сама рекламная система, а при типе BOTH через один ID продают и свой, и чужой инвентарь |
| Раз продавец есть в ads.txt, показ прошёл на этом сайте | файл сверяют с доменом или bundle ID, которые продавец сам указал в запросе; где реклама открылась, файл не знает |
| Авторизованный продавец значит валидный трафик | по разделу об области действия ads.txt закрывает только часть сценариев с поддельным инвентарём; данных о самих показах в файлах нет |
| schain показывает всех, кто участвовал в сделке | в цепочке только участники оплаты, и только если каждый перепродавец дописал себя |
| Однажды проверенный файл остаётся верным | Рекламная сеть Яндекса советует партнёрам обновлять ads.txt не реже раза в месяц, а системы без указаний сервера держат копии ads.txt и sellers.json до 7 дней |
В стандарте АРИР (Ассоциации развития интерактивной рекламы) по классификации сложного недействительного трафика (SIVT), опубликованном в августе 2026 года, искажение сведений об источнике и продавце инвентаря стоит среди сценариев категории «Манипуляции с инвентарём и измерениями». Детерминированно подтверждать авторизованный источник, по тому же стандарту, позволила бы криптографическая подпись показов, но это записано как цель рынка, а не действующее требование.
Как проверить цепочку на своей кампании?
- Получите данные закупки. Попросите у агентства или DSP (платформы, через которую идёт закупка) по каждому размещению домен или bundle ID, домен биржи, ID продавца и schain, если он передаётся. По OpenRTB 2.6 ID продавца в запросе соответствует seller_id в sellers.json биржи. Без этих полей проверить можно только, какие системы перечислены в файле площадки.
- Найдите пару в ads.txt. Для сайта откройте домен/ads.txt, для приложения сайт разработчика из карточки в магазине и app-ads.txt на нём. Нужна строка с той же системой и тем же ID; для поддомена смотрите переменную SUBDOMAIN в корневом файле.
- Найдите продавца в sellers.json. Посмотрите тип, имя и домен; скрытую запись и тип BOTH обсудите с продавцом.
- Сверьте владельца. Сравните OWNERDOMAIN из ads.txt с доменом продавца-издателя в sellers.json; если площадку продаёт эксклюзивный партнёр, с доменом первого узла цепочки должен совпасть MANAGERDOMAIN.
- Пройдите schain. Проверьте complete, посчитайте узлы и найдите sid каждого узла в sellers.json системы, указанной в его asi. Если медиаплан обещал прямые сделки, лишние звенья видны здесь.
- Сохраните файлы с датой. Строки меняются, поэтому обсуждать находку с площадкой удобнее по копии файла на день показов; порядок такого разговора описан на странице для тех, кто получил отчёт о фроде.
- Добавьте данные о показах. Совпадает ли заявленный домен с местом показа и сколько на площадке невалидного трафика, файлы не скажут: это видно только по замеру, а признаки подмены в отчёте по доменам собраны на странице о подмене домена.
Для сотен доменов ручная сверка долгая: у IAB Tech Lab есть агрегатор ads.txt, который даёт подписчикам сводные данные о разрешённых продавцах.
Что сказано в справках Яндекса, VK и Adfox?
По справкам и документации на 16 октября 2026 года:
| Где | Что сказано |
|---|---|
| Рекламная сеть Яндекса, сайты | строки для ads.txt партнёр скачивает в разделе «Настройки» → «Общие» кнопкой ads.txt; без файла DSP могут ограничить покупку рекламы на сайте; файл советуют обновлять не реже раза в месяц и называют средством против подмены доменов |
| Рекламная сеть Яндекса, приложения | app-ads.txt не обязателен, но некоторые DSP могут ограничить покупку рекламы в приложении без него; строки там же, кнопкой app-ads.txt |
| Протокол аукциона Яндекса | запрос из RTB-хоста Яндекса к DSP может содержать schain, где sid совпадает с seller_id издателя в sellers.json; SSP, которые продают трафик Yandex DSP, Яндекс рекомендует заполнять source.schain, даже если перепродавцов нет; DSP должны сверять bundle ID из запроса с app-ads.txt |
| VK Реклама, Рекламная сеть VK | строки для обоих файлов партнёр копирует в «Настройках» на вкладке «ads.txt и app-ads.txt»; app-ads.txt общедоступен, его могут анализировать programmatic-платформы, агентства и рекламодатели, а сама сеть может считать его подтверждением доступа к приложению |
| Adfox | ни ads.txt и app-ads.txt, ни sellers.json, ни schain в справке не описаны, поэтому как Adfox их учитывает, по справке не сказать |
Как это связано с подменой домена?
При подмене домена показ продают под адресом чужой площадки, и ads.txt с app-ads.txt позволяют покупающей системе отказать продавцу, которого настоящий сайт не уполномочил. Но сверяются они с адресом и ID, заявленными в запросе, а не с местом, где реклама открылась. Поэтому файлы сужают круг подозрительных продавцов, а саму подмену показывает расхождение заявленного и фактического домена в данных о показах. Как это расхождение выглядит в отчёте и чем подмена отличается от сайта-призрака, показано в разборе подмены домена; подмену ID приложения и другие схемы в приложениях описывает разбор фрода в приложениях.
Источники, открытые 16 октября 2026 года: спецификации IAB Tech Lab ads.txt 1.1, app-ads.txt, sellers.json 1.0 и SupplyChain 1.0, OpenRTB 2.6, стандарт АРИР по SIVT (август 2026), справки Рекламной сети Яндекса, VK Рекламы и Adfox, документация Яндекса по протоколу аукциона.
Частые вопросы
Чем DIRECT отличается от RESELLER?
DIRECT значит, что аккаунтом в рекламной системе управляет сам владелец сайта или приложения, обычно по прямому договору с этой системой. RESELLER значит, что владелец разрешил другой компании управлять аккаунтом и перепродавать свои рекламные места. Обе пометки законны: RESELLER говорит не о качестве инвентаря, а о том, что между площадкой и покупателем есть посредник.
Что значит, если продавца нет в ads.txt?
Если файл есть, а строки с этой системой и этим ID в нём нет, сайт не уполномочил этот аккаунт продавать свой инвентарь, по крайней мере на дату проверки: партнёры у площадок меняются, а системы обновляют свои копии файлов не сразу. Если файла нет совсем и сервер отвечает 404, система по спецификации вправе исходить из того, что неавторизованных продавцов у сайта нет. Расхождение стоит разобрать с продавцом по конкретным показам.
Доказывают ли ads.txt и sellers.json, что инвентарь свой, а трафик чистый?
Нет. Файл ads.txt публикует владелец площадки, а sellers.json рекламная система: это их заявления о том, кто вправе продавать и кому платят. Строка DIRECT и тип PUBLISHER описывают аккаунт, а не ваш показ; где открылась реклама и был ли трафик валидным, файлы не фиксируют. Спецификация app-ads.txt отдельно напоминает, что и авторизованный инвентарь нужно проверять на невалидный трафик.
Где взять ID продавца и schain по своей кампании?
Они приходят в запросе на показ, который получает покупающая система: по OpenRTB 2.6 ID продавца стоит в publisher.id, цепочка в source.schain. Рекламодатель сами запросы не видит, поэтому попросите агентство или DSP выгрузить эти поля по каждому размещению вместе с доменом или bundle ID и доменом биржи. Если биржа schain не передаёт, проверить получится только последнего продавца.
Как это выглядит в AdMetr
AdMetr только измеряет: не показывает рекламу и не продаёт трафик, своего инвентаря и DSP у нас нет. Домен размещения есть в отчёте на всех трёх уровнях интеграции; при подключении пикселем это фактический домен показа. Класс CLEAN, SIVT или GIVT каждый показ получает уже при подключении пикселем.