Input feeds
CatalogBadge reads the product feed your store already publishes. You give us its URL; we fetch it on every update and never change it.
Accepted formats
- XML: RSS 2.0 in Meta or Google Shopping format (fields with or without the
g:prefix), Atom feeds, and exports whose products sit in<item>elements, such as many Magento extensions. - CSV and TSV: Meta's data-feed columns. The separator is detected from the header line: comma, tab, semicolon or pipe.
- Platform links: the Salla catalog link, and feed URLs from Zid, Shopify, Magento and WooCommerce feed apps. See the setup guides.
The feed must be UTF-8. It is fetched over http or https, with up to 5 redirects, within 60 seconds and up to 300 MB.
Columns
| Field | Names we read | Needed |
|---|---|---|
| ID | id, sku, product_id | Required |
| Title | title, name | Required |
| Product link | link, url, product_url | Required |
| Photo | image_link, image, image_url | Required, an absolute http or https URL |
| Price | price | Required |
| Sale price and dates | sale_price, sale_price_effective_date | Optional |
| Availability | availability | Optional; missing means in stock |
| Other fields | brand, product_type, item_group_id, custom_label_0 to custom_label_4, gtin, mpn, color, size and the rest | Optional; usable in rules and passed through to your feed |
Prices are read in every GCC currency, written any common way: 249.00 SAR, SAR 249, 1.249,00 SAR, 1,249.500 KWD, Arabic-Indic digits, or the Arabic abbreviations such as ر.س and د.إ. A price in any other currency is read with its ISO 4217 code, such as 1249.50 EUR or 2499 INR. A price with no currency takes your store's currency. Availability values such as متوفر, instock or 1 are mapped to Meta's values.
Rows with problems
A product without an ID, title, link, photo or a price we can read is marked invalid. It stays in your full feed exactly as you sent it, with its original image, so Meta still receives it. If the same ID appears twice, the first one wins.
Every update produces a health report in your dashboard. It counts:
- invalid products, by reason, and duplicate IDs;
- sale prices equal to or higher than the price, and sale prices without dates;
- titles over 65 characters, which Meta cuts;
- products with no brand, GTIN or MPN, since Meta needs one of them;
- availability values outside Meta's list;
- photos under 500 pixels;
- the change in product count since the last update.
The column map, for non-standard exports
Some exports use their own column names, for example Identity, final_price and is_in_stock. Rather than guess, which could put a wrong price on an image, your store gets a column map: for each field it names the column that holds it, and it can translate availability values.
{
"fields": {
"id": "Identity",
"image_link": "Imageurl",
"price": "final_price",
"availability": "is_in_stock"
},
"availability_values": {
"1": "in stock",
"0": "out of stock"
}
}A dry run reads your live feed with the map and shows the health report before anything is saved. A store without a map reads its feed exactly as described above. If your export needs a map and you are not sure how to write it, email hello@catalogbadge.com and we set it up with you.