Connecting Craft CMS to Pinterest
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. Pinterest is a save-now-buy-later platform, which makes its attribution window the loosest of any network here and its conversion data the most delayed. The join between them succeeds or fails on one thing: whether the epik click identifier reaches the Craft Commerce order before the conversion happens, because Pinterest can only match a conversion it can tie back to a click it recognizes.
Free30 minutesNo obligation
Specific to this pair
Craft Commerce to Pinterest: epik on the order, event_id from PHP
Persist epik from the landing URL to a Craft Commerce order custom field, then send Pinterest a checkout event with value, currency, order ID and hashed email. Generate event_id in PHP, where the order number works, and output it uncached for the tag, or go server-only. Match conversion product IDs to the feed's variant SKUs.
Craft Commerce stores that do well on Pinterest tend to be design-led: furniture, prints, home goods, fashion. Pinterest's ready-made integrations target the big hosted platforms, so a Craft store's checkout event, event_id and epik capture are all custom work. Read epik from the landing URL (the tag also stores it in the _epik cookie), persist it to a custom field on the order from a Commerce event listener, and send a checkout event with value, currency, order ID and hashed email.
The event_id must match what the Pinterest tag sends from the confirmation page. On Craft that page is a Twig template, and on builds with aggressive static caching it may not render per order. Generate event_id in PHP (the order number works) and output it uncached, or drop the browser checkout event and go server-only. A tag fired from a cached template plus an API event with a different ID is the quiet double count.
Product IDs are the second join. If you run Pinterest shopping ads, the catalog feed comes from a Craft template or plugin you control, and the IDs in conversion events must match the feed, usually variant SKUs, for Pinterest to connect orders to products. Because Pinterest buyers often return days later without the epik, hashed email does most of the matching on repeat visits.
Craft → Pinterest · what breaks
Why this join usually fails — Craft → Pinterest
- 01
The epik 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
The save-now-buy-later gap
Pinterest's whole behaviour model is saving something for later. A share of the revenue it genuinely drives arrives months after the click and outside any attribution window, and no build changes that. Say it before anyone sets a target.
- 04
Nothing reconciles afterwards
Pinterest Ads Manager reports events received and their match status. A successful API call is not a matched conversion — reconcile Pinterest's reported conversions against your own records for the same window and expect a structural gap from the save-then-buy delay.
Craft → Pinterest · the fix
What working looks like — Craft → Pinterest
The epik click identifier on every order
Conversions arriving in Pinterest
Conversions appear in Pinterest Ads Manager against the campaign, with the value you sent, and become usable for optimization.
Reconciled against the source
Craft CMS's own records are the reference, not either dashboard.
Craft → Pinterest · architecture
How Craft and Pinterest 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
Pinterest needs a click to match
Pinterest matches server events using the click identifier where present and hashed customer information otherwise. Confirm current endpoint and field names against Pinterest's own documentation — its Conversions API has been through more than one revision.
- 3
The identifier is the bridge
The epik 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
Pinterest deduplicates on event_id, so the tag and the server event must carry the same value for the same conversion. Pinterest volumes are often low enough that a doubling reads as a good week rather than a bug, which is why this needs testing deliberately rather than assuming.
Craft → Pinterest · normal or broken
Working vs. broken, side by side — Craft → Pinterest
Normal, not a fault
The epik 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
Pinterest deduplicates on event_id, so the tag and the server event must carry the same value for the same conversion. Pinterest volumes are often low enough that a doubling reads as a good week rather than a bug, which is why this needs testing deliberately rather than assuming.
Reconciles with the source
Pinterest's count and Craft CMS's records agree within a few percent over a closed window.
Actually broken
The epik 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
Pinterest's whole behaviour model is saving something for later. A share of the revenue it genuinely drives arrives months after the click and outside any attribution window, and no build changes that. Say it before anyone sets a target.
Nobody has reconciled it
The dashboard shows a number and no one has compared it to Craft CMS.
Craft → Pinterest · diagnose
Diagnostic order — Craft → Pinterest
- 01
Count orders carrying the epik 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 event delivery and match reporting in Pinterest Ads Manager
Not the API response code. A 200 means Pinterest accepted the payload, not that it matched it to a click.
- 05
Read the match rate, not the success message
Pinterest Ads Manager reports events received and their match status. A successful API call is not a matched conversion — reconcile Pinterest's reported conversions against your own records for the same window and expect a structural gap from the save-then-buy delay.
Craft → Pinterest · prove
How it gets proven — Craft → Pinterest
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 epik click identifier confirmed present on a live order.
- Deduplication confirmed on a real conversion, and the attribution window your reporting uses stated explicitly.
- Order custom field confirmed populated on an order placed as an anonymous visitor through cache.
Craft → Pinterest · free audit
What we check in the free audit
- Count orders carrying the epik click identifier
- Follow one real conversion end to end
- Read how this specific build handles order completion
- Check the event delivery and match reporting in Pinterest Ads Manager
- 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 → Pinterest · when not to buy
When you don't need this — Craft → Pinterest
- If Pinterest 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 epik click identifier.
- If the original agency is still engaged, the fastest path is usually specifying the field and having them add the hook.
- If Pinterest is a small test line on your media plan, the Conversions API is more work than the signal is worth this quarter.
Craft → Pinterest · what we deliver
What gets built — Craft → Pinterest
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 Pinterest
Server events to the Pinterest Conversions API with the click identifier, hashed customer data and a matched event_id.
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 → Pinterest questions, answered
Check the Craft plugin store for one that supports your Commerce version and the Conversions API. Many Craft stores end up with a small custom module because builds are bespoke.
The IDs sent with conversion events must match the IDs in your catalog feed. Use the same SKU or variant ID in both.
Almost always because the epik 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.
The epik parameter, appended to your landing page URL and stored by the tag in the _epik cookie. Pinterest also matches on hashed email and phone. The complication is behavioural rather than technical: a Pin saved in October and acted on in December is completely normal, so a meaningful share of genuine Pinterest-driven revenue falls outside any click window and is structurally unattributable.
The Craft Commerce order-complete event. Fire from the event listener in PHP rather than a Twig template, which may be cached.
Pinterest Ads Manager reports events received and their match status. A successful API call is not a matched conversion — reconcile Pinterest's reported conversions against your own records for the same window and expect a structural gap from the save-then-buy delay.
More on Craft → Pinterest
- 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 → Pinterest fits in the rest of your tracking
- Pinterest · Local servicesPinterest Ads conversion tracking for local service businesses
- Pinterest · B2BPinterest Ads conversion tracking for B2B companies
- Pinterest × CRM DealsHow to reconcile Pinterest Ads against your CRM's closed-won deals
- Pinterest · Comparison page → demoHow to track comparison page visit to demo request for Pinterest Ads
- Drupal Commerce → PinterestConnecting Drupal Commerce to Pinterest
- Craft → X AdsConnecting Craft CMS to X Ads
- Local servicesConversion tracking for local businesses, where most conversions bypass the website
- Contentful → PinterestConnecting Contentful to Pinterest
Free · 30 min
Get Craft and Pinterest joined properly
Free30 minutesNo obligation
