Skip to main content

Pinterest Tag

Web Source code Package

The Pinterest Tag forwards browser conversions to Pinterest Ads Manager for ad optimization, retargeting, and audience building. This destination wraps the standard Pinterest Tag snippet (loaded from s.pinimg.com/ct/core.js); there is no npm SDK for the browser tag. Mapped events become window.pintrk('track', eventName, { ..., event_id }) calls, with optional pintrk('set', ...) for enhanced matching.

Where This Fits

Pinterest Tag is a web destination in the walkerOS flow:

Loads core.js from Pinterest's CDN, fires the standard pintrk('load', tagId)

  • optional pintrk('page') on init, then forwards conversions you map to Pinterest's standard event taxonomy.

Installation

Loading...

Setup

Loading...

Configuration reference

PropertyTypeDescriptionMore
apiKey*stringYour Pinterest Tag ID (numeric string, e.g. "2612345678901"). Found in Pinterest Ads Manager under Conversions → Pinterest Tag. Passed to pintrk("load", tagId).
pageviewbooleanFire pintrk("page") once in init after core.js loads. Default true (matches Pinterest's base code convention). Set false when walkerOS sources already emit page view events and you would otherwise get a duplicate initial fire.
identifyanywalkerOS mapping value resolving to enhanced matching fields: { em?: string, external_id?: string }. em is auto-hashed by the Pinterest JS tag — do not hash before passing. Passed to pintrk("load", tagId, data) on init and pintrk("set", data) when the resolved value changes.
* Required fields

Standard event taxonomy

Pinterest expects lowercase concatenated event names. The destination never auto-maps. Every conversion event needs an explicit mapping.name.

walkerOS eventPinterest eventNotes
page viewpagevisitFired automatically by pintrk('page') on init unless settings.pageview: false.
product viewviewcontentSingle product. Use value, currency, product_id, product_name.
product addaddtocartSingle product. Wrap in a line_items array if you also want item-level data.
order completecheckoutMulti-product. Use mapping.data.line_items.loop to iterate event.nested.
site searchsearchUse search_query field.
user loginleadOptional lead_type. Combine with settings.identify for enhanced matching.
user signupsignupSame identify pattern as lead.
(custom)customSend Pinterest's custom event for non-standard conversions.

Mapping data.examples

tip

The code data.examples are interactive. You can edit the code to generate your individual event mapping.

Page view rename

The simplest conversion. The walkerOS event name is renamed to Pinterest's pagevisit standard.

Event
Loading...
Mapping
Loading...
Result
Loading...

Single-product viewcontent

value, currency (with EUR fallback), product_id, and product_name flow into a single pintrk('track', 'viewcontent', { ... }) call. The walkerOS event id is auto-attached as event_id for cross-channel deduplication.

Event
Loading...
Mapping
Loading...
Result
Loading...

Multi-product checkout with line_items

Pinterest sends a SINGLE pintrk('track', 'checkout', { line_items: [...] }) call. The walkerOS loop mapping resolves a nested array INTO the data, NOT into N separate SDK calls.

Event
Loading...
Mapping
Loading...
Result
Loading...

Lead with enhanced matching

settings.identify resolves to { em, external_id } and fires pintrk('set', data) BEFORE the track call. The Pinterest JS tag auto-hashes em, so pass raw emails through and do NOT pre-hash.

Event
Loading...
Mapping
Loading...
Result
Loading...

Identify-only via mapping.skip

mapping.skip: true processes side effects (pintrk('set', ...)) but suppresses the default pintrk('track', ...) call. Useful when you want to refresh enhanced matching without firing a conversion.

Event
Loading...
Mapping
Loading...
Result
Loading...

Enhanced matching

Pinterest's web tag accepts two enhanced matching fields, both auto-hashed by the JS tag with SHA-256:

FieldSourceNotes
emdata.email / user.email / etc.Pinterest auto-hashes. Pass raw email, do NOT pre-hash.
external_iddata.id / user.idStable user identifier. Auto-hashed by Pinterest.

The destination strictly limits to these two fields. CAPI-only fields (ph, fn, ln, address, country, ip, ua) belong to the future server destination and are intentionally not accepted here.

Identity is diffed against the destination's runtime state, and pintrk('set', ...) only fires when the resolved identity actually changes. The destination-level settings.identify is resolved lazily on the first event (init has no event to bind to), so pintrk('load', tagId) is called without an identity object.

Pinterest is an advertising platform. The walkerOS consent key is marketing (not analytics):

Loading...

The walkerOS config.consent gate blocks unconsented events from reaching the destination in the first place. Pinterest has no opt_in/opt_out SDK API, so the destination implements consent revocation as a runtime suppression flag:

  1. on('consent') reads config.consent to determine which keys to check.
  2. If any required key resolves to false, the destination flips _state.consentGranted = false and silently suppresses all subsequent pintrk('track', ...) calls.
  3. If consent is later re-granted (all required keys true), the flag flips back and tracking resumes.

The Pinterest Tag itself stays loaded throughout. Only the walkerOS bridge goes silent.

Auto page view

The destination fires pintrk('page') once on init by default to match Pinterest's base code convention. Set settings.pageview: false if your walkerOS sources already emit page view events that you map to pagevisit, which prevents a duplicate initial fire.

Future: Conversions API

A server-side Pinterest Conversions API destination is planned as a follow-up, matching the Meta / TikTok / LinkedIn web+server split. It will share the event_id field with this web destination for cross-channel deduplication.

💡 Need implementation support?
elbwalker offers hands-on support: setup review, measurement planning, destination mapping, and live troubleshooting. Book a 2-hour session (€399)