pixellint

Amazon Ad Tag events carry their tag and event identities.

The main Amazon Ad Tag collector uses s.amazon-adsystem.com/iu3. The pack checks requests against the official browser SDK and server GTM template.

Custom events remain open. Browser UUID guidance is scoped to amzn.js requests, while server-template identities remain opaque. Producer checks are advisory.

What this pack matches

Hosts
s.amazon-adsystem.com
Paths
/iu3
Vendor docs
raw.githubusercontent.com/amzn/ads-pao-amznjs-gtm-server-side-template/main/template.tpl

Rules

Codes are stable. A finding in CI, MCP, or the playground lands on the same id.

Field Required What it checks Rule ids Source
pid recommended The producer sends its configured tag identity. The browser SDK accepts UUIDs; the server template leaves identity grammar open. Presence diagnostic severity: warning. vendor.amazon-ad-tag.param.pid.missing
vendor.amazon-ad-tag.param.pid.empty
docs
event recommended The event name is open and limited to 256 UTF-16 code units by both pinned producers. Presence diagnostic severity: warning. Maximum decoded UTF-16 code units: 256. vendor.amazon-ad-tag.param.event.missing
vendor.amazon-ad-tag.param.event.empty
vendor.amazon-ad-tag.param.event.invalid
docs
eventSource optional The browser SDK marks its requests with amzn.js. Other producers remain open. docs
items optional Array-style event attributes are serialized as JSON. docs
amazonConsentString optional The producer serializes the optional consent object as JSON. docs
reporting_attributes… optional Both producers normalize these reserved reporting attributes to ASCII letters, digits and underscores. Presence diagnostic severity: warning. Maximum decoded UTF-16 code units: 256. vendor.amazon-ad-tag.param.reporting_attributes.empty
vendor.amazon-ad-tag.param.reporting_attributes.invalid
docs
clientDedupeId optional The browser SDK retains nonempty deduplication strings through 256 UTF-16 code units. Cross-event uniqueness is external. Applies when {"kind":"value_in","param":"eventSource","values":["amzn.js"]}. Presence diagnostic severity: warning. Maximum decoded UTF-16 code units: 256. vendor.amazon-ad-tag.param.clientDedupeId.invalid docs
eventId optional The browser SDK retains nonempty deduplication strings through 256 UTF-16 code units. Cross-event uniqueness is external. Applies when {"kind":"value_in","param":"eventSource","values":["amzn.js"]}. Presence diagnostic severity: warning. Maximum decoded UTF-16 code units: 256. vendor.amazon-ad-tag.param.eventId.invalid docs
uuid optional The browser generates a per-request UUID when crypto.randomUUID is available. Presence diagnostic severity: warning. vendor.amazon-ad-tag.param.uuid.empty
vendor.amazon-ad-tag.param.uuid.invalid
docs
ts optional The SDK stamps browser events with epoch milliseconds. Applies when {"kind":"value_in","param":"eventSource","values":["amzn.js"]}. Presence diagnostic severity: warning. vendor.amazon-ad-tag.param.ts.empty
vendor.amazon-ad-tag.param.ts.invalid
docs
browser.tag_id recommended The browser SDK expects its configured tag identity to be a UUID. vendor.amazon-ad-tag.browser.tag_id docs
root optional The pinned SDK emits this JSON type. Decoded body source: items. Encoding: json. Decoding diagnostic severity: warning. Applies when {"kind":"present","param":"items"}. Presence diagnostic severity: warning. Native JSON type: array. vendor.amazon-ad-tag.body.root.invalid docs
root optional The pinned SDK emits this JSON type. Body scope: []. Decoded body source: items. Encoding: json. Decoding diagnostic severity: warning. Applies when {"kind":"present","param":"items"}. Presence diagnostic severity: warning. Native JSON type: object. vendor.amazon-ad-tag.body.root.invalid docs
root optional The pinned SDK emits this JSON type. Decoded body source: amazonConsentString. Encoding: json. Decoding diagnostic severity: warning. Applies when {"kind":"present","param":"amazonConsentString"}. Presence diagnostic severity: warning. Native JSON type: object or null. vendor.amazon-ad-tag.body.root.invalid docs
geo optional The pinned SDK emits this JSON type. Decoded body source: amazonConsentString. Encoding: json. Decoding diagnostic severity: warning. Applies when {"kind":"present","param":"amazonConsentString"}. Presence diagnostic severity: warning. Native JSON type: object. vendor.amazon-ad-tag.body.geo.invalid docs
geo.countryCode optional The pinned SDK emits this JSON type. Decoded body source: amazonConsentString. Encoding: json. Decoding diagnostic severity: warning. Applies when {"kind":"present","param":"amazonConsentString"}. Presence diagnostic severity: warning. Native JSON type: string. vendor.amazon-ad-tag.body.geo.countryCode.invalid docs
geo.ipAddress optional The pinned SDK emits this JSON type. Decoded body source: amazonConsentString. Encoding: json. Decoding diagnostic severity: warning. Applies when {"kind":"present","param":"amazonConsentString"}. Presence diagnostic severity: warning. Native JSON type: string. vendor.amazon-ad-tag.body.geo.ipAddress.empty
vendor.amazon-ad-tag.body.geo.ipAddress.invalid
docs
consent optional The pinned SDK emits this JSON type. Decoded body source: amazonConsentString. Encoding: json. Decoding diagnostic severity: warning. Applies when {"kind":"present","param":"amazonConsentString"}. Presence diagnostic severity: warning. Native JSON type: object. vendor.amazon-ad-tag.body.consent.invalid docs
consent.amazonConsentFormat optional The pinned SDK emits this JSON type. Decoded body source: amazonConsentString. Encoding: json. Decoding diagnostic severity: warning. Applies when {"kind":"present","param":"amazonConsentString"}. Presence diagnostic severity: warning. Native JSON type: object. vendor.amazon-ad-tag.body.consent.amazonConsentFormat.invalid docs
consent.amazonConsentFormat.amzn_ad_storage optional The pinned SDK emits this JSON type. Decoded body source: amazonConsentString. Encoding: json. Decoding diagnostic severity: warning. Applies when {"kind":"present","param":"amazonConsentString"}. Presence diagnostic severity: warning. Native JSON type: string. vendor.amazon-ad-tag.body.consent.amazonConsentFormat.amzn_ad_storage.invalid docs
consent.amazonConsentFormat.amzn_user_data optional The pinned SDK emits this JSON type. Decoded body source: amazonConsentString. Encoding: json. Decoding diagnostic severity: warning. Applies when {"kind":"present","param":"amazonConsentString"}. Presence diagnostic severity: warning. Native JSON type: string. vendor.amazon-ad-tag.body.consent.amazonConsentFormat.amzn_user_data.invalid docs
consent.gpp optional The pinned SDK emits this JSON type. Decoded body source: amazonConsentString. Encoding: json. Decoding diagnostic severity: warning. Applies when {"kind":"present","param":"amazonConsentString"}. Presence diagnostic severity: warning. Native JSON type: string. vendor.amazon-ad-tag.body.consent.gpp.invalid docs
consent.tcf optional The pinned SDK emits this JSON type. Decoded body source: amazonConsentString. Encoding: json. Decoding diagnostic severity: warning. Applies when {"kind":"present","param":"amazonConsentString"}. Presence diagnostic severity: warning. Native JSON type: string. vendor.amazon-ad-tag.body.consent.tcf.invalid docs
method recommended The pinned producer uses these transport methods. Complete HTTP capture contract. Presence diagnostic severity: warning. vendor.amazon-ad-tag.http.method.missing
vendor.amazon-ad-tag.http.method.empty
vendor.amazon-ad-tag.http.method.invalid
docs

Validate a payload

pixellint validate url "$ARTIFACT" --rulepack vendor/amazon-ad-tag

Try this failing payload in the playground. An Amazon collector event without tag identity.

https://s.amazon-adsystem.com/iu3?event=Purchase

cargo install pixellint · npm install pixellint