Nextdoor setup
ads.conversions.track() call fans the event out to Nextdoor server-side — no per-platform code.Setup guide
Overview
adscapi sends server-side events to the Nextdoor Conversions API
(POST https://ads.nextdoor.com/v2/api/conversions/track). Email and phone are
SHA-256 hashed before they leave your server; the Nextdoor click id (ndclid) and
client IP are forwarded unhashed when ad-personalization consent is set. Nextdoor
matches server events to pixel events by event_id (dedup) and data_source_id.
Prerequisites
- A Nextdoor Ads Manager account with an active ad account.
- A Nextdoor pixel created in Assets → Pixels (this gives you the
data_source_id).
1. Create an account
- Go to ads.nextdoor.com and create an advertising account.
- Open Assets → Pixels and create a pixel if you do not have one. Install the Universal Pixel on your site so browser and server events can be deduplicated.
2. Get your credentials
| Secret | Where to get it |
|---|---|
NEXTDOOR_PIXEL_ID |
Ads Manager → Assets → Pixels. Copy the Pixel ID — the API calls this the data_source_id. |
NEXTDOOR_TOKEN |
Ads Manager → API settings. Generate a Conversions API access token. Copy it once and store it securely. The token expires one year after it is generated. |
Sent as a bearer token: Authorization: Bearer <NEXTDOOR_TOKEN>.
To attribute clicks, also implement a Nextdoor ID sync so the
ndclidclick id reaches your server. Pass it on the event asclickIds.ndclid; adscapi forwards it unhashed only when ad-personalization consent is set.
3. Configure adscapi
export NEXTDOOR_PIXEL_ID="…" # the pixel id / data_source_id
export NEXTDOOR_TOKEN="…" # Conversions API access token
4. Verify
adscapi verify --platform nextdoor
Send a test purchase and confirm it lands under your pixel in Ads Manager. A 401
means the token is wrong or expired — see Troubleshooting.
5. Event mapping
Nextdoor accepts only 20 standardized lowercase event names. adscapi maps its canonical events to these:
| Canonical | Nextdoor |
|---|---|
| page_view | page_view |
| lead | lead |
| signup | sign_up |
| checkout_created | initiate_checkout |
| purchase | purchase |
An unmapped canonical name is passed through as-is; Nextdoor rejects any name outside
its 20 standardized values (purchase, lead, sign_up, add_to_cart,
initiate_checkout, page_view, search, view_content, add_to_wishlist,
subscribe, custom_conversion_1–custom_conversion_10).
Troubleshooting
HTTP 401— token invalid or expired (tokens last one year). Regenerate it in Ads Manager → API settings and updateNEXTDOOR_TOKEN.HTTP 400on purchases — Nextdoor wantscustom.order_valueas an ISO-4217 code plus amount (e.g.USD123.12); adscapi builds this fromvalue+currency, so send both.- Phone not matching — Nextdoor hashes exactly ten digits with no country code.
adscapi strips a leading NANP
1and hashes the remaining ten; send raw phone numbers, never pre-hashed. - Low match / no attribution — pass
user.email/user.phone(adscapi hashes them) and wire thendclidclick id via a Nextdoor ID sync.
1. Install adscapi
npm install adscapi # or run without installing: npx adscapi platforms
2. Get Nextdoor's tokens
Nextdoor activates once all of these are set. Run npx adscapi platforms to see them, then get each value from Nextdoor’s ads or events dashboard.
NEXTDOOR_TOKENNEXTDOOR_PIXEL_ID3. Set them for adscapi
Export the tokens in the environment that runs your server or the adscapi CLI.
export NEXTDOOR_TOKEN="…" export NEXTDOOR_PIXEL_ID="…"
4. Verify
check confirms the secrets are present; verify calls Nextdoor’s API to confirm they are valid.
npx adscapi check npx adscapi verify --platform nextdoor
5. Track a conversion
One call, sent to Nextdoor and every other configured platform. Pass raw email — adscapi hashes per platform. Consent is required.
import { createAdscapi } from 'adscapi';
const ads = createAdscapi();
const results = await ads.conversions.track({
name: 'purchase',
value: 49,
currency: 'USD',
user: { email: 'buyer@example.com' },
consent: { adUserData: true, adPersonalization: true },
});See the exact request on the Nextdoor payload preview.