RTBlint
v0.5.0Validates OpenRTB bid requests and bid responses against versioned IAB spec snapshots.
Digital advertising runs on published specifications that nothing enforces at runtime. A malformed bid request, a broken wrapper chain, and a misspelled pixel event all fail silently. OpenAdTech builds the validators that catch them, before the impression is spent.
Every arrow is a handoff between two companies, governed by a published spec, with no runtime that enforces it. That gap is where impressions go missing. Each tool grades one crossing, and each box links to the source that does it.
OpenAdTech is an open-source project building the conformance layer digital advertising never got. The specifications exist and are public. What is missing is anything that checks a payload against them at the moment it crosses between two companies. That gap is where revenue leaks, where user data travels unreviewed, where fraud becomes indistinguishable from error, and where autonomous systems now transact with nothing verifying them. Every tool here is free, auditable, cites the document behind each finding, and is built to run inside that gap.
A tag that fails renders nothing and still bills. The rules that catch it are the unglamorous ones: a missing impression element, a duplicate one that double-counts, a media file on plain HTTP that secure inventory blocks, quartile tracking nobody wired so measurement receives no signal at all.
Tracking URLs are where identifiers actually travel, and they are the least reviewed artifact in the chain. Pixellint flags raw email addresses sent where the vendor requires SHA-256 hashing, credentials embedded in a URL, macros fired unexpanded to a third party, and any tracker still riding plaintext HTTP.
A malformed payload and a fraudulent one look identical to everything downstream, because both are unverifiable. These tools do not detect fraud. They remove the ambiguity fraud hides in, by checking that the verification resources meant to catch it are present, correctly declared, and reachable.
Buying is moving to agents on both sides of the transaction, with no human reading a validator UI in between. Every tool ships an MCP server so an agent can check its own output deterministically, and VASTlint implements AdCP 3.0 governance so a pipeline can declare and enforce content standards rather than assume them.
Each chip is a real rule or tool id you can look up in the catalog. Nothing on this page describes something we intend to build.
Each tool takes an artifact that crosses a company boundary and grades it against the spec that governs it. Same engine design, same output contract, same license. Learn one and you know all three.
Validates OpenRTB bid requests and bid responses against versioned IAB spec snapshots.
Validates, inspects, and repairs VAST ad tags, including wrapper chains, SIMID, VMAP, and DAAST.
Validates impression pixels, click trackers, and conversion postbacks against vendor-documented rulepacks.
No install, no account, no key. Paste a payload into any of these and it grades against the same engine the CLI and the MCP server run.
A broken ad tag does not throw. The auction still clears, the impression still bills, and the slot renders nothing. Every layer downstream reports success. That is why this category of loss survives quarterly review: no dashboard has a row for it.
The cost of adding this to your stack is one command and no license fee. That asymmetry is the entire argument.
Every figure below was read from a public registry API and can be checked against the same endpoint today. None of it is estimated, projected, or rounded up.
| Channel | Package | Count |
|---|---|---|
| npm | vastlint | 9,221 |
| npm | rtblint-core | 454 |
| RubyGems | vastlint | 3,825 |
| crates.io | vastlint-core | 2,433 |
| crates.io | vastlint-cli | 850 |
| crates.io | rtblint-core | 192 |
| crates.io | rtblint-mcp | 87 |
| crates.io | rtblint | 84 |
| Docker Hub | aleksuix/vastlint | 1,913 |
| GitHub releases | vastlint | 1,622 |
| GitHub releases | vastlint-erlang | 213 |
| PyPI | vastlint | 1,865 |
| VS Code Marketplace | aleksuix.vastlint | 315 |
| Total | 23,074 | |
How these are counted. Read straight from each registry’s public API on 2026-07-25. Nothing is estimated or projected. crates.io and RubyGems report lifetime downloads. npm has no lifetime endpoint, so that figure sums the daily range API from each package’s first publish date. PyPI uses the without_mirrors series, which excludes mirror traffic and is the smaller of the two figures available. Registries count machines, not people, so treat this as reach, not headcount.
Agentic buying is arriving faster than the guardrails around it. An agent that assembles a campaign needs to check its own work against the spec, in the loop, without a human reading a validator UI. Every tool here ships an MCP server for exactly that.
Findings come back as structured JSON: a stable rule id, a severity, the line it came from, and fix guidance. An agent can act on that. It cannot act on a screenshot of a validator UI. Each server links to its source.
{
"mcpServers": {
"vastlint": { "type": "http", "url": "https://vastlint.org/mcp" },
"rtblint": { "type": "http", "url": "https://rtblint.org/mcp" },
"pixellint": { "command": "pixellint-mcp" }
}
}19 callable tools across the three servers. Two are hosted over HTTP with no install and no account. The third runs as a local binary over stdio. Findings return as structured JSON with stable rule ids, so an agent can branch on a result instead of parsing prose.
Specifications are written by industry bodies and implemented by everyone else. The gap between the two is where interoperability breaks. These tools live in that gap and cite their sources.
The specs that define how a bid, a creative, and a measurement event are structured. Every rule in the catalog names the document it came from.
The Ad Context Protocol defines how agents negotiate and transact advertising. Validation is the part that keeps an autonomous pipeline honest.
Implementing a specification closely enough to validate it surfaces the places where the specification itself is wrong, ambiguous, or untested. Those findings go back to the people who maintain it, as patches to the specs and their reference implementations.
OpenAdTech is an independent open-source project. It implements published specifications from the IAB Tech Lab and the Agentic Advertising Organization. It is not affiliated with, endorsed by, or a working group of either organization.
A finding names the spec section, the XSD, the RFC, or the documented revenue impact behind it. If a rule cannot cite something, it does not ship. That is what makes a result arguable with a partner instead of just an opinion.
A single Rust core compiles to a CLI, a WASM module, a native library, and language bindings. Your CI, your browser, your BEAM service, and your agent all get identical verdicts, because they run identical code.
Apache 2.0, with a written commitment: no paid tier that hides rules, no cloud version that requires an account, no rate limits, no telemetry without opt-in. Validation infrastructure only works if everyone can run it.