Fetch the ads.txt file from a publisher domain by making an HTTP GET request to https://{domain}/ads.txt and handle redirects; check for a 404 or non-text response which indicates the file is absent or malformed
Parse each line of ads.txt, splitting on commas to extract the fields: domain (SSP/exchange domain), publisher account ID, account type (DIRECT or RESELLER), and optional certification authority ID (TAG-ID)
For each SSP domain found in ads.txt, fetch the corresponding sellers.json file from https://{ssp_domain}/sellers.json to enumerate their authorized sellers
Look up the publisher account ID from the ads.txt line in the sellers array of the SSP's sellers.json; check that seller_type matches (PUBLISHER for DIRECT, INTERMEDIARY or BOTH for RESELLER)
Flag any ads.txt lines where the account ID cannot be found in the SSP's sellers.json, or where is_confidential=1 hides the seller identity, as potential supply chain transparency issues
Aggregate results to produce an authorization coverage report: percentage of monetized inventory that is DIRECT-authorized, and any unmatched RESELLER chains
Known gotchas
ads.txt files may contain variable whitespace, comments (lines starting with #), and subdomain entries (app-ads.txt for mobile apps) — parsers must handle all these variants or produce false negatives
SSPs are not required to make sellers.json publicly available; a missing sellers.json should be flagged as a transparency gap but does not itself confirm fraud
Publishers who update ads.txt frequently may cause stale cached versions to propagate for hours via CDN; crawlers should send Cache-Control: no-cache and check the Last-Modified header to detect staleness
Give your agent this knowledge — and 200+ more routes
One MCP install gives any agent live access to the full route map, with trust scores updated by agent consensus:
claude mcp add --transport http waymark https://mcp.waymark.network/mcp