A DSP can't target a string it has never seen. clearTag cleans what your players actually send — macros, mixed spellings, German genre names, junk values — and classifies the result into IAB Content Taxonomy 2.2, the vocabulary every buyer already speaks.
Paste a real tag below and watch it happen.
Point the player or SSAI stitcher at clearTag. Nothing else changes — consent, sizes and
macros ride along untouched, and no dashboard setup is required.
/tag?tag=<your tag>
Unexpanded macros, n/a and null, Krimi and Krimiserie and crime as three different values. Normalised into one vocabulary — and on a live channel, resolved against the schedule to what is actually airing.
The cleaned result is classified into IAB Content 2.2 and sent as ppsj — ids Google passes into eligible bid requests. That is a category a DSP can target, not a programme name it has to recognise.
Everything below is optional. clearTag reads these from the tag itself. Fill one in only if your player can pass it — an explicit value always wins.
Try withholding a signal and watch what buyers lose. These are ops
decisions, not technical ones — set them permanently in data/policy.json.
The ppsj taxonomy is never affected: it is the standardised buyer path and no
switch here can turn it off.
Run a tag above and the result lands here.
IAB Content Taxonomy 2.2 — the part a buyer can actually target.
Open the cleaned tag in Google's inspector: it requests the ad from your ad server and plays back the VAST it returns, so you can confirm delivery yourself. Then register the six keys in your ad server to start targeting on them.
| ppsj | IAB Content Taxonomy 2.2 ids | The buyer-facing path. Google passes these into eligible bid requests to Google demand and eligible Authorized Buyers, Open Bidding and SDK Bidding partners. |
| ct_ch / ct_se / ct_ti | channel, series, title, as free text | Google's CTV programming params. Google describes them as exposing transparency to buyers — but a DSP cannot target a programme name it has never seen, which is why the taxonomy above is the one that changes bidding. |
| cust_params | the cleaned keys | Your own ad server: line items, PMP targeting, reporting. Never reaches a buyer — there is no field for publisher key-values in the bid request. Optional, and no dashboard registration is needed for anything above. |
| Cleaning | Unexpanded macros, n/a, null, empty strings and placeholder values are recognised and dropped rather than classified. | Every request |
| Normalisation | Krimi, Krimiserie and crime collapse to one value; German and English genre names map to the same vocabulary. | Every request |
| Schedule | On a live channel the tag names the channel, not the programme. The channel and timestamp resolve against the EPG to what is airing now. | FAST, linear |
| Classification | The cleaned, resolved result maps to IAB Content 2.2 ids — the only content taxonomy Ad Manager's PPS accepts. | Every request |
Every id emitted is checked against the published IAB Content 2.2 list by a test that fails the build otherwise. An id that is not in the taxonomy is dropped silently by Ad Manager, which looks identical to sending nothing at all.
| Tag proxy | Swap one URL. Live on this page. |
| Lookup API | POST /v1/enrich returns taxonomy ids and a
ready ppsj string to append yourself. Live. |
| Pre-computed | We keep your catalogue enriched and push signals to your metadata service or an edge cache. |
iu, sizes, correlator, cmsid/vid, macros and every
unmanaged parameter arrive byte-for-byte. TCF strings, gdpr,
us_privacy and npa pass through — we read no device id, IP or
consent string, and store none. We redirect rather than fetch, so your ad server still sees
the real device. Enrichment is in-process, well under a millisecond. If anything fails, the
request falls through to your original tag.
This bench proves your tags are cleaned and the signals are well-formed. It cannot prove a DSP received them — and neither can a VAST inspector, which shows the ad response, not the bid request.
1. Run real tags here. 2. Decode ppsj and check the ids mean
what you'd expect. 3. Point a test placement at the proxy and read your Ad Manager PPS
report — the only step that closes the loop.
PPS must be enabled on your network, and channels already running CMS ingestion are the wrong place to test: they have a content object already.
Inventory that bid as anonymous CTV becomes describable — news, sports, kids, by channel and title, in the taxonomy buyers already target. That is what makes a contextual PMP or a suitability guarantee sellable.
Signals arriving is not revenue. It makes inventory addressable; whether buyers pay more is the next experiment, and it needs a holdback.
Send us five real tags — ideally your messiest partner — and we'll come back with what resolves, what doesn't, and the ppsj each one would carry. Then we point a test placement at it together and read your PPS report.
Already integrating? See your channels · API reference · Live traffic