Your Pinterest campaigns are running but conversions aren’t tracking. The Pinterest Tag should be measuring purchases, signups, and page visits—but Ads Manager shows nothing. Here’s how to fix it.
Understanding the Pinterest Tag
The Pinterest Tag works similarly to Facebook Pixel:
- Base code: Loads on every page, tracks PageVisit automatically
- Event code: Tracks specific actions (Checkout, Lead, Signup, etc.)
- Enhanced Match: Sends hashed customer data for better attribution
If any component fails, you lose data.
Step 1: Verify Base Tag Installation
First, confirm the Pinterest Tag is loading at all.
Check in Browser DevTools:
// In console, check for Pinterest tag:
console.log(typeof window.pintrk);
// Should return: 'function'
// Check for tag ID:
console.log(window.pintrk.queue);
// Should show queued events
Check Network Requests:
- Open DevTools → Network tab
- Filter by “pinterest” or “ct.pinterest.com”
- Reload the page
- Look for successful requests (200 status)
Expected requests:
ct.pinterest.com/v3/?... (base tag ping)
ct.pinterest.com/user/?... (event tracking)
Using Pinterest Tag Helper
Install the official Pinterest Tag Helper Chrome extension:
- Visit your website
- Click the extension icon
- Check the status panel:
Green checkmark: Tag detected and working Warning: Partial setup or issues Error: Tag not found or broken
Step 2: Correct Base Tag Installation
The Pinterest Tag must be installed correctly in the <head> section:
<head>
<!-- Pinterest Tag -->
<script>
!function(e){if(!window.pintrk){window.pintrk = function () {
window.pintrk.queue.push(Array.prototype.slice.call(arguments))};var
n=window.pintrk;n.queue=[],n.version="3.0";var
t=document.createElement("script");t.async=!0,t.src=e;var
r=document.getElementsByTagName("script")[0];
r.parentNode.insertBefore(t,r)}}("https://s.pinimg.com/ct/core.js");
pintrk('load', 'YOUR_TAG_ID');
pintrk('page');
</script>
<noscript>
<img height="1" width="1" style="display:none;" alt=""
src="https://ct.pinterest.com/v3/?event=init&tid=YOUR_TAG_ID&noscript=1" />
</noscript>
<!-- end Pinterest Tag -->
</head>
Critical points:
- Replace
YOUR_TAG_IDwith your actual Tag ID (numeric) - Must be in
<head>, not footer pintrk('page')must be called for PageVisit tracking
Find Your Tag ID:
- Pinterest Ads Manager → Conversions
- Click your conversion source
- Tag ID is displayed (e.g.,
2612345678901)
Step 3: GTM Installation
If using Google Tag Manager:
Option A: Custom HTML Tag
<script>
!function(e){if(!window.pintrk){window.pintrk = function () {
window.pintrk.queue.push(Array.prototype.slice.call(arguments))};var
n=window.pintrk;n.queue=[],n.version="3.0";var
t=document.createElement("script");t.async=!0,t.src=e;var
r=document.getElementsByTagName("script")[0];
r.parentNode.insertBefore(t,r)}}("https://s.pinimg.com/ct/core.js");
pintrk('load', '{{Pinterest Tag ID}}');
pintrk('page');
</script>
Trigger: All Pages (Page View)
Option B: Use Community Template
- Tags → New → Discover more tag types in the Community Template Gallery
- Search “Pinterest”
- Use the official Pinterest tag template
Creating a Pinterest Variable:
- Variables → New → Constant
- Name:
Pinterest Tag ID - Value: Your tag ID
Step 4: Setting Up Conversion Events
Standard Pinterest Events:
| Event | When to Use |
|---|---|
PageVisit | Every page (automatic with base tag) |
ViewCategory | Category/collection pages |
Search | Search results pages |
AddToCart | Add to cart action |
Checkout | Purchase completion |
Signup | Account creation |
Lead | Form submission/lead capture |
WatchVideo | Video views |
Custom | Any other action |
Implementing Checkout Event:
// On order confirmation page:
pintrk('track', 'checkout', {
value: 99.99,
order_quantity: 2,
currency: 'USD',
order_id: 'ORDER12345',
line_items: [
{
product_name: 'Widget Pro',
product_id: 'SKU123',
product_price: 49.99,
product_quantity: 2
}
]
});
Implementing Lead Event:
// On form submission success:
pintrk('track', 'lead', {
lead_type: 'Newsletter Signup'
});
Implementing AddToCart Event:
// On add to cart button click:
pintrk('track', 'addtocart', {
value: 49.99,
order_quantity: 1,
currency: 'USD',
product_id: 'SKU123',
product_name: 'Widget Pro'
});
Step 5: GTM Event Tags
For each conversion event, create a GTM tag:
Checkout Event Tag:
<script>
pintrk('track', 'checkout', {
value: {{DLV - Order Total}},
order_quantity: {{DLV - Order Quantity}},
currency: '{{DLV - Currency}}',
order_id: '{{DLV - Order ID}}'
});
</script>
Trigger: Custom Event purchase or Page View on thank-you page
Lead Event Tag:
<script>
pintrk('track', 'lead', {
lead_type: '{{DLV - Lead Type}}'
});
</script>
Trigger: Form Submission or Custom Event form_submit
Important: These event tags must fire AFTER the base Pinterest tag has loaded.
Step 6: Common Pinterest Tag Issues
Issue 1: Tag ID is Wrong
Symptom: Tag Helper shows “Tag not found”
Debug:
// Check what ID is being used:
console.log(window.pintrk.queue);
// Look for 'load' call with tag ID
Fix: Verify the tag ID matches your Pinterest Ads account exactly.
Issue 2: PageVisit Not Tracking
Symptom: Tag loads but no page views in Pinterest
Common causes:
pintrk('page')not called- Multiple conflicting tags
- CSP blocking requests
Fix: Ensure base tag includes pintrk('page') call:
pintrk('load', 'YOUR_TAG_ID');
pintrk('page'); // This is required!
Issue 3: Events Fire But Don’t Record
Symptom: Tag Helper shows events, Pinterest shows none
Debug:
- Check Network tab for
ct.pinterest.comrequests - Verify response is 200
- Wait 24-48 hours (Pinterest has reporting delays)
Common causes:
- Ad blockers blocking ct.pinterest.com
- Pinterest server-side delays
- Event parameters invalid
Issue 4: Checkout Value Shows Zero
Symptom: Conversions track but value is $0
Fix: Ensure value is a number, not string:
// WRONG:
value: '$99.99'
value: '99.99'
// CORRECT:
value: 99.99
Issue 5: Enhanced Match Not Working
Symptom: Attribution is poor, match rate is low
Enhanced Match requires hashed customer data:
pintrk('load', 'YOUR_TAG_ID', {
em: 'customer@example.com' // Will be hashed automatically
});
For manual hashing:
async function sha256(message) {
const msgBuffer = new TextEncoder().encode(message);
const hashBuffer = await crypto.subtle.digest('SHA-256', msgBuffer);
const hashArray = Array.from(new Uint8Array(hashBuffer));
return hashArray.map(b => b.toString(16).padStart(2, '0')).join('');
}
// Use pre-hashed email:
const hashedEmail = await sha256('customer@example.com'.toLowerCase().trim());
pintrk('load', 'YOUR_TAG_ID', {
em: hashedEmail
});
Issue 6: Duplicate Events
Symptom: Pinterest shows 2x conversions
Common causes:
- Multiple Pinterest tags on page
- Event fires twice (page reload, SPA navigation)
Fix:
// Prevent duplicate fires:
let pinterestEventFired = {};
function trackPinterestOnce(eventName, params) {
const key = eventName + JSON.stringify(params);
if (pinterestEventFired[key]) return;
pinterestEventFired[key] = true;
pintrk('track', eventName, params);
}
Issue 7: SPA/AJAX Navigation
Symptom: Only first page tracks
For single-page applications, fire PageVisit on route changes:
// React Router example:
useEffect(() => {
if (window.pintrk) {
pintrk('page');
}
}, [location.pathname]);
// Vue Router:
router.afterEach(() => {
if (window.pintrk) {
pintrk('page');
}
});
Issue 8: Content Security Policy Blocking
Symptom: Console shows CSP errors for Pinterest domains
Fix: Add Pinterest domains to your CSP:
Content-Security-Policy:
script-src 'self' https://s.pinimg.com;
img-src 'self' https://ct.pinterest.com;
connect-src 'self' https://ct.pinterest.com;
Step 7: Testing Pinterest Tag
Method 1: Pinterest Tag Helper
- Install Chrome extension
- Visit your site
- Perform conversion actions
- Check “Events” panel for each event
Method 2: Network Inspection
- Open DevTools → Network
- Filter by “ct.pinterest.com”
- Perform actions
- Check request payloads:
// PageVisit request:
event=pagevisit&tid=YOUR_TAG_ID
// Checkout request:
event=checkout&value=99.99&order_id=12345
Method 3: Pinterest Events Manager
- Pinterest Ads → Conversions → Events Manager
- View real-time events (some delay)
- Verify events are being received
Method 4: Test Conversions
- Create a test campaign (or use existing)
- Click your own ad (from different device/network)
- Complete conversion action
- Check attribution in Pinterest (24-48 hours)
Step 8: Enhanced Match Setup
Enhanced Match improves conversion attribution by 10-20%. Set it up correctly:
At Page Load (Best):
pintrk('load', 'YOUR_TAG_ID', {
em: 'customer@example.com', // Email
hashed: false // Pinterest will hash it
});
pintrk('page');
At Conversion (Alternative):
pintrk('track', 'checkout', {
value: 99.99,
order_id: 'ORDER123',
em: 'customer@example.com' // Include with event
});
Enhanced Match Requirements:
- Email must be lowercase
- Email must be trimmed (no leading/trailing spaces)
- Email must be valid format
- If pre-hashing, use SHA-256
Pinterest Tag Checklist
- Tag ID is correct (matches Ads Manager)
- Base code in
<head>section -
pintrk('page')called on every page - Tag Helper shows green status
- Network requests successful (200)
- Events fire with correct parameters
- Value is numeric (not string)
- No duplicate tags
- SPA navigation handled (if applicable)
- Enhanced Match configured
- CSP allows Pinterest domains
- Wait 24-48 hours for data
Complete GTM Setup Example
Tag 1: Pinterest Base Tag
- Type: Custom HTML
- Trigger: All Pages (fires first)
<script>
!function(e){if(!window.pintrk){window.pintrk = function () {
window.pintrk.queue.push(Array.prototype.slice.call(arguments))};var
n=window.pintrk;n.queue=[],n.version="3.0";var
t=document.createElement("script");t.async=!0,t.src=e;var
r=document.getElementsByTagName("script")[0];
r.parentNode.insertBefore(t,r)}}("https://s.pinimg.com/ct/core.js");
pintrk('load', '{{Pinterest Tag ID}}');
pintrk('page');
</script>
Tag 2: Pinterest Checkout Event
- Type: Custom HTML
- Trigger: Custom Event
purchaseor Thank You Page View - Tag Sequencing: Fire after Pinterest Base Tag
<script>
pintrk('track', 'checkout', {
value: {{DLV - ecommerce.purchase.value}},
order_quantity: {{DLV - ecommerce.purchase.items.length}},
currency: '{{DLV - ecommerce.purchase.currency}}',
order_id: '{{DLV - ecommerce.purchase.transaction_id}}'
});
</script>
Tag 3: Pinterest Lead Event
- Type: Custom HTML
- Trigger: Form Submission trigger
- Tag Sequencing: Fire after Pinterest Base Tag
<script>
pintrk('track', 'lead', {
lead_type: '{{Form ID}}'
});
</script>
Still Having Pinterest Tag Issues?
Pinterest tracking has unique quirks compared to other platforms. If you’ve followed this guide and events still aren’t recording:
- Server-side ad blocking might be affecting your traffic
- Pinterest’s own delays can make testing frustrating
- Enhanced Match configuration can be finicky
Get a free Pinterest tracking audit and we’ll analyze your implementation, verify events are firing correctly, and ensure your Pinterest campaigns have accurate attribution.