vendor/google-ads-conversion-adjustments · vendor documented
Conversion adjustments need an identity and a restatement value
Not UploadClickConversions. The adjustment upload wants conversionAction, partialFailure true, adjustmentType, a timestamp with a timezone offset, and either orderId or gclidDateTimePair.gclid. RESTATEMENT needs restatementValue.adjustedValue.
RESTATEMENT needs the new value
Google documents restatementValue.adjustedValue as required on a restatement. A retraction must not send it.
Rule: vendor.google-ads-conversion-adjustments.body.restatement_requires_value
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 |
|---|---|---|---|---|
conversionAdjustments |
required | UploadConversionAdjustments requires a `conversionAdjustments` array. Fix: Send at least one ConversionAdjustment in `conversionAdjustments`. | vendor.google-ads-conversion-adjustments.body.conversionAdjustments.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-conversion-adjustments.body.partialFailure.missingvendor.google-ads-conversion-adjustments.body.partialFailure.emptyvendor.google-ads-conversion-adjustments.body.partialFailure.invalid |
docs |
conversionAction |
required | It is the conversion action resource name, and every uploaded adjustment requires it. Fix: Set `conversionAction` to `customers/{id}/conversionActions/{id}`. | vendor.google-ads-conversion-adjustments.body.conversionAction.missingvendor.google-ads-conversion-adjustments.body.conversionAction.empty |
docs |
adjustmentType |
required | Google documents `RETRACTION`, `RESTATEMENT`, and `ENHANCEMENT`. Fix: Set `adjustmentType` to `RETRACTION`, `RESTATEMENT`, or `ENHANCEMENT`. | vendor.google-ads-conversion-adjustments.body.adjustmentType.missingvendor.google-ads-conversion-adjustments.body.adjustmentType.emptyvendor.google-ads-conversion-adjustments.body.adjustmentType.invalid |
docs |
adjustmentDateTime |
required | Google documents the adjustment time with a timezone offset 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-conversion-adjustments.body.adjustmentDateTime.missingvendor.google-ads-conversion-adjustments.body.adjustmentDateTime.emptyvendor.google-ads-conversion-adjustments.body.adjustmentDateTime.invalid |
docs |
orderId |
optional | It identifies the conversion to adjust. Google documents `orderId` as the recommended identifier. | vendor.google-ads-conversion-adjustments.body.orderId.empty |
docs |
gclidDateTimePair.gclid |
optional | Google click ID plus conversion time, as an alternative to `orderId`. | vendor.google-ads-conversion-adjustments.body.gclidDateTimePair.gclid.empty |
docs |
gclidDateTimePair.conversionDateTime |
optional | The original conversion time when identifying via `gclidDateTimePair`. Same timestamp shape as `adjustmentDateTime`. | vendor.google-ads-conversion-adjustments.body.gclidDateTimePair.conversionDateTime.emptyvendor.google-ads-conversion-adjustments.body.gclidDateTimePair.conversionDateTime.invalid |
docs |
restatementValue.adjustedValue |
optional | The restated conversion value. Google documents it as required on `RESTATEMENT` and invalid on `RETRACTION`. | docs | |
restatementValue.currencyCode |
optional | It is an ISO 4217 currency code for `adjustedValue`. Fix: Use the three-letter code, such as `USD`. | vendor.google-ads-conversion-adjustments.body.restatementValue.currencyCode.emptyvendor.google-ads-conversion-adjustments.body.restatementValue.currencyCode.invalid |
docs |
body.order_or_gclid_required |
required | The adjustment has neither `orderId` nor `gclidDateTimePair.gclid`. Google documents one of them as required so the conversion can be identified. Fix: Send `orderId`, or send `gclidDateTimePair` with `gclid` and `conversionDateTime`. | vendor.google-ads-conversion-adjustments.body.order_or_gclid_required |
docs |
body.restatement_requires_value |
required | A `RESTATEMENT` has no `restatementValue.adjustedValue`. Google documents the restated value as required. Fix: Set `restatementValue.adjustedValue` to the new conversion value. | vendor.google-ads-conversion-adjustments.body.restatement_requires_value |
docs |
Validate a payload
pixellint validate json @payload.json --rulepack vendor/google-ads-conversion-adjustments
Try this failing payload in the playground. Conversion adjustment restatement without a value.
{"partialFailure":true,"conversionAdjustments":[{"conversionAction":"customers/1/conversionActions/2","adjustmentType":"RESTATEMENT","adjustmentDateTime":"2026-08-21 12:00:00+00:00","orderId":"ORDER-1"}]}
cargo install pixellint
·
npm install pixellint