Integration

Shopify + Pinterest

The Pinterest app for Shopify syncs products with no control over titles, categories or which items go. A catalog feed built from the same Shopify data gives you that control: Pinterest fetches it once a day from a URL, and every product becomes a Product Pin. Here is what Shopify provides, what Pinterest's data source spec wants, and the fixes in between.

We connect your store, build the feed and keep it in sync. Updated 2026-10-27.

At a glance

  • Pinterest requires id, title, description, link, image_link, price and availability for every item, and item_group_id when products have variants; a missing required field fails the whole ingestion.
  • Availability must be 'in stock', 'out of stock' or 'preorder'; price is a number with an optional ISO currency code; images should be at least 1000×1500 px.
  • Pinterest ingests a hosted data source once every 24 hours from an http(s), ftp or sftp URL; on-demand ingestion is not offered.
  • Textfinity reads Shopify natively, publishes the Pinterest feed to a stable URL and rebuilds it on your schedule. We set it up in Textfinity for you and add the URL to Pinterest with you.

App sync or catalog feed: what each gets you

The Pinterest app in Shopify is the fastest route: add Pinterest as a sales channel and it creates the ad account, installs the tag and syncs the catalog. Products need title, description, image, price, product type and availability to sync, and the only per-product control is the sales-channel checkbox. There is no way to rewrite a title for Pinterest only, exclude a vendor, or map Shopify types to Google's taxonomy.

A catalog feed through Textfinity is the same Shopify data, mapped and filtered on the way out, hosted on a URL that you add as a data source in Pinterest. You keep the app for the tag if you like; the catalog comes from the feed. The trade-off is one daily ingestion (Pinterest's limit, not Textfinity's) versus the app's own sync, so flash-sale stock changes reach Pinterest no faster than once a day either way.

Shopify fields mapped to Pinterest catalog fields

Pinterest's data source spec uses Google-style field names, so a store that already has a Merchant Center feed will recognize most of this table.

Shopify attributePinterest fieldTransform in Textfinity
Variant SKU (fallback: variant id)idrename with conditional fallback
Product title + optionstitlecombine; ≤500 chars allowed
Body (HTML)descriptionremove from regexp <[^>]+> (plain text required)
Online store URL (+ ?variant=)linkcombine
Variant image / product imageimage_linkrename with fallback
Other imagesadditional_image_linkrename (up to 10)
Variant pricepriceadd suffix " USD"
Compare-at pricesale_priceadvanced swap when compare-at is higher
Inventory quantityavailabilityadvanced: "in stock" / "out of stock"
Product iditem_group_idrename (required for variants)
Vendorbrandrename
Product type / Shopify categoryproduct_typerename, '>'-separated path, up to five levels
Shopify product categorygoogle_product_categoryreplace from google sheet (substring find-and-replace: keep column A specific)
Option1 / Option2 valuescolor / sizerename (≤30 chars each)
— (not in Shopify)conditionadd static value "new"
Product metafield (tags are not imported)custom_label_0rename, used for product groups

Pinterest field names, requirements and formats from Pinterest's 'Get started with retail catalogs' help page, checked 2026-10-27.

What breaks between Shopify and Pinterest

  • Missing descriptions fail ingestion. Pinterest requires description for every item; Shopify allows an empty Body. Feed hygiene's completeness check shows the share of empty descriptions, and a filter rule 'product.description is empty → exclude' keeps the data source valid while you fill them (or let an AI config write them and accept them in review).
  • Images are the wrong shape. Pinterest wants at least 1000×1500 px, portrait. Textfinity cannot resize, but it can map a dedicated 'pinterest_image' metafield into image_link when one exists and fall back to the product image otherwise.
  • Variants without item_group_id are treated as unrelated products. Map item_group_id from the Shopify product id on every row.
  • Commas in image URLs break CSV parsing on Pinterest's side; Pinterest advises encoding or removing them. Feed hygiene's URL validator flags malformed links before ingestion.
  • Pinterest only accepts three availability values, and 'backorder' is not one of them. Map backorderable items to 'preorder' or 'out of stock' with an advanced rule instead of passing Shopify's flag through.

How Pinterest ingests the Shopify catalog feed

In Pinterest, open the menu → Manage business → Catalogs and product groups → Add data source, choose 'Provide URL link', paste the Textfinity feed URL, pick the file format (CSV), country, language and default currency, and set the scheduled ingestion time. Pinterest fetches the file every 24 hours; the file must be reachable without IP whitelisting and the URL must start with http://, https://, ftp:// or sftp://. These steps happen in Pinterest.

After the first ingestion, the data source's diagnostics list items that failed and why. Each reason names a field, which points straight at the mapping column in Textfinity. Once the rule is fixed there, the feed rebuilds within about five minutes and Pinterest reads the corrected file at the next scheduled ingestion. Textfinity pulls Shopify on the shop's sync schedule, so make sure it runs before Pinterest's daily fetch rather than after.

Examples

Worked examples, by situation

Three stores with different reasons to leave the app sync behind. Each shows the Shopify input and the Pinterest row Textfinity produces.

Home decor · Pinterest catalog · 450 SKUs · portrait images

Lifestyle metafield image used as image_link

Before

product.title: Linen Lampshade
image: https://cdn.shop/lampshade-square.jpg (1000×1000)
metafields.custom.pinterest_image: https://cdn.shop/lampshade-tall.jpg (1200×1800)

After

id,title,image_link,additional_image_link
LS-LINEN-01,Linen Lampshade,https://cdn.shop/lampshade-tall.jpg,https://cdn.shop/lampshade-square.jpg

How we set it up

We map image_link as a rename of the pinterest_image metafield with the condition 'pinterest_image matches regexp ^\s*$ → fall back to product image'; additional_image_link takes the standard images. Metafields come through the native Shopify connection.

Fashion · Pinterest catalog · 1,800 variants · EUR market

Variant rows grouped, availability normalized, EUR prices

Before

product.id: 7731  variant.sku: DR-ROSE-38
option1: Rose  option2: 38
inventoryQuantity: 0  inventoryPolicy: CONTINUE
price (EU market): 89.00

After

id,item_group_id,color,size,availability,price
DR-ROSE-38,7731,Rose,38,preorder,89.00 EUR

How we set it up

We map availability as an advanced expression: if calc{[variant_inventoryQuantity]} > 0 then "in stock" else if [variant_inventoryPolicy] equals "CONTINUE" then "preorder" else "out of stock" (advanced expressions name Shopify fields with underscores). Price maps from the EU market price with add suffix ' EUR'; the Pinterest data source is set to EUR.

Gifts · Pinterest catalog · 300 SKUs · thin descriptions

AI-written descriptions with the Shopify body as fallback

Before

description: (empty) for 112 of 300 products

After

description: A hand-poured soy candle in a reusable amber glass, scented with fig and cedar, burning for about 40 hours. … (500 to 1,000 characters in total)

How we set it up

We set up an AI config that enhances the description from title, product type and the material metafield; Textfinity writes 500 to 1,000 characters. The store reviews and accepts the generations (one by one or Accept all). Description gets the condition is accepted in AI config: replace from AI config; otherwise remove from regexp <[^>]+> on the body. Until a generation is accepted the stripped body goes out, so the 112 empty ones need accepting (or a filter) before Pinterest's required-description check passes.

Copy this plan

Plan: Shopify to Pinterest catalog feed

About an hour. Steps 1–5 we set up in Textfinity for you; step 6 happens in Pinterest, with you.

  1. 01

    Connect Shopify

    Native connection pulls products, variants, metafields and markets. Check feed hygiene for empty descriptions and bad image URLs before you build anything.

    What we set up: We connect your Shopify store and run feed hygiene for empty descriptions and bad image URLs.
  2. 02

    Create the Pinterest feed

    The Pinterest template pre-names required and optional fields in Pinterest's spelling.

    What we set up: We start the feed from the Pinterest Ads channel template.
  3. 03

    Map the seven required fields and item_group_id

    id, title, description, link, image_link, price, availability, then item_group_id from the product id.

    What we set up: We map id as a rename, title as a combine and availability as an advanced expression.
  4. 04

    Add the fields that drive product groups

    product_type, google_product_category via a lookup sheet, brand, color, size and a custom_label from a product metafield so you can build product groups and ads by label.

    What we set up: We map google_product_category with replace from google sheet and custom_label_0 as a rename of a product metafield.
  5. 05

    Filter the catalog

    Exclude items without descriptions or images, draft products and gift cards. Pinterest fails the whole ingestion when required fields are missing, so this step is not optional.

    What we set up: We add exclude filters: product.description is empty; product.status is not equal to ACTIVE.
  6. 06

    Add the URL as a Pinterest data source

    Manage business → Catalogs and product groups → Add data source → Provide URL link → paste the Textfinity feed URL, set format, country, language, currency and ingestion time. Review diagnostics after the first daily ingestion. This step happens in Pinterest.

    What we set up: We add the feed URL as a Pinterest data source with you, through access to your business account or on a short call, and read the first diagnostics.

Customization tips

Make it yours

One catalog per market, not one per language

A Pinterest data source carries one country, language and currency. If you sell in two markets, build two feeds from the same Shopify shop: Textfinity's Shopify connection exposes market prices and locales, and a translation AI config can write the second language's titles for you to review and accept.

Short titles win on Pinterest

Catalog titles may run to 500 characters, but Pinterest's ad spec says only about the first 40 show in feeds. Put the product name first and the variant detail last in the combine transform, or keep the combined title for Pinterest: an AI title runs 100 to 150 characters with the key information first, so it does not fit 40 either, and a replace from regexp rule is the way to shorten it.

Keep ids stable when you switch from the app

If the app already created Product Pins, their ids are Shopify variant ids. Mapping id from variant id rather than SKU in the feed keeps the Pins and their saves; mapping from SKU creates fresh items.

Use custom_label for seasonal product groups

A custom_label_0 from a product metafield ('gift-guide', 'summer') lets you build product groups in Pinterest without editing the catalog. The Shopify connection does not import tags, so the label has to live in a metafield; an 'is in list' filter can also create a separate seasonal feed.

FAQ

Questions about shopify pinterest catalog feed

Do I need the Pinterest app for Shopify to use a catalog feed?

No. A catalog can come from any data source URL you add in Pinterest. Many stores keep the app installed for the Pinterest tag and conversion tracking and use a feed URL from Textfinity for the catalog itself, because the feed lets them control titles, categories and which products are included.

Which fields does Pinterest require in a Shopify product feed?

id, title, description, link, image_link, price and availability for every item, plus item_group_id when products have variants. Pinterest says the entire catalog fails ingestion if a required field is missing or malformed, so filter out incomplete products rather than sending blanks.

How often does Pinterest update products from a feed?

Once every 24 hours for hosted data sources, at the ingestion time you schedule. On-demand ingestion is not offered. Textfinity rebuilds the file on the shop's sync schedule and within about five minutes after a rule change, so set the Shopify sync to run before Pinterest's daily fetch.

Why are my Shopify products not showing as Product Pins?

The most common reasons are a missing description or image, an availability value Pinterest does not accept, or a link that redirects. Pinterest's data source diagnostics name the failing field; Textfinity's feed hygiene shows the same gaps before you publish.

Set up for you

We'll turn your Shopify catalog into a Pinterest catalog feed.

Send us your store URL. We set up the Pinterest feed in Textfinity and fix descriptions and availability once; the software keeps the feed URL current and Pinterest ingests it daily.

Have us build my Pinterest feedOr email support@textfinity.io

Tell us your store and channels. We reply within 24 hours.