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 attribute | Pinterest field | Transform in Textfinity |
|---|---|---|
| Variant SKU (fallback: variant id) | id | rename with conditional fallback |
| Product title + options | title | combine; ≤500 chars allowed |
| Body (HTML) | description | remove from regexp <[^>]+> (plain text required) |
| Online store URL (+ ?variant=) | link | combine |
| Variant image / product image | image_link | rename with fallback |
| Other images | additional_image_link | rename (up to 10) |
| Variant price | price | add suffix " USD" |
| Compare-at price | sale_price | advanced swap when compare-at is higher |
| Inventory quantity | availability | advanced: "in stock" / "out of stock" |
| Product id | item_group_id | rename (required for variants) |
| Vendor | brand | rename |
| Product type / Shopify category | product_type | rename, '>'-separated path, up to five levels |
| Shopify product category | google_product_category | replace from google sheet (substring find-and-replace: keep column A specific) |
| Option1 / Option2 values | color / size | rename (≤30 chars each) |
| — (not in Shopify) | condition | add static value "new" |
| Product metafield (tags are not imported) | custom_label_0 | rename, 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.
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.
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.
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.
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.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.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.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.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.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.
Tell us your store and channels. We reply within 24 hours.