App Supply Index Monitor my app
Android · Duolingo

Duolingo: Learn Languages

Developer URL
https://www.duolingo.com/help/support-request
app-ads.txt
https://www.duolingo.com/app-ads.txt · 200
Checked
Oct 7, 2026
B
78/100

567 lines · 481 verified against sellers.json

Findings

Each finding lists the exact lines involved. Findings are automated observations of public files as of Oct 7, 2026. They describe file contents, not the intent or conduct of any company.

warning

DIRECT lines inconsistent with public data

11 −17 pts

The ads.txt specification defines DIRECT as an account the publisher directly controls. For these lines, either the ad system's own sellers.json lists the account as INTERMEDIARY, or the same account is marked DIRECT in the files of 3 or more unrelated companies. Either way, the public data does not support the DIRECT label. Buyers that use DIRECT labels in supply-path decisions may treat these lines differently.

How to fixUse DIRECT only for accounts your company controls. Confirm with each partner whether the account is yours; if it isn't, the specification calls for RESELLER.
Evidence (11)
line 21     aps.amazon.com, 4e8fb3b2-1c6c-42d6-890c-e5a6718315a3, DIRECT
             → observed: sellers.json lists the account as INTERMEDIARY; the same account is marked DIRECT by 4 different companies  name in sellers.json: Aditude Inc.  domain in sellers.json: aditude.io
line 40     themediagrid.com, 4R7XKQ, DIRECT, 35d5010d7789b49d
             → observed: the same account is marked DIRECT by 5 different companies  name in sellers.json: Aditude Inc  domain in sellers.json: aditude.io
line 43     gumgum.com, 15913, DIRECT, ffdef49475d318a9
             → observed: the same account is marked DIRECT by 4 different companies  name in sellers.json: Aditude.io  domain in sellers.json: aditude.io
line 63     Media.net, 8CUENMD10, DIRECT
             → observed: sellers.json lists the account as INTERMEDIARY; the same account is marked DIRECT by 3 different companies  name in sellers.json: Aditude, Inc.  domain in sellers.json: aditude.io
line 72     openx.com, 539087730, DIRECT, 6a698e2ec38604c6
             → observed: the same account is marked DIRECT by 3 different companies
line 76     pubmatic.com, 160912, DIRECT, 5d62403b186f2ace
             → observed: sellers.json lists the account as INTERMEDIARY; the same account is marked DIRECT by 3 different companies  name in sellers.json: Aditude  domain in sellers.json: aditude.io
line 79     risecodes.com, 60c8b4e48985e4000198293e, DIRECT
             → observed: sellers.json lists the account as INTERMEDIARY; the same account is marked DIRECT by 5 different companies  name in sellers.json: Aditude  domain in sellers.json: aditude.io
line 90     sharethrough.com, 4582, DIRECT, d53b998a7bd4ecd2
             → observed: sellers.json lists the account as INTERMEDIARY  name in sellers.json: Aditude  domain in sellers.json: aditude.io
line 91     smartadserver.com, 4582, DIRECT, 060d053dcf45cbf3
             → observed: sellers.json lists the account as INTERMEDIARY  name in sellers.json: Aditude  domain in sellers.json: aditude.io
line 99     triplelift.com, 14661, DIRECT, 6c33edb13117fd86
             → observed: sellers.json lists the account as INTERMEDIARY  name in sellers.json: Aditude  domain in sellers.json: aditude.com
line 105    yieldmo.com, 3433633362181300978, DIRECT
             → observed: the same account is marked DIRECT by 5 different companies  name in sellers.json: Aditude  domain in sellers.json: aditude.io
warning

Seller IDs not listed in the ad system's sellers.json

8 −1 pts

The ad system's current sellers.json doesn't list these accounts, so buyers that validate the chain can't match them. Common causes are closed accounts or former partners.

How to fixAsk each partner whether the account is still active and request their current lines; remove lines for closed accounts.
Evidence (8)
line 11     rubiconproject.com, 28669, DIRECT, 0bfd66d529a55807 #OB
             → sellers_json: https://rubiconproject.com/sellers.json
line 54     adform.com, 3305, RESELLER, 9f5210a2f0999e32
             → sellers_json: https://adform.com/sellers.json
line 59     robust-apps.com, 499, RESELLER
             → sellers_json: https://robust-apps.com/sellers.json
line 60     video.unrulymedia.com, 311396600, RESELLER
             → sellers_json: https://video.unrulymedia.com/sellers.json
line 189    pubmatic.com, 161853, RESELLER, 5d62403b186f2ace
             → sellers_json: https://pubmatic.com/sellers.json
line 552    themediagrid.com,RIX2M5,RESELLER,35d5010d7789b49d
             → sellers_json: https://themediagrid.com/sellers.json
line 594    video.unrulymedia.com,5336134699710583737,RESELLER
             → sellers_json: https://video.unrulymedia.com/sellers.json
line 607    xandr.com,10128,RESELLER,f5ab79cb980f11d1
             → sellers_json: https://xandr.com/sellers.json
info

Duplicate lines

58 −2 pts

Harmless but a sign of copy-paste maintenance.

How to fixRemove duplicates; keep one copy of each line.
Evidence (25 of 58)
ad_system: aditude.io  seller_id: 376  relationship: DIRECT
ad_system: adform.com  seller_id: 3119  relationship: RESELLER
ad_system: smartadserver.com  seller_id: 4284  relationship: RESELLER
ad_system: admanmedia.com  seller_id: 990  relationship: RESELLER
ad_system: appnexus.com  seller_id: 12878  relationship: RESELLER
ad_system: appnexus.com  seller_id: 13293  relationship: RESELLER
ad_system: appnexus.com  seller_id: 13297  relationship: RESELLER
ad_system: appnexus.com  seller_id: 15349  relationship: RESELLER
ad_system: appnexus.com  seller_id: 15629  relationship: RESELLER
ad_system: conversantmedia.com  seller_id: 100358  relationship: RESELLER
ad_system: conversantmedia.com  seller_id: 100396  relationship: RESELLER
ad_system: conversantmedia.com  seller_id: 100863  relationship: RESELLER
ad_system: eliteappgrade.com  seller_id: 494223  relationship: RESELLER
ad_system: mars.media  seller_id: 1010442  relationship: RESELLER
ad_system: media.net  seller_id: 8cu12aq1y  relationship: RESELLER
ad_system: openx.com  seller_id: 540679900  relationship: RESELLER
ad_system: openx.com  seller_id: 540838151  relationship: RESELLER
ad_system: openx.com  seller_id: 540857594  relationship: RESELLER
ad_system: openx.com  seller_id: 540866936  relationship: RESELLER
ad_system: openx.com  seller_id: 541031350  relationship: RESELLER
ad_system: pubmatic.com  seller_id: 156520  relationship: RESELLER
ad_system: pubmatic.com  seller_id: 157800  relationship: RESELLER
ad_system: pubmatic.com  seller_id: 158060  relationship: RESELLER
ad_system: pubmatic.com  seller_id: 158154  relationship: RESELLER
ad_system: pubmatic.com  seller_id: 158481  relationship: RESELLER
info

DIRECT accounts registered to another domain

2 −2 pts

Allowed when the domain belongs to the same company; add OWNERDOMAIN to make that explicit. Otherwise these accounts may belong to someone else.

How to fixIf the account is yours under another domain, declare it with OWNERDOMAIN=<that domain>; otherwise mark it RESELLER.
Evidence (2)
line 53     tagoras.io, c540c2f4bde6efe0400d88aeb6c2149a, DIRECT
             → domain in sellers.json: aditude.io  name in sellers.json: Aditude.io
line 69     Xandr.com, 2398, DIRECT
             → domain in sellers.json: aditude.io  name in sellers.json: Hashtag Labs
info

Ad systems without a public sellers.json

78

The ad system doesn't publish a readable sellers.json, so nobody can verify these lines. That's the ad system's gap, not the app's, so no points are deducted.

How to fixAsk the partner to publish sellers.json; until then buyers can't verify that path.
Evidence (25 of 78)
line 14     facebook.com, 1318895361522414, RESELLER, c3e20eee3f780d68
             → sellers_json: HTML or login page instead of JSON
line 30     openx.com, 541079309, RESELLER, 6a698e2ec38604c6
             → sellers_json: HTTP 403
line 44     openx.com, 537149485, RESELLER, 6a698e2ec38604c6
             → sellers_json: HTTP 403
line 58     openx.com, 560607116, RESELLER, 6a698e2ec38604c6
             → sellers_json: HTTP 403
line 64     openx.com, 537100188, RESELLER, 6a698e2ec38604c6
             → sellers_json: HTTP 403
line 72     openx.com, 539087730, DIRECT, 6a698e2ec38604c6
             → sellers_json: HTTP 403
line 73     openx.com, 540623748, DIRECT, 6a698e2ec38604c6
             → sellers_json: HTTP 403
line 81     openx.com, 537140488, RESELLER, 6a698e2ec38604c6
             → sellers_json: HTTP 403
line 87     zetaglobal.net, 716, RESELLER
             → sellers_json: HTTP 404
line 92     openx.com, 540274407, RESELLER, 6a698e2ec38604c6
             → sellers_json: HTTP 403
line 123    appnexus.com, 10617, RESELLER, f5ab79cb980f11d1
             → sellers_json: HTTP 403
line 124    appnexus.com, 12878, RESELLER, f5ab79cb980f11d1
             → sellers_json: HTTP 403
line 125    appnexus.com, 12976, RESELLER, f5ab79cb980f11d1
             → sellers_json: HTTP 403
line 126    appnexus.com, 13293, RESELLER, f5ab79cb980f11d1
             → sellers_json: HTTP 403
line 127    appnexus.com, 13297, RESELLER, f5ab79cb980f11d1
             → sellers_json: HTTP 403
line 128    appnexus.com, 15349, RESELLER, f5ab79cb980f11d1
             → sellers_json: HTTP 403
line 129    appnexus.com, 15629, RESELLER
             → sellers_json: HTTP 403
line 130    appnexus.com, 2764, RESELLER, f5ab79cb980f11d1
             → sellers_json: HTTP 403
line 131    appnexus.com, 7353, RESELLER, f5ab79cb980f11d1
             → sellers_json: HTTP 403
line 132    appnexus.com, 9393, RESELLER, f5ab79cb980f11d1
             → sellers_json: HTTP 403
line 141    eskimi.com, 2020000663, RESELLER
             → sellers_json: HTTP 403
line 152    openx.com, 540393169, RESELLER, 6a698e2ec38604c6
             → sellers_json: HTTP 403
line 153    openx.com, 540679900, RESELLER, 6a698e2ec38604c6
             → sellers_json: HTTP 403
line 154    openx.com, 540838151, RESELLER, 6a698e2ec38604c6
             → sellers_json: HTTP 403
line 155    openx.com, 540857594, RESELLER, 6a698e2ec38604c6
             → sellers_json: HTTP 403

Is this your app?

Get the full evidence list, a cleaned app-ads.txt, and alerts when partners' accounts change. Think something here is wrong? Request a correction.

Monitor this app