Connecting Craft CMS to Nextdoor Ads
Craft is a developer-oriented CMS, usually built bespoke by an agency, which means the implementation is whatever that agency decided and nothing is standard. Nextdoor is hyperlocal by construction, which makes it unusually good for home services and unusually easy to misread at low volume. The join between them succeeds or fails on one thing: whether the ndclid click identifier reaches the Craft Commerce order before the conversion happens, because Nextdoor can only match a conversion it can tie back to a click it recognizes.
Free30 minutesNo obligation
Specific to this pair
Craft CMS to Nextdoor: quote forms for local service sites
For local service sites on Craft, capture ndclid with JavaScript into a hidden Freeform or Formie field. On submission, send a lead to Nextdoor's Conversions API with ndclid, hashed email and phone, and the submission ID shared with the pixel, only after spam protection runs. Upload booked jobs with value later.
Nextdoor matters to a Craft site when the business serves a local area: a contractor, a clinic group or a landscaper whose agency built on Craft. The conversion is rarely a Commerce order; it is a quote or booking request through a Freeform or Formie form, and the value only appears later when the job is booked in whatever system runs the business.
Capture the ndclid with JavaScript on landing and write it into a hidden field on the form, since a cached Twig template cannot render it per visitor. On submission, send a lead event to Nextdoor's Conversions API from a form-submission listener with the click identifier, hashed email and phone, and the submission ID as the event identifier shared with the pixel. Confirm current field names in Nextdoor's documentation.
At neighborhood volumes, a few spam submissions a week can double your apparent conversions, and Nextdoor will optimize toward them. Make sure the form plugin's spam protection runs before the conversion is sent, not after. If jobs are booked offline, upload booked jobs later with their value and the same identifiers; the quote request alone tells you little about what Nextdoor actually earned.
Craft → Nextdoor · what breaks
Why this join usually fails — Craft → Nextdoor
- 01
The ndclid click identifier never reaches Craft
Craft's template caching and static caching plugins both serve stored output, and because every build is custom, where the capture code lives differs per site. There is no standard place to look.
- 02
Every install is bespoke
There is no standard Craft setup, so an approach that worked on another Craft site may have nothing to attach to on this one. Read the build before quoting.
- 03
Small numbers read as trends
Hyperlocal audiences produce low weekly volumes. Three conversions instead of six looks like a fifty percent collapse and is usually noise, so judge Nextdoor over longer windows than you would use elsewhere.
- 04
Nothing reconciles afterwards
Nextdoor Ads Manager reports received and matched conversions. Reconcile against your own records over a month rather than a week — at these volumes shorter windows are noise.
Craft → Nextdoor · the fix
What working looks like — Craft → Nextdoor
The ndclid click identifier on every order
Conversions arriving in Nextdoor
Conversions appear in Nextdoor Ads Manager against the campaign and neighbourhood targeting, with the value you sent.
Reconciled against the source
Craft CMS's own records are the reference, not either dashboard.
Craft → Nextdoor · architecture
How Craft and Nextdoor actually connect
- 1
Craft CMS holds the truth
Craft installs are bespoke by nature. Establish how this particular build models a completed order before assuming anything transfers from another Craft site.
- 2
Nextdoor Ads needs a click to match
Nextdoor matches server events on the click identifier and hashed customer information. Verify the current Conversions API endpoint and field names against Nextdoor's own documentation — this is a younger API than Meta's.
- 3
The identifier is the bridge
The ndclid click identifier, captured at the visit and carried into the Craft Commerce order.
- 4
The event source decides reliability
Fire from the event listener in PHP rather than a Twig template, which may be cached.
- 5
Deduplication at the destination
Nextdoor deduplicates on an event identifier shared between the pixel and the Conversions API. At Nextdoor's typical volumes a doubling is easy to miss because the absolute numbers stay small, so this needs testing rather than assuming.
Craft → Nextdoor · normal or broken
Working vs. broken, side by side — Craft → Nextdoor
Normal, not a fault
The ndclid click identifier present on the order
Visible on the record itself in Craft CMS, not merely captured somewhere on the site.
Sent from the Craft Commerce order-complete event
Deduplicated correctly
Nextdoor deduplicates on an event identifier shared between the pixel and the Conversions API. At Nextdoor's typical volumes a doubling is easy to miss because the absolute numbers stay small, so this needs testing rather than assuming.
Reconciles with the source
Nextdoor's count and Craft CMS's records agree within a few percent over a closed window.
Actually broken
The ndclid click identifier missing on most records
Craft's template caching and static caching plugins both serve stored output, and because every build is custom, where the capture code lives differs per site. There is no standard place to look.
Sent from the browser
There is no standard Craft setup, so an approach that worked on another Craft site may have nothing to attach to on this one. Read the build before quoting.
Counted twice, or not at all
Hyperlocal audiences produce low weekly volumes. Three conversions instead of six looks like a fifty percent collapse and is usually noise, so judge Nextdoor over longer windows than you would use elsewhere.
Nobody has reconciled it
The dashboard shows a number and no one has compared it to Craft CMS.
Craft → Nextdoor · diagnose
Diagnostic order — Craft → Nextdoor
- 01
Count orders carrying the ndclid click identifier
- 02
Follow one real conversion end to end
- 03
Read how this specific build handles order completion
Assumptions carried from another Craft project are the main source of wasted time here.
- 04
Check the volume before reading the trend
If weekly conversions are in single figures, week-over-week comparison is not telling you anything about campaign performance.
- 05
Read the match rate, not the success message
Nextdoor Ads Manager reports received and matched conversions. Reconcile against your own records over a month rather than a week — at these volumes shorter windows are noise.
Craft → Nextdoor · prove
How it gets proven — Craft → Nextdoor
Against Craft CMS's own records, not against either platform's dashboard.
Source of truth
Craft Commerce's order records in your own database, filtered to completed.
- The ndclid click identifier confirmed present on a live order.
- Deduplication confirmed on a real conversion, and the reporting window set long enough for the volume.
- Order custom field confirmed populated on an order placed as an anonymous visitor through cache.
Craft → Nextdoor · free audit
What we check in the free audit
- Count orders carrying the ndclid click identifier
- Follow one real conversion end to end
- Read how this specific build handles order completion
- Check the volume before reading the trend
- Read the match rate, not the success message
Checked against
Craft Commerce's order records in your own database, filtered to completed.
Free30 minutesNo obligation
Craft → Nextdoor · when not to buy
When you don't need this — Craft → Nextdoor
- If Nextdoor already reports conversions that reconcile against Craft CMS's records within a few percent, this join is working and there is nothing to buy.
- Measure identifier coverage yourself first — pull your last hundred orders and count how many carry the ndclid click identifier.
- If the original agency is still engaged, the fastest path is usually specifying the field and having them add the hook.
- If you do not serve a defined local area, Nextdoor's entire value proposition does not apply to you.
Craft → Nextdoor · what we deliver
What gets built — Craft → Nextdoor
Identifier capture into Craft
Capture the identifier and store it as a custom field on the order through a Craft event listener, server-side.
Event source: the Craft Commerce order-complete event
Fire from the event listener in PHP rather than a Twig template, which may be cached.
Dispatch to Nextdoor
Server events to the Nextdoor Conversions API with the click identifier, hashed customer data and a matched event identifier.
Reversals where they exist
Refunds and cancelled orders are recorded against the order.
Written guarantee
95%+ tracking accuracy
Measured against Craft Commerce's order records in your own database, filtered to completed.. Miss it and we keep working at no cost.
From $400 · See packages
FAQ
Craft → Nextdoor questions, answered
Capture the ndclid into a hidden form field, then send the submission to the Nextdoor Conversions API server-side with hashed email and phone and an event ID shared with the pixel.
Usually pixel and server events without a shared event ID, or spam submissions sent before the plugin filtered them. At small volumes both are easy to miss.
Almost always because the ndclid click identifier never reached the Craft Commerce order. Craft's template caching and static caching plugins both serve stored output, and because every build is custom, where the capture code lives differs per site. There is no standard place to look. Measure coverage before debugging the dispatch.
Nextdoor's click identifier, appended to your landing page URL, alongside a pixel that sets its own cookie. Nextdoor also matches on hashed email and phone. The practical constraint is volume: a neighbourhood-level audience produces small numbers, and small numbers move a lot week to week for reasons that have nothing to do with your campaign.
The Craft Commerce order-complete event. Fire from the event listener in PHP rather than a Twig template, which may be cached.
Nextdoor Ads Manager reports received and matched conversions. Reconcile against your own records over a month rather than a week — at these volumes shorter windows are noise.
More on Craft → Nextdoor
- Craft → Google AdsConnecting Craft CMS to Google Ads
- Craft → MetaConnecting Craft CMS to Meta Conversions API
- Craft → GA4Connecting Craft CMS to GA4
RELATED GUIDES
Where Craft → Nextdoor fits in the rest of your tracking
- Nextdoor · Local servicesNextdoor Ads conversion tracking for local service businesses
- Nextdoor · B2BNextdoor Ads conversion tracking for B2B companies
- Nextdoor × Ecommerce OrdersHow to reconcile Nextdoor Ads against your store's order table
- Nextdoor · Comparison page → demoHow to track comparison page visit to demo request for Nextdoor Ads
- Sanity → NextdoorConnecting Sanity to Nextdoor Ads
- Craft → MetaConnecting Craft CMS to Meta Conversions API
- Local servicesConversion tracking for local businesses, where most conversions bypass the website
- Contentful → NextdoorConnecting Contentful to Nextdoor Ads
Free · 30 min
Get Craft and Nextdoor joined properly
Free30 minutesNo obligation
