vendor/google-ads-call-conversions · vendor documented
Call conversion uploads need an E.164 callerId
Not UploadClickConversions. The call upload wants conversionAction, partialFailure true, the caller phone in E.164, and two timestamps with a timezone offset and a space, not a T.
callerId needs a leading plus
Google documents E.164. 16502531234 is a number. +16502531234 is the contract.
Rule: vendor.google-ads-call-conversions.body.callerId.invalid
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 |
|---|---|---|---|---|
conversions |
required | UploadCallConversions requires a `conversions` array. Fix: Send at least one CallConversion in `conversions`. | vendor.google-ads-call-conversions.body.conversions.missing |
docs |
partialFailure |
required | Google documents `partial_failure` as required, and the upload guides say to always send true. Fix: Set `partialFailure` to `true`. | vendor.google-ads-call-conversions.body.partialFailure.missingvendor.google-ads-call-conversions.body.partialFailure.emptyvendor.google-ads-call-conversions.body.partialFailure.invalid |
docs |
conversionAction |
required | It is the conversion action resource name, and every uploaded call conversion requires it. Fix: Set `conversionAction` to `customers/{id}/conversionActions/{id}`. | vendor.google-ads-call-conversions.body.conversionAction.missingvendor.google-ads-call-conversions.body.conversionAction.empty |
docs |
callerId |
required | It is the caller phone number. Google documents E.164 with a leading `+`. Fix: Send E.164, such as `+16502531234`. | vendor.google-ads-call-conversions.body.callerId.missingvendor.google-ads-call-conversions.body.callerId.emptyvendor.google-ads-call-conversions.body.callerId.invalid |
docs |
callStartDateTime |
required | Google documents the call start time as `yyyy-mm-dd hh:mm:ss+|-hh:mm`. Fix: Send a timestamp such as `2026-08-21 12:00:00+00:00`. | vendor.google-ads-call-conversions.body.callStartDateTime.missingvendor.google-ads-call-conversions.body.callStartDateTime.emptyvendor.google-ads-call-conversions.body.callStartDateTime.invalid |
docs |
conversionDateTime |
required | Google documents the conversion time with a timezone offset as `yyyy-mm-dd hh:mm:ss+|-hh:mm`. It must be after the call start. Fix: Send a timestamp such as `2026-08-21 12:05:00+00:00`. | vendor.google-ads-call-conversions.body.conversionDateTime.missingvendor.google-ads-call-conversions.body.conversionDateTime.emptyvendor.google-ads-call-conversions.body.conversionDateTime.invalid |
docs |
currencyCode |
optional | It is an ISO 4217 currency code for `conversionValue`. Fix: Use the three-letter code, such as `USD`. | vendor.google-ads-call-conversions.body.currencyCode.emptyvendor.google-ads-call-conversions.body.currencyCode.invalid |
docs |
Validate a payload
pixellint validate json @payload.json --rulepack vendor/google-ads-call-conversions
Try this failing payload in the playground. Call conversion upload without E.164 callerId.
{"partialFailure":true,"conversions":[{"conversionAction":"customers/1/conversionActions/2","callerId":"16502531234","callStartDateTime":"2026-08-21 12:00:00+00:00","conversionDateTime":"2026-08-21 12:05:00+00:00"}]}
cargo install pixellint
·
npm install pixellint