Server-side events · Platform reference
Nextdoor Conversion API (CAPI) checker
Nextdoor's Conversion API posts conversion events to ads.nextdoor.com, tied to a pixel through data_source_id. Each event carries a customer object with the ndclid click ID and/or hashed email and phone. Nextdoor asks for events within one hour, and attributes them to clicks in the last 7 days or views in the last 1 day. Events most often go unattributed because no click_id or hashed identifier was sent, the event_name wasn't one of the accepted lowercase values, or the Pixel and CAPI used different event_id values.
Read from the official documentation on 9 November 2026. Sources are listed at the end.
Check your own setup
Nextdoor's click ID (ndclid) rides on your landing URL. Paste the curl -sIL output of your tracking link into our redirect chain checker and it shows whether the click ID survives every redirect, so your server has a click_id to send. It doesn't validate the Nextdoor CAPI JSON, event names or hashing. Our CAPI event checker reads Meta payloads only.
Open the Redirect Chain CheckerEndpoint and authentication
POST https://ads.nextdoor.com/v2/api/conversions/track
Bearer token (Authorization: Bearer <token>) generated in Nextdoor Ads Manager under Business Settings > Ads API > Generate token
Standard event names
Spelled exactly as Nextdoor expects them. A near miss is treated as a different event.
| Event | Use it for |
|---|---|
| purchase | Accepted event_name value |
| lead | Accepted event_name value |
| sign_up | Accepted event_name value |
| add_to_cart | Accepted event_name value |
| initiate_checkout | Accepted event_name value |
| page_view | Accepted event_name value |
| search | Accepted event_name value |
| view_content | Accepted event_name value |
| add_to_wishlist | Accepted event_name value |
| subscribe | Accepted event_name value |
| custom_conversion_1 ... custom_conversion_10 | Ten custom conversion slots |
Required and recommended fields
| Field | What it needs |
|---|---|
| event_name | Required. One of the accepted values above |
| event_id | Listed as required in the conversions/track schema. An advertiser-chosen unique ID, used with event_name for Pixel/CAPI dedup |
| event_time_epoch | Required. Unix epoch seconds, no milliseconds. event_time (ISO 8601) is deprecated |
| action_source | Required. Where the event happened, e.g. website, app, offline |
| data_source_id | Required. The pixel ID the event is tied to. It replaces the deprecated pixel_id |
| customer | Required. Identifiers: at least one of hashed email, hashed phone and/or click_id |
| action_source_url | URL where the event occurred |
| custom.order_value / custom.currency / custom.order_id | Conversion value (string), currency (e.g. USD) and a unique transaction ID |
| partner_id | Required on every call if you send through a partner platform |
Match keys and hashing
| Key | Normalise and hash |
|---|---|
| customer.email | SHA-256, normalised to lowercase with leading and trailing spaces removed |
| customer.phone_number | SHA-256 of the E.164-formatted number |
| customer.first_name / customer.last_name | SHA-256, normalised to lowercase with no spaces |
| customer.street_address / customer.city | SHA-256, normalised |
| customer.state / customer.zip_code / customer.country | Plain codes, e.g. CA, 90210, US (state and country are 2-letter ISO) |
| customer.date_of_birth | YYYYMMDD, e.g. 19900115 |
| customer.gender | f or m |
| customer.external_id | Your internal user ID, sent as-is |
| customer.client_ip_address / customer.client_user_agent | Raw, not hashed |
Click ids
| Click id | Where it comes from |
|---|---|
| ndclid | Nextdoor appends a unique click ID to your landing page URL after an ad click. Send it raw as customer.click_id. Nextdoor describes it as a direct, highly reliable match |
Deduplication
- event_id and event_name together deduplicate events sent by both the Nextdoor Pixel and CAPI. The same event must carry the same event_id on both.
- Generate a unique event_id per conversion. Nextdoor's own sample hardcodes "12304", which would collapse every event if copied.
Time limits and batch sizes
- Nextdoor says it's crucial to send data promptly and within one hour.
- Attribution windows: 7 days after an ad click, 1 day after an ad view.
- event_time_epoch is seconds since 1970-01-01 with no milliseconds.
How to test before you trust it
- test_event field: Add the test_event string (e.g. "TEST1234") to the request body to flag the event as a test. If it's absent, Nextdoor treats the event as live
Why events arrive but don't attribute
- Sending events hours or days late: Nextdoor asks for delivery within one hour, and click attribution only covers 7 days.
- event_name has to be one of the accepted lowercase strings (purchase, sign_up, page_view ...). Nextdoor's data-types page shows capitalised examples (Purchase, PageView), so copy names from the conversions/track reference.
- An event_id that's missing or differs between the Pixel and CAPI means double counting. A constant event_id copied from the sample means every event looks like a duplicate.
- Sending milliseconds in event_time_epoch, or still sending the deprecated event_time / pixel_id / client_id fields, instead of seconds plus data_source_id.
- No click_id and no hashed email or phone: Nextdoor needs at least one of these to match the user.
- Unhashed email or phone, or phone not in E.164 before hashing, produces identifiers that won't match.
Sources
- Nextdoor Developer: conversions/track API reference
- Nextdoor Developer: Conversion API data types
- Nextdoor Developer: Conversion API user matching
- Nextdoor Developer: Conversion API getting started
Platforms change these rules without notice. If a source says something different from this page, the source wins.