Skip to main content
Craft → PinterestIntegration guide

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

  1. 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.

  2. 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.

  3. 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.

  4. 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. 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. 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. 3

    The identifier is the bridge

    The epik click identifier, captured at the visit and carried into the Craft Commerce order.

  4. 4

    The event source decides reliability

    Fire from the event listener in PHP rather than a Twig template, which may be cached.

  5. 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

  1. 01

    Count orders carrying the epik click identifier

  2. 02

    Follow one real conversion end to end

  3. 03

    Read how this specific build handles order completion

    Assumptions carried from another Craft project are the main source of wasted time here.

  4. 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.

  5. 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.

Get my free conversion tracking audit

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.

Get my free conversion tracking audit

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.

Free · 30 min

Get Craft and Pinterest joined properly

Free30 minutesNo obligation