Overview
Pinterest Ads offers a comprehensive integration ecosystem designed to help advertisers measure performance, activate audiences, and optimize campaigns across the customer journey. With native integrations spanning e-commerce platforms, analytics tools, attribution partners, and CRM systems, Pinterest enables businesses to leverage visual discovery intent data for measurable business outcomes.
This guide covers all available Pinterest Ads integration options, including the Pinterest Tag, Conversions API, catalog feeds, partner integrations, and data export capabilities.
Integration Capabilities
Native Pinterest Integrations
Pinterest Tag
- Client-side tracking pixel for web events
- Base code deployment with event-specific tracking
- Enhanced match for improved attribution
- Automatic advanced matching when enabled
- Custom event parameters for flexible tracking
- Support for single-page applications (SPAs)
Pinterest Conversions API
- Server-to-server event tracking
- Privacy-compliant data sharing
- Redundancy with Pinterest Tag for event deduplication
- Real-time event transmission
- Offline conversion tracking capability
- Custom event and parameter support
Pinterest Business Hub
- Centralized account management
- Asset sharing across Pinterest accounts
- Team collaboration and permission management
- Linked account overview dashboard
- Bulk account operations
Catalogs API
- Product catalog synchronization
- Automated feed updates (hourly, daily)
- Inventory and pricing sync
- Product attribute management
- Multi-country catalog support
- Feed validation and error reporting
Ads API
- Programmatic campaign management
- Bulk campaign creation and optimization
- Automated bidding and budget management
- Custom reporting and analytics
- Audience management endpoints
- Creative management and testing
Platform Requirements
Access Levels
- Business account: Required for all advertising features
- Admin access: Full campaign and billing management
- Partner access: For agencies managing client accounts
- API access: Requires developer approval and app review
- Catalog access: Requires claimed website domain
Technical Prerequisites
- Verified Pinterest business account
- Claimed website domain (for catalog and conversion tracking)
- Pinterest Tag properly implemented
- Conversions API server endpoint (for server-side tracking)
- Developer app credentials (for API access)
E-commerce Platform Integrations
Shopify
Integration Type: Official app integration Setup:
- Install Pinterest app from Shopify App Store
- Connect Pinterest business account
- Automatic catalog sync begins
- Pinterest Tag auto-installed via app
- Enable Shopping Ads in Pinterest Ads Manager
Features:
- Automatic product catalog sync (every 24 hours)
- Real-time inventory and pricing updates
- Pinterest Tag automatic installation
- Conversion tracking without code
- Product Pin creation from catalog
- Shopify order attribution in Pinterest
Data Synced:
- Product ID, title, description
- Images and product variants
- Price and availability
- Product category and attributes
- Custom labels for segmentation
Conversion Events Tracked:
- Page visit
- Add to cart
- Checkout initiation
- Purchase with order value
WooCommerce
Integration Type: Official Pinterest for WooCommerce plugin Setup:
- Install Pinterest for WooCommerce plugin
- Authorize Pinterest business account
- Configure catalog feed settings
- Map product attributes to Pinterest taxonomy
- Enable automatic tag installation
Features:
- Automated catalog feed generation
- Dynamic product updates
- Pinterest Tag deployment via plugin
- Order tracking and attribution
- Product group targeting
- Rich Pins for products
Best Practices:
- Use high-quality square images (1:1 ratio)
- Complete all product attributes
- Maintain inventory accuracy
- Set up shipping and tax correctly
- Use Google Product Category taxonomy
Magento
Integration Type: Extension marketplace Setup:
- Install Pinterest extension from Magento Marketplace
- Configure API credentials in extension settings
- Map Magento attributes to Pinterest catalog fields
- Set up cron job for automated sync
- Deploy Pinterest Tag via extension
Features:
- Scheduled catalog synchronization
- Multi-store support
- Attribute mapping customization
- Bulk product upload
- Conversion tracking integration
BigCommerce
Integration Type: Native app integration Setup:
- Navigate to BigCommerce app marketplace
- Install Pinterest app
- Authenticate Pinterest account
- Configure product catalog sync
- Enable conversion tracking
Features:
- One-click Pinterest Tag installation
- Automated catalog feed updates
- Product feed optimization
- Category mapping tools
- Order conversion tracking
Wix
Integration Type: Wix Marketplace app Setup:
- Add Pinterest app from Wix App Market
- Connect Pinterest business account
- Select products to sync
- Configure tracking settings
- Publish to activate integration
Features:
- Visual product selection interface
- Simplified tag management
- Basic conversion tracking
- Manual and automatic sync options
- Pin creation from products
Analytics Platform Integrations
Google Analytics 4
Integration Method: Pinterest Tag + UTM parameters Setup:
- Deploy Pinterest Tag alongside GA4 tracking
- Enable auto-tagging in Pinterest Ads Manager
- Configure Pinterest as traffic source in GA4
- Create custom dimensions for Pinterest campaign data
- Set up conversion events in GA4 that mirror Pinterest events
UTM Structure:
utm_source=pinterest
utm_medium=cpc (or social, display)
utm_campaign=[campaign_name]
utm_term=[targeting_type]
utm_content=[pin_id]
Cross-Platform Tracking:
// Pinterest Tag with GA4 integration
<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', {em: '<user_email_address>'});
pintrk('page');
// Also track in GA4
gtag('event', 'page_view', {
'pinterest_campaign': '[campaign_id]',
'pinterest_source': 'organic_pin'
});
</script>
Available Data in GA4:
- Pinterest traffic segmentation
- Conversion path analysis with Pinterest touchpoints
- User engagement metrics for Pinterest visitors
- E-commerce transaction attribution
- Audience overlap analysis
Adobe Analytics
Integration Method: Pinterest Tag + Adobe Launch Setup:
- Deploy Pinterest Tag via Adobe Launch
- Configure data elements for Pinterest variables
- Map Pinterest events to Adobe Analytics events
- Set up processing rules for data normalization
- Create segments for Pinterest traffic analysis
Implementation Example:
// Adobe Analytics + Pinterest Tag integration
var s = s_gi('rsid');
// Pinterest conversion event
pintrk('track', 'checkout', {
value: 49.99,
order_quantity: 1,
currency: 'USD'
});
// Mirror to Adobe Analytics
s.events = 'purchase';
s.products = ';Product Name;1;49.99';
s.eVar20 = 'Pinterest';
s.eVar21 = getPinterestCampaignId();
s.t();
Use Cases:
- Multi-touch attribution modeling
- Customer journey analysis
- Lifetime value tracking by acquisition source
- Campaign effectiveness measurement
- Cross-channel performance comparison
Heap Analytics
Integration Method: Auto-capture + Pinterest event enrichment Setup:
- Deploy both Heap and Pinterest Tag
- Use Heap's autocapture for behavioral data
- Send Pinterest attribution to Heap as user properties
- Create funnels including Pinterest traffic
- Analyze user behavior by Pinterest campaign
Benefits:
- Automatic event capture without manual instrumentation
- Retroactive analysis of Pinterest user behavior
- Cohort analysis by Pinterest campaign
- Session replay for Pinterest-driven sessions
Attribution and Measurement Partners
AppsFlyer
Integration Type: Mobile app attribution Setup:
- Configure AppsFlyer SDK in mobile app
- Enable Pinterest integration in AppsFlyer dashboard
- Add Pinterest to attribution configuration
- Map app events to Pinterest conversion events
- Test attribution flow with test campaigns
Features:
- App install attribution from Pinterest ads
- In-app event tracking and optimization
- Deep linking for app re-engagement
- Cross-device attribution
- Fraud prevention and validation
- ROI and LTV measurement
Attribution Windows:
- Click-through: 30 days (default, configurable)
- View-through: 1 day (configurable)
- Re-engagement: 30 days
Adjust
Integration Type: Mobile measurement partner Setup:
- Integrate Adjust SDK in app
- Enable Pinterest in Adjust dashboard
- Configure callback URLs for Pinterest
- Map conversion events
- Set attribution windows
Features:
- Multi-touch attribution
- Fraud prevention suite
- Audience segmentation for retargeting
- Uninstall tracking
- Revenue and event tracking
- Real-time analytics dashboard
Branch
Integration Type: Deep linking and attribution Setup:
- Implement Branch SDK
- Configure Pinterest as ad partner
- Create Branch links for Pinterest campaigns
- Enable deferred deep linking
- Set up conversion tracking
Features:
- Deep linking from Pinterest to app
- Deferred deep linking for new users
- Web-to-app attribution
- Cross-platform user journey tracking
- People-based attribution
- Campaign performance analytics
CRM and Marketing Automation Integrations
Salesforce
Integration Method: Pinterest offline conversions + CRM data upload Setup:
- Export Pinterest exposure data via API or partner
- Match to Salesforce leads/opportunities by email
- Upload offline conversions back to Pinterest
- Build custom audiences from Salesforce lists
- Measure closed-loop attribution
Use Case Example:
import hashlib
import requests
def upload_offline_conversions_to_pinterest(access_token, ad_account_id, conversions):
"""Upload Salesforce conversions to Pinterest Conversions API"""
url = f"https://api.pinterest.com/v5/ad_accounts/{ad_account_id}/events"
headers = {
"Authorization": f"Bearer {access_token}",
"Content-Type": "application/json"
}
events = []
for conv in conversions:
# Hash email for privacy
email_hash = hashlib.sha256(conv['email'].lower().encode()).hexdigest()
events.append({
"event_name": "lead",
"action_source": "offline",
"event_time": int(conv['timestamp']),
"event_id": conv['opportunity_id'],
"user_data": {
"em": [email_hash]
},
"custom_data": {
"value": str(conv['deal_value']),
"currency": "USD"
}
})
payload = {"data": events}
response = requests.post(url, headers=headers, json=payload)
return response.json()
Benefits:
- Measure true ROI including offline conversions
- Build lookalike audiences from high-value customers
- Suppress existing customers from prospecting
- Attribute revenue to Pinterest campaigns
HubSpot
Integration Method: Form tracking + list syncing Setup:
- Deploy Pinterest Tag on HubSpot landing pages
- Track form submissions as Pinterest lead events
- Sync HubSpot contact lists to Pinterest audiences
- Set up workflows based on Pinterest engagement
- Report on Pinterest influence in HubSpot
Custom Audience Creation:
- Upload HubSpot contact lists (hashed emails)
- Segment by lifecycle stage
- Build lookalikes from SQL/MQL lists
- Suppress customers from acquisition campaigns
- Target based on engagement scores
Klaviyo
Integration Type: Email marketing automation Setup:
- Connect Klaviyo to Pinterest via integration
- Sync email lists as Pinterest audiences
- Track Pinterest-driven email signups
- Build multi-channel campaigns
- Measure cross-channel performance
Use Cases:
- Retarget email subscribers on Pinterest
- Suppress active email engagers from Pinterest ads
- Build lookalike audiences from email converters
- Create sequential messaging across email and Pinterest
- Attribution analysis for email + Pinterest touches
Pinterest Conversions API Integration
Server-Side Implementation
The Conversions API enables server-to-server event transmission for improved accuracy and privacy compliance.
Authentication:
import requests
import hashlib
import time
class PinterestConversionsAPI:
def __init__(self, access_token, ad_account_id):
self.access_token = access_token
self.ad_account_id = ad_account_id
self.base_url = "https://api.pinterest.com/v5"
def send_event(self, event_data):
"""Send conversion event to Pinterest"""
url = f"{self.base_url}/ad_accounts/{self.ad_account_id}/events"
headers = {
"Authorization": f"Bearer {self.access_token}",
"Content-Type": "application/json"
}
# Hash PII data
if 'email' in event_data.get('user_data', {}):
email = event_data['user_data']['email'].lower().strip()
event_data['user_data']['em'] = [hashlib.sha256(email.encode()).hexdigest()]
del event_data['user_data']['email']
payload = {
"data": [event_data]
}
response = requests.post(url, headers=headers, json=payload)
return response.json()
Event Structure:
# Example purchase event
purchase_event = {
"event_name": "checkout",
"action_source": "web",
"event_time": int(time.time()),
"event_id": "order_12345", # For deduplication with Pinterest Tag
"event_source_url": "https://yoursite.com/checkout/success",
"user_data": {
"em": ["hashed_email"], # SHA256 hash
"ph": ["hashed_phone"], # SHA256 hash
"client_ip_address": "192.168.1.1",
"client_user_agent": "Mozilla/5.0..."
},
"custom_data": {
"currency": "USD",
"value": "79.99",
"content_ids": ["SKU123"],
"contents": [{
"id": "SKU123",
"item_price": "79.99",
"quantity": 1
}],
"num_items": 1,
"order_id": "order_12345"
}
}
Event Deduplication:
// Client-side Pinterest Tag with event_id for deduplication
pintrk('track', 'checkout', {
value: 79.99,
order_quantity: 1,
currency: 'USD',
order_id: 'order_12345',
event_id: 'order_12345_' + Date.now() // Unique event ID
});
// Server-side sends same event_id
// Pinterest automatically deduplicates
Enhanced Match:
// Pinterest Tag with enhanced match data
pintrk('load', 'YOUR_TAG_ID', {
em: 'user@example.com', // Automatically hashed by Pinterest
ph: '+14155551234',
ge: 'f',
db: '19900101',
ln: 'smith',
fn: 'jane',
ct: 'san francisco',
st: 'ca',
zp: '94102',
country: 'us'
});
Product Catalog Integration
Catalog Feed Setup
Feed Specifications:
- Format: CSV, TSV, XML
- Encoding: UTF-8
- Max file size: 1GB
- Update frequency: Hourly (recommended for e-commerce)
- Hosting: HTTPS-accessible URL or Pinterest upload
Required Fields:
id,title,description,link,image_link,price,availability,brand
SKU123,"Blue Widget","Premium blue widget",https://example.com/blue-widget,https://example.com/images/widget.jpg,29.99 USD,in stock,WidgetCo
Optional Fields for Better Performance:
google_product_category: Product taxonomyproduct_type: Custom product hierarchygender: m, f, unisexage_group: adult, kidscolor,size,material: Product attributessale_price: Promotional pricingadditional_image_link: Multiple product imagescustom_label_0throughcustom_label_4: Campaign segmentation
Catalog API Implementation:
import requests
def create_catalog_feed(access_token, feed_url, country, default_currency):
"""Create a catalog feed via Pinterest API"""
url = "https://api.pinterest.com/v5/catalogs/feeds"
headers = {
"Authorization": f"Bearer {access_token}",
"Content-Type": "application/json"
}
payload = {
"default_country": country,
"default_currency": default_currency,
"name": "Product Catalog Feed",
"format": "TSV",
"location": feed_url,
"default_availability": "IN_STOCK"
}
response = requests.post(url, headers=headers, json=payload)
return response.json()
Dynamic Retargeting
Setup:
- Create product catalog feed
- Implement Pinterest Tag on product pages
- Send
page_visitevents withproduct_id - Create catalog campaign in Ads Manager
- Set up dynamic retargeting audiences
Product Page Tracking:
// Track product page views
pintrk('track', 'pagevisit', {
product_id: 'SKU123',
product_name: 'Blue Widget',
product_price: 29.99,
product_category: 'Widgets'
});
Dynamic Ad Templates:
- Carousel: Multiple products
- Collection: Hero image + product grid
- Single image: Individual product Pin
- Video: Product in use
API Integration Patterns
Authentication
Pinterest API uses OAuth 2.0:
import requests
def get_access_token(client_id, client_secret, redirect_uri, authorization_code):
"""Exchange authorization code for access token"""
url = "https://api.pinterest.com/v5/oauth/token"
payload = {
"grant_type": "authorization_code",
"code": authorization_code,
"redirect_uri": redirect_uri
}
response = requests.post(
url,
auth=(client_id, client_secret),
data=payload
)
return response.json()['access_token']
Campaign Management
Create Campaign:
def create_campaign(access_token, ad_account_id, campaign_data):
"""Create a new Pinterest campaign"""
url = f"https://api.pinterest.com/v5/ad_accounts/{ad_account_id}/campaigns"
headers = {
"Authorization": f"Bearer {access_token}",
"Content-Type": "application/json"
}
payload = {
"name": campaign_data['name'],
"status": "ACTIVE",
"lifetime_spend_cap": campaign_data.get('budget'),
"daily_spend_cap": campaign_data.get('daily_budget'),
"order_line_id": campaign_data.get('order_line_id'),
"tracking_urls": {
"impression": [],
"click": [],
"engagement": [],
"buyable_button": [],
"audience_verification": []
}
}
response = requests.post(url, headers=headers, json=payload)
return response.json()
Reporting API
Performance Metrics:
def get_campaign_analytics(access_token, ad_account_id, campaign_id, start_date, end_date):
"""Fetch campaign performance data"""
url = f"https://api.pinterest.com/v5/ad_accounts/{ad_account_id}/campaigns/analytics"
headers = {
"Authorization": f"Bearer {access_token}"
}
params = {
"campaign_ids": [campaign_id],
"start_date": start_date, # YYYY-MM-DD
"end_date": end_date,
"columns": [
"SPEND_IN_MICRO_DOLLAR",
"IMPRESSION_1",
"CLICKTHROUGH_1",
"TOTAL_CLICKTHROUGH",
"TOTAL_ENGAGEMENT",
"OUTBOUND_CLICK",
"PIN_CLICK",
"SAVE",
"TOTAL_CONVERSIONS",
"TOTAL_CONVERSIONS_VALUE"
],
"granularity": "DAY"
}
response = requests.get(url, headers=headers, params=params)
return response.json()
Data Export and Reporting
Export Options
Ads Manager Reports:
- Manual CSV exports
- Scheduled daily/weekly email reports
- Custom date ranges
- Campaign, ad group, and pin-level granularity
- Conversion metrics by event type
API Reporting:
- Real-time performance data
- Historical data (up to 2 years)
- Custom metric combinations
- Hourly granularity available
- JSON format for data pipeline integration
Data Warehouse Integration
BigQuery Example:
from google.cloud import bigquery
import requests
def sync_pinterest_to_bigquery(access_token, ad_account_id, project_id, dataset_id):
"""Load Pinterest performance data to BigQuery"""
# Fetch from Pinterest
analytics = get_campaign_analytics(
access_token,
ad_account_id,
'all',
'2024-01-01',
'2024-01-31'
)
# Transform data
rows = []
for row in analytics:
rows.append({
'date': row['DATE'],
'campaign_id': row['CAMPAIGN_ID'],
'spend': row['SPEND_IN_MICRO_DOLLAR'] / 1000000,
'impressions': row['IMPRESSION_1'],
'clicks': row['CLICKTHROUGH_1'],
'conversions': row['TOTAL_CONVERSIONS']
})
# Load to BigQuery
client = bigquery.Client(project=project_id)
table_id = f"{project_id}.{dataset_id}.pinterest_performance"
errors = client.insert_rows_json(table_id, rows)
if errors:
print(f"Errors: {errors}")
else:
print(f"Loaded {len(rows)} rows")
Common Integration Issues
Issue 1: Low Pinterest Tag Match Quality
Symptoms:
- Events firing but not appearing in Ads Manager
- Low event match quality score
- Poor conversion tracking accuracy
Causes:
- Missing enhanced match parameters
- Incorrect email hashing
- Client-side tracking blocked by ad blockers
- Domain verification not completed
Solutions:
- Enable enhanced match with email and phone:
pintrk('load', 'TAG_ID', {
em: 'user@example.com', // Auto-hashed by Pinterest
ph: '+14155551234'
});
- Verify website domain in Pinterest Business Hub
- Implement Conversions API for redundancy
- Test with Pinterest Tag Helper browser extension
Issue 2: Catalog Feed Errors
Symptoms:
- Products not syncing to Pinterest
- Feed processing errors
- Missing product attributes
Causes:
- Invalid feed format
- Missing required fields
- Incorrect image URLs (non-HTTPS)
- Price format errors
Solutions:
- Validate feed format:
- Use Pinterest Catalog Feed Validator
- Ensure UTF-8 encoding
- Check all required fields present
- Fix common errors:
- Use HTTPS for all image URLs
- Format price with currency: "29.99 USD"
- Ensure availability is "in stock" or "out of stock"
- Monitor feed processing in Pinterest Business Hub
Issue 3: Conversions API Event Deduplication Issues
Symptoms:
- Duplicate conversions counted
- Inflated conversion metrics
Causes:
- Missing or different event_id between Tag and API
- Timing issues between client and server events
- Incorrect event parameter matching
Solutions:
// Client-side: Generate consistent event_id
const eventId = `order_${orderId}_${timestamp}`;
pintrk('track', 'checkout', {
value: 99.99,
order_id: orderId,
event_id: eventId
});
// Server-side: Use same event_id
conversions_api.send_event({
event_name: 'checkout',
event_id: eventId, // Must match client-side
event_time: timestamp,
// ... other parameters
});
Issue 4: Attribution Discrepancies
Symptoms:
- Pinterest reporting more conversions than GA4
- Different conversion values across platforms
Causes:
- Attribution window differences
- View-through attribution in Pinterest
- UTM parameter stripping
- Time zone mismatches
Solutions:
- Align attribution windows:
- Pinterest default: 30-day click, 1-day view
- GA4: Last click (typically)
- Compare click-only metrics
- Use consistent time zones (UTC recommended)
- Accept 10-20% variance as normal
- Focus on directional trends rather than exact numbers
Support and Resources
When to Contact Support
Pinterest Support:
- Catalog feed processing errors
- Tag implementation issues
- API access problems
- Account access and permissions
- Contact: business.pinterest.com/support
Partner Support:
- E-commerce platform sync issues (Shopify, WooCommerce, etc.)
- MMP attribution problems (AppsFlyer, Adjust, Branch)
- Tag management questions (GTM, Adobe Launch)
Additional Resources
- Pinterest Ads API Documentation
- Pinterest Tag Implementation Guide
- Conversions API Documentation
- Catalog Feed Specifications
- Pinterest Developer Community
Backlog & Opportunities
- Explore Conversions API for improved iOS 14+ attribution and privacy compliance
- Evaluate Enhanced Match implementation for better user matching without third-party cookies
- Test API for Conversions for fully automated server-side event sending
- Implement catalog feed optimization with dynamic pricing and inventory updates
- Build custom audience segmentation using Pinterest API for granular targeting
- Explore Pinterest Trends API for seasonal campaign planning
- Integrate with customer data platforms (CDPs) for unified customer profiles
- Test Pinterest Shop integration for native commerce experience