The adult ad supply chain

Every site’s ads.txt and sellers.json declares which ad systems are authorised to sell its inventory — and through whom. Parsed across the census, this is the adult web’s declared supply chain: the dominant networks, how much runs DIRECT vs. through resellers, and ad accounts that reappear across many sites (a reseller footprint, or a shared operator).

801
ad partners declared
135
sites with ads.txt / sellers.json
1,711
total declarations

Top ad partners

Ranked by how many sites authorise them. DIRECT = the publisher’s own account; RESELLER = sold on their behalf.

PartnerSitesDIRECTReseller
new date().gettime()3900
<div class="cards-container flex flex-wrap flex-1 gap-2 block grid transition-[0.2s] grid-cols-[repeat(auto-fill1800
window.__juan.config = {"statbar":"0"1300
window.__juan.defaulttheme = {"grid":{"breakpoints":{"base":01300
var load_scripts=function(){"use strict";var e=this;e.init=function(t){e.params=t;e.params.finalfilelist=[];e.myfilelist()}1100
<p><a href="https://epoch.com" target="_blank" rel="noreferrer">epoch</a>900
<p>vxn s.r.o.900
a.type="text/javascript"800
window.context = {"user":{"ip":"31.97.57.202"}800
window.env = {"api":{"algolia":{"applicationid":"tsmkfa364q"800
'emailreg': /^([\-\w+\.]+@([\w-]+\.)+[\w-]{2700
page_params.availablecookies = {"necessary":["rnlbserverid"700
page_params.enabledfeatures = ["necessary"700
<link href="https://fonts.googleapis.com/css?family=anton|hind:400600
<script>!function(){var e=function(){if("object"!=typeof xv)return"xv global namespace";var e="/mobile"===window.location.pathname.substring(0600
<script type="text/javascript">window.nreum||(nreum={});nreum.info={"beacon":"bam.nr-data.net"600
<script>xv.disclaimer.setagewarning(true600
$.cookie('ach_dismiss_'500
$.cookie('lmsmtch'500
$.cookie('mobile_redirect'500
$.cookie('mobile_redirect_hide'500
$.post("/set_language/"500
age_gate_location: json.parse('{\u0022location_name\u0022: \u0022united kingdom\u0022500
challengeiframe.parentelement.style.transform = "translate3d(0500
_gaq.push(['_trackevent'500
<meta name="description" content="xvideos.red / xvideos premium : access all the content of regular xvideos with no ads500
metaviewporttag.setattribute("content"500
newmetatag.setattribute("content"500
purchaseeventsources: json.parse('{\u0022token_source_user_info_panel\u0022: \u0022tokensourceuserinfopanel\u0022500
push_services: json.parse('[{\u0022backend\u0022: \u0022a\u0022500

Ad accounts shared across sites

The same ad-network account declared by multiple sites — a reseller’s footprint, or (for DIRECT declarations) evidence of a shared operator. See Connections.

Partner · accountSitesDomains
new date().gettime() · event:'gtm.js'});var f=d.getElementsByTagName(s)[0]39adultfriendfinder.com, adulttime.com, adulttime.xxx, anisyia.xxx, asianmatchmate.com, babepedia.com, +33
<div class="cards-container flex flex-wrap flex-1 gap-2 block grid transition-[0.2s] grid-cols-[repeat(auto-fill · minmax(240px184tube.com, asiangalore.com, assoass.com, cartoonpornvideos.com, dinotube.com, ebonygalore.com, +12
window.__juan.config = {"statbar":"0" · "debugAtlas":false13bangbros.com, brazzers.com, brazzersnetwork.com, crazyasiangfs.com?ats=eyjhijo5mjczncwiyyi6ndg3ody5ntisim4iojiwlcjzijo2mdasimuiojk0mtqsinaioju3fq==, digitalplayground.com, erito.com, +7
var load_scripts=function(){"use strict";var e=this;e.init=function(t){e.params=t;e.params.finalfilelist=[];e.myfilelist()} · e.myFileList=function(){var t=e.getKeys(e.params.jsFileList)11modelhub.com, pornhits.com, pornhub.com, pornhubpremium.com, redtube.com, redtube.com.br, +5
<p>vxn s.r.o. · Prosecká 524/269blacked.com, blackedraw.com, deeper.com, milfy.com, slayed.com, tushy.com, +3
<p><a href="https://epoch.com" target="_blank" rel="noreferrer">epoch</a> · <a href="http://cs.segpay.com" target="_blank" rel="noreferrer">SEGPAY</a>9blacked.com, blackedraw.com, deeper.com, milfy.com, slayed.com, tushy.com, +3
a.type="text/javascript" · a.async=!08adulttime.com, adulttime.xxx, darkx.com, evilangel.com, girlfriendsfilms.com, girlsway.com, +2
page_params.enabledfeatures = ["necessary" · "recentSearch"7redtube.com, redtube.com.br, redtube.net, tube8.com, tube8.es, tube8.fr, +1
page_params.availablecookies = {"necessary":["rnlbserverid" · "platform"7redtube.com, redtube.com.br, redtube.net, tube8.com, tube8.es, tube8.fr, +1
'emailreg': /^([\-\w+\.]+@([\w-]+\.)+[\w-]{2 · 4})$/7redtube.com, redtube.com.br, redtube.net, tube8.com, tube8.es, tube8.fr, +1
<script>!function(){var e=function(){if("object"!=typeof xv)return"xv global namespace";var e="/mobile"===window.location.pathname.substring(0 · 7);if(!e&&"object"!=typeof xv.conf)return"xv config";var t=e?"oldombile":xv.conf.sitename||""6xnxx.gold, xvideos.red?pmln=en&sxcaf=4353lfje75&pmsc=ad, xvideos.red?pmln=en&sxcaf=4353lfje75&pmsc=footer, xvideos.red?pmln=en&sxcaf=4353lfje75&pmsc=header_mobile, xvideos.red?pmln=en&sxcaf=4353lfje75&pmsc=menu, xvideos.red?pmsc=menu&pmln=en&sxcaf=4353lfje75_menu__
<script>xv.disclaimer.setagewarning(true · false);xv.disclaimer.setHasMainCatChoice(true6xnxx.gold, xvideos.red?pmln=en&sxcaf=4353lfje75&pmsc=ad, xvideos.red?pmln=en&sxcaf=4353lfje75&pmsc=footer, xvideos.red?pmln=en&sxcaf=4353lfje75&pmsc=header_mobile, xvideos.red?pmln=en&sxcaf=4353lfje75&pmsc=menu, xvideos.red?pmsc=menu&pmln=en&sxcaf=4353lfje75_menu__
<link href="https://fonts.googleapis.com/css?family=anton|hind:400 · 700|Montserrat:4006xnxx.gold, xvideos.red?pmln=en&sxcaf=4353lfje75&pmsc=ad, xvideos.red?pmln=en&sxcaf=4353lfje75&pmsc=footer, xvideos.red?pmln=en&sxcaf=4353lfje75&pmsc=header_mobile, xvideos.red?pmln=en&sxcaf=4353lfje75&pmsc=menu, xvideos.red?pmsc=menu&pmln=en&sxcaf=4353lfje75_menu__
$.cookie('mobile_redirect' · null5camwhorestv.porn, chaturbate.com, chaturbate.lat, fucking.sex, nudegirlsoncam.com
newmetatag.setattribute("content" · "width=device-width5camwhorestv.porn, chaturbate.com, chaturbate.lat, fucking.sex, nudegirlsoncam.com
$.post("/set_language/" · {language: newLangCode5camwhorestv.porn, chaturbate.com, chaturbate.lat, fucking.sex, nudegirlsoncam.com
age_gate_location: json.parse('{\u0022location_name\u0022: \u0022united kingdom\u0022 · \u0022country_code\u0022: \u0022GB\u00225camwhorestv.porn, chaturbate.com, chaturbate.lat, fucking.sex, nudegirlsoncam.com
challengeiframe.parentelement.style.transform = "translate3d(0 · 05camwhorestv.porn, chaturbate.com, chaturbate.lat, fucking.sex, nudegirlsoncam.com
$.cookie('lmsmtch' · 'true'5camwhorestv.porn, chaturbate.com, chaturbate.lat, fucking.sex, nudegirlsoncam.com
metaviewporttag.setattribute("content" · currentContent.concat("5camwhorestv.porn, chaturbate.com, chaturbate.lat, fucking.sex, nudegirlsoncam.com

Parsed from each site’s /ads.txt and /sellers.json (IAB standards). Declarations are self-reported by the sites; DIRECT is a stronger operator signal than RESELLER. Data as of 2026-10-06.