Conversion
Google Shopping feed to Facebook catalog
Meta designed its catalog spec to look like Google's, which is why most people assume the Merchant Center feed can go straight into Commerce Manager. It nearly can. The attribute names match on the fields that matter; the values do not: 'in_stock' becomes 'in stock', backorder has no Meta equivalent, identifier_exists means nothing, and the link must sit on your own domain. The table below is the full mapping with every difference marked.
We connect your store, build the feed and keep it in sync. Updated 2026-10-27.
At a glance
- Same names: id, title, description, link, image_link, price, brand, gtin, mpn, condition, item_group_id, color, size, gender, sale_price, custom_label_0–4, google_product_category.
- Different values: availability uses spaces on Meta ('in stock', 'out of stock'); Google's preorder and backorder need a rule; age_group gains 'teen' and 'all ages' on Meta.
- Different limits: title 150 (Google) vs 200 (Meta); description 5,000 vs 9,999; Meta accepts google_product_category directly, so no taxonomy conversion is needed.
- Textfinity reads the Google feed (or the store behind it) and publishes the Meta feed on a URL that Commerce Manager fetches on a schedule; we set up the mapping for you.
Google Shopping attributes mapped to Meta catalog fields
Attributes from Google's product data specification on the left, fields from Meta's catalog reference on the right. 'Same' means the value passes through unchanged.
| Google attribute | Meta field | Difference / transform |
|---|---|---|
| id | id | same (Meta max 100 chars) |
| title | title | same; Meta allows 200 chars, shows ~65 |
| description | description | same; Meta max 9,999, plain text |
| link | link | same; must be on the business's domain |
| image_link | image_link | same; ≥500×500 px, JPEG/PNG |
| additional_image_link | additional_image_link | same; Meta up to 50 URLs |
| availability (in_stock, out_of_stock, preorder, backorder) | availability (in stock, out of stock) | replace from regexp: _ → space; rule for preorder/backorder |
| price (24.99 USD) | price | same format |
| sale_price / sale_price_effective_date | sale_price / sale_price_effective_date | same format (ISO 8601 range with '/') |
| brand | brand | same; Meta needs one of brand, gtin, mpn |
| gtin / mpn | gtin / mpn | same |
| identifier_exists | — (none) | leave out |
| condition (new, refurbished, used) | condition | same |
| item_group_id | item_group_id | same |
| color / size / material / pattern | color / size / material / pattern | same |
| gender (male, female, unisex) | gender | same |
| age_group (newborn…adult) | age_group | same values accepted; Meta adds teen, all ages |
| google_product_category | google_product_category | same; or map to fb_product_category via lookup |
| product_type | product_type | same (≤750 chars) |
| custom_label_0–4 | custom_label_0–4 | same |
| shipping (country:region:service:price) | shipping | same format |
| excluded_destination / pause | status | advanced: pause = all → archived, else active |
Google attributes from the Merchant Center product data specification; Meta fields and values from Meta's catalog fields reference (developers.facebook.com). Both checked 2026-10-27.
Where a Google Merchant Center feed fails in Commerce Manager
- Availability spelling. Google's in_stock and out_of_stock use underscores; Meta's reference lists 'in stock' and 'out of stock' with a space. The replace-from-regexp transform (_ → space) fixes the common two; preorder and backorder need an advanced rule because Meta's reference does not list them.
- Identifier logic. Google uses identifier_exists = no to excuse missing GTINs; Meta simply requires one of brand, gtin or mpn per item. Drop identifier_exists and make sure brand is filled.
- Link domain. Meta rejects links that are not on the business's own domain, so a Google feed built for a marketplace landing page will not do. Also, Google's ads_redirect tracking URLs have no Meta equivalent; keep link clean.
- Pause and destinations. Google's pause and excluded_destination attributes are ignored by Meta. If you pause items for Google, map that to Meta's status = archived with an advanced rule, or Meta keeps selling them.
- Category. Meta accepts google_product_category as-is, so the Google taxonomy to Facebook category question answers itself. Only use fb_product_category if you want Meta's own taxonomy; a two-column lookup sheet does the translation.
Google product taxonomy to Facebook category
Commerce Manager reads google_product_category, name or numeric ID, and uses it for the same purposes it uses fb_product_category: tax, policy and ad relevance. For nearly every store the right move is to send the Google field unchanged and leave fb_product_category empty. When a Meta Shops category requirement forces the Facebook taxonomy (some apparel and beauty categories), build a lookup sheet whose first tab has the Google ID in column A and the Facebook category path in column B and map fb_product_category with 'replace from google sheet', conditioned on 'is in google sheet list'. The sheet replaces substrings row by row, so a short ID can rewrite part of a longer one: list longer IDs above shorter ones they contain. Meta's reference asks for one field or the other, so send only the one you chose.
Lookup sheet, first tab: google_product_category → fb_product_category
google_product_category,fb_product_category
2271,clothing & accessories > clothing > dresses
187,clothing & accessories > shoes & footwear
505771,electronics > audio & video > headphonesSample: the same products in Google and Meta format
The snippet is three rows of a Google Shopping feed (tab-delimited, trimmed to the columns that differ). The download is the Meta catalog CSV built from them. Everything except availability and the dropped identifier_exists column is identical, which is the point: the conversion is small, but it has to happen on every rebuild.
google-shopping.txt (source)
id title availability price identifier_exists google_product_category
TANK-SAGE-S Ribbed Crop Tank – Sage S in_stock 24.00 USD yes 212
LS-LINEN-01 Linen Lampshade backorder 59.00 USD yes 594
HP-4421 Noise Cancelling Headphones out_of_stock 149.00 USD no 505771Examples
Worked examples, by situation
Three verticals, three Google rows and the Meta rows they become. Only the differences are shown.
Availability respelled, identifier_exists dropped, nothing else changes
Before
id: TANK-SAGE-S availability: in_stock identifier_exists: yes age_group: adult google_product_category: 212
After
id: TANK-SAGE-S availability: in stock age_group: adult google_product_category: 212
How we set it up
We build the feed from the Meta template and map every attribute as a rename from the same-named Google column; availability gets 'replace from regexp' with pattern _ and replacement space. identifier_exists is simply not mapped.
Google's backorder mapped to Meta's two-value availability
Before
availability: backorder availability_date: 2026-12-01
After
availability: in stock description: … Ships from December 1.
How we set it up
We map availability with the advanced expression: if [availability] equals "backorder" OR [availability] equals "preorder" then "in stock" else if [availability] equals "out_of_stock" then "out of stock" else "in stock". A suffix rule appends the ship date to description so the page and the ad agree. Stores that would rather not advertise backorders add a filter instead.
Google pause and missing GTIN handled for Meta
Before
id: HP-4421 pause: all identifier_exists: no brand: Soundcore gtin: (empty)
After
id: HP-4421 status: archived brand: Soundcore
How we set it up
We map status with the advanced expression: if [pause] equals "all" then "archived" else "active". Brand is present so Meta's identifier requirement is met without a GTIN; feed hygiene's completeness check confirms brand is filled for 100% of rows before publishing.
Copy this plan
Plan: Google Shopping feed to Meta catalog
Under an hour of setup. If your Google feed is already built in Textfinity, we skip step 1 and build the Meta feed from the same source.
01
Add the Google feed (or the store) as the source
Paste the Google feed URL (CSV, TSV or XML) or connect the store that produces it. Hygiene checks run on import.
What we set up: We add your Google feed URL, or connect the store behind it, as the source in Textfinity.02
Create the Meta feed from the template
Meta's spelling is pre-filled; most columns map by rename from the identically named Google attribute.
What we set up: We start from the Meta (Facebook and Instagram) template and map most columns as renames.03
Fix availability
Replace the underscore with a regexp rule, or, when preorder and backorder also occur, handle all four values in one advanced rule.
What we set up: We map availability with replace from regexp (underscore to space) or one advanced rule for all four values.04
Drop Google-only attributes and set status
Leave identifier_exists, ads_redirect, excluded_destination and shopping_ads_excluded_country unmapped; derive status from pause.
What we set up: We leave the Google-only columns unmapped and derive status from pause with an advanced rule.05
Decide the category field
Keep google_product_category as is; add fb_product_category only through a lookup sheet if Shops demands it.
What we set up: If needed, we map fb_product_category as a replace from google sheet on your lookup sheet.06
Register the feed in Commerce Manager
Add the feed URL under Catalog → Data sources → Add data feed → Use a URL with an hourly, daily or weekly schedule. Check Diagnostics after the first fetch (outside Textfinity).
What we set up: We register the URL with you: you give us access to Commerce Manager, or we walk you through it.
Customization tips
Make it yours
Build both feeds from the store, not one from the other
Converting the Google feed works, but a Meta feed built from the same store source lets you give Meta longer titles (200 chars) and richer descriptions without touching Google. The trade-off is two mappings to maintain; most stores accept it once the catalogs diverge.
Keep ids identical across channels
Same id in Google and Meta makes performance comparison and pixel matching trivial. Do not append a channel suffix to Meta ids.
Use Meta's extra title room, carefully
Meta allows 200 characters but shows about 65. A combine that puts the product name first and the variant detail last works for both channels; an AI title config writes 100 to 150 characters with the key information in the first 70, so the visible part carries the product, and only titles you accept in review replace the Google title.
Hourly fetch only if availability moves
Commerce Manager fetches hourly at most. If the Google feed only changes daily, a daily Meta fetch and a daily Textfinity sync are enough and keep diagnostics readable.
Downloads
Take the files
FAQ
Questions about google shopping feed to facebook catalog
Can I use my Google Shopping feed for a Facebook catalog?
Almost. Meta's field names match Google's for id, title, description, link, image_link, price, brand, gtin, condition, item_group_id and the apparel attributes, and Meta accepts google_product_category directly. The values that need changing are availability ('in_stock' → 'in stock', no backorder on Meta) and Google-only attributes such as identifier_exists and pause, which Meta ignores or you must translate.
What is the difference between google_product_category and fb_product_category?
They are two taxonomies for the same purpose. Commerce Manager accepts either, as a name or numeric ID. If you already maintain Google categories, send them unchanged; only build a lookup to fb_product_category when a Meta Shops requirement asks for the Facebook taxonomy.
Why does Meta reject in_stock from my Google feed?
Meta's catalog reference lists availability as 'in stock' or 'out of stock', with a space. Google's values use an underscore. Replace the underscore on the way out, and decide what preorder and backorder should become, since Meta's reference does not list them.
Do title and description limits differ between Google and Meta?
Yes. Google allows 150 characters for title and 5,000 for description; Meta allows 200 and 9,999. A feed that passes Google passes Meta on length. Going the other way, from Meta to Google, is where titles need trimming.
Set up for you
Have us turn your Google Shopping feed into a Meta catalog.
Send us the feed URL or your store. We set up the Meta feed in Textfinity, fix availability once and register the URL with you in Commerce Manager; the software rebuilds it every time the Google data changes.
Tell us your store and channels. We reply within 24 hours.