Prooflytics + Pinterest Ads: Attribution from Pin to Closed Deal
Pinterest Ads is a channel B2B marketers tend to underestimate: in niches like interior design, food & beverage, fashion retail, DIY, and home improvement, Pinterest delivers conversions with a longer decision-making cycle than Meta or Google, but at lower cost due to less competition. The problem is the same as everywhere: Pinterest shows CPL in its dashboard, but doesn’t show the cost per closed deal — because it can’t see what happens after the click in your CRM.
Prooflytics bridges this gap: the epik parameter from the Pinterest URL -> first-party attribution -> CRM lifecycle -> real CAC per pin and campaign.
Why Pinterest Attribution Is Harder Than Meta or Google
Pinterest uses epik — a proprietary click ID, analogous to gclid/fbclid. Key characteristics:
epikis present in the URL only on paid pin clicks (not organic)epikcookie lifetime — 30 days (vs 7 days for Meta under iOS 14+ restrictions)- Pinterest Ads reporting has a 24–48 hour delay — campaign optimization runs on yesterday’s data
- View-through attribution in Pinterest — 30 days by default (harder to isolate click-through)
For B2B companies with deal cycles of 30–90 days, this means: standard Pinterest pixel attribution (browser-based) loses conversions due to cookie expiry, device switching, and private browsing mode. Server-side Conversions API (CAPI) solves most of these issues.
How Prooflytics Captures epik
The Prooflytics Pixel — a first-party JavaScript snippet on your site — captures epik from URL query parameters on every visit and stores it in a first-party context (localStorage + cookie) alongside UTM parameters.
Click on a Pinterest pin
-> Landing page URL: /landing?epik=dj0yJiI4OTc...&utm_source=pinterest&utm_campaign=spring_2025
-> Prooflytics Pixel captures: {epik, utm_source, utm_campaign, utm_content}
-> Lead submits form -> email -> passed to CRM
-> CRM deal linked to epik via first-party ID
-> Deal closes -> Prooflytics sees: Pinterest campaign X -> CAC $Y
Pinterest Conversions API (CAPI): Server-Side Events
For accurate attribution without browser cookie dependency — Pinterest CAPI sends events directly from the server:
import requests, hashlib, time
PINTEREST_AD_ACCOUNT_ID = "your_ad_account_id"
PINTEREST_CAPI_TOKEN = "your_capi_token"
PINTEREST_CAPI_URL = f"https://api.pinterest.com/v5/ad_accounts/{PINTEREST_AD_ACCOUNT_ID}/events"
def hash_pii(value: str) -> str:
# Pinterest requires SHA-256 hashing of PII
return hashlib.sha256(value.strip().lower().encode()).hexdigest()
def send_pinterest_capi_event(event_name: str, event_id: str,
email: str, epik: str = "",
value: float = 0.0,
currency: str = "USD") -> dict:
payload = {
"data": [
{
"event_name": event_name,
# lead | checkout | custom
"action_source": "web",
"event_time": int(time.time()),
"event_id": event_id,
# Deduplication with pixel event
"user_data": {
"em": [hash_pii(email)],
"client_user_agent": "Mozilla/5.0",
},
"custom_data": {
"currency": currency,
"value": str(value),
},
**({"event_source_url": f"https://yoursite.com/?epik={epik}"} if epik else {}),
}
]
}
resp = requests.post(
PINTEREST_CAPI_URL,
headers={
"Authorization": f"Bearer {PINTEREST_CAPI_TOKEN}",
"Content-Type": "application/json",
},
json=payload,
)
resp.raise_for_status()
return resp.json()
def on_deal_won(deal: dict, contact: dict):
email = get_contact_email(contact)
epik = get_custom_field(deal, EPIK_FIELD_ID) or ""
value = deal.get("price", 0)
event_id = f"won_{deal['id']}"
if not email:
return
send_pinterest_capi_event(
event_name="checkout",
event_id=event_id,
email=email,
epik=epik,
value=value,
)
What Prooflytics Shows for Pinterest
After linking epik -> CRM lifecycle, Prooflytics builds:
- CAC per campaign: how much a closed deal costs per Pinterest campaign — not CPL, but cost per closed deal
- CAC per ad group and pin: which specific pins convert into real customers
- Time to close: median time from Pinterest click to Won per campaign
- Pinterest vs other channels: if Meta and Pinterest are running simultaneously — direct CAC comparison
- View-through vs click-through: isolation — who clicked the pin (epik) vs who saw the pin but came through another path
The Prooflytics daily AI briefing includes Pinterest in the overall picture: “Pinterest campaign ‘Spring 2025’ — 12 leads, 3 Won, CAC $280. For comparison: Google Search the same week — 18 leads, 4 Won, CAC $340. Pinterest is more efficient in this segment despite lower volume.”
Real-World Case Study
Home decor e-commerce B2B (EU, supplying to interior design studios):
- Before: Pinterest drove traffic, but Google Analytics only showed “referral.” There was no link to Pinterest in the CRM. The team considered Pinterest a “branding” channel with no measurable ROI.
- After connecting Prooflytics:
epikis captured by Pixel -> passed to HubSpot via custom field -> on Won -> CAPI event. Over the quarter: 23% of Won deals had a Pinterest touch in the funnel. Pinterest CAC turned out to be 18% lower than Meta CAC in this segment. - Action: reallocated budget — +40% to Pinterest, -15% from Meta for this segment. ROAS grew by 22% over 8 weeks.
Who This Is For
- E-commerce B2B in visual niches (interior, fashion, food, beauty) where Pinterest is part of the media mix
- Marketers who can’t prove Pinterest ROI to leadership due to lack of deal-level attribution
- Companies with a 30–90 day deal cycle — where standard pixel attribution loses conversions
- Teams that want to compare Pinterest vs Meta vs Google on a single CAC metric
Frequently Asked Questions
Is the epik parameter always present in the URL?
epik is added by Pinterest only to paid clicks (Ads). Organic Pinterest clicks do not contain epik. If your Pinterest traffic is primarily organic — epik will only cover the paid portion. For organic attribution uses UTM parameters (utm_source=pinterest&utm_medium=social) which the Prooflytics Pixel also captures.
Can Pinterest CAPI and Pixel be used together?
Yes, and it’s recommended. Pixel is browser-based, fast, but lost to ad blockers and private mode. CAPI is server-side, reliable, but requires development effort. The event_id must be the same from both sources — Pinterest uses it for deduplication (to avoid counting one event twice). The Prooflytics Pixel already generates an event_id — pass it to CAPI when sending the Won event.
Can the Pinterest Ads Analytics API pull spend data into Prooflytics?
Yes. The Pinterest Ads Analytics API (GET /ad_accounts/{id}/analytics) returns impressions, clicks, and spend by campaign. Prooflytics uses this data to calculate CAC: spend from Pinterest API / number of Won deals with Pinterest attribution. This is the real cost per closed deal by Pinterest — unlike CPL which Pinterest shows in its own dashboard.
How long is epik stored in the browser?
Pinterest sets the epik cookie for 30 days. For the Prooflytics Pixel: epik is also saved in localStorage as a fallback. If a user clicked a pin, returned 25 days later, and submitted a form — epik will be present. For deals with cycles longer than 30 days, additional logic is needed: pass epik to the CRM on the first form submission.
Summary
- The
epikparameter is captured by the Prooflytics Pixel from Pinterest paid clicks - Pinterest CAPI:
POST /v5/ad_accounts/{id}/events,checkoutevent on Won with hashed email - Pixel + CAPI deduplication: same
event_idin both sources - Prooflytics builds CAC per pin/ad group/campaign — not CPL, but cost per closed deal
- Pinterest vs Meta vs Google comparison on a unified metric — daily AI briefing
If you’re running Pinterest Ads and want to see real CAC by campaign (not CPL) — describe your stack (CRM, which channels are already in Prooflytics). Exceltic.dev will configure epik capture and CAPI in one business day.