Skip to content

A publisher who sells through the server has sellers to declare that their own ads.txt does not know about #1278

Open

Description

@jwrosewell

The problem

A buyer's crawler that does not find a seller in a publisher's ads.txt refuses that seller's inventory. A publisher who sells through this server has sellers to declare that their own file does not know about, and the file passes through the server untouched. Every buyer's crawler reads the file, and a typo in it costs the publisher revenue silently.

The change

[ads-txt]
modules = ["iabtl"]

[ads-txt.iabtl]
lines = ["ssp.example, 12345, DIRECT, f08c47fec0942fa0", "CONTACT=ads@publisher.example"]

[[fetch]]
media_type = "text/plain"
path = "/ads.txt"
middleware = ["ads-txt.iabtl"]

crates/ads-txt/iabtl is a middleware for text/plain, the first to use an entry for a media type other than HTML. Named in a [[fetch]] entry on the file's path, it passes the origin's file through and writes the lines after its last one, on a line of their own. The publisher's file stays theirs, read from the origin as it is, and the deployment adds to it.

Each line is checked as the settings load, and by ts config validate, against the file's grammar, which allows a record of domain, account id and DIRECT or RESELLER with an optional certification authority id, or one of the five variables (CONTACT, SUBDOMAIN, INVENTORYPARTNERDOMAIN, OWNERDOMAIN, MANAGERDOMAIN) with a value. A comment, an empty line, a record with the wrong number of fields, another relationship, a trailing comma, a variable with no value or another name, and an empty list are each refused naming the line and what is wrong. A document that selects the module and names it in no [[fetch]] entry for text/plain is refused, because the lines would never be written. modules is a list so that a module supplying lines from a vendor's own system can be named beside iabtl.

Where it is

Added by the sellers a deployment appends to the publisher's ads.txt (#1361), from fork pull request 15 (jwrosewell#15), on top of middleware on other media types (fork pull request 14). The module took the name ads-txt.iabtl, for its folder crates/ads-txt/iabtl, when each adapter began to list the modules it links (#1384). The designs are https://github.com/IABTechLab/trusted-server/blob/feature/6-integration-seam/docs/superpowers/specs/2026-10-12-ads-txt-sellers-design.md and https://github.com/IABTechLab/trusted-server/blob/feature/6-integration-seam/docs/superpowers/specs/2026-10-14-no-modules-crate-design.md. A publisher whose origin has no ads.txt gets one made of the lines alone through a later change in the stack (fork pull request 17).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions