Skip to content
TikTok
Ad platforms

TikTok catalog feed for Shopify

A TikTok catalog powers Smart+ catalog ads and Video Shopping Ads, which show your products to people on TikTok and send them to checkout on your own site. Feedflock turns your Shopify catalog into the CSV that TikTok's Catalog Manager expects and regenerates it every hour, so the price and stock in your ads match the page TikTok checks them against.

01 · ShopifyProduct in the catalog
Linen shirt SandNordlin · Men's shirtsSKU-2048 · S–XL
Price
1 290 Kč
In stock
0 pcs
When out of stock
02 · tiktok.csvUpdated just now
sku_id,item_group_id,title,description,availability,condition,price,sale_price,sale_price_effective_date,link,image_link,additional_image_link,video_link,brand,google_product_category,product_type,gtin,mpn,color,size,material,pattern,gender,shipping,shipping_weight,custom_label_0,merchant_brand
SKU-2048,8812345678901,Linen shirt Sand,Soft linen shirt with a regular fit.,out of stock,new,1290.00 CZK,,,https://shop.example/products/linen-shirt-sand?variant=46123456789012,https://cdn.shop.example/files/linen-shirt-sand.jpg?v=1718000000,,,Nordlin,Apparel & Accessories > Clothing > Shirts & Tops,Men's shirts,,SKU-2048,,M,,,,,,,
−20% off compare-at
Productprice (compare-at)sale_​price
Linen shirt Sand1 290.00 Kč1 032.00 Kč
Mug Fjord 350 ml390.00 Kč312.00 Kč
Trail Pro2 890.00 Kč2 312.00 Kč
Backpack Ridge 28 l1 890.00 Kč1 512.00 Kč
Soy candle Les349.00 Kč279.20 Kč
1 361.80 Kčsaved across these products
5 / 5products with the sale overlay
Sale prices

A discount in the feed becomes a badge in the ad.

sale_price is what lets TikTok show a discounted-price overlay on the ad: the compare-at price goes to price, the discounted one to sale_price. The feed price must match the landing page (TikTok scrapes it), so the discount lives in the feed, not in campaign settings.

Feed health

Catch feed issues before TikTok does.

Before every generation Feedflock checks that every field the channel requires is filled, and, on templates verified against the channel's own spec, that the values fit its rules. Most problems are fixed with one click, without editing products in Shopify.

Feed quality · tiktok.csv
76 / 100
To review: 4
Missing description on 7 productsdescription is one of TikTok's nine required fields. Every product without one shows up as an error in Diagnostics.
No brand on 4 productsTikTok requires brand outright. Unlike on Meta, a GTIN or MPN can't stand in for it.
No Google category on 9 productsTikTok lists a missing google_product_category as a catalog issue, and it reads up to three levels of Google's taxonomy.
Missing image_link on 2 productsimage_link is required. TikTok builds the ad from it, so a product without one has nothing to show.

Setup

Live in five steps

From a bare Shopify store to a listed offer: the whole setup fits into one coffee break.

  1. Create a catalog in TikTok Ads Manager

    Under Assets, open Catalog and create one with a name, a default currency that matches your prices, and a targeting location, which will be the only location your catalog ads can target. TikTok Shop with in-app checkout is a separate product and isn't filled by a feed.

  2. Install Feedflock

    Add Feedflock from the Shopify App Store. It reads your products, variants, stock and images directly through the Shopify API.

  3. Pick the TikTok template

    Create a new feed and choose the TikTok Catalog (Ads) template. All nine required fields come mapped: sku_id, title, description, availability, condition, price, link, image_link and brand, with one row per variant.

  4. Settle sku_id before the first import

    sku_id defaults to the variant SKU and falls back to the variant ID when the SKU is empty. It's the one field TikTok never lets you edit later, and it has to equal the content_id your TikTok pixel sends, so decide now which one your pixel uses.

  5. Register the feed URL

    In the catalog, go to Products, choose Add Products and select Data Feed Schedule. Enter a name and the hosted URL, choose an upload frequency and an update method, then import. Check the Diagnostics tab after the first run.

    https://feedflock.appfleece.com/f/demo-tiktok/tiktok.csv

The feed

What the channel receives

tiktok.csv
sku_id,item_group_id,title,description,availability,condition,price,sale_price,sale_price_effective_date,link,image_link,additional_image_link,video_link,brand,google_product_category,product_type,gtin,mpn,color,size,material,pattern,gender,shipping,shipping_weight,custom_label_0,merchant_brand
SKU-2048,8812345678901,Linen shirt Sand,Soft linen shirt with a regular fit.,in stock,new,1290.00 CZK,,,https://shop.example/products/linen-shirt-sand?variant=46123456789012,https://cdn.shop.example/files/linen-shirt-sand.jpg?v=1718000000,,,Nordlin,Apparel & Accessories > Clothing > Shirts & Tops,Men's shirts,,SKU-2048,,M,,,,,,,
Live preview
Linen shirt Sand

Nordlin

Linen shirt Sand

1 290 Kč

Feed fields

sku_id

SKU-2048

item_group_id

8812345678901

title

Linen shirt Sand

description

Soft linen shirt with a regular fit.

availability

in stock

condition

new

price

1290.00 CZK

link

https://shop.example/products/linen-shirt-sand?variant=46123456789012

brand

Nordlin

google_product_category

Apparel & Accessories › Clothing › Shirts & Tops

product_type

Men's shirts

mpn

SKU-2048

size

M

The channel

Retargeting built on viewed products

Catalog ads show people the exact items they looked at on your site. It works by matching the content_id your pixel sends to the sku_id in the feed, and TikTok reports the share of events it can match as your event match rate.

Products made for video placements

Video Shopping Ads build ads from your catalog. A vertical video per product in video_link (9:16, at least 720 × 1280) feeds the video placement directly from a Shopify metafield.

The feed is checked against your site

TikTok scrapes your product pages and reports any price or stock that disagrees with the feed as an error. Fresh data isn't cosmetic here. It decides whether your ads keep delivering.

The feed

  • The TikTok Catalog template maps all nine required fields, with brand from your Shopify vendor and condition new by default
  • One row per variant, all sharing item_group_id. Without it, TikTok delivers only one variant of each product
  • Every link points to its own variant (?variant=), so the page TikTok scrapes shows the same price and stock as the row
  • The compare-at price goes to price and the discounted price to sale_price, which TikTok needs for its discounted-price overlay. The sale ends when you remove the compare-at price
  • Every cell is double-quoted, so a comma in a title or in the comma-separated additional_image_link never shifts a column
  • A readiness check flags products missing a required field or a category, and fetch tracking warns you if TikTok stops downloading the feed, long before TikTok's own 7-day staleness warning

Deep dive

01

How the TikTok catalog feed works

  • Data Feed Schedule imports a hosted file at the upload frequency you choose
  • TikTok accepts CSV, XML (RSS or Atom), TSV, ZIP or GZ, under 50 GB and 20 million products
  • Feedflock renders the CSV on a stable URL and regenerates it every hour
  • A feed that hasn't been updated in 7 days is listed as a catalog issue
Technical details

Catalog Manager reads a hosted file through Data Feed Schedule. You give it a name, the URL, an upload frequency and an update method, and TikTok imports the file on that schedule. You can also request data from a product source by hand at any time. TikTok accepts CSV, XML in RSS or Atom layout, TSV, ZIP and GZ, as long as the file is under 50 GB and holds fewer than 20 million products.

Feedflock renders the CSV as UTF-8 with a header row of TikTok's column names, one row per variant and every cell double-quoted. It hosts the file on a stable URL and regenerates it every hour. You paste the URL once and never upload again. TikTok recommends refreshing the catalog daily, and a feed that hasn't been updated in 7 days shows up as a catalog issue.

02

The nine required fields

  • sku_id, title, description, availability, condition, price, link, image_link and brand
  • A product missing any of them gets an error in Diagnostics
  • Availability takes five lowercase values and has to match the product page
  • Price is a number, a space and an ISO currency code, and it has to match the page too
Technical details

TikTok requires nine fields: sku_id, title, description, availability, condition, price, link, image_link and brand. Brand and condition are required outright, with no fallback. Availability takes five lowercase values, from in stock to discontinued, and has to match what the product page shows. TikTok scrapes the page and reports a mismatch as an error.

Price is a number, a space and an ISO currency code. Without the code, TikTok assumes the currency of the catalog's target country, which is why Feedflock always appends it. TikTok's best practices cap titles at 150 characters and descriptions at 20,000, as plain text with no emoji or control characters. Images need to be at least 500 × 500 px, JPG or PNG.

03

Catalog ads, not TikTok Shop

  • The feed fills the Ads catalog for Smart+ catalog ads and Video Shopping Ads
  • Ads send shoppers to checkout on your own site through the link column
  • TikTok Shop's in-app checkout is a separate product with its own Seller API
  • A feed URL can't fill TikTok Shop. This feed covers the ads side
Technical details

This feed fills the Ads catalog: Smart+ catalog ads and Video Shopping Ads that send shoppers to checkout on your own site through the link column. TikTok Shop, the in-app checkout, is a different product with its own Seller API and can't be filled by a feed URL.

If you sell through both, the feed covers the ads side: every product a video or a Smart+ ad can point to, with the price and stock your own checkout will honour.

04

Variants, the pixel and identifiers

  • Variants share item_group_id, and each has its own sku_id
  • When an ID repeats, only one product with that ID is kept
  • sku_id has to equal the pixel's content_id and can't be edited after import
  • google_product_category takes Google's path, read up to three levels
Technical details

Variants of one product share item_group_id, and each has its own sku_id. If an ID repeats, TikTok keeps only one product with it, so two variants with the same SKU lose one of them. A missing item_group_id is a diagnostics issue and means only one variant of the product is delivered in ads.

Keep sku_id equal to the content_id your pixel sends and retargeting holds together. It's also the one field TikTok won't let you edit after import. google_product_category takes a path from Google's taxonomy, and TikTok reads up to three levels of it. gtin comes from the Shopify barcode and mpn from the SKU.

The takeaway

One URL, an hourly refresh and a CSV that already speaks TikTok's catalog format, with IDs that match your pixel. Your Shopify catalog stays the single source of truth, and TikTok advertises its current state.

Claude · ChatGPT

Or set up your TikTok feed in chat

Connect Feedflock to Claude or ChatGPT and ask. It creates the feed as a draft, maps your categories to TikTok's own tree and tells you what is still missing. You approve every change.

feedflock · mcp

Create a TikTok feed for my store and map my categories.

I'll create it as a draft and show you each change before I make it.

FAQ

No. This feed fills the TikTok Ads catalog used by Smart+ catalog ads and Video Shopping Ads, with checkout on your own website. TikTok Shop with in-app checkout uses a separate Seller API and can't be fed by a feed URL.
TikTok accepts CSV, XML (RSS or Atom), TSV, ZIP and GZ, under 50 GB and 20 million products per file. Feedflock's TikTok template renders CSV with TikTok's exact column names.
At the upload frequency you choose when you register the feed URL in Data Feed Schedule, and you can request data by hand at any time. Feedflock regenerates the file every hour. TikTok recommends a daily refresh and flags a feed that hasn't been updated in 7 days.
Whatever your TikTok pixel sends as content_id. The template defaults to the variant SKU and uses the variant ID only when a SKU is empty. If your SKUs repeat across variants or your pixel sends variant IDs, switch sku_id to Variant ID before the first import, because it can't be changed afterwards.
The row stays in the feed with availability out of stock, one of TikTok's five values. TikTok checks availability against your product page, so a stale in stock would show up as an error.
TikTok can import a GMC feed that runs on scheduled fetch and translate it for you. A dedicated TikTok feed sends sku_id, brand and condition exactly the way TikTok asks for them, with variant links that match the page TikTok scrapes.
Yes. Filter by collection, tag, price or stock level, or exclude individual variants, for example sizes you don't want to advertise.

Get on every marketplace that matters this afternoon.

Install free, connect your first feed in minutes, and let Feedflock keep it fresh and validated.

.myshopify.com