If you are already using PostHog to track your funnel, you probably have the conversion events Pinterest needs: product views, searches, add-to-cart events, checkout starts, purchases, signups, and leads.

The problem is that those events only help Pinterest optimize campaigns if Pinterest receives them in the right format, with the right event names, user identifiers, order values, product data, and source context.

In this guide, I will show you how to send PostHog conversion events to Pinterest using PostHog’s Pinterest Conversions API destination. The goal is not just to switch on another integration. The goal is to send cleaner server-side conversion signals so Pinterest has better data for reporting, attribution, retargeting, and campaign optimization.

What We Are Setting Up

PostHog has a Pinterest Conversions API destination inside Data pipelines. It sends events from PostHog to Pinterest’s server-side Conversions API.

That means you can take an event you already trust in PostHog, such as Order CompletedSubscription StartedLead Submitted, or Product Added To Cart, and map it to a Pinterest conversion event such as:

  • checkout
  • add_to_cart
  • lead
  • signup
  • search
  • page_visit
  • view_category
  • view_content

Pinterest can receive web, app, and offline conversions through the API. PostHog sends mappings as web conversions by default. If you are sending mobile app or delayed offline events, you need to change the mapping’s Action Source to app_androidapp_ios, or offline.

The cleanest setup is usually:

  • Pinterest Tag on the website for browser-side tracking and first-party browser context.
  • PostHog Pinterest Conversions API destination for server-side events enriched with PostHog properties.
  • A stable event_id shared between browser and server versions of the same conversion if you run both, so Pinterest can deduplicate matching events.

PostHog’s Pinterest destination notes say the API can be used without the Pinterest tag, but using the API alongside the tag gives a more complete view of campaign performance.

Official references:

What You Need Before You Start

Before touching mappings, make sure you have these ready:

  • A Pinterest business or advertiser account.
  • Your Pinterest Ad Account ID.
  • Your Pinterest Conversion Token.
  • Access to PostHog Data pipelines.
  • The PostHog source that contains your conversion events.
  • A list of PostHog event names you want to send to Pinterest.
  • A clear consent policy for advertising and conversion tracking.
  • If you also use Pinterest Tag, a stable event_id strategy for deduplication.

You can find the Pinterest Ad Account ID and Conversion Token from Pinterest’s Ads Manager / Conversions API setup flow. In PostHog, these two values go into the destination’s Basic Settings.

Step 1: Choose the PostHog Events Worth Sending

Do not send everything.

Pinterest optimization works better when you send meaningful conversion signals, not every low-intent interaction your product analytics stack captures. Start with events that represent real funnel progress.

For ecommerce, the usual events are:

PostHog eventPinterest event
Product Viewedview_content or page_visit
Product Searchedsearch
Product Added To Cartadd_to_cart
Checkout Startedinitiate_checkout
Order Completedcheckout
Newsletter Signupsignup or lead
Lead Submittedlead

For SaaS or lead generation funnels:

PostHog eventPinterest event
Signup Completedsignup
Trial Startedcustom event or signup depending on your campaign goal
Demo Requestedlead
Application Submittedcustom event or lead
Subscription Startedsubscribe or checkout

Pinterest supports standard event names and custom event names. Use standard events wherever possible because they are easier to use for campaign optimization and reporting. Use custom events only when the action does not fit a standard Pinterest event.

Important: Pinterest’s browser tag examples use names like AddToCart and Checkout, while the Conversions API uses snake_case values like add_to_cart and checkout. In PostHog’s Pinterest Conversions API destination, follow the destination mapping fields and use the API-style event values when configuring server-side events.

Step 2: Prepare the Properties Pinterest Needs

Pinterest cares about two layers of data:

  • Event data: what happened, where it happened, when it happened, and what it was worth.
  • User data: who likely performed the action, sent in privacy-safe matching fields.

For server-side conversion events, prioritize these event fields:

Pinterest fieldWhy it mattersExample PostHog value
event_nameTells Pinterest the conversion typecheckout
event_timeTells Pinterest when the event happenedevent timestamp
event_idUnique event identifier, also used for deduplicationorder ID, transaction ID, booking ID
event_source_urlFull URL where the conversion happenedevent.properties.$current_url
action_sourceWhere the conversion happenedweb
valueRevenue or conversion valueevent.properties.total
currencyCurrency for valueevent.properties.currency
order_quantityQuantity of items/ordersevent.properties.quantity or item count
order_idOrder identifierevent.properties.order_id
line_itemsProduct-level detailsproduct array from checkout

For user matching, prioritize:

Pinterest fieldFormat to send
emSHA-256 hash of lowercase email
phSHA-256 hash of phone digits with country code
external_idSHA-256 hash of your user/customer ID
client_ip_addressUser’s real IPv4 or IPv6 address
client_user_agentReal browser user agent
click_id_epik cookie value when available
countryctstzpHashed location fields in Pinterest’s expected format

The highest leverage fields are usually email, external ID, IP address, user agent, event source URL, click ID, value, currency, order ID, product IDs, and event ID.

If you are missing IP address in PostHog person properties, check whether it exists on events as $ip. If you need it repeatedly in destinations, it can be copied to person properties with a PostHog transformation. We covered that pattern in our guide on saving IP address to PostHog person properties.

Step 3: Connect Pinterest Conversions API in PostHog

In PostHog:

  1. Go to Data pipelines.
  2. Open Destinations.
  3. Search for Pinterest Conversions API.
  4. Select the destination.
  5. Click Configure Pinterest Conversions API.
  6. Select the source that contains the conversion events.
  7. Name the destination clearly, for example Pinterest CAPI - Web Conversions.
  8. Enter the Ad Account ID.
  9. Enter the Conversion Token.
  10. Leave Debug Mode off for production, but consider turning it on while testing.
  11. Save the basic settings.

PostHog’s documentation also shows an API-based setup using the segment-actions-pinterest-conversions-api template ID, but for most teams the UI setup is easier and safer because you can inspect mappings before events go live.

Step 4: Configure Your First Mapping

Start with one high-value event, usually purchase or lead. Do not configure every event at once. One tested mapping is better than six half-tested mappings.

In the Pinterest destination:

  1. Open the Mappings tab.
  2. Review the prebuilt mappings such as CheckoutSearch, and Add to Cart.
  3. If a prebuilt mapping fits, open it and adjust the field values to your PostHog schema.
  4. If you need a custom mapping, click New Mapping.
  5. Select Report Conversions Event.
  6. Add a filter so the mapping only fires for the intended PostHog event.
  7. Fill the Pinterest fields.
  8. Enable the mapping.

For a purchase event, the mapping usually looks like this:

Pinterest fieldSuggested value
event_namecheckout
action_sourceweb
event_timeevent timestamp
event_idevent.properties.order_id or event.properties.transaction_id
event_source_urlevent.properties.$current_url
valueevent.properties.revenue or event.properties.total
currencyevent.properties.currency
order_idevent.properties.order_id
order_quantitynumber of purchased items
line_itemsproduct array, if available
client_ip_addressevent.properties.$ip
client_user_agentevent.properties.$raw_user_agent
emhashed email from person or event properties
external_idhashed user/customer ID
click_id_epik value, if captured

The exact PostHog expression depends on your schema. The important rule is to map from the event that represents the real business action, not from a page view that merely suggests the action happened.

For example, a checkout success page view is not as trustworthy as an Order Completed event that fires after payment is confirmed.

Step 5: Use Stable Event IDs for Deduplication

If you send the same conversion through both Pinterest Tag and PostHog’s server-side destination, you need a shared event identifier.

Pinterest’s Conversions API documentation describes event_id as a unique event identifier used for deduplicating events sent through the API and Pinterest tracking. In practical terms, the browser event and the server event need to describe the same conversion with the same event name and the same event ID.

Good event IDs:

  • Order ID for purchases.
  • Transaction ID from your payment provider.
  • Booking ID for appointments.
  • Lead ID for lead submissions.
  • Subscription ID for subscription starts.

Weak event IDs:

  • A random value generated separately in browser and server contexts.
  • A timestamp by itself.
  • A user ID by itself.
  • A session ID by itself.

For purchase events, use the order or transaction ID. For leads, generate one lead ID when the lead is created and use that same ID everywhere.

If your Pinterest Tag currently fires a checkout event on the confirmation page, update the tag event data to include the same event_id that PostHog sends through the destination. Otherwise Pinterest may see two similar conversion events and fail to deduplicate them cleanly.

Step 6: Map Product and Order Data Correctly

For ecommerce, do not stop at event name and value.

Pinterest’s tag documentation shows event data such as valueorder_quantitycurrencyorder_id, and line_items. For product-level context, line_items can include fields like:

  • product_name
  • product_id
  • product_category
  • product_variant_id
  • product_variant
  • product_price
  • product_quantity
  • product_brand

For catalog sales campaigns, Pinterest expects richer product context. At minimum, make sure product_id aligns with the IDs Pinterest knows from your catalog. If your store sends internal database IDs to PostHog but Pinterest’s catalog uses SKUs, map the SKU instead.

A clean purchase payload should answer:

  • What event happened?
  • What was the order worth?
  • What currency was used?
  • Which order was it?
  • Which products were bought?
  • Which user likely performed the action?
  • Which page or click context led to it?

That is the difference between “a purchase happened” and “this specific Pinterest campaign drove a purchase for products Pinterest can understand.”

Step 7: Capture the Pinterest Click ID

Pinterest uses the epik click identifier to help connect conversions back to Pinterest ad clicks.

Pinterest’s API documentation recommends using the _epik cookie value for click_id when available, because URL parameters can disappear during redirects, checkout flows, and cross-domain navigation.

In practice:

  1. Preserve the epik URL parameter on landing.
  2. Store it in a first-party cookie or PostHog person property if your consent policy allows it.
  3. Send the stored value as click_id in the Pinterest destination mapping.

If you only rely on event_source_url, you may lose the click ID when the user converts later, especially after checkout redirects or multi-step funnels.

Step 8: Turn On the Destination Carefully

Once your first mapping is configured:

  1. Keep the destination disabled.
  2. Trigger one test event in a staging or controlled production path.
  3. Check the event in PostHog.
  4. Confirm all required properties exist on the PostHog event.
  5. Enable the mapping.
  6. Turn on Debug Mode temporarily if you need request details.
  7. Enable the destination.
  8. Trigger the same event again.
  9. Check Pinterest Events / Conversions reporting.

PostHog says events received by Pinterest within an hour are reported as web or app events. Events received later, including delayed batch events, can be categorized as offline conversions. That timing matters if you are using delayed ingestion, warehouse replay, or batch backfills.

For live ad optimization, send events as close to real time as possible.

How to Verify the Setup

Verification should happen in both PostHog and Pinterest.

In PostHog, check:

  • The source event exists.
  • The mapping filter matches only the intended event.
  • The mapped properties are not empty.
  • Debug Mode shows the expected request details if enabled.
  • The destination is enabled.
  • Failed delivery logs do not show authentication or validation errors.

In Pinterest, check:

  • The conversion source receives events.
  • The event name appears as expected.
  • Recent events show in event history or testing tools.
  • Event ID coverage is healthy if you use both tag and API.
  • Deduplication diagnostics do not show missing or inconsistent IDs.
  • Purchase events include value and currency.
  • Product events include product IDs that match the catalog.

Success looks like this: a test purchase appears once in Pinterest, with the right event name, timestamp, value, currency, order ID, user data coverage, and product data.

Common Mistakes to Avoid

Sending the wrong event name

PostHog event names are your internal taxonomy. Pinterest event names are Pinterest’s taxonomy. Map them intentionally.

Order Completed should become checkout, not a custom Pinterest event called Order Completed, unless you have a specific reason to keep it custom.

Sending too many events

Pinterest does not need every click, scroll, or PostHog autocapture event. Send conversion and intent signals that match your campaign goals.

Missing event_id

If you run Pinterest Tag and Conversions API together, missing or unstable event_id is the fastest way to create duplicate reporting.

Using random IDs for the same conversion

A browser-generated random ID and a server-generated random ID are not the same ID. Use an order ID, transaction ID, or lead ID that exists in both places.

Forgetting currency

Pinterest supports specific currency codes such as USDGBPCADEURAUD, and NZD in its tag event data. Make sure the currency you send matches the order value and your Pinterest account expectations.

Sending backend IP or user agent

For web conversions, client_ip_address and client_user_agent should describe the user, not your server, payment processor, or backend integration.

Losing the Pinterest click ID

If epik is not captured on landing, you may not have it by the time the conversion happens. Preserve it early if your consent policy allows advertising attribution storage.

Mapping product IDs that do not match the catalog

For ecommerce, product ID consistency matters. If Pinterest’s catalog uses SKUs, do not send a different internal product ID unless you have mapped it intentionally.

Testing with ad blockers or internal filters

Ad blockers, privacy extensions, internal traffic filters, and staging domains can hide whether the production setup works. Test in a controlled but realistic path.

Leaving Debug Mode on forever

Debug Mode is useful while testing, but do not leave unnecessary logging enabled in production unless you have a reason.

Why This Matters for Attribution and CRO

This setup is not just a tracking exercise.

Pinterest campaigns optimize based on the signals they receive. If your conversion events are late, duplicated, missing value, missing user context, or mapped to the wrong event names, Pinterest’s reporting becomes less useful and campaign optimization becomes weaker.

PostHog is useful here because it already sits close to your product and funnel truth. You can decide which events are meaningful, enrich them with person and event properties, and send only the signals that match real business outcomes.

That matters for CRO too. When ad platforms optimize toward clean conversion events, you get a cleaner feedback loop:

  • Better campaign attribution.
  • Better campaign optimization.
  • Better retargeting audiences.
  • Better experiment interpretation.
  • Less confusion between analytics, ad reporting, and revenue data.

The technical work is small compared to the cost of optimizing campaigns on noisy or duplicated conversion data.

Publishing Checklist

Before publishing the setup or rolling it out across all events, confirm:

  • Pinterest Ad Account ID is correct.
  • Conversion Token is correct.
  • Destination source is correct.
  • Each mapping has a narrow event filter.
  • Event names use Pinterest’s expected taxonomy.
  • action_source is correct for web, app, or offline events.
  • event_id is stable and shared with Pinterest Tag when needed.
  • event_source_url includes the conversion page URL.
  • value and currency are present for revenue events.
  • Product IDs match Pinterest catalog IDs.
  • Email, phone, and external ID are formatted and hashed correctly where required.
  • IP address and user agent describe the user.
  • _epik or click ID is captured where available and allowed.
  • Consent rules are respected.
  • One live test conversion appears correctly in Pinterest.

Final Word

Sending PostHog conversion events to Pinterest is a strong setup when PostHog already holds your cleanest funnel events.

Start with one event that matters, usually checkout or lead. Map it carefully, verify it in both tools, and only then expand to supporting events like add_to_cartsearchsignup, and view_content.

The best version of this setup is boring in the right way: every conversion has a clear trigger, a stable event ID, real user context, correct product or order data, and a validation path you can repeat later.

If you want help implementing this properly, 99Ways can help you build the tracking plan, PostHog destination mappings, Pinterest validation flow, and reporting checks around the actual conversion events that drive your business.

Frequently asked questions

Not always, but using Pinterest Tag and Conversions API together usually gives Pinterest more complete conversion visibility. The tag captures browser-side context, while PostHog can send server-side events with richer event and person properties.

Start with the event closest to revenue or business value. For ecommerce, this is usually checkout. For lead generation, it is usually lead. For SaaS, it may be signupsubscribe, or a custom event depending on the campaign goal.

Use Pinterest standard events where possible: checkoutadd_to_cartinitiate_checkoutleadsignupsearchpage_visitview_categoryview_content, and watch_video. Use custom events only when the action does not fit a standard event.

event_id uniquely identifies a conversion event. Pinterest also uses it for deduplicating events sent through both Conversions API and Pinterest tracking, so it should be stable and shared across both sources when both fire for the same conversion.

Use the most stable business identifier for the action: order ID, transaction ID, booking ID, lead ID, subscription ID, or another ID created once when the conversion happens.

Prioritize hashed email, hashed phone, hashed external ID, client IP address, client user agent, click ID, and location fields where you have consent and the data is available. More complete matching data can improve attribution quality.

For Conversions API user data, send email in the privacy-safe format Pinterest expects, typically SHA-256 hashed lowercase email. Pinterest's JavaScript tag can hash raw email in the browser, but server-side and image-based flows should send hashed values.

Map product data into line_items where available. Include product ID, name, category, price, quantity, variant, and brand when your PostHog event contains those fields. For catalog campaigns, make sure product IDs match Pinterest's catalog IDs.

Trigger one controlled test conversion, then check the PostHog destination delivery/debug view and Pinterest's event testing or event history. Confirm the event name, event ID, value, currency, user data, URL, and product data are present.

PostHog's Pinterest destination documentation notes that events received within an hour are reported as web or app events, while later or batch-delayed events can be categorized as offline conversions. For campaign optimization, send events as close to real time as possible.

Yes, if the event source and mapping are appropriate. In PostHog, change the mapping's Action Source to offline instead of the default web. Be careful with timing, identifiers, and consent because offline events behave differently from live web events.

Internal References

Related blog posts

Leave a Reply

Your email address will not be published. Required fields are marked *