Implement ads.txt specification
Overview
Ads.txt (Authorized Digital Sellers) and its app-ads.txt extension for apps are IAB specifications aiming at eliminating counterfeit and unauthorized inventory.
The main goal is to fight against domain or app spoofing: buyers can verify if the seller is legitimate and authorized to sell inventory originating from the publisher website/app. Direct publishers/resellers of websites/apps using Equativ must implement ads.txt/app-ads.txt to avoid being blocked and thus to avoid losing revenues.
The Ads.txt / App-ads.txt Control Center
Using the Ads.txt / App-ads.txt Control Center (located under Inventory > Ads.txt Control Center), you can view and troubleshoot common issues with ads.txt and app-ads.txt files - read Use ads.txt control center for more details.
IAB documentation
Refer to the IAB Tech Lab’s ads.txt specification home page for the ads.txt and app-ads.txt specifications. What direct publishers and resellers need to do
Direct publishers of websites (ads.txt)
As a direct publisher of websites using Equativ, you need to:
- host the ads.txt file at the root level of your (publisher) domain; for instance, if your website is https://example.com, the ads.txt file must be hosted at https://example.com/ads.txt; Keep in mind: the ads.txt file must be accessible from all IP geolocations; without full access across all geolocations, monetization is blocked because Equativ and DSPs cannot crawl the file
- if needed, specify a list of sellers for a specific subdomain and host an ads.txt file there – follow the instructions provided in chapter “Ads.txt file for subdomains” below
- declare all your authorized sellers in a file named "ads.txt"
- additionally, declare the SSPs Equativ is integrated with on a server to server basis in the file (see “Entries for Equativ server to server integrations” below)
- read chapters “How ads.txt works” below for a better general understanding and “Ads.txt / app-ads.txt file” for details on the file itself
Direct publishers of apps (app-ads.txt)
As a direct publisher of apps using Equativ, you need to:
- make sure that the app developer website URL is provided, correct and up to date in all the stores where you sell your apps (app listings)
- declare all your authorized sellers in a file named "app-ads.txt" and host it at the root level of the app developer website. Keep in mind: the app-ads.txt file must be accessible from all IP geolocations; without full access across all geolocations, monetization is blocked because Equativ and DSPs cannot crawl the file
- if needed, specify a list of sellers for a specific subdomain and host an app-ads.txt file there – follow the instructions provided in chapter “App-ads.txt file for subdomains” below
- additionally, declare the SSPs Equativ is integrated with on a server to server basis in the file (see “Entries for Equativ server to server integrations” below)
- read chapters “How app-ads.txt works” below for a better general understanding and “Ads.txt / app-ads.txt file” for details on the file itself;
Resellers of websites (ads.txt)
As a reseller of websites using Equativ, you need to:
- send your network ID at Equativ to each publisher you work with; if you are using multiple networks, provide the IDs of all networks
- ask publishers you work with to authorize all of the partners Equativ has integrated on a server to server basis (more details see below: “Entries for Equativ server to server integrations”)
- send the link to this documentation article to each publisher and ask them to declare the Equativ line for you as a reseller in the ads.txt file (see example "Reseller relationship" below). Also, remember to ask the publisher to add your own line to the ads.txt file, which will confirm your connection with the publisher. Example:
smartadserver.com, <Your NetworkId>, RESELLER, 060d053dcf45cbf3
yournetwork.com, <Seller ID>, DIRECT
Resellers of apps (app-ads.txt)
As a reseller of apps using Equativ, you need to:
- send your network ID at Equativ to each app publisher/app developer you work with; if you are using multiple networks, provide the IDs of all networks
- ask publishers/developers you work with to authorize all of the partners Equativ has integrated on a server to server basis (more details see below: “Entries for Equativ server to server integrations”)
- send the link to this documentation article to each publisher and ask them to declare the Equativ line for you as a reseller in the app-ads.txt file (see example "Reseller relationship"). Also, remember to ask the publisher to add your own line to the app-ads.txt file, which will confirm your connection with the publisher. Example:
smartadserver.com, <Your NetworkId>, RESELLER, 060d053dcf45cbf3
yournetwork.com, <Seller ID>, DIRECT
Direct publishers/resellers of websites/apps using Google OB integration
Publishers/resellers can use Equativ’s Server-side header bidding integration with Google Open Bidding (Google OB) – either exclusively or in combination with direct/reseller monetization. In any case, the Google OB relationship is a RESELLER relationship and must be declared as such in the ads.txt/app-ads.txt file. Otherwise, DSPs would detect inconsistencies between the declarations in the ads.txt/app-ads.txt file and the information in the SupplyChain Object, leading to losses in revenue for the publisher/reseller due to rejection as untrustworthy traffic.
Direct/reseller monetization of a property (website/app) can coexist with Google OB monetization in the same Equativ network. To distinguish Google OB from other types of traffic in the same Equativ network, Equativ has introduced a specific type of declaration for Google OB traffic, available as of May 2022.
Here is what you need to do:
Case 1 – Google OB monetization only
If you use Equativ through Google OB only, update the ads.txt/app-ads.txt file of the inventory you monetize by adding the line below (make sure you replace <Your NetworkId>
by the actual ID of your network at Equativ):
smartadserver.com, <Your NetworkId>-OB, RESELLER, 060d053dcf45cbf3
Example: If your network ID at Equativ were 1234
, the line to be declared would be:
smartadserver.com, 1234-OB, RESELLER, 060d053dcf45cbf3
Case 2 – Google OB and DIRECT/RESELLER monetization
If you use Equativ through multiple connections, including Google OB, proceed as explained in Case 1 above and, additionally, declare the DIRECT/RESELLER monetization.
For properties (websites/apps) you own and operate (DIRECT):
smartadserver.com, <Your NetworkId>-OB, RESELLER, 060d053dcf45cbf3
smartadserver.com, <Your NetworkId>, DIRECT, 060d053dcf45cbf3
For properties (websites/apps) you do not own and operate (RESELLER):
smartadserver.com, <Your NetworkId>-OB, RESELLER, 060d053dcf45cbf3
smartadserver.com, <Your NetworkId>, RESELLER, 060d053dcf45cbf3
yournetwork.com, <Seller ID>, DIRECT
Reminder: replace <Your NetworkId>
by the actual ID of your network at Equativ and the <Seller ID>
by the seller_id of the party on whose behalf the inventory is being monetized.
How ads.txt works
Full specification
Refer to the full ads.txt specification here.
Ads.txt detailed description
- the publisher hosts the ads.txt file at the root level of the (publisher) domain; for instance, if the website is https://example.com, the ads.txt file must be hosted at https://example.com/ads.txt; Keep in mind: the ads.txt file must be accessible from all IP geolocations; without full access across all geolocations, monetization is blocked because Equativ and DSPs cannot crawl the file
- in the ads.txt file, the publisher declares each authorized seller with the domain name of the advertising system, the publisher’s account ID in the advertising system and the type of relationship
- the buyer crawls this ads.txt file on a regular basis; from the file’s content, the buyer compiles and maintains a database which stores lists of authorized sellers for each publisher (domain); Keep in mind: buyers also check on the
ownerdomain
andmanagerdomain
fields to get confirmation on ownership and exclusive representation, therefore, these fields are strongly recommended (read more in “OWNERDOMAIN and MANAGERDOMAIN” below) - finally, buyers can check if the publisher URLs (domains), domain names of the advertising system and the publisher’s account IDs received in bid requests match with the data stored in the database; in case of a mismatch, the buyer may consider the bid request as fraudulent and take appropriate action
How app-ads.txt works
Full specification
Refer to the full ads.txt specification here.
App-ads.txt detailed description
-
app publishers/developers
- provide the Developer website URL (developer_url) within the app store listing metadata in all app stores distributing the app (see screenshots below showing the according field in Apple App Store Connect and Google Play Store); using the developer website URL provided by app developers, interested crawlers will derive a path and attempt to crawl an app-ads.txt file on the corresponding domain
- publish a text file called "app-ads.txt"x following the format and content guidelines specified in the ads.txt specification; more details also below: “Ads.txt / app-ads.txt file”); Keep in mind: the app-ads.txt file must be accessible from all IP geolocations; without full access across all geolocations, monetization is blocked because Equativ and DSPs cannot crawl the file
- app stores publish the app developer website URL, the app’s bundle_id and/or the app’s store_id as HTML <meta> tags following a specified format in the store listing page for each individual app
- ad networks/SSPs include the store URL indicating the individual store listing of the given app in all bid requests
-
authorized seller verifiers
- read the app store URL from the bid request and crawl it for the developer_url, store_id and/or the bundle_id
- determine the path to the app-ads.txt file from the developer_url
- crawl the file to get the authorized sellers and match/verify the obtained data
In case of Apple App Store Connect, add the Developer website URL in the field Support URL as well as in the field Marketing URL.
DSPs will crawl for your app-ads.txt file on the "Developer website", for which you provide the URL. However, in Apple's App Store, crawlers may also search for the “Support URL” and “Marketing URL” fields. ⓘ Note: once you have published the app, the “Marketing URL” will be displayed in the “Developer URL” field in the app store. Therefore, it is strongly recommended to have both the Support URL and the Marketing URL up to date with a valid app-ads.txt file.
In case of Google Play Store, add the Developer website URL in the field Website.
Ads.txt / app-ads.txt file
Refer to the full ads.txt specification here, which also contains an implementation guide.
File content: fields
In the ads.txt/app-ads.txt file, declare a separate line for each authorized seller. Each line has 4 fields – the first three are mandatory, the fourth is optional: <Field #1>, <Field #2>, <Field #3>, <Field #4>
In the ads.txt/app-ads.txt file of a given publisher, each line must be unique — no duplicate rows allowed!
Field | Name | General description | Description for publishers using Equativ |
---|---|---|---|
Field #1 |
Domain name of the advertising system | (Required) The canonical domain name of the SSP, Exchange, Header Wrapper, etc. system that bidders connect to | Always use the domain smartadserver.com
|
Field #2 |
Publisher’s Account ID | (Required) The identifier associated with the seller or reseller account within the advertising system in field #1 | The ID of the (app) publisher’s network at Equativ or the Equativ network ID of the ad network which sells the (app) publisher’s inventory; Note the warnings mentioned below!* |
Field #3 |
Type of Account/ Relationship | (Required) A value of DIRECT indicates that the (app) publisher (content owner) directly controls the account indicated in field #2 on the system in field #1. A value of RESELLER indicates that the (app) publisher has authorized another entity to control the account indicated in field #2 and resell their ad space via the system in field #1. |
Use DIRECT if the (app) publisher has a direct relationship with Equativ and has a dedicated Equativ network. Use RESELLER if the (app) publisher’s inventory is sold by a reseller (ad network) which has its own Equativ network |
Field #4 |
Certification Authority ID | (Optional) An ID that uniquely identifies the advertising system within a certification authority | Use 060d053dcf45cbf3 for Equativ |
In the ads.txt/app-ads.txt file, make sure you declare a Equativ network ID in one single row only; the example below shows two rows for the same network ID with different relationships (DIRECT/RESELLER) – this practice is not allowed and must be avoided! smartadserver.com , 1234, DIRECT, 060d053dcf45cbf3 smartadserver.com , 1234, RESELLER, 060d053dcf45cbf3
In case of Google OB integrations, declaring a network ID in two rows in the ads.txt/app-ads.txt file is allowed if one of them has the suffix -OB . For instance, declaring the two rows below in an ads.txt/app-ads.txt file is correct: smartadserver.com, 1234-OB, RESELLER, 060d053dcf45cbf3 smartadserver.com, 1234, DIRECT, 060d053dcf45cbf3
More details in section "Direct publishers/resellers of websites/apps using Google OB integration" above.
Ads.txt file validator
To make sure your ads.txt file is valid, you can use a file validation tool such as the ads.txt Validator at ads.txt Guru.
Entries for Equativ server to server integrations
Equativ has established integrations with multiple SSPs on a server to server basis.
To get demand from these SSPs, make sure you add the lines below to your ads.txt / app-ads.txt file.
Equativ SSPs
pubmatic.com, 156439, RESELLER, 5d62403b186f2ace
pubmatic.com, 154037, RESELLER, 5d62403b186f2ace
rubiconproject.com, 16114, RESELLER, 0bfd66d529a55807
openx.com, 537149888, RESELLER, 6a698e2ec38604c6
appnexus.com, 3703, RESELLER, f5ab79cb980f11d1
loopme.com, 5679, RESELLER, 6c8d5f95897a5a3b
xad.com, 958, RESELLER, 81cbf0a75a5e0e9a
video.unrulymedia.com, 2564526802, RESELLER, 6f752381ad5ec0e5
smaato.com, 1100044045, RESELLER, 07bcf65f187117b4
pubnative.net, 1006576, RESELLER, d641df8625486a7b
verve.com, 15503, RESELLER, 0c8f5958fc2d6270
adyoulike.com, b4bf4fdd9b0b915f746f6747ff432bde, RESELLER, 4ad745ead2958bf7
axonix.com, 57264, RESELLER, bc385f2b4a87b721
admanmedia.com, 43, RESELLER
sharethrough.com, OAW69Fon, RESELLER, d53b998a7bd4ecd2
contextweb.com, 560288, RESELLER, 89ff185a4c4e857c
rhebus.works, 5252004478, RESELLER
contextweb.com, 563115, RESELLER, 89ff185a4c4e857c
ogury.com, ede8d6ba-5a3f-4dfa-85aa-8cfb3c42f970, RESELLER
Equativ SSP resellers
appads.in, 107606, RESELLER #Loopme
rubiconproject.com, 24600, RESELLER, 0bfd66d529a55807 #Smaato
pubmatic.com, 156177, RESELLER, 5d62403b186f2ace #Smaato
rubiconproject.com, 17328, RESELLER, 0bfd66d529a55807 #Verve (Pubnative)
The following table shows which ad types and platforms are accessible through some of the SSPs listed above:
SSP | Platform | Ad type | Top countries |
---|---|---|---|
AcuityAds (Adman Media) | desktop, mobile web, app | display, video | USA, Canada |
Adyoulike | desktop, mobile web | native | France, Spain, Germany, Italy, UK |
Axonix | mobile web, app | display, video, native | USA, France, Spain, Mexico |
GroundTruth (xAd) | app | display, video | USA |
LoopMe | desktop, mobile web, app | display, video | USA, UK, France, Germany |
Magnite DV+ (Rubicon) | desktop, mobile web, app | display, video, native | USA, Germany, UK |
OpenX | desktop, mobile web, app | display, video | USA, France, UK |
PubMatic | desktop, mobile web, app | display, video | USA, Spain, Germany, France |
Pulsepoint (contextweb.com) | desktop, mobile web, app | display, video | |
Rhebus | app | display, video, native | USA |
Sharethrough | desktop, mobile web, app | display, video, native | USA, Canada |
Smaato | desktop, mobile web, app | display, video, native | USA, France, Germany |
Unruly (RhythmOne) | desktop, mobile web, app | video | USA |
Verve Group (PubNative) | app | display | USA, Brazil, Germany, France |
Xandr – Invest DSP | desktop, mobile web, app | display, video, native | France, Germany, USA, Spain, Italy |
Examples
The following table illustrates what to declare in the ads.txt/app-ads.txt file for various types of publisher relationships with Equativ:
Publisher’s relationship with Equativ | Entry (line) to be declared in ads.txt file | Description |
---|---|---|
Direct and reseller relationship | smartadserver.com, 123, DIRECT, 060d053dcf45cbf3 smartadserver.com, 456, RESELLER, 060d053dcf45cbf3 |
the (app) publisher sells some parts of his inventory directly using his own Equativ network with ID 123 ; other parts of the (app) publisher’s inventory are sold by an ad network which has the Equativ network ID 456
|
Direct relationship | smartadserver.com, 123, DIRECT, 060d053dcf45cbf3 |
the (app) publisher with the Equativ network ID 123 has a direct relationship (contract) with Equativ; the (app) publisher sells his inventory on RTB+ without any reseller (ad network) involvement |
Reseller relationship | smartadserver.com, 456, RESELLER, 060d053dcf45cbf3 |
a reseller (ad network) sells the (app) publisher’s inventory; the reseller has a Equativ network with ID 456
|
OWNERDOMAIN and MANAGERDOMAIN
As per ads.txt v1.1, the two additional lines OWNERDOMAIN
and MANAGERDOMAIN
must be added to the ads.txt file for increased transparency by the owner of the given property. The owner can be:
- a direct publisher owning the inventory being sold (“owned-and-operated inventory”)
- a seller of both owned-and-operated inventory and inventory being resold but not owned (indirect inventory)
Related resources:
OWNERDOMAIN
The OWNERDOMAIN
entry indicates the business domain of the owner of the property that is being monetized. The OWNERDOMAIN
entry:
- must be added even if the owner has only a single domain being monetized; in this case, the
OWNERDOMAIN
is identical to the domain where is ads.txt is located - must be added only once per ads.txt file
- must match the domain of the seller (with seller_type PUBLISHER or BOTH) specified in Equativ’s sellers.json, if the relationship between the
OWNERDOMAIN
and Equativ is a direct one
Example of an OWNERDOMAIN
entry in an ads.txt file:
OWNERDOMAIN=propertyowner.com
MANAGERDOMAIN
Optionally, the MANAGERDOMAIN
should be added, if applicable. The MANAGERDOMAIN
entry:
- represents the business domain of a primary/exclusive monetization partner (“manager”) of the publisher’s inventory; this allows buyers to easily determine the most direct path to buy inventory from a given publisher
- must represent a partner that exclusively monetizes a majority of the publisher’s supply - either globally or for a specific geography
- must be added only once per geography and/or once as a global manager
Example of a MANAGERDOMAIN
entry in an ads.txt file (global manager):
MANAGERDOMAIN=globalmanager.com
Example of a MANAGERDOMAIN
entry in an ads.txt file (manager for Germany, country codes as per ISO 3166-1 alpha-2): MANAGERDOMAIN=managerforgermansupply.com, DE
Inventory Partner Domain
Equativ supports the Inventory Partner Domain (IPD) specification by crawling the IPD in ads.txt/app-ads.txt files and validating partner authorization in bid requests.
The Inventory Partner Domain (IPD) specifies the domain of a vendor or partner authorized to sell the publisher's inventory. It maps inventory-sharing relationships common to (but not limited to) Connected TV (CTV) and over-the-top (OTT) streaming video services. By specifying the IPD in ads.txt, publishers can declare a content producer's domain as an authorized seller of shared ad inventory. This allows content distributors to maintain control over the inventory while enabling content producers to sell their portion directly, without the need for explicit authorization in the app-ads.txt file.
Ads.txt file for subdomains
You can specify a different set of authorized sellers for a subdomain of your website:
- create and deploy your usual ads.txt file at the root level of your domain (the “domain ads.txt file”); for instance, if your website is https://example.com, then the domain ads.txt file must be hosted at https://example.com/ads.txt
- create another ads.txt file and deploy it at the subdomain (the “subdomain ads.txt file”); for instance, if your subdomain is https://divisionone.example.com, the ads.txt file must be hosted at https://divisionone.example.com/ads.txt; Keep in mind: the ads.txt file must be accessible from all IP geolocations; otherwise, monetization is blocked because Equativ and DSPs cannot crawl the file
- in the root domain ads.txt file, add the line subdomain=divisionone.example.com; this line functions as a pointer to the subdomain ads.txt file
Once both ads.txt files (at domain and subdomain level) are implemented, crawlers will always first scan the ads.txt file at the root level of the domain. If crawlers find the pointer subdomain=divisionone.example.com in the file, they will proceed with scanning the subdomain ads.txt file (hosted at https://divisionone.example.com/ads.txt):
- if an ads.txt exists on that subdomain, then only advertising systems listed in the subdomain ads.txt file are authorized to sell inventory on that subdomain
- if there is no ads.txt file on the subdomain, only advertising systems listed in the root domain ads.txt file are authorized to sell inventory on that subdomain
Keep in mind: the subdomain ads.txt does not inherit authorized sellers from the domain ads.txt file; a seller authorized for both the domain and the subdomain must be specified in both ads.txt files!
For more details see the ads.txt specification.
App-ads.txt file for subdomains
In case of app-ads.txt files, you can also host a dedicated file for subdomains:
- make sure you list the subdomain where the app-ads.txt file is hosted as a developer page.
- do not use the line subdomain=divisionone.example.com (which functions as a pointer to a subdomain ads.txt file) in the app-ads.txt file since it is not used in case of app-ads.txt
- note the specific steps followed by crawlers to transform the developer URL into a path to locate an app-ads.txt file:
- extract the host name portion of the developer URL (more about the developer URL in chapter “App-ads.txt detailed description” above
- remove all but the first (and, if present, second) name from the host name which precedes the standard public suffix. For example:
- example.com simply remains example.com
- subdomain.example.com remains subdomain.example.com
- another.subdomain.example.com becomes subdomain.example.com
- another.subdomain.example.co.uk becomes subdomain.example.co.uk
- remove any “www.” or “m.” prefix remaining in the host name.
- append /app-ads.txt to that path.
- attempt to fetch the HTTPS version of the URL first, falling back to the HTTP version if SSL is unavailable
- crawlers always scan for a subdomain app-ads.txt file first; if no subdomain app-ads.txt file is found, crawlers will scan the root domain, e. g.:
- If no file is found on subdomain.example.com/app-ads.txt, crawlers will scan the root domain example.com/app-ads.txt
- If no file is found on subdomain.example.co.uk/app-ads.txt, crawlers will scan the root domain example.co.uk/app-ads.txt
Example 1
- StoreURL of the app: https://play.google.com/store/apps/details?id=com.lemonde.androidapp&hl=fr
- Developer URL of the app: https://www.lemonde.fr/
- Crawlers will attempt to retrieve the app-ads.txt file at lemonde.fr/app-ads.txt
Example 2
- StoreURL of the app: https://play.google.com/store/apps/details?id=com.globo.ge.app&hl=pt
- Developer URL of the app: http://globoesporte.globo.com
- crawlers will attempt to retrieve the app-ads.txt file at globoesporte.globo.com
- If there is no file on the subdomain http://globoesporte.globo.com/app-ads.txt, crawlers will attempt to retrieve the app-ads.txt file at the root domain http://globo.com/app-ads.txt
Redirects to ads.txt files
HTTP/HTTPS redirections (status codes 301, 302, 307) towards the ads.txt file are allowed. Multiple redirects are valid, as long as each redirect location remains within the original domain (e. g. a HTTP to HTTPS redirect within the same root domain is valid). HTTP redirects to destinations outside the original root domain (third party's web server domain) are valid only once. The crawler must treat any additional redirects returned by the third party as an error.
Capitalization in the ads.txt file name
According to the IAB ads.txt specification, the ads.txt file must be deployed in a pure lower case version (http://publisherdomain.com/ads.txt). Accordingly, the IAB reference crawler implementation checks (crawls for) the lower case version. You must deploy the lower case version and serve it from your domain in order to be sure that every crawler out there will find your ads.txt file.
Additionally, you may even want to deploy both lower and upper case versions (http://publisherdomain.com/ads.txt and http://publisherdomain.com/Ads.txt), in case some implementers choose to implement the upper case version.
Contact records
Optionally, you can add human readable contact data for the owner of the ads.txt file. For instance, you can specify the contact data of the advertising operations team for the website (e. g. an e-mail address, a phone number, link to a contact form etc.).
Contact record examples in the ads.txt file:
contact=adops@example.com
contact=http://example.com/contact-us