> ## Documentation Index
> Fetch the complete documentation index at: https://docs.permutive.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Pinterest

> Activate Permutive cohorts to Pinterest for custom audience targeting in real-time

export const NoBadge = () => {
  return <span style={{
    display: 'inline-block',
    padding: '0.125rem 0.5rem',
    borderRadius: '0.25rem',
    fontSize: '0.625rem',
    background: '#F7D0E2',
    color: '#1A1A1A',
    fontWeight: '500'
  }}>
      No
    </span>;
};

export const YesBadge = () => {
  return <span style={{
    display: 'inline-block',
    padding: '0.125rem 0.5rem',
    borderRadius: '0.25rem',
    fontSize: '0.625rem',
    background: '#C7E8F9',
    color: '#1A1A1A',
    fontWeight: '500'
  }}>
      Yes
    </span>;
};

export const BadgeRowCenter = ({label, children}) => {
  return <div style={{
    display: 'flex',
    justifyContent: 'space-between',
    alignItems: 'center',
    marginBottom: '0.5rem'
  }}>
      <span style={{
    fontSize: '0.625rem',
    color: '#6b7280',
    textTransform: 'uppercase',
    fontWeight: '500',
    letterSpacing: '0.05em'
  }}>
        {label}
      </span>
      {children}
    </div>;
};

export const BadgeRow = ({label, children}) => {
  return <div style={{
    display: 'flex',
    justifyContent: 'space-between',
    alignItems: 'flex-start',
    marginBottom: '0.5rem'
  }}>
      <span style={{
    fontSize: '0.625rem',
    color: '#6b7280',
    textTransform: 'uppercase',
    fontWeight: '500',
    letterSpacing: '0.05em'
  }}>
        {label}
      </span>
      {children}
    </div>;
};

export const BadgeContainer = ({children}) => {
  return <div style={{
    display: 'flex',
    gap: '0.25rem',
    flexWrap: 'wrap',
    justifyContent: 'flex-end',
    minWidth: '0',
    flex: '1'
  }}>
      {children}
    </div>;
};

export const ProductRequiredBadge = ({product}) => {
  const getBadgeStyle = product => {
    switch (product) {
      case 'Core Platform':
        return {
          background: '#CB88FC',
          color: '#1A1A1A'
        };
        --purple;
      case 'Routing':
        return {
          background: '#CB88FC',
          color: '#1A1A1A'
        };
        --purple;
      case 'Contextual':
        return {
          background: '#CB88FC',
          color: '#1A1A1A'
        };
        --purple;
      default:
        return {
          background: '#A7B3D9',
          color: '#1A1A1A'
        };
        --haze;
    }
  };
  const style = getBadgeStyle(product);
  return <span style={{
    display: 'inline-block',
    padding: '0.125rem 0.375rem',
    borderRadius: '0.25rem',
    fontSize: '0.625rem',
    background: style.background,
    color: style.color,
    fontWeight: '500'
  }}>
      {product}
    </span>;
};

export const SdkRequiredBadge = ({required}) => {
  const getBadgeStyle = required => {
    switch (required) {
      case 'Yes':
        return {
          background: '#C7E8F9',
          color: '#1A1A1A'
        };
        --blue;
      case 'No':
        return {
          background: '#F7D0E2',
          color: '#1A1A1A'
        };
        --pink;
      default:
        return {
          background: '#A7B3D9',
          color: '#1A1A1A'
        };
        --haze;
    }
  };
  const style = getBadgeStyle(required);
  return <span style={{
    display: 'inline-block',
    padding: '0.125rem 0.375rem',
    borderRadius: '0.25rem',
    fontSize: '0.625rem',
    background: style.background,
    color: style.color,
    fontWeight: '500'
  }}>
      {required}
    </span>;
};

export const CapabilityBadge = ({capability}) => {
  const getBadgeStyle = capability => {
    switch (capability) {
      case 'Event Collection':
        return {
          background: '#EFDFC8',
          color: '#1A1A1A'
        };
        --clay;
      case 'Cohort Activation':
        return {
          background: '#EFDFC8',
          color: '#1A1A1A'
        };
        --clay;
      case 'Campaign Optimization':
        return {
          background: '#EFDFC8',
          color: '#1A1A1A'
        };
        --clay;
      case 'Identity Signal':
        return {
          background: '#EFDFC8',
          color: '#1A1A1A'
        };
        --clay;
      case 'Contextual Signal':
        return {
          background: '#EFDFC8',
          color: '#1A1A1A'
        };
        --clay;
      case 'Connectivity':
        return {
          background: '#EFDFC8',
          color: '#1A1A1A'
        };
        --clay;
      case 'Routing':
        return {
          background: '#EFDFC8',
          color: '#1A1A1A'
        };
        --clay;
      case 'Data Collaboration':
        return {
          background: '#EFDFC8',
          color: '#1A1A1A'
        };
        --clay;
      default:
        return {
          background: '#A7B3D9',
          color: '#1A1A1A'
        };
        --haze;
    }
  };
  const style = getBadgeStyle(capability);
  return <span style={{
    display: 'inline-block',
    padding: '0.125rem 0.375rem',
    borderRadius: '0.25rem',
    fontSize: '0.625rem',
    background: style.background,
    color: style.color,
    fontWeight: '500',
    whiteSpace: 'nowrap'
  }}>
      {capability}
    </span>;
};

export const EnvironmentBadge = ({environment}) => {
  const getBadgeStyle = environment => {
    switch (environment) {
      case 'Web':
        return {
          background: '#F9C1A8',
          color: '#1A1A1A'
        };
        --peach;
      case 'iOS':
        return {
          background: '#F9C1A8',
          color: '#1A1A1A'
        };
        --peach;
      case 'Android':
        return {
          background: '#F9C1A8',
          color: '#1A1A1A'
        };
        --peach;
      case 'CTV':
        return {
          background: '#F9C1A8',
          color: '#1A1A1A'
        };
        --peach;
      case 'API Direct':
        return {
          background: '#F9C1A8',
          color: '#1A1A1A'
        };
        --peach;
      default:
        return {
          background: '#A7B3D9',
          color: '#1A1A1A'
        };
        --haze;
    }
  };
  const style = getBadgeStyle(environment);
  return <span style={{
    display: 'inline-block',
    padding: '0.125rem 0.375rem',
    borderRadius: '0.25rem',
    fontSize: '0.625rem',
    background: style.background,
    color: style.color,
    fontWeight: '500',
    whiteSpace: 'nowrap'
  }}>
      {environment}
    </span>;
};

export const DirectionBadge = ({direction}) => {
  const getBadgeStyle = direction => {
    switch (direction) {
      case 'Bidirectional':
        return {
          background: '#FA8784',
          color: '#1A1A1A'
        };
        --tomato;
      case 'Destination':
        return {
          background: '#FA8784',
          color: '#1A1A1A'
        };
        --tomato;
      case 'Source':
        return {
          background: '#FA8784',
          color: '#1A1A1A'
        };
        --tomato;
      default:
        return {
          background: '#A7B3D9',
          color: '#1A1A1A'
        };
        --haze;
    }
  };
  const style = getBadgeStyle(direction);
  return <span style={{
    display: 'inline-block',
    padding: '0.125rem 0.375rem',
    borderRadius: '0.25rem',
    fontSize: '0.625rem',
    background: style.background,
    color: style.color,
    fontWeight: '500'
  }}>
      {direction}
    </span>;
};

<Card title="">
  <div style={{ display: 'flex', alignItems: 'center', marginBottom: '1rem' }}>
    <div style={{ width: '32px', height: '32px', marginRight: '0.75rem', display: 'flex', alignItems: 'center', justifyContent: 'center', flexShrink: 0 }}>
      <img src="https://mintcdn.com/permutive/pNhz39ducTVcQczh/images/integrations/logos/pinterest.svg?fit=max&auto=format&n=pNhz39ducTVcQczh&q=85&s=9a14032663c1546ae0d4cd2c2f0a41b7" alt="Pinterest" style={{ maxWidth: '32px', maxHeight: '32px', display: 'block' }} width="512" height="512" data-path="images/integrations/logos/pinterest.svg" />
    </div>

    <h3 style={{ margin: 0, fontSize: '1.125rem', fontWeight: '600' }}>Pinterest</h3>
  </div>

  <div style={{ marginBottom: '1rem' }}>
    <BadgeRowCenter label="Direction">
      <DirectionBadge direction="Destination" />
    </BadgeRowCenter>

    <BadgeRowCenter label="Environment">
      <BadgeContainer>
        <EnvironmentBadge environment="Web" />
      </BadgeContainer>
    </BadgeRowCenter>

    <BadgeRowCenter label="Capability">
      <BadgeContainer>
        <CapabilityBadge capability="Cohort Activation" />
      </BadgeContainer>
    </BadgeRowCenter>

    <BadgeRowCenter label="SDK Required">
      <SdkRequiredBadge required="Yes" />
    </BadgeRowCenter>

    <BadgeRowCenter label="Product(s) Required">
      <ProductRequiredBadge product="Core Platform" />
    </BadgeRowCenter>
  </div>

  <p style={{ margin: 0, fontSize: '0.875rem', color: '#6b7280', lineHeight: '1.5' }}>
    Activate Permutive cohorts to Pinterest for custom audience targeting in real-time. Send cohorts to multiple Pinterest accounts for promoted pin campaigns.
  </p>
</Card>

<CardGroup cols={2}>
  <Card title="Setup" href="#setup" icon="gear" />

  <Card title="Troubleshooting" href="#troubleshooting" icon="wrench" />
</CardGroup>

## Overview

Using the Pinterest Pixel integration, you can send rich cohort information to multiple Pinterest accounts for targeting. These audiences are passed to Pinterest in real-time, enabling you to run custom audiences and target promoted pins at Permutive cohorts.

This integration is a Destination:

* **Destination:** Permutive sends cohort membership data to Pinterest via the Pinterest pixel, which can then be used for targeting in Pinterest advertising campaigns.

Use cases include:

* Target Pinterest users with promoted pins based on Permutive cohorts
* Build custom audiences for Pinterest campaigns using real-time cohort data
* Activate cohorts to multiple Pinterest accounts for different brands or campaigns
* Retarget users who visited your website on Pinterest

## Environment Compatibility

| Environment    | Supported    | Notes |
| -------------- | ------------ | ----- |
| **Web**        | <YesBadge /> | --    |
| **iOS**        | <NoBadge />  | --    |
| **Android**    | <NoBadge />  | --    |
| **CTV**        | <NoBadge />  | --    |
| **API Direct** | <NoBadge />  | --    |

## Prerequisites

* **Pinterest Ads Account:** You must have an active Pinterest Ads account.
* **Pinterest Tag ID:** You need to obtain your unique Tag ID from Pinterest. To find this:
  1. Log in to your Pinterest Ads account
  2. Click **Ads** in the top left-hand corner and select **Conversion tags**
  3. Choose to **Create new Pinterest Tag** (if you do not have one created already)
  4. You'll receive a Tag ID - save this for the integration setup

## Setup

<Tabs>
  <Tab title="Primary Setup Steps">
    <Steps>
      <Step title="Enable in Permutive Dashboard">
        Navigate to the Permutive Dashboard and go to **Settings** > **Integrations**.

        Click **Add Integration** and select **Pinterest**.

        You'll need to configure the integration with your unique Tag ID obtained from Pinterest (see Prerequisites).

        Click **Add Pinterest** to complete the setup.

        <Note>
          The integration will be available for use in approximately 20 minutes.
        </Note>
      </Step>

      <Step title="Activate Cohorts to Pinterest">
        Once the integration is enabled, you can activate cohorts to your default Pinterest account:

        1. Navigate to a cohort in the Permutive Dashboard
        2. Toggle on the Pinterest activation for that cohort
        3. The cohort will be sent to Pinterest in real-time
      </Step>

      <Step title="Verify Setup">
        1. In your Pinterest Ads account, navigate to **Ads** > **Audiences**
        2. You should see audiences corresponding to your activated Permutive cohorts
        3. These audiences can now be used for targeting in your Pinterest ad campaigns
      </Step>
    </Steps>

    <Expandable title="Advanced: Sending Cohorts to Multiple Pinterest Accounts">
      If you want to send cohorts to multiple Pinterest accounts (for example, different brands or campaigns), you can configure this at the cohort activation level:

      <Steps>
        <Step title="Create Cohort Activation">
          1. In the Permutive Dashboard, go to **Cohort Activation**
          2. Click **+ Add Activation**
          3. Select the **Pinterest** tile
        </Step>

        <Step title="Configure Alternative Tag ID">
          When creating the activation, you'll see a field to input a Tag ID.

          * To send to an alternative Pinterest account, enter that account's Tag ID here
          * If you leave this field blank, the default Tag ID configured during integration setup will be used
        </Step>

        <Step title="Select Cohorts">
          Choose the cohort(s) you want to push to this Pinterest account and save the activation.
        </Step>
      </Steps>

      <Note>
        This allows you to send different cohorts to different Pinterest accounts without needing to set up multiple integrations in the Permutive Dashboard.
      </Note>
    </Expandable>
  </Tab>

  <Tab title="Web">
    The Pinterest Pixel integration is configured entirely through the Permutive Dashboard. Once enabled, the Permutive Web SDK will automatically send cohort membership data to Pinterest via the Pinterest pixel.

    No additional web implementation is required beyond the standard Permutive SDK deployment.
  </Tab>

  <Tab title="iOS">
    Pinterest cohort activation via Permutive is currently only supported on Web through the Pinterest Pixel integration.
  </Tab>

  <Tab title="Android">
    Pinterest cohort activation via Permutive is currently only supported on Web through the Pinterest Pixel integration.
  </Tab>
</Tabs>

## Data Types

The Pinterest integration is a Destination integration that sends cohort membership data from Permutive to Pinterest. It does not collect events into Permutive.

When a cohort is activated to Pinterest, Permutive sends cohort membership information to Pinterest via the Pinterest pixel, which Pinterest uses to build custom audiences for targeting in ad campaigns.

## Troubleshooting

<AccordionGroup>
  <Accordion title="Integration not available after 20 minutes">
    If the Pinterest integration does not become available after the expected 20-minute waiting period:

    * Verify that you entered the correct Tag ID during setup
    * Check that you saved the integration configuration in the Permutive Dashboard
    * Ensure your Pinterest Ads account is active and in good standing
    * Contact Permutive Support if the issue persists
  </Accordion>

  <Accordion title="Cohorts not appearing in Pinterest Ads Manager">
    If activated cohorts are not showing up as audiences in Pinterest:

    * Confirm that you've toggled on the Pinterest activation for the cohort in Permutive
    * Allow up to 24 hours for audiences to populate in Pinterest after first activation
    * Verify that the Tag ID configured in Permutive matches the one in your Pinterest Ads account
    * Check that your Pinterest Ads account has the necessary permissions to create custom audiences
    * Ensure your cohort has a sufficient number of users (Pinterest may have minimum audience size requirements)
  </Accordion>

  <Accordion title="Multiple Pinterest accounts - wrong Tag ID being used">
    If cohorts are being sent to the wrong Pinterest account when using multiple accounts:

    * When creating a cohort activation for an alternative Pinterest account, ensure you've entered the correct Tag ID in the activation configuration
    * Remember that leaving the Tag ID field blank will use the default Tag ID from the integration setup
    * Verify the Tag ID by checking your Pinterest Ads account under **Ads** > **Conversion tags**
    * If you need to change which account receives cohorts, update the activation configuration with the correct Tag ID
  </Accordion>

  <Accordion title="Audience size is smaller than expected in Pinterest">
    If the audience size in Pinterest is significantly smaller than your cohort size in Permutive:

    * Pinterest can only match users who have Pinterest accounts and have been identified by the Pinterest pixel
    * Match rates vary based on your audience demographics and Pinterest usage patterns
    * Consider the cookie-based nature of the integration - users need to be identified by both Permutive and Pinterest pixels
    * Allow 24-48 hours for the audience to fully populate after first activation
  </Accordion>
</AccordionGroup>

## Changelog

<Info>
  For detailed changelog information, visit our [Changelog](https://changelog.permutive.com/).
</Info>
