Что ads.txt и sellers.json говорят о продавцах и посредниках и чего не доказывают?

  • 11 мин чтения
  • Алексей Кольцов, AdMetr

Файлы ads.txt на сайте и app-ads.txt на сайте разработчика приложения публикует владелец площадки: в них перечислены пары «рекламная система и ID аккаунта», которым он разрешил продавать свой инвентарь, с пометкой DIRECT для аккаунта, которым владелец управляет сам, или RESELLER для перепродавца. Файл sellers.json выкладывает рекламная система: по ID продавца из него видно, кому она платит за инвентарь и кто это, владелец площадки (PUBLISHER) или посредник (INTERMEDIARY). Объект SupplyChain (schain) передаётся внутри запроса на показ и по порядку перечисляет участников оплаты этого показа, от владельца площадки до отправителя запроса, с флагом полноты цепочки. Вместе они отвечают, разрешена ли продажа и сколько звеньев между покупателем и площадкой, но это заявления самих участников, а не замер. Где открылась реклама, был ли трафик валидным и мог ли её увидеть человек, из файлов не узнать, и спецификация app-ads.txt напоминает покупателям, что авторизованный инвентарь тоже нужно проверять и отслеживать на невалидный трафик.

Поток показовКампания «Осень» · видео
Проверено показов1 284 530
CLEAN82,4%
SIVT10,9%
GIVT6,7%
  1. 14:02:17.482news•••.ruВеб · RU · МоскваВебRU · МоскваCLEAN
  2. 14:02:17.391app · Кино•••In-app · RU · КазаньIn-appRU · КазаньCLEAN
  3. 14:02:17.305prem1um•••.ruподмена доменаВеб · RU · МоскваВебRU · МоскваSIVT
  4. 14:02:17.244Smart TV · Онлайн-кинотеатр•••Smart TV · RU · Санкт-ПетербургSmart TVRU · Санкт-ПетербургCLEAN
  5. 14:02:17.160sport•••.ruбот · автотрафикВеб · дата-центр · NLВебдата-центр · 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 года, искажение сведений об источнике и продавце инвентаря стоит среди сценариев категории «Манипуляции с инвентарём и измерениями». Детерминированно подтверждать авторизованный источник, по тому же стандарту, позволила бы криптографическая подпись показов, но это записано как цель рынка, а не действующее требование.

Как проверить цепочку на своей кампании?

  1. Получите данные закупки. Попросите у агентства или DSP (платформы, через которую идёт закупка) по каждому размещению домен или bundle ID, домен биржи, ID продавца и schain, если он передаётся. По OpenRTB 2.6 ID продавца в запросе соответствует seller_id в sellers.json биржи. Без этих полей проверить можно только, какие системы перечислены в файле площадки.
  2. Найдите пару в ads.txt. Для сайта откройте домен/ads.txt, для приложения сайт разработчика из карточки в магазине и app-ads.txt на нём. Нужна строка с той же системой и тем же ID; для поддомена смотрите переменную SUBDOMAIN в корневом файле.
  3. Найдите продавца в sellers.json. Посмотрите тип, имя и домен; скрытую запись и тип BOTH обсудите с продавцом.
  4. Сверьте владельца. Сравните OWNERDOMAIN из ads.txt с доменом продавца-издателя в sellers.json; если площадку продаёт эксклюзивный партнёр, с доменом первого узла цепочки должен совпасть MANAGERDOMAIN.
  5. Пройдите schain. Проверьте complete, посчитайте узлы и найдите sid каждого узла в sellers.json системы, указанной в его asi. Если медиаплан обещал прямые сделки, лишние звенья видны здесь.
  6. Сохраните файлы с датой. Строки меняются, поэтому обсуждать находку с площадкой удобнее по копии файла на день показов; порядок такого разговора описан на странице для тех, кто получил отчёт о фроде.
  7. Добавьте данные о показах. Совпадает ли заявленный домен с местом показа и сколько на площадке невалидного трафика, файлы не скажут: это видно только по замеру, а признаки подмены в отчёте по доменам собраны на странице о подмене домена.

Для сотен доменов ручная сверка долгая: у 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 каждый показ получает уже при подключении пикселем.

Что вам нужно

Ответим в течение дня. Или напишите нам: sales@admetr.ru