Yahoo browser pixels use separate image and purchase collectors.
The pinned ytc.js runtime sends image requests to /sp.pl and purchase JSON to /collect. These collectors differ from the documented /spp.pl noscript image.
Envelope and hash-array checks are advisory producer conventions. Forwarded eventData and other identities remain open. Account configuration and delivery require external context.
What this pack matches
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 |
|---|---|---|---|---|
transport |
optional | Collector route from the path. | docs | |
a |
recommended | The JavaScript image collector supplies a configured identifier. Applies when {"kind":"value_in","param":"transport","values":["sp.pl"]}. Presence diagnostic severity: warning. | vendor.yahoo-browser.param.a.missingvendor.yahoo-browser.param.a.empty |
docs |
.yp |
recommended | The JavaScript image collector supplies a configured identifier. Applies when {"kind":"value_in","param":"transport","values":["sp.pl"]}. Presence diagnostic severity: warning. | vendor.yahoo-browser.param..yp.missingvendor.yahoo-browser.param..yp.empty |
docs |
b |
optional | Optional page metadata from the producer. | docs | |
c |
optional | Optional page metadata from the producer. | docs | |
f |
optional | Optional page metadata from the producer. Presence diagnostic severity: warning. | vendor.yahoo-browser.param.f.emptyvendor.yahoo-browser.param.f.invalid |
docs |
e |
optional | Optional page metadata from the producer. Presence diagnostic severity: warning. | vendor.yahoo-browser.param.e.emptyvendor.yahoo-browser.param.e.invalid |
docs |
enc |
optional | Optional page metadata from the producer. | docs | |
yv |
optional | Optional page metadata from the producer. | docs | |
isIframe |
optional | The producer marks iframe pixels with 1. Presence diagnostic severity: warning. | vendor.yahoo-browser.param.isIframe.emptyvendor.yahoo-browser.param.isIframe.invalid |
docs |
he |
optional | Enhanced matching is a SHA-256 hexadecimal digest. Presence diagnostic severity: warning. | vendor.yahoo-browser.param.he.emptyvendor.yahoo-browser.param.he.invalid |
docs |
hph |
optional | Enhanced matching is a SHA-256 hexadecimal digest. Presence diagnostic severity: warning. | vendor.yahoo-browser.param.hph.emptyvendor.yahoo-browser.param.hph.invalid |
docs |
auid |
optional | Enhanced matching is a SHA-256 hexadecimal digest. Presence diagnostic severity: warning. | vendor.yahoo-browser.param.auid.emptyvendor.yahoo-browser.param.auid.invalid |
docs |
root |
optional | The published contract specifies this field type. Presence diagnostic severity: warning. Native JSON type: object. | vendor.yahoo-browser.body.root.invalid |
docs |
eventEpoch |
recommended | The published contract specifies this field type. Presence diagnostic severity: warning. Native JSON type: integer. | vendor.yahoo-browser.body.eventEpoch.missingvendor.yahoo-browser.body.eventEpoch.invalid |
docs |
eventSource |
recommended | The published contract specifies this field type. Presence diagnostic severity: warning. Native JSON type: string. | vendor.yahoo-browser.body.eventSource.missingvendor.yahoo-browser.body.eventSource.emptyvendor.yahoo-browser.body.eventSource.invalid |
docs |
eventType |
recommended | The published contract specifies this field type. Presence diagnostic severity: warning. Native JSON type: string. | vendor.yahoo-browser.body.eventType.missingvendor.yahoo-browser.body.eventType.emptyvendor.yahoo-browser.body.eventType.invalid |
docs |
pageUrl |
optional | The published contract specifies this field type. Presence diagnostic severity: warning. Native JSON type: string. | vendor.yahoo-browser.body.pageUrl.emptyvendor.yahoo-browser.body.pageUrl.invalid |
docs |
pixelId |
optional | The SDK forwards the caller pixel identity. | docs | |
privacyData |
optional | The published contract specifies this field type. Presence diagnostic severity: warning. Native JSON type: object. | vendor.yahoo-browser.body.privacyData.invalid |
docs |
userData |
optional | The published contract specifies this field type. Presence diagnostic severity: warning. Native JSON type: object. | vendor.yahoo-browser.body.userData.invalid |
docs |
userData.ids |
optional | The published contract specifies this field type. Presence diagnostic severity: warning. Native JSON type: object. | vendor.yahoo-browser.body.userData.ids.invalid |
docs |
userData.ids.EMAIL |
optional | The published contract specifies this field type. Presence diagnostic severity: warning. Native JSON type: array. | vendor.yahoo-browser.body.userData.ids.EMAIL.invalid |
docs |
userData.ids.PHONE |
optional | The published contract specifies this field type. Presence diagnostic severity: warning. Native JSON type: array. | vendor.yahoo-browser.body.userData.ids.PHONE.invalid |
docs |
userData.ids.EMAIL[] |
optional | The published contract specifies this field type. Presence diagnostic severity: warning. Native JSON type: string. | vendor.yahoo-browser.body.userData.ids.EMAIL[].emptyvendor.yahoo-browser.body.userData.ids.EMAIL[].invalid |
docs |
userData.ids.PHONE[] |
optional | The published contract specifies this field type. Presence diagnostic severity: warning. Native JSON type: string. | vendor.yahoo-browser.body.userData.ids.PHONE[].emptyvendor.yahoo-browser.body.userData.ids.PHONE[].invalid |
docs |
path |
optional | Collector route. Complete HTTP capture contract. | docs | |
method |
recommended | GET images and POST purchase JSON. Complete HTTP capture contract. Applies when {"kind":"value_in","param":"path","values":["/sp.pl"]}. Presence diagnostic severity: warning. | vendor.yahoo-browser.http.method.missingvendor.yahoo-browser.http.method.emptyvendor.yahoo-browser.http.method.invalid |
docs |
purchase_method |
recommended | Purchase JSON uses POST. Complete HTTP capture contract. Applies when {"kind":"value_in","param":"path","values":["/collect"]}. Presence diagnostic severity: warning. | vendor.yahoo-browser.http.purchase_method.missingvendor.yahoo-browser.http.purchase_method.emptyvendor.yahoo-browser.http.purchase_method.invalid |
docs |
body |
recommended | A complete purchase capture carries a JSON object. Complete HTTP capture contract. Applies when {"kind":"value_in","param":"path","values":["/collect"]}. Presence diagnostic severity: warning. Native JSON type: object. | vendor.yahoo-browser.http.body.missingvendor.yahoo-browser.http.body.invalid |
docs |
Validate a payload
pixellint validate request @request.json --rulepack vendor/yahoo-browser
Try this failing payload in the playground. A Yahoo purchase with an unhashed email array.
{"url": "https://sp.analytics.yahoo.com/collect", "method": "POST", "headers": {"Content-Type": "application/json"}, "body": "{\"eventEpoch\": 1792560000, \"eventSource\": \"web\", \"eventType\": \"purchase\", \"privacyData\": {}, \"pixelId\": 12345, \"eventData\": [\"opaque\", null], \"userData\": {\"ids\": {\"EMAIL\": [\"raw@example.test\"], \"PHONE\": [\"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\"], \"OTHER\": \"open\"}}}"}
cargo install pixellint
·
npm install pixellint