Pinterest is the channel ecommerce brands keep sleeping on. If you sell home decor, fashion, wedding anything, or food, it quietly produces some of the cheapest purchase intent you can buy — and its tracking punishes lazy setups harder than most, because the gap between save and purchase is measured in weeks.
| Layer | What sits there |
|---|---|
| Inputs | Pinterest Tag (browser), API for Conversions (server), _epik click ID cookie, Enhanced Match hashed email |
| Shared event_id | Pinterest sees both copies of checkout, keeps one, and discards the duplicate |
| Destinations | One checkout conversion, Cross-device matching, Catalog retargeting by product ID |
How does Pinterest conversion tracking actually work?
It follows the two-layer pattern Meta and TikTok trained everyone on: a JavaScript tag in the browser (the Pinterest Tag) plus a server-side feed (the API for Conversions), both copies of each event carrying the same event_id so Pinterest can deduplicate them. If you've built Meta Pixel + CAPI properly, nothing here will surprise you.
One quirk trips people up immediately: Pinterest's purchase event is called checkout, not Purchase. The standard events are pagevisit, viewcategory, search, addtocart, checkout, signup, and lead — your GA4-style purchase maps to checkout. Mislabel that and campaigns optimize toward people who start checkout instead of people who pay.
How do you set up the Pinterest Tag through GTM?
Use the Pinterest Tag template in GTM, wired to the same ecommerce dataLayer events you push for every other platform. This is the payoff of clean tracking architecture: if your view_item, add_to_cart, and purchase pushes are solid, adding Pinterest is an afternoon, not a project.
- Create your Pinterest Tag in Ads Manager and copy the tag ID.
- In GTM, add the Pinterest Tag template from the community gallery and fire the base tag on all pages.
- Map event tags to your existing dataLayer triggers:
view_item→pagevisit,add_to_cart→addtocart,purchase→checkout. - Pass
value,currency, andline_itemswith catalog-matching product IDs on cart and checkout events. - Generate an
event_idper event — the same one you'll send server-side. If your dataLayer already carries one for Meta dedup, reuse it.
Product IDs matter more than people think — Pinterest matches them against your catalog feed for dynamic retargeting, and mismatched IDs are the number one reason catalog campaigns underdeliver.
What is Enhanced Match and the epik click ID?
Enhanced Match sends a SHA-256 hashed email (the em field on tag load) so Pinterest can match conversions after cookies die. Since so much Pinterest traffic converts days later, often on a different device, this hashed identifier does heavy lifting the cookie can't.
Pinterest also appends a click ID, epik, to the URL when someone clicks a promoted pin; the tag stores it in the _epik first-party cookie. Capture it — you'll pass it with your server-side events, and it's the strongest single signal Pinterest gets for tying a purchase back to an ad click.
How do you set up the Pinterest API for Conversions?
The API for Conversions is Pinterest's server-side endpoint: your server (or server-side GTM container) posts the same events directly to Pinterest with hashed user data attached. On most stores I audit, a meaningful slice of purchases never fire a browser tag at all — ad blockers, Safari's tracking prevention, and Pinterest's own in-app browser all eat events. The server-side copy fills that hole.
- Generate a conversion access token for your ad account in Pinterest Ads Manager.
- In your server-side GTM container, add a Pinterest API for Conversions tag and paste the token and ad account ID.
- Trigger it from the same GA4 event stream your other server-side tags use — one incoming event, fanned out to every platform.
- Map user data: hashed email, the
_epikclick ID, client IP, and user agent. - Send the identical
event_idthe browser tag used. Same event name, same ID — Pinterest keeps one copy. That's the whole dedup mechanism.
A minimal server event payload:
{
"event_name": "checkout",
"action_source": "web",
"event_id": "ord_84213_checkout",
"event_time": 1765432100,
"user_data": {
"em": ["<sha256 of lowercased email>"],
"click_id": "<value of _epik cookie>"
},
"custom_data": {
"value": "89.00",
"currency": "USD",
"order_id": "84213",
"content_ids": ["SKU-1188"]
}
}
- Sees promoted pin — epik click ID lands on your URL
- Saves to a board — No purchase, no browser event
- Week 3, new device — ITP already cleared the 7-day cookie
- Server event fires — Enhanced Match reconnects the buyer
- checkout attributed — Credited inside the longer window
Why does Pinterest's long conversion lag change your setup?
Because Pinterest isn't a click-and-buy channel. People save pins to boards and come back weeks later to purchase. Three practical consequences.
First, attribution windows matter more here than on any other platform. Pinterest lets you configure click, engagement, and view windows — "engagement" being a Pinterest-specific category covering saves and closeups. A tight click-only window will tell you Pinterest doesn't work when it's driving purchases that land just outside it. Check the longer windows before you kill campaigns.
Second, view-through and engagement attribution are more defensible here than on most channels. On display networks, view-through credit is mostly wishful thinking. On Pinterest, a save is deliberate purchase planning. I'd never weight it equal to a click, but I'd never zero it out here either.
Third, the cookie problem is brutal. Someone who saves a pin on iPhone and buys on desktop three weeks later has no surviving browser-side thread connecting the two — Safari's ITP caps script-set cookies at seven days. Enhanced Match and server-side events with hashed email stitch that journey back together. And a big share of Pinterest sessions happen inside the app's in-app browser, where tracking scripts behave worse than usual.
Should you use the Shopify or WooCommerce native Pinterest integration?
The native apps are fine for switching Pinterest on, and wrong for anyone spending real money. The Pinterest app for Shopify and the Pinterest for WooCommerce plugin install the tag, sync your catalog, and send server-side events in a few clicks. What you give up is control: you can't see or adjust what user data gets sent, can't align event IDs with the rest of your stack, checkout customizations break events silently, and consent handling is whatever the app decided. Keep the native app for the catalog feed. Run events through your own GTM and server container.
Do you need first-party server-side tracking for Pinterest specifically?
More than for most channels, yes — Pinterest's weeks-long consideration cycle is exactly the scenario browser-only tracking fails at. Server-side tracking means events route through a server you control (a server-side GTM container on your own subdomain, like track.yourstore.com) instead of relying on scripts in the visitor's browser.
For Pinterest that buys you four things. Cookies set from your own subdomain live longer under Safari's restrictions, so the visitor who returns in week three is still recognizable. Events lost to ad blockers and the in-app browser still arrive. Hashed email and epik click IDs ride on every event, so Pinterest optimizes on real purchase data instead of a fraction of it. And the same server container feeds Meta, Google, and TikTok from one event stream — consistent numbers, proper dedup everywhere, and the next channel stays an afternoon job. Our builds typically land around 98% conversion accuracy, which on a lagging channel like Pinterest is the difference between scaling it and wrongly concluding it doesn't convert.
How do you verify Pinterest events are firing correctly?
Check three places. In Pinterest Ads Manager, open the conversions section (the event history / tag health area — the menu name shifts between UI updates) and confirm each event type shows recent activity from both tag and API sources. Use the Pinterest Tag Helper Chrome extension to watch browser events fire. Then place a real test order and confirm exactly one checkout lands, with value, currency, and order ID intact.
If checkout counts roughly double after you add the API, your event_ids don't match between browser and server. Fix that before touching anything else.
Frequently asked questions
Does Pinterest have a conversions API like Meta CAPI?
Yes. The API for Conversions is Pinterest's equivalent of Meta's CAPI: you send events from your server with hashed user data and deduplicate against the Pinterest Tag using a shared event ID.
What is the Pinterest purchase event called?
checkout, not Purchase. Map your standard purchase dataLayer event to Pinterest's checkout with value, currency, and product IDs attached.
How does Pinterest deduplicate tag and API events?
Send the same event name and the same event_id on both the browser and server copies. Pinterest treats them as one conversion and discards the duplicate.
What is the epik parameter in my URLs?
Pinterest's click ID, added to landing page URLs when someone clicks a promoted pin. The tag stores it in the _epik cookie; pass it with server-side events to improve attribution.
Is the Shopify Pinterest app enough for conversion tracking?
It's enough to start, but it limits control over event IDs, user data, and consent, and can miss events on customized checkouts. Keep it for catalog sync and run events through GTM plus the API for Conversions.
Why does Pinterest report fewer conversions than my store?
Usually long conversion lag falling outside your attribution window, cross-device purchases the browser tag can't connect, and events lost to ad blockers or the in-app browser. Enhanced Match plus server-side events closes most of the gap.
- ecommerce
- capi

