App Supply Index Monitor my app

How it works

  1. Apps. We take the top free and top grossing iOS charts (iOS top free + top grossing · US, GB, DE) and read each app's developer website from its store listing. That URL is what the IAB app-ads.txt spec tells buyers to use.
  2. app-ads.txt. We fetch https://<developer domain>/app-ads.txt and parse every line.
  3. sellers.json. For the 60 ad systems most often authorized, we fetch their public sellers.json and look up every seller ID that apps list.
  4. Checks and grade. Each app gets findings with line-level evidence and a 0–100 score.

What we check

SeverityCheckMeaning
criticalNo app-ads.txtNo file at the developer domain. Graded only if the store says the app shows ads.
criticalNo developer websiteThe store listing has no website, so buyers can't locate app-ads.txt.
infoCould not be fetchedThe site answered 403/429/5xx (bot protection or rate limiting). Not graded.
criticalEmpty app-ads.txtThe file exists but contains no valid seller lines.
warningSeller IDs not in sellers.jsonThe ad system's own sellers.json doesn't list the account, so buyers can't verify the line.
warningDIRECT lines pointing to intermediariesMarked DIRECT, but the ad system lists the account as an INTERMEDIARY.
infoDIRECT accounts registered to another domainThe sellers.json entry names a different company domain.
infoDIRECT accounts marked confidentialBuyers can't see who owns the account.
warningMalformed linesLines crawlers can't parse (missing .com, bad relationship field, etc.).
infoDuplicate linesThe same line appears more than once.
infoNo OWNERDOMAINapp-ads.txt 1.1 recommends declaring the owning company's domain.

Grading

Penalties scale with the share of affected lines, not the count, so a 10,000-line file isn't punished for its size. Score = 100 − penalties. A ≥ 90, B ≥ 75, C ≥ 60, D ≥ 40, F below.

Rules that keep it fair:

  • Apps without app-ads.txt are not graded unless the store listing says they show ads. Many top apps don't sell in-app ads at all.
  • If the site blocks our crawler (403, 429, bot challenge), the app is marked "could not be fetched", never "missing".
  • If an ad system's sellers.json omits more than half of the IDs referenced across all apps, we treat the file as incomplete and don't use it against apps.
  • Ad systems whose sellers.json we couldn't read are not checked, so their lines are never penalized.

This is a mechanical check of public files. A finding is not an accusation of fraud: most problems are stale lines left behind by closed accounts or copy-pasted partner lists.

Monitor your app

Continuous monitoring is in early access: weekly re-checks, alerts when a partner's account disappears from sellers.json, and a cleaned app-ads.txt you can deploy. Email hello@appsupplyindex.com with your app's store link.

Corrections

If a finding is wrong (for example, an account belongs to your company under another domain), tell us and we'll re-check within a week. Email hello@appsupplyindex.com. Adding OWNERDOMAIN to your app-ads.txt also resolves most domain mismatches automatically.

For agents and developers

The full index is published as JSON at data/apps.json and data/ad-systems.json, with a summary for language models at llms.txt. An MCP server for live audits is available on request.