🌟 What is AdsDB?

AdsDB is the most comprehensive, continuously updated, open-source repository of app-ads.txt, ads.txt, and sellers.json files ever assembled. We have scanned, crawled, and indexed the entire publicly accessible internet to build a single, unified database of every Authorized Digital Sellers file we can find — spanning over 50,000 domains, containing more than 49,000 app-ads.txt files and 1,400 sellers.json files, totaling over 3 GB of raw advertising supply chain data.

This is not a sample. This is not a demo. This is the real, complete, continuously-updated programmatic advertising supply chain of the internet — stored in a simple, navigable folder structure that anyone can clone, search, and analyze.

Whether you are a Demand-Side Platform (DSP) engineer validating bid requests, a Supply-Side Platform (SSP) compliance officer auditing your seller network, a data scientist researching the programmatic ecosystem, or a fraud analyst hunting for domain spoofing — AdsDB gives you the raw data you need without requiring you to build and maintain your own web crawler.

Keywords: Authorized Digital Sellers, app-ads.txt database, ads.txt database, sellers.json database, programmatic advertising data, ad fraud prevention dataset, IAB Tech Lab compliance, RTB supply chain, supply path optimization data, SSP sellers list, DSP bid validation, ad exchange transparency, mobile app advertising authorization, CTV ads.txt, OTT advertising supply chain, digital advertising fraud detection, domain spoofing prevention, ad inventory authorization, publisher ad monetization, advertising supply chain verification, OpenRTB supply chain object, schain validation, seller ID lookup, publisher ID database, ad network directory, global advertising ecosystem data.

🎯 Why AdsDB Exists — The Problem It Solves

The digital advertising industry moves $600+ billion per year globally. With that much money flowing through automated real-time bidding systems, fraud and opacity are massive problems.

The Scale of Ad Fraud

The IAB's Solution: Transparency Files

The IAB Tech Lab created three interconnected specifications to combat this:

File Hosted By Purpose
ads.txt Website Publishers Lists authorized sellers of the publisher's web inventory
app-ads.txt App Developers (on their developer website) Lists authorized sellers of the developer's in-app inventory
sellers.json Ad Exchanges / SSPs Lists all publishers and intermediaries the exchange sells on behalf of

The problem? These files are scattered across hundreds of thousands of individual websites. To build a complete picture of the supply chain, you would need to:

  1. Maintain a list of every publisher domain and app developer website on the internet
  2. Continuously crawl each one to fetch their ads.txt / app-ads.txt files
  3. Continuously crawl every SSP and ad exchange to fetch their sellers.json
  4. Parse, normalize, and store all of this data
  5. Keep it all up to date as publishers and exchanges modify their files daily

AdsDB does all of this for you.

We crawl the internet, collect the files, and store them in a clean, browsable, Git-based database that you can clone and query instantly.


📊 Database Statistics at a Glance

Metric Count
Total domains indexed 50,133+
app-ads.txt files collected 49,051+
sellers.json files collected 1,418+
Valid ASI (Authorized Sellers for Internet) domains 3,278+
Valid publisher domains 379,897+
Total publisher domains scanned 457,888+
Total database size 3.1 GB+
Alphabetical index folders 36 (a-z, 0-9)

These numbers grow daily as new publishers, app developers, SSPs, and ad exchanges are discovered and crawled.


📂 Repository Structure & How to Navigate

AdsDB organizes the entire internet's advertising authorization data into a simple, deterministic folder structure based on the first character of each domain name.

The Pattern

db/{first-character-of-domain}/{full-domain-name}/app-ads.txt
db/{first-character-of-domain}/{full-domain-name}/sellers.json

Folder Layout

db/
├── 0/                          # Domains starting with '0'
│   ├── 001.games/
│   │   └── app-ads.txt
│   └── ...
├── a/                          # Domains starting with 'a'
│   ├── adcolony.com/
│   │   └── sellers.json
│   ├── appnexus.com/
│   │   └── sellers.json
│   ├── applovin.com/
│   │   ├── app-ads.txt
│   │   └── sellers.json
│   └── ...
├── g/
│   ├── google.com/
│   │   └── sellers.json
│   └── ...
├── i/
│   ├── indexexchange.com/
│   │   └── sellers.json
│   ├── inmobi.com/
│   │   └── sellers.json
│   ├── ironsrc.com/
│   │   └── sellers.json
│   └── ...
├── o/
│   ├── openx.com/
│   │   └── sellers.json
│   └── ...
├── u/
│   ├── unity.com/
│   │   └── sellers.json
│   └── ...
├── v/
│   ├── vungle.com/
│   │   └── sellers.json
│   └── ...
└── z/

Quick Lookup Examples

What You're Looking For Path in Repository
Google's sellers.json db/g/google.com/sellers.json
OpenX's sellers.json db/o/openx.com/sellers.json
Index Exchange sellers.json db/i/indexexchange.com/sellers.json
Unity Ads sellers.json db/u/unity.com/sellers.json
IronSource sellers.json db/i/ironsrc.com/sellers.json
InMobi sellers.json db/i/inmobi.com/sellers.json
Chartboost sellers.json db/c/chartboost.com/sellers.json
Vungle sellers.json db/v/vungle.com/sellers.json
Mintegral sellers.json db/m/mintegral.com/sellers.json
AppLovin app-ads.txt & sellers.json db/a/applovin.com/

Additional Index Files

File Description
asi_domains.txt Full list of all ASI (ad system) domains scanned
asi_domains_valid.txt 3,278 validated ASI domains that returned valid files
publisher_domains.txt Full list of 457,888 publisher domains scanned
publisher_domains_valid.txt 379,897 validated publisher domains

📋 Complete Guide to app-ads.txt

What is app-ads.txt?

app-ads.txt (Authorized Digital Sellers for Applications) is a text file that mobile app developers and publishers host on their developer website to publicly declare which advertising systems, exchanges, and resellers are authorized to sell their in-app ad inventory.

It was introduced by the IAB Tech Lab in 2019 as an extension of the original ads.txt specification, adapted specifically for the mobile app and Connected TV (CTV) ecosystem.

Why Does app-ads.txt Exist?

In the mobile app world, ad inventory is sold through intermediaries — the app developer doesn't directly negotiate with every advertiser. Instead, they use monetization SDKs (like AdMob, AppLovin MAX, IronSource, Unity Ads) which connect to ad exchanges that run real-time auctions.

The problem: Without app-ads.txt, a bad actor could claim to be selling inventory for a popular app (say, a game with millions of downloads) without actually having any relationship with the app developer. Advertisers would bid on this fake inventory and waste their money on impressions that were never shown to real users inside the real app.

app-ads.txt solves this by creating a public, machine-readable declaration: "These are the ONLY companies authorized to sell my ad inventory."

Where is app-ads.txt Hosted?

Unlike ads.txt (which is hosted on the publisher's website), app-ads.txt is hosted on the developer website listed in the app store.

For example, if an app developer's website is https://example-games.com, then their app-ads.txt file would be at https://example-games.com/app-ads.txt.

How DSPs and Ad Exchanges Use app-ads.txt

When a DSP receives a bid request for an in-app ad impression, the bid request contains the app bundle ID and the publisher domain. The DSP then:

  1. Looks up the app in the app store to find the developer website
  2. Fetches the app-ads.txt file from that website
  3. Checks whether the exchange sending the bid request is listed as an authorized seller
  4. If the exchange is NOT listed → the bid request is rejected as potentially fraudulent

app-ads.txt Adoption Statistics

AdsDB contains 49,051+ app-ads.txt files — making it the largest publicly available collection of app-ads.txt data in existence.


📋 Complete Guide to ads.txt

What is ads.txt?

ads.txt (Authorized Digital Sellers) is a simple text file that web publishers place at the root of their domain to publicly declare which companies are authorized to sell their digital advertising inventory. Originally proposed by the IAB Tech Lab in 2017, ads.txt was the first of the transparency files designed to combat ad fraud in the programmatic advertising supply chain.

How ads.txt Works

A publisher like example-news.com places a file at https://example-news.com/ads.txt. This file contains a list of entries, each representing an authorized seller with:

Example ads.txt Entry

google.com, pub-1234567890, DIRECT, f08c47fec0942fa0
indexexchange.com, 12345, RESELLER, 50b1c356f2c5c8fc
openx.com, 67890, RESELLER, a698e2ec2f3ecb1b

This tells the world: Google is authorized to directly sell this publisher's inventory, while Index Exchange and OpenX are authorized resellers.

ads.txt vs app-ads.txt

Feature ads.txt app-ads.txt
Introduced 2017 2019
For Websites / Web Publishers Mobile Apps / CTV Apps
Hosted at Publisher's website root App developer's website
Verified via Domain of the website Developer website from App Store listing
Format Identical Identical
Adoption ~90% of top 1000 websites ~80% of top-grossing apps

The Impact of ads.txt on the Industry


📋 Complete Guide to sellers.json

What is sellers.json?

sellers.json is a JSON file hosted by advertising exchanges, Supply-Side Platforms (SSPs), and ad networks that lists all of the publishers, app developers, and intermediaries they are authorized to sell ad inventory on behalf of.

While ads.txt and app-ads.txt are the publisher's declaration ("these exchanges can sell my inventory"), sellers.json is the exchange's declaration ("these are the publishers and intermediaries whose inventory I sell").

Together, they form a two-way verification system — a publisher says "Exchange X can sell my ads," and Exchange X says "Publisher Y is in my network." If both match, the supply path is verified.

Where is sellers.json Hosted?

Every SSP and ad exchange that participates in OpenRTB is expected to host a sellers.json file at their domain root:

https://google.com/sellers.json
https://openx.com/sellers.json
https://indexexchange.com/sellers.json
https://pubmatic.com/sellers.json
https://rubiconproject.com/sellers.json

sellers.json File Size

sellers.json files can be massive. Major exchanges like Google, PubMatic, and Index Exchange have sellers.json files that are tens of megabytes to over 100 MB because they list hundreds of thousands of sellers. AdsDB stores all of these files, including the very large ones via Git LFS.

What's Inside a sellers.json File?

Example sellers.json Structure

{
  "contact_email": "adops@example-exchange.com",
  "contact_address": "123 Ad Street, New York, NY",
  "version": "1.0",
  "identifiers": [
    { "name": "TAG-ID", "value": "abc123def456" }
  ],
  "sellers": [
    {
      "seller_id": "pub-1234567890",
      "seller_type": "PUBLISHER",
      "name": "Example News Corp",
      "domain": "example-news.com",
      "is_confidential": 0
    },
    {
      "seller_id": "reseller-9999",
      "seller_type": "INTERMEDIARY",
      "name": "Ad Reseller Inc",
      "domain": "adreseller.com",
      "is_confidential": 0
    }
  ]
}

AdsDB contains 1,418+ sellers.json files from SSPs and ad exchanges across the globe — from the biggest players like Google and OpenX to regional networks across Europe, Asia, Latin America, and Africa.


🔗 How ads.txt, app-ads.txt, and sellers.json Work Together

The true power of the IAB transparency stack is realized when all three files are used together to verify the entire supply chain from publisher to advertiser.

The Complete Verification Flow

1. App developer publishes app-ads.txt

Example: example-dev.com/app-ads.txt contains exchange.com, pub-123, DIRECT.

This declares that exchange.com is authorized to sell inventory for that developer.

↓ Developer authorizes exchange

2. Exchange publishes sellers.json

Example: exchange.com/sellers.json contains seller pub-123 with publisher domain example-dev.com.

This confirms that the exchange recognizes the developer as a legitimate seller in its system.

↓ Buyer validates both sides

3. DSP or buyer verifies the bid request

  • Check that the exchange appears in the developer’s app-ads.txt
  • Check that the seller appears in the exchange’s sellers.json
  • Check that seller ID, domain, and relationship all align

Result: if both sides match, the supply path is verified and safer to bid on.

Cross-Referencing with AdsDB

With AdsDB, you can automate this entire verification flow:

  1. Read the publisher's app-ads.txt from db/{letter}/{domain}/app-ads.txt
  2. Extract all authorized exchanges and their account IDs
  3. Read each exchange's sellers.json from db/{letter}/{exchange-domain}/sellers.json
  4. Cross-reference the account IDs to verify the supply chain
  5. Flag any mismatches — these are potential fraud indicators

⛓ Supply Chain Object (schain) Explained

What is the SupplyChain Object?

The SupplyChain object (commonly called schain) is an OpenRTB extension that allows each participant in the ad supply chain to add a "node" representing themselves, creating a complete, ordered list of every intermediary between the publisher and the DSP.

How schain Relates to ads.txt and sellers.json

AdsDB provides the reference data needed to validate each node in an schain — look up the exchange's sellers.json to verify the asi and sid, then cross-reference with the publisher's app-ads.txt.

schain Validation Example

When a DSP receives an schain like:

{
  "schain": {
    "ver": "1.0",
    "complete": 1,
    "nodes": [
      { "asi": "exchange1.com", "sid": "pub-111", "hp": 1 },
      { "asi": "exchange2.com", "sid": "reseller-222", "hp": 1 }
    ]
  }
}

Using AdsDB, you can:

  1. Open db/e/exchange1.com/sellers.json → verify pub-111 exists and is a PUBLISHER
  2. Open db/e/exchange2.com/sellers.json → verify reseller-222 exists and is an INTERMEDIARY
  3. Check the publisher's app-ads.txt → verify both exchanges are listed

🎯 Use Cases — Who Is This For?

📊

Demand-Side Platforms (DSPs)

Pre-load all app-ads.txt and sellers.json data into your bidding infrastructure. Verify that the exchange in each bid request is authorized by the publisher. Cross-reference seller IDs. Reject fraudulent requests. Reduce wasted ad spend.

🏗

Supply-Side Platforms (SSPs) & Exchanges

Audit your sellers.json against your publishers' ads.txt files. Ensure every publisher has listed you. Identify removed accounts. Benchmark your seller count against competitors. Discover new publisher relationships.

🛡

Ad Fraud Prevention Teams

Detect seller ID reuse, orphaned sellers, ghost exchanges, authorization changes over time (via Git history), and build network graphs of the supply chain to visualize suspicious intermediary patterns.

📱

Publishers & App Developers

See which ad networks competitors use. Discover new monetization partners. Verify your own ads.txt / app-ads.txt is correct. Check if unauthorized parties claim to sell your inventory.

🔬

Data Scientists & Researchers

Analyze SSP market share, exchange concentration, DIRECT vs RESELLER ratios, app-ads.txt adoption by region, average authorized sellers per publisher, and global supply chain network graphs.

🎮

Mobile App Developers

Reference real-world app-ads.txt files to structure yours correctly. Verify that seller IDs from your ad networks match their sellers.json. Ensure completeness — missing entries mean DSPs won't bid.

⚖️

Advertising Regulators & Industry Bodies

Measure adoption rates across the industry. Identify non-compliant exchanges without a sellers.json. Audit confidential seller ratios. Track ecosystem health and transparency over time.

📺

CTV & OTT Advertising

Connected TV and Over-The-Top platforms increasingly use app-ads.txt. AdsDB indexes these alongside mobile and web, giving you the full picture of the modern cross-screen supply chain.


🏢 Major Ad Networks & SSPs Indexed in AdsDB

AdsDB contains sellers.json files from all major advertising platforms, including but not limited to:

Global Tier-1 SSPs & Exchanges

Company Domain Browse on GitHub
Google (AdMob, AdX, AdSense) google.com db/g/google.com/
OpenX openx.com db/o/openx.com/
Index Exchange indexexchange.com db/i/indexexchange.com/
AppNexus (Xandr/Microsoft) appnexus.com db/a/appnexus.com/
Magnite (Rubicon Project) rubiconproject.com db/r/rubiconproject.com/

Mobile & In-App Focused

Company Domain Browse on GitHub
Unity Ads unity.com db/u/unity.com/
IronSource (Unity) ironsrc.com db/i/ironsrc.com/
InMobi inmobi.com db/i/inmobi.com/
Mintegral mintegral.com db/m/mintegral.com/
Liftoff (Vungle) liftoff.io db/l/liftoff.io/
Vungle vungle.com db/v/vungle.com/
Chartboost chartboost.com db/c/chartboost.com/
AppLovin applovin.com db/a/applovin.com/

RTB & Programmatic Specialists

Company Domain Browse on GitHub
RTB House rtbhouse.com db/r/rtbhouse.com/
Rakuten rakuten.com db/r/rakuten.com/
Roku roku.com db/r/roku.com/
RevContent revcontent.com db/r/revcontent.com/
Rich Audience richaudience.com db/r/richaudience.com/

And 1,400+ more exchanges, networks, and intermediaries from every region of the world.


🚀 How to Use This Data

Prerequisites

Because some sellers.json files exceed 100 MB, this repository uses Git LFS (Large File Storage). Make sure you have it installed.

Cloning the Repository

# Step 1: Install Git LFS (if not already installed)
git lfs install

# Step 2: Clone the full AdsDB repository
git clone https://github.com/KONTRUSTMEDIA/adsdb.git

# Step 3: Navigate into the database
cd adsdb/db/

Quick Search with Command-Line Tools

# Find all sellers.json files
find db/ -name "sellers.json" -type f

# Find all app-ads.txt files
find db/ -name "app-ads.txt" -type f

# Search for a specific ad network across all app-ads.txt files
grep -r "google.com" db/ --include="app-ads.txt" | head -20

# Search for a specific publisher in all sellers.json files
grep -r "example-publisher.com" db/ --include="sellers.json"

# Count how many publishers authorize Google AdMob
grep -rl "google.com" db/ --include="app-ads.txt" | wc -l

# Find all DIRECT relationships in a specific app-ads.txt
grep "DIRECT" db/a/applovin.com/app-ads.txt

Parsing sellers.json with jq

# List all seller IDs in Google's sellers.json
jq '.sellers[].seller_id' db/g/google.com/sellers.json

# Find a specific seller by domain
jq '.sellers[] | select(.domain == "example.com")' db/g/google.com/sellers.json

# Count total sellers in an exchange's sellers.json
jq '.sellers | length' db/o/openx.com/sellers.json

# List all PUBLISHER type sellers
jq '.sellers[] | select(.seller_type == "PUBLISHER")' db/i/indexexchange.com/sellers.json

# Find confidential sellers
jq '.sellers[] | select(.is_confidential == 1)' db/g/google.com/sellers.json

💻 Querying the Database with Code Examples

Python: Load and Analyze app-ads.txt

import os
from collections import Counter

def parse_app_ads_txt(filepath):
    """Parse an app-ads.txt file and return structured entries."""
    entries = []
    with open(filepath, 'r', errors='ignore') as f:
        for line in f:
            line = line.strip()
            if not line or line.startswith('#'):
                continue
            parts = [p.strip() for p in line.split(',')]
            if len(parts) >= 3:
                entries.append({
                    'domain': parts[0].lower(),
                    'account_id': parts[1],
                    'relationship': parts[2].upper(),
                    'authority_id': parts[3] if len(parts) > 3 else None
                })
    return entries

# Find the most popular ad networks across all app-ads.txt files
network_counter = Counter()
db_path = 'db/'

for letter_dir in os.listdir(db_path):
    letter_path = os.path.join(db_path, letter_dir)
    if not os.path.isdir(letter_path):
        continue
    for domain_dir in os.listdir(letter_path):
        ads_file = os.path.join(letter_path, domain_dir, 'app-ads.txt')
        if os.path.exists(ads_file):
            for entry in parse_app_ads_txt(ads_file):
                network_counter[entry['domain']] += 1

for network, count in network_counter.most_common(20):
    print(f"{network}: {count} publishers")

Python: Cross-Reference app-ads.txt with sellers.json

import json, os

def load_sellers_json(filepath):
    """Load sellers.json and return a dict of seller_id -> seller_info."""
    with open(filepath, 'r', errors='ignore') as f:
        data = json.load(f)
    return {str(s.get('seller_id', '')): s for s in data.get('sellers', [])}

def verify_supply_chain(publisher_domain, exchange_domain, account_id):
    """Verify a supply chain entry is valid using AdsDB data."""
    first_char = publisher_domain[0].lower()
    ads_path = f'db/{first_char}/{publisher_domain}/app-ads.txt'

    if not os.path.exists(ads_path):
        return 'NO_ADS_TXT'

    entries = parse_app_ads_txt(ads_path)
    authorized = any(
        e['domain'] == exchange_domain and e['account_id'] == account_id
        for e in entries
    )
    if not authorized:
        return 'NOT_AUTHORIZED'

    ex_char = exchange_domain[0].lower()
    sellers_path = f'db/{ex_char}/{exchange_domain}/sellers.json'
    if not os.path.exists(sellers_path):
        return 'NO_SELLERS_JSON'

    sellers = load_sellers_json(sellers_path)
    return 'VERIFIED' if account_id in sellers else 'SELLER_NOT_FOUND'

# Example
result = verify_supply_chain('example-app.com', 'google.com', 'pub-1234567890')
print(f"Verification result: {result}")

Node.js: Stream-Parse Large sellers.json Files

const fs = require('fs');
const path = require('path');
const JSONStream = require('JSONStream');

function streamSellersJson(exchangeDomain) {
  const firstChar = exchangeDomain[0].toLowerCase();
  const filePath = path.join('db', firstChar, exchangeDomain, 'sellers.json');

  return new Promise((resolve, reject) => {
    const sellers = [];
    fs.createReadStream(filePath)
      .pipe(JSONStream.parse('sellers.*'))
      .on('data', (seller) => sellers.push(seller))
      .on('end', () => resolve(sellers))
      .on('error', reject);
  });
}

async function main() {
  const sellers = await streamSellersJson('openx.com');
  const publishers = sellers.filter(s => s.seller_type === 'PUBLISHER');
  console.log(`OpenX has ${publishers.length} direct publishers`);
  console.log(`OpenX has ${sellers.length} total sellers`);
}

main().catch(console.error);

Bash: Generate a Report for a Domain

#!/bin/bash
DOMAIN=$1
FIRST_CHAR=$(echo "$DOMAIN" | cut -c1 | tr '[:upper:]' '[:lower:]')
ADS_FILE="db/${FIRST_CHAR}/${DOMAIN}/app-ads.txt"

if [ ! -f "$ADS_FILE" ]; then
    echo "No app-ads.txt found for $DOMAIN"; exit 1
fi

echo "=== Authorized Sellers for $DOMAIN ==="
echo ""
echo "DIRECT relationships:"
grep -i "DIRECT" "$ADS_FILE" | grep -v "^#" | sort
echo ""
echo "RESELLER relationships:"
grep -i "RESELLER" "$ADS_FILE" | grep -v "^#" | sort
echo ""
echo "Total DIRECT: $(grep -ci 'DIRECT' "$ADS_FILE")"
echo "Total RESELLER: $(grep -ci 'RESELLER' "$ADS_FILE")"

📝 Understanding the app-ads.txt File Format In Depth

Line Format

<exchange_domain>, <seller_account_id>, <relationship_type>, [<authority_id>]
Field Required Description Example
exchange_domain Yes Domain of the SSP/exchange google.com
seller_account_id Yes Publisher's account ID in that system pub-1234567890
relationship_type Yes DIRECT or RESELLER DIRECT
authority_id No TAG certification ID f08c47fec0942fa0

Relationship Types

Special Directives

Directive Purpose
CONTACT Contact email for the publisher's ad operations team
SUBDOMAIN References another domain with additional ads.txt entries
INVENTORYPARTNERDOMAIN Declares a partner who may also list authorized sellers
MANAGERDOMAIN Declares the domain that manages this publisher's ads.txt
OWNERDOMAIN Declares the parent domain that owns this publisher

Common Pitfalls

  1. Wrong domain format — Using www.google.com instead of google.com
  2. Incorrect seller IDs — Typos in the account ID prevent verification
  3. Missing entries — Not listing all exchanges means DSPs won't bid through those exchanges
  4. Stale entries — Listing exchanges you no longer work with
  5. Incorrect relationship type — Marking RESELLER as DIRECT or vice versa

📝 Understanding the sellers.json File Format In Depth

Top-Level Fields

Field Type Required Description
contact_email string Recommended Email for the exchange's operations team
contact_address string Optional Physical address of the exchange
version string Required Spec version
identifiers array Optional Industry identifiers (e.g., TAG ID)
sellers array Required Array of seller objects

Seller Object Fields

Field Type Required Description
seller_id string Required Unique ID (matches account ID in ads.txt)
seller_type string Required PUBLISHER, INTERMEDIARY, or BOTH
name string Conditional Name of the seller
domain string Conditional Domain of the seller
is_confidential integer Optional 0 = public, 1 = identity hidden
is_passthrough integer Optional 1 = passes through to another exchange

Seller Types Explained

Confidential Sellers

Some sellers are marked as is_confidential: 1. The exchange has chosen not to publicly disclose their identity. While allowed by the spec, it reduces transparency and can be a red flag for fraud analysts.


🛡 Ad Fraud Prevention with AdsDB

Types of Ad Fraud That AdsDB Helps Detect

1. Domain Spoofing

A fraudster creates bid requests claiming to be from a premium publisher. AdsDB helps: Check the publisher's app-ads.txt against the exchange in the bid request. If the exchange isn't listed → likely spoofed.

2. Unauthorized Reselling

An entity sells inventory they don't have permission to sell. AdsDB helps: Cross-reference app-ads.txt (publisher side) with sellers.json (exchange side). Mismatches = unauthorized.

3. Seller ID Spoofing

A fraudster uses a legitimate publisher's seller ID in bid requests. AdsDB helps: Check sellers.json to verify the seller ID maps to the expected domain. Mismatch → fraud.

4. Ghost Exchanges

Fake exchanges that appear in app-ads.txt but don't operate a real exchange. AdsDB helps: If an exchange domain has no sellers.json → potential ghost exchange.

5. Supply Chain Laundering

Fraudulent inventory passed through multiple intermediaries to obscure its origin. AdsDB helps: Map INTERMEDIARY chains in sellers.json and flag excessively long or circular paths.

Building a Fraud Detection Pipeline

1. AdsDB data ingestion

  • Pull the latest AdsDB repository snapshot
  • Parse all app-ads.txt files
  • Parse all sellers.json files
  • Load normalized records into your database or data lake

2. Cross-reference engine

  • Is the exchange present in app-ads.txt?
  • Is the publisher or developer present in sellers.json?
  • Do seller IDs match?
  • Is the relationship DIRECT, RESELLER, or INTERMEDIARY?
  • Is the seller marked confidential?

3. Anomaly detection

  • Mismatched entries
  • Missing or stale sellers.json files
  • Excessive confidential sellers
  • Circular or overly long supply chains
  • Sudden authorization changes over time

4. Real-time bid filtering

  • Look up the incoming supply path
  • Compare it against AdsDB-derived verification data
  • Block or downrank suspicious traffic
  • Log patterns for ongoing fraud analysis

📈 Supply Path Optimization (SPO) with AdsDB

What is Supply Path Optimization?

Supply Path Optimization (SPO) is the practice of reducing the number of intermediaries between an advertiser and a publisher to minimize fees, reduce latency, and increase transparency.

The same ad impression can often be purchased through multiple supply paths:

  • Path A: Publisher → SSP1 → DSP (1 hop, lowest fees)
  • Path B: Publisher → SSP1 → SSP2 → DSP (2 hops, medium fees)
  • Path C: Publisher → SSP1 → Reseller → SSP3 → DSP (3 hops, highest fees)

All three paths lead to the same impression, but Path A is most efficient. SPO is about identifying and preferring Path A.

How AdsDB Enables SPO

  1. Map all available supply paths by reading a publisher's app-ads.txt
  2. Identify DIRECT vs RESELLER — DIRECT paths are shorter and cheaper
  3. Trace intermediary chains via INTERMEDIARY entries in sellers.json
  4. Score supply paths based on transparency, hops, and authorization completeness
  5. Build a global supply path graph across all 50,000+ domains

SPO Metrics You Can Calculate with AdsDB

Metric Description How to Calculate
Direct Path Ratio % of DIRECT relationships Count DIRECT / total entries in app-ads.txt
Avg Supply Chain Length Average intermediaries per path Trace INTERMEDIARY chains in sellers.json
Exchange Concentration How many exchanges a publisher uses Count unique exchange domains in app-ads.txt
Reseller Dependency Reliance on resellers Count RESELLER / total entries
Transparency Score % non-confidential sellers Count non-confidential / total in sellers.json

📚 Programmatic Advertising Glossary

Core Concepts

Programmatic AdvertisingAutomated buying and selling of digital advertising through software platforms and real-time auctions.
RTBReal-Time Bidding — ad impressions auctioned in real-time (typically within 100ms) as a user loads a page or app.
OpenRTBThe open-source protocol specification defining how bid requests and responses are structured in RTB.
ImpressionA single instance of an ad being displayed to a user — the basic unit of digital advertising.
CPMCost Per Mille — the price per 1,000 impressions.
Ad InventoryThe total amount of ad space a publisher has available to sell.

Players in the Ecosystem

PublisherA website owner or app developer that has ad space to sell (supply side).
AdvertiserA company buying ad space to promote their product (demand side).
DSPDemand-Side Platform — used by advertisers to buy inventory across multiple exchanges. Examples: The Trade Desk, DV360.
SSPSupply-Side Platform — used by publishers to sell inventory. Examples: Google Ad Manager, Magnite, PubMatic.
Ad ExchangeA digital marketplace facilitating buying and selling of ad inventory via real-time auctions.
Ad NetworkAn intermediary aggregating inventory from multiple publishers and selling to advertisers.

Transparency & Authorization

ads.txtAuthorized Digital Sellers — a text file hosted by web publishers declaring authorized ad systems.
app-ads.txtThe mobile app equivalent of ads.txt, hosted on the app developer's website.
sellers.jsonA JSON file hosted by exchanges listing all publishers and intermediaries they sell for.
schainSupplyChain Object — an OpenRTB extension recording the complete chain of intermediaries.
TAGTrustworthy Accountability Group — provides certification and anti-fraud programs.
ASIAdvertising System Identifier — the domain of an ad system used in schain nodes and ads.txt.

Fraud & Security

Domain SpoofingMisrepresenting the domain/app where an ad will be displayed, typically claiming to be a premium publisher.
Ad FraudAny deliberate activity preventing proper delivery of ads to real human users.
Bot TrafficNon-human traffic generated by automated software to create fake impressions or clicks.
IVTInvalid Traffic — traffic not representing genuine user activity.
SPOSupply Path Optimization — selecting the most efficient, transparent path to purchase inventory.

Mobile & App Specific

SDKSoftware Development Kit — the code library integrated into a mobile app to serve ads.
Bundle IDA unique identifier for a mobile app (e.g., com.example.mygame).
Rewarded VideoAn ad format where users voluntarily watch a video in exchange for an in-app reward.
InterstitialA full-screen ad shown at natural transition points in the app.
CTVConnected TV — internet-connected televisions that can serve programmatic ads.
OTTOver-The-Top — content delivered via internet instead of traditional cable/satellite.

📐 IAB Tech Lab Standards & Specifications

AdsDB is built on top of the official specifications published by the IAB Tech Lab.

Specification Version Description Link
ads.txt 1.0.3 Authorized Digital Sellers for websites IAB ads.txt Spec
app-ads.txt 1.0 Authorized Digital Sellers for mobile apps & CTV IAB app-ads.txt Spec
sellers.json 1.0 Exchange-side seller transparency IAB sellers.json Spec
OpenRTB 2.6 / 3.0 Real-Time Bidding protocol IAB OpenRTB Spec
SupplyChain Object 1.0 Supply chain transparency in bid requests IAB SupplyChain Spec

How These Specs Interconnect

ads.txt and app-ads.txt

These files answer: “Who is allowed to sell my inventory?”

sellers.json

This file answers: “Who do we sell for?”

OpenRTB + schain

This layer answers: “What exact supply path carried this bid request?”

AdsDB

AdsDB collects, stores, and indexes all of these public transparency files so they can be analyzed together as one verification and fraud-detection dataset.


❓ Frequently Asked Questions (FAQ)

General Questions

What is AdsDB?

AdsDB is the world's largest open-source database of app-ads.txt, ads.txt, and sellers.json files. It contains over 50,000 domains worth of advertising supply chain transparency data, collected by crawling the entire public internet.

Is AdsDB free to use?

Yes. AdsDB is released under the MIT License. You can clone, modify, redistribute, and use this data for any purpose — commercial or non-commercial.

How often is AdsDB updated?

The database is updated regularly through automated crawling pipelines. Publishers and exchanges update their files frequently, and our crawlers capture these changes.

How large is the database?

The full database is over 3.1 GB. Some individual sellers.json files exceed 100 MB. Git LFS is used for the largest files.

Can I use AdsDB data in my commercial product?

Yes. The MIT License allows commercial use. The data itself is sourced from publicly accessible URLs as intended by the IAB Tech Lab specifications.

Technical Questions

Why do I need Git LFS?

Some sellers.json files from major exchanges are extremely large (50-200+ MB). Git LFS handles these efficiently. Without Git LFS, you'll get pointer files instead of actual data.

How is the data organized?

Files are stored at db/{first-letter}/{domain}/app-ads.txt and db/{first-letter}/{domain}/sellers.json. For example, Google's sellers.json is at db/g/google.com/sellers.json.

What format are the files in?

app-ads.txt and ads.txt files are plain text (CSV-like format). sellers.json files are standard JSON.

Can I query the database without cloning it?

You can browse individual files on GitHub directly. For bulk analysis, cloning is recommended.

How do I find a specific domain?

Take the first character of the domain, then navigate to db/{first-char}/{domain}/. For example, facebook.comdb/f/facebook.com/.

Data Quality Questions

Are all files guaranteed to be valid?

Files are stored exactly as found on the publisher's or exchange's website. Some may contain formatting errors, reflecting the real-world state of the ecosystem. This is intentional for researchers studying compliance.

Do you store historical versions?

Yes — because this is a Git repository, every change is tracked in the Git history. You can use git log and git diff to see how files have changed over time.


🤝 Contributing & Updates

The internet is constantly evolving. We strive to keep AdsDB as comprehensive and up-to-date as possible.

How to Contribute

  1. Report a missing domain — Open an Issue on GitHub with the domain name.
  2. Report outdated data — Let us know so we can re-crawl.
  3. Submit a Pull Request — If you've crawled additional domains, submit a PR following our directory structure.
  4. Suggest improvements — Ideas for new index files, better organization, or additional metadata are welcome.

Automated Pipeline

AdsDB uses automated crawling and ingestion pipelines to discover new domains, crawl for app-ads.txt and sellers.json files, detect changes, validate formats, and update the repository.


Data Source

All data is sourced from publicly accessible URLs as intended by the IAB Tech Lab specifications. The entire purpose of ads.txt, app-ads.txt, and sellers.json is to be publicly available and machine-readable.

License

This project is licensed under the MIT License. You are free to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of this data and software.

Disclaimer

Privacy


🙏 Acknowledgements


🔍 Topics Covered in This Repository

Primary Topics

app-ads.txt database download, sellers.json database download, ads.txt database download, programmatic advertising transparency data, authorized digital sellers database, global app-ads.txt repository, sellers.json files for all SSPs, ad fraud prevention open source data, IAB Tech Lab compliance database, RTB supply chain data.

Related Search Terms

How to verify ads.txt, how to check app-ads.txt, sellers.json lookup tool, find sellers.json for any exchange, app-ads.txt for mobile apps, ads.txt for CTV and OTT, supply path optimization data, programmatic supply chain graph, list of all SSPs and ad exchanges, ad exchange sellers.json files, publisher ads.txt files database, authorized digital sellers list, app-ads.txt verification, sellers.json parser, ads.txt crawler data, bulk ads.txt download, bulk sellers.json download, programmatic advertising dataset, digital advertising supply chain data, ad tech transparency files.

Ad Networks and Platforms

Google AdMob sellers.json, Google Ad Exchange sellers.json, OpenX sellers.json, Index Exchange sellers.json, AppNexus Xandr sellers.json, Magnite Rubicon Project sellers.json, PubMatic sellers.json, Unity Ads sellers.json, IronSource sellers.json, InMobi sellers.json, Mintegral sellers.json, Liftoff Vungle sellers.json, Chartboost sellers.json, AppLovin sellers.json, RTB House sellers.json, Rakuten sellers.json, Roku sellers.json.

Industry Standards

IAB ads.txt specification, IAB app-ads.txt specification, IAB sellers.json specification, IAB OpenRTB 2.6 specification, IAB SupplyChain Object specification, TAG Trustworthy Accountability Group, TAG certification authority ID, TAG anti-fraud certification.