vendor/nextdoor-conversions-api · vendor documented
Nextdoor CAPI events need event_name, seconds, and a match key
event_name is a documented lowercase event. action_source is the channel. event_time_epoch is Unix seconds, a 10-digit value. customer needs hashed email, hashed phone_number, or click_id. website events need action_source_url. purchase needs custom.order_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 |
|---|---|---|---|---|
event_name |
required | It is the conversion event name. Nextdoor documents a fixed lowercase set. Fix: Set `event_name` to a documented value such as `purchase` or `page_view`. | vendor.nextdoor-conversions-api.body.event_name.missingvendor.nextdoor-conversions-api.body.event_name.emptyvendor.nextdoor-conversions-api.body.event_name.invalid |
docs |
action_source |
required | It names the channel the conversion happened on. Fix: Set `action_source` to a documented channel such as `website`. | vendor.nextdoor-conversions-api.body.action_source.missingvendor.nextdoor-conversions-api.body.action_source.emptyvendor.nextdoor-conversions-api.body.action_source.invalid |
docs |
event_id |
required | It identifies the event so Pixel and CAPI can deduplicate. Fix: Set `event_id` to the same deterministic id the Pixel sent. | vendor.nextdoor-conversions-api.body.event_id.missingvendor.nextdoor-conversions-api.body.event_id.empty |
docs |
event_time_epoch |
required | It is Unix time in seconds. Nextdoor documents no milliseconds. `event_time` is deprecated. Fix: Send `event_time_epoch` as a 10-digit Unix timestamp in seconds. | vendor.nextdoor-conversions-api.body.event_time_epoch.missingvendor.nextdoor-conversions-api.body.event_time_epoch.emptyvendor.nextdoor-conversions-api.body.event_time_epoch.invalid |
docs |
data_source_id |
required | It is the Pixel ID. Nextdoor documents `data_source_id` and deprecated `pixel_id`. Fix: Set `data_source_id` to the Pixel ID from Nextdoor Ads. | vendor.nextdoor-conversions-api.body.data_source_id.missingvendor.nextdoor-conversions-api.body.data_source_id.empty |
docs |
customer |
required | It holds matching identifiers. Nextdoor documents it as required. Fix: Send a `customer` object with at least one of hashed `email`, hashed `phone_number`, or `click_id`. | vendor.nextdoor-conversions-api.body.customer.missing |
docs |
action_source_url |
optional | It is the page URL. Nextdoor documents it as required for website events. Fix: Set `action_source_url` to the absolute page URL. | vendor.nextdoor-conversions-api.body.action_source_url.emptyvendor.nextdoor-conversions-api.body.action_source_url.invalid |
docs |
customer.email |
optional | It is the SHA-256 digest of the email after trim and lowercase. Fix: Trim, lowercase, SHA-256, and send 64 lowercase hex characters. | vendor.nextdoor-conversions-api.body.customer.email.emptyvendor.nextdoor-conversions-api.body.customer.email.invalid |
docs |
customer.phone_number |
optional | It is the SHA-256 digest of the phone number. Fix: Hash the ten-digit phone and send 64 lowercase hex characters. | vendor.nextdoor-conversions-api.body.customer.phone_number.emptyvendor.nextdoor-conversions-api.body.customer.phone_number.invalid |
docs |
customer.click_id |
optional | It is the `ndclid` from the Nextdoor click URL. | vendor.nextdoor-conversions-api.body.customer.click_id.empty |
docs |
customer.client_user_agent |
optional | It is the raw browser user agent. Nextdoor documents it as required for website events, and not hashed. | vendor.nextdoor-conversions-api.body.customer.client_user_agent.empty |
docs |
custom.order_value |
optional | It is ISO 4217 currency then the amount, such as `USD49.99`. Nextdoor documents it as required on purchase. Fix: Set `custom.order_value` to a currency code followed by the amount, such as `USD49.99`. | vendor.nextdoor-conversions-api.body.custom.order_value.empty |
docs |
body.user_needs_an_identifier |
required | `customer` carries none of the match keys Nextdoor requires. Send hashed `email`, hashed `phone_number`, or `click_id`. Fix: Add at least one of hashed email, hashed phone, or `ndclid`. | vendor.nextdoor-conversions-api.body.user_needs_an_identifier |
docs |
body.website_requires_url |
required | The event is `action_source: website` but carries no `action_source_url`. Nextdoor documents the page URL as required for website events. Fix: Set `action_source_url` to the absolute page URL. | vendor.nextdoor-conversions-api.body.website_requires_url |
docs |
body.purchase_requires_order_value |
required | The event is `purchase` but carries no `custom.order_value`. Nextdoor documents order value as required on purchase. Fix: Set `custom.order_value` to a currency code followed by the amount, such as `USD49.99`. | vendor.nextdoor-conversions-api.body.purchase_requires_order_value |
docs |
body.unhashed_email |
required | `customer.email` carries what looks like a raw email address. Nextdoor documents SHA-256 after trim and lowercase. Fix: Trim, lowercase, hash with SHA-256, and send the 64-character hex digest. | vendor.nextdoor-conversions-api.body.unhashed_email |
docs |
Validate a payload
pixellint validate json @payload.json --rulepack vendor/nextdoor-conversions-api
Try this failing payload in the playground. Nextdoor CAPI missing event_name.
{"event_id":"order-123","event_time_epoch":1710438591,"action_source":"physical_store","data_source_id":"5b0b9e9a-156a-11ee-be56-0242ac120002","customer":{"click_id":"92dea472-8b8b-456f-8b5b-b2a55147c3cc"}}
cargo install pixellint
·
npm install pixellint