Integration
Shopify + Meta catalog
Shopify's Facebook & Instagram channel fills one Meta catalog for Shops, Instagram Shopping and ads. A separate Shopify Facebook catalog feed is for the cases the channel does not cover: different titles for ads, a filtered product set, a second catalog, or a store that cannot pass Meta's onboarding. Here is the field mapping and how the catalog fetches the feed.
We connect your store, build the feed and keep it in sync. Updated 2026-10-27.
At a glance
- The Facebook & Instagram by Meta channel uses one product catalog for Facebook Shop, Instagram Shopping and Facebook Marketing, and the business portfolio you pick must own the Facebook Page.
- Meta's catalog needs id, title, description, availability, condition, price, link, image_link and one of brand, gtin or mpn; titles are capped at 200 characters but Meta recommends 65.
- Textfinity pulls products from Shopify natively, maps them to the Meta template and publishes a feed URL that Commerce Manager fetches as a scheduled data feed; we set it up with you.
- Scheduled feeds cannot update more often than once an hour; stock that changes faster belongs in the channel or the batch API.
Channel sync or catalog feed: which Shopify Facebook catalog integration
The channel is the right default for a store that sells inside Facebook and Instagram Shops. It keeps one catalog in sync, handles checkout and lets Meta own the onboarding; Shopify notes it has limited visibility into onboarding errors because Meta maintains the channel. Requirements include a business portfolio that owns the Page, staff with full control of that portfolio, a supported country and an account Meta considers trustworthy.
A feed is the right choice when the catalog that runs ads should differ from the store: ad-specific titles, a subset of products, a catalog per country or language, or extra fields such as fb_product_category and custom labels for product sets. You can run both, as long as each catalog has one source. The feed route also works for stores where the channel is blocked on a Page-ownership or eligibility problem, because a catalog fed by URL does not depend on the Shopify connection at all.
Shopify fields to Meta catalog fields
| Shopify field | Meta catalog field | Rule in Textfinity |
|---|---|---|
| SKU (variant) | id | Rename; max 100 chars, must be unique or Meta ignores all copies |
| Title + Option values | title | Combine; max 200 chars, aim for 65 so it is not cut |
| Description (HTML) | description | Remove from regexp <[^>]+>; plain text, max 9,999 chars, no links |
| Inventory quantity | availability | Advanced: if calc{[variant_inventoryQuantity]} > 0 then "in stock" else "out of stock" (with a space, not an underscore) |
| (static) | condition | Add static value new |
| Price | price | Add suffix " USD" (9.99 USD, no symbol) |
| Compare-at price | price / sale_price | Compare-at becomes price and Shopify price becomes sale_price when a compare-at exists |
| URL handle | link | Add prefix https://store.example/products/ ; must be on your domain |
| Variant image URL, else Product image URL | image_link | Advanced fallback; JPEG or PNG, at least 500 x 500, up to 8 MB |
| Other image rows | additional_image_link | Combine up to 50 URLs with a comma |
| Vendor | brand | Rename; max 100 chars |
| Barcodes | gtin | Rename; empty stays empty |
| Product id | item_group_id | Rename so variants group; max 100 chars |
| Google Shopping / Google Product Category | google_product_category | Rename; or map fb_product_category instead |
| Option values | color, size, gender | Rename; gender is female, male or unisex |
Meta field names and limits from the Meta commerce catalog fields reference; Shopify columns from the product CSV help page; both checked 2026-10-27.
What has to change between a Shopify export and a Meta catalog
- Availability spelling: Google writes in_stock, Meta writes in stock with a space. A feed built for Google Shopping cannot be pasted into Meta without this one rule; the convert page linked below covers the full Google-to-Meta translation.
- Title length: Meta allows 200 characters but recommends 65 so titles are not cut in placements. Build a short combine for Meta and keep the long one for Google.
- Description: plain text, no links, no all-caps. Strip HTML and keep it under 9,999 characters.
- Price and sale price: a currency code with a space, never a symbol. If sale_price is sent, it must be lower than price and pair with sale_price_effective_date when the promotion has dates.
- Images: at least 500 x 500 pixels. Shopify thumbnails in older image rows fail this; use the full Product image URL.
- Duplicate ids: if two rows share an id Meta drops both. Variant SKU, not product handle, is the safe id.
How the catalog ingests the feed
The catalog reads the feed as a scheduled data feed in Commerce Manager. It must be a product (e-commerce) catalog under the business portfolio; a generic catalog will not accept a product feed, so create the catalog as an e-commerce catalog in Commerce Manager first.
Meta accepts CSV, TSV, RSS XML and ATOM XML, fetches from a URL on the interval you set, and does not support scheduled uploads more often than once an hour. Textfinity publishes the feed on a stable URL and rebuilds it on the shop's sync schedule, and we add that URL to the catalog with you, through access to your business portfolio or on a short call. Diagnostics for rejected items live in Commerce Manager; Textfinity does not import them.
Examples
Worked examples, by situation
Three Shopify stores that needed something the channel sync does not do.
Short ad titles with the color first
Before
Title: Relaxed Linen Shirt Product type: Linen Shirt Options: Color Sand, Size M Vendor: Marlow
After
title: Sand Linen Shirt by Marlow item_group_id: 7812339 color: Sand size: M
How we set it up
We map title as an advanced expression, [variant_color] + " " + [product_productType] + " by " + [product_vendor], built from the short product type rather than the store title (advanced expressions name Shopify fields with underscores), and rename color and size from the variant options. Keeps titles under Meta's recommended 65 characters.
German catalog from an English Shopify store
Before
Title: Oak Dining Table 180 cm Description: <p>Solid oak, oiled finish.</p>
After
title: Esstisch Eiche 180 cm massiv geölt, Holztisch für 6 bis 8 Personen, Massivholz-Esstisch mit natürlicher Maserung description: Massiver Esstisch aus geölter Eiche, 180 cm … (500 to 1,000 characters)
How we set it up
We set up one AI config that enhances the title and a second for the description, both translated into German. Titles come out at 100 to 150 characters with the key facts in the first 70, which is roughly what Meta shows; descriptions at 500 to 1,000. Once the store accepts the generations in review, title and description use replace from AI config with the English values as fallback. The DE feed filters Shopify Markets to the DE market for price and link.
Keep subscriptions and bundles out of the ads catalog
Filters and static fields
exclude if product.metafield.custom.channel_exclude is equal to "subscription"
exclude if product.productType is equal to "Bundle"
condition <- static "new"
availability <- if calc{[variant_inventoryQuantity]} > 0 then "in stock" else "out of stock"How we set it up
We exclude with is equal to on a product metafield and the product type, because the Shopify connection does not import tags, set condition as a static value and availability as an advanced expression. The channel keeps the full catalog for Shops; this feed fills a second catalog used only by the ad account.
Copy this plan
Plan: Shopify to a Meta catalog in one sitting
Create the catalog in Commerce Manager first; the feed steps we set up in Textfinity for you.
01
Create or pick the catalog in Commerce Manager
Make a product catalog under your business portfolio before you connect anything. This step happens in Meta's interface.
02
Connect the Shopify store
Approve the feed tool's access to your store; it pulls products, variants, metafields, markets and locales, and a profile shows empty barcodes and over-length titles before mapping.
What we set up: Once you approve Textfinity's access to your store, we pull the catalog and run feed hygiene on it.03
Start a Meta catalog feed
The Meta template pre-fills the catalog field names. Map each from the table above.
What we set up: We start the feed from the Meta Ads (Facebook + Instagram catalog) channel template and map it from the table above.04
Add the Meta-specific rules
Spaces in availability, a 65-character title, plain-text description, currency suffix, static condition, item_group_id.
What we set up: We map availability as an advanced expression, title as a combine, description with remove from regexp, price with add suffix and condition as a static value.05
Filter the ad set
Exclude drafts, gift cards, subscriptions and zero stock if you do not want out-of-stock items in retargeting.
What we set up: We add include filters: product.status is equal to ACTIVE; variant.inventoryQuantity is more than 0.06
Add the feed to the catalog
Add the feed URL in Commerce Manager as a scheduled data feed with an hourly or daily interval. The scheduled-feed form is in Meta's interface.
What we set up: We add the feed URL to your catalog as a scheduled data feed, with access to your business portfolio or on a short call.
Customization tips
Make it yours
One source per catalog
If the channel and a feed both write to the same catalog, items collide on id. Let the channel own the Shops catalog and give the ads catalog to the feed, or disconnect the channel's product sync and feed everything. Mixed sources are the usual cause of 'catalog not syncing' threads.
fb_product_category is optional when google_product_category is set
Meta accepts either. If you already maintain Google categories for Shopping, map that column and skip the Facebook taxonomy; add fb_product_category only for Shops features that require it in your country.
Use product sets, not extra feeds, for campaign splits
A custom_label_0 column computed with an advanced expression (margin band, season, bestseller flag) lets you build product sets in Commerce Manager from one feed. Extra feeds double the maintenance.
Mind the hourly floor
Scheduled feeds will not fetch more often than once per hour. Flash-sale stock that sells out in minutes should rely on the channel's sync or Meta's batch API; the feed is for the data, not the second-by-second count.
FAQ
Questions about shopify facebook catalog integration
Does Shopify sync products to Facebook automatically?
Yes, through the Facebook & Instagram by Meta channel, which keeps one product catalog for Facebook Shop, Instagram Shopping and Facebook Marketing. The business portfolio you select must own the Facebook Page, and Meta maintains the channel, so Shopify has limited visibility into onboarding errors.
Can I export Shopify products to a Facebook catalog as a CSV?
Yes. Meta accepts CSV, TSV, RSS XML and ATOM XML data feeds with id, title, description, availability, condition, price, link, image_link and brand, gtin or mpn. Textfinity builds that file from the live Shopify catalog and publishes it on a URL Commerce Manager fetches on a schedule.
What is the difference between a Meta catalog feed and a Google Shopping feed?
The fields overlap but the values differ: Meta writes in stock with a space, recommends 65-character titles, allows 9,999-character descriptions and 100-character ids, and accepts fb_product_category in place of google_product_category. A Google feed needs those four changes to become a Meta feed.
Can I run two catalogs from one Shopify store?
Yes. Keep the channel's catalog for Shops and build a second catalog from a Textfinity feed for ads, or one catalog per country. Each catalog needs its own source and its own feed.
Set up for you
We'll set up your Shopify catalog feed for Meta with the titles your ads need.
Send us your store URL. We set up the feed in Textfinity from the Meta template, add the five Meta-specific rules and add the feed URL to your catalog as a scheduled data feed with you.
Tell us your store and channels. We reply within 24 hours.