Connecting Concrete CMS to Pinterest
Concrete CMS is a self-hosted PHP CMS used by small organisations and agencies, typically with commerce added through an add-on rather than built in. 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 Concrete CMS 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
Concrete CMS stores on Pinterest: worth it with a product catalog
Pinterest fits Concrete CMS stores selling visual products; brochure sites need only the tag's lead event. For orders, get the order ID to the browser through an uncached block or endpoint so tag and server share event_id. Store _epik on the order via the commerce add-on's order event, and check the add-on can export a catalog feed.
Pinterest fits a Concrete site only when it sells visual products through a commerce add-on: prints, crafts, local makers, a museum shop. For a brochure site the conversion is a contact form, and Pinterest rarely drives those. If that is you, the Pinterest tag with a lead event is enough and the Conversions API is not worth building.
For a store, the hard part is deduplication on a cached site. The tag's checkout event and your server event need the same event_id, and the obvious value is the order ID. On Concrete the confirmation page may be served from full page cache, so the order ID has to reach the browser through something not cached, such as a block excluded from the cache or a small endpoint that reads it from the session. Without that, the tag and the server cannot agree on an ID and every order counts twice. Store the _epik value on the order through the add-on's order event so the server event can carry it.
Pinterest's shopping formats need a product catalog. Check whether your commerce add-on can export a feed Pinterest accepts. If it cannot, Pinterest has purchase events with no products behind them, and product-level reporting and dynamic retargeting are unavailable.
Concrete CMS → Pinterest · what breaks
Why this join usually fails — Concrete CMS → Pinterest
- 01
The epik click identifier never reaches Concrete CMS
Full page caching and the add-on ecosystem both interfere. Because commerce is an add-on rather than core, where the order is created differs by which add-on is installed.
- 02
Commerce as an add-on, not a core feature
Which add-on is installed determines the entire integration surface, so nothing transfers between two Concrete sites without checking first.
- 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.
Concrete CMS → Pinterest · the fix
What working looks like — Concrete CMS → 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
Concrete CMS → Pinterest · architecture
How Concrete CMS and Pinterest actually connect
- 1
Concrete CMS holds the truth
Self-hosted means you own and can query the data directly, which makes reconciliation straightforward once the identifier is present.
- 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 Concrete CMS order.
- 4
The event source decides reliability
Fire server-side. Page caching means the confirmation template may not execute.
- 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.
Concrete CMS → Pinterest · normal or broken
Working vs. broken, side by side — Concrete CMS → Pinterest
Normal, not a fault
The epik click identifier present on the order
Sent from the order-completed event from your commerce add-on
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
Actually broken
The epik click identifier missing on most records
Full page caching and the add-on ecosystem both interfere. Because commerce is an add-on rather than core, where the order is created differs by which add-on is installed.
Sent from the browser
Which add-on is installed determines the entire integration surface, so nothing transfers between two Concrete sites without checking first.
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
Concrete CMS → Pinterest · diagnose
Diagnostic order — Concrete CMS → Pinterest
- 01
Count orders carrying the epik click identifier
- 02
Follow one real conversion end to end
- 03
Identify which commerce add-on is in use
That decides where the order is created and what events exist to hook.
- 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.
Concrete CMS → Pinterest · prove
How it gets proven — Concrete CMS → Pinterest
Source of truth
Your own database's order records, at agreed states.
- 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 attribute confirmed populated on a purchase through a cached page.
Concrete CMS → Pinterest · free audit
What we check in the free audit
- Count orders carrying the epik click identifier
- Follow one real conversion end to end
- Identify which commerce add-on is in use
- Check the event delivery and match reporting in Pinterest Ads Manager
- Read the match rate, not the success message
Checked against
Your own database's order records, at agreed states.
Free30 minutesNo obligation
Concrete CMS → Pinterest · when not to buy
When you don't need this — Concrete CMS → Pinterest
- Measure identifier coverage yourself first — pull your last hundred orders and count how many carry the epik click identifier.
- If your Concrete site is brochure-only with enquiries by form, treat it as a lead-gen site rather than a commerce one.
- If Pinterest is a small test line on your media plan, the Conversions API is more work than the signal is worth this quarter.
Concrete CMS → Pinterest · what we deliver
What gets built — Concrete CMS → Pinterest
Identifier capture into Concrete CMS
Capture the identifier and persist it as order attribute data through an event listener, server-side.
Event source: the order-completed event from your commerce add-on
Fire server-side. Page caching means the confirmation template may not execute.
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
Order state changes recorded by the add-on.
Written guarantee
95%+ tracking accuracy
Measured against Your own database's order records, at agreed states.. Miss it and we keep working at no cost.
From $400 · See packages
FAQ
Concrete CMS → Pinterest questions, answered
Yes, by sending events from the commerce add-on's order event on your server. There is no native connector to rely on, so check the marketplace for your version.
The tag and server events do not share an event_id, often because the cached confirmation page cannot see the order ID.
Almost always because the epik click identifier never reached the Concrete CMS order. Full page caching and the add-on ecosystem both interfere. Because commerce is an add-on rather than core, where the order is created differs by which add-on is installed. 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 order-completed event from your commerce add-on. Fire server-side. Page caching means the confirmation template may not execute.
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 Concrete CMS → Pinterest
- Craft → PinterestConnecting Craft CMS to Pinterest
- Concrete CMS → Google AdsConnecting Concrete CMS to Google Ads
- Concrete CMS → MetaConnecting Concrete CMS to Meta Conversions API
RELATED GUIDES
Where Concrete CMS → 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
- Ghost → PinterestConnecting Ghost memberships to Pinterest
- Concrete CMS → LinkedInConnecting Concrete CMS to LinkedIn Ads
- Local servicesConversion tracking for local businesses, where most conversions bypass the website
- Umbraco → PinterestConnecting Umbraco to Pinterest
Free · 30 min
Get Concrete CMS and Pinterest joined properly
Free30 minutesNo obligation
