Short answer. A TikTok product feed is a catalog file TikTok fetches from a URL on a schedule. The scheduled route takes a CSV, with nine required fields — sku_id, title, description, availability, condition, price, link, image_link and brand — and availability written with spaces, in stock, not Google's in_stock. The setting that decides whether any of it works is the catalog's Default Currency: it is chosen when the catalog is created, it cannot be changed afterwards, and every product priced in anything else is rejected.
TikTok catalogs feed Video Shopping Ads and catalog campaigns: the ad formats that show a product with its price and take the viewer to your page. The catalog is the product data behind them, and you can fill it three ways — by hand, by connecting your store, or by giving TikTok a feed URL it re-fetches on a schedule. This guide is the third, because it is the one with rules, and two of those rules cost a whole catalogue if you meet them late.
Everything below was checked against TikTok's catalog product parameters, the CSV and XML templates their Ads Manager hands you, and one real import.
First decision: partner sync or a feed of your own
When you create a catalog, TikTok asks for an upload method before anything else, and the first option — Sync from partner platform, with Shopify, WooCommerce and BigCommerce logos under it — is preselected. It connects your store to TikTok directly.
If TikTok is the only place your catalogue goes and you want nothing changed on the way, that connection is the shortest path and you can stop reading. Choose Manual creation instead when you need the same catalogue to reach several channels in the shapes each one asks for, when titles or categories have to be rewritten before they arrive, or when you want to see what was sent before TikTok judges it. That is the option that accepts a feed URL.
The nine required fields
TikTok publishes 9 required and 27 optional parameters. The required nine are where feeds fail, and one of them is not required anywhere else:
sku_id— unique per catalog, up to 100 characters. Two identical SKU ids in one catalog is an error of its own.title— no promotional text, and no emoji: their diagnostics state plainly that "emojis and control characters are not allowed", and a flame in a title is enough to lose the product.description— must not push the shopper elsewhere: no shop links, no competitors, no unrelated accessories.availability— see below; five values, spaced, lower case.condition— new, refurbished or used.price— the amount and the currency code together,9.99 USD, and the currency has to match the catalog's. This is the one that bites.link— the product page, on a verified domain, reachable.image_link— JPG or PNG, at least 500×500, no placeholder, no watermark.brand— required. Google treats brand as optional and keeps serving the rest of your feed without it; TikTok rejects the row. If part of your catalogue has no brand filled in — and on most stores part of it does not — that part does not arrive.
TikTok asks for "an accurate value instead of a meaningless one" in the brand field, so the fix is the real brand in your store, not your shop's name written across goods you resell. A wrong brand is worse than a missing one: it is the field they match products by.
availability: five values, and a word no other channel has
Google's four values are written with underscores. TikTok writes them with spaces, in lower case, and publishes five:
in stock— buyable now.out of stock— not buyable.preorder— not released yet.available for order— orderable today, shipped later. This is a backorder, and TikTok is the only one of these channels that names it. Meta and Microsoft publish nothing closer than "preorder".discontinued— gone for good, as opposed to temporarily out.
A value outside the list is not interpreted charitably. If your export says "available", "disponibil" or a stock count, translate it first — our availability value translator shows what each channel accepts for the same word, side by side.
The setting you cannot undo: the catalog's currency
Creating a catalog asks for a Default Currency and a targeting location. Both are set once. Neither can be edited afterwards — open the catalog's Settings later and only the name has an edit link next to it.
Every product priced in another currency is rejected. Not converted, not ignored: rejected, one error per product, reading "Invalid value: price — Price must be a valid value and match the catalog's default currency." We tested this with a catalogue priced in US dollars against a catalog created in Romanian lei. The upload log read 23 in files, 23 rejected, 0 added. The file itself was fine; the catalog was the wrong shape to receive it.
There is no repair for this. A catalog in the wrong currency is replaced by a new catalog in the right one, and the feed, the product sets and anything built on top move with it. So before you create the catalog, check what your store actually prices in — not what you wish it sold in, and not the currency your ad account bills in, which is a different setting entirely.
A feed tool should tell you this before TikTok does. Ours does: the free feed check reads what your catalogue is priced in, and a TikTok feed in FeedRobin asks which currency the catalog uses and counts the mismatches before you ever paste the link.
The file: CSV on a schedule, XML on an upload
TikTok accepts CSV, XML (RSS) and XML (Atom), plus ZIP and GZ, up to 8 GB. But the route decides the format: the Data Feed Schedule screen — the one that takes a URL and re-fetches it — states under the field that files must be "in a CSV format". The XML templates belong to the one-off upload.
Their RSS template is worth a look anyway, because it explains something about the ecosystem: it is Google's own namespace, xmlns:g, with <g:id> and <g:title>. The same field is sku_id in their CSV and g:id in their XML. If you are hand-building a file, take the template for the format you are actually going to send.
Three formatting rules that only appear in the templates, not on any help page:
- title is capped at 500 characters and description at 10,000. Neither limit is documented anywhere else, so a long title gets cut by TikTok rather than by you — and what gets cut is the end, which is usually the size or the colour.
- additional_image_link is one field, up to ten links separated by commas, not a repeated tag the way Google does it. Both templates also wrap the list in quotation marks as part of the value.
- shipping is a single packed string, and their own documentation disagrees with their own example about how many segments it has. Shipping rates can be set on the catalog instead, in the Shipping section, which is the place to do it.
sku_id,title,description,availability,condition,price,link,image_link,brand 45974626631733,Gift Card - $10,This is a gift card,out of stock,new,10.00 USD,https://shop.example.com/p/gift-card,https://cdn.example.com/gift.jpg,Example Brand
Connecting the feed, step by step
- TikTok Ads Manager → Assets → Catalog → Create your catalog.
- Pick Manual creation. A catalog belongs to a Business Center, so if you do not have one TikTok asks you to create it here — and the business name you give goes on invoices and tax documents and can only be changed once, so use the legal entity.
- Name the catalog after the store, link your ad account, and set the Default Currency to the currency your prices are in. This is the irreversible one.
- In the catalog: Products → Add Products → Data Feed Schedule. Paste the feed URL and set the frequency — hourly is offered, and the clock is UTC, not your local time.
- Choose Replace your feed, not "Update your feed". On Update, products missing from the new file stay in the catalog forever, which is how a store ends up advertising something it stopped selling months ago. A generated feed is the complete catalogue every time, so Replace is the honest setting.
Reading the result
The upload log gives four numbers — in files, added, updated, rejected — and a diagnostics list naming each issue with example rows. It is genuinely good feedback, better than a comparison site that simply shows fewer offers than you expected, so read it after the first fetch rather than assuming silence means success.
One number that looks wrong and is not: the Products tab counts products, while the log counts rows. Variants that share an item_group_id are one product with several SKUs, so 23 rows can correctly appear as 20 items.
Doing it without hand-building the file
FeedRobin renders the TikTok catalog CSV from the same catalogue as your Google, Meta and comparator feeds — their field names, their spaced availability, their "available for order" for a backorder, emoji stripped from titles before they cost you the product, and the currency checked against your catalog before TikTok sees it. You paste one link into the Data Feed Schedule screen and it stays current. The free feed check needs no account.
Sources
TikTok Ads Manager Help, Catalog Product Parameters; How to create a Catalog; Catalog issues and suggested actions. Field limits, the quoted image list and the schedule screen's CSV requirement are from TikTok's own downloadable templates and interface, read on 20 September 2026; the rejected-import figures are from a real catalog on that date.