Skip to content
Back to blog

Shopify to TikTok Shop: Product Feed Sync Setup Guide

Connect Shopify to TikTok Shop without daily catalog issues. Required fields, image rules, file-upload + async polling, and real-time sync covered.

Alex DiazFounder, SnowPipeMay 8, 202611 min read
shopifytiktokproduct-feedsguide

TikTok Shop turned into a real channel faster than most catalog tools could keep up with. Shopify merchants who started running TikTok ads in 2024 mostly used Shopify's TikTok app, accepted whatever sync the app gave them, and learned the hard way that the constraints are different from Meta or Google. TikTok rejects images that Meta accepts. TikTok requires categories from its own taxonomy, not Google's. TikTok pushes inventory via async file uploads instead of synchronous API calls. And TikTok's product approval flow is opaque enough that "Submitted" can sit for hours before turning into "Live" or "Rejected" with no preview.

This guide is for Shopify merchants who need to build a real Shopify → TikTok Shop pipeline that actually keeps up with sales velocity, not the 15-minute setup that quietly drifts. It covers what's actually moving between the two systems, what TikTok requires from a feed, and where the standard sync tools fall short.

How Shopify products end up in TikTok Shop

There are three real architectures for getting Shopify products into a TikTok Shop catalog. Each has a different reliability and failure mode.

1. TikTok for Business app (the official Shopify integration)

Shopify's TikTok app is a free first-party integration. You install it, connect a TikTok Business account, pick which products to sync, and TikTok pulls product data on a schedule.

What it does well: Setup takes fifteen minutes. Variants flatten reasonably. Inventory updates pass through.

Where it falls short:

  • The sync cadence is opaque. TikTok caches product data, and price or inventory updates can lag for hours during high-traffic windows.
  • Field mapping is hardcoded. If your title structure isn't TikTok-friendly, your brand lives in a metafield, or your category mapping is custom, you can't transform on the way out.
  • TikTok has its own product category taxonomy that doesn't match Google's. The app picks one for you, sometimes badly.
  • Removed products linger. A product deleted in Shopify can still show up in TikTok ads for hours.

For a small Shopify store with no customization, the app is fine. Most catalogs running real TikTok ad spend outgrow it.

2. Hosted feed file (CSV/XML)

TikTok accepts a hosted catalog feed. You generate a CSV or XML at a public URL, configure TikTok to pull on a schedule.

What it does well: Full mapping control. You decide field structure, price logic, inventory cutoff. Multi-channel friendly — the same source can feed Google or Meta.

Where it falls short:

  • Minimum cadence is hourly at best. During the lag window, TikTok can sell a product that just sold out.
  • Feed-file pulls process the whole catalog every time. There's no partial-update path.

3. API-driven push (TikTok Business API)

TikTok's Business API lets you push catalog updates programmatically. The model is unusual compared to Meta or Google: instead of synchronous per-product calls, you upload a file (chunked CSV) and poll an async task ID until the upload completes.

What it does well: Updates are scoped — you push only what changed. Deletes happen explicitly. Multi-store consolidation works because you control the sender.

Where it falls short:

  • The async file-upload model is harder to integrate than synchronous APIs. You upload, you get a task ID, you poll until done, you handle row-level errors that come back hours later.
  • Authentication uses TikTok's OAuth scope system. Getting the right scopes wired (catalog read/write) is a setup-time gotcha.
  • Presigned upload URLs have short TTLs. If your job stalls, you re-request.

API-driven sync is the most reliable in steady state and the option that scales with sales velocity — but it's the heaviest lift to build.

What TikTok Shop actually requires in a catalog

TikTok publishes its product catalog spec in the Business API docs. The enforced subset is what gets you rejected.

Required fields

FieldNotes
sku_idStable unique ID per variant. Use the Shopify variant ID.
titleUp to 100 characters. Plain text, no emojis, no all-caps.
descriptionUp to 1,000 characters. Plain text only — TikTok strips HTML aggressively.
imagePublic HTTPS image URL. Minimum 600×600 pixels (TikTok rejects images Meta would accept at 500×500).
availabilityin_stock, out_of_stock, preorder.
priceNumber with currency, e.g. 19.99 USD.
linkPublic product URL. HTTPS, must return 200.
brandUp to 50 characters.
conditionnew, refurbished, or used.
category_idTikTok's own product category ID. Not Google's taxonomy.

Variant handling

Like Meta, TikTok wants every Shopify variant as a separate item with a shared item_group_id linking them.

  • Each Shopify variant becomes one TikTok item.
  • All variants of one Shopify product share the same item_group_id — derive from the parent product ID.
  • Each item needs its own sku_id, image, price, and availability.
  • Variant axes — color, size, material — should be filled from Shopify option values.

Getting variant flattening wrong is the #1 reason a Shopify → TikTok sync looks like it's working but ads underperform.

Image rules that bite Shopify stores

TikTok's image requirements are stricter than Meta's:

  • Minimum 600×600 pixels. Meta accepts 500×500. TikTok does not.
  • No promotional text overlays. A "20% OFF" badge baked into the image fails.
  • Aspect ratio 1:1 strongly preferred. Non-square images get auto-cropped, often badly.
  • HTTPS required. Shopify CDN images are HTTPS by default; if you self-host on an older theme, double-check.

If your Shopify theme renders product images at 480×480 or your photographer ships 4:3 product shots, your TikTok feed will see disapprovals that Meta wouldn't catch.

Map Shopify fields to TikTok fields

TikTok fieldShopify sourceGotcha
sku_idvariant.idUse the variant ID, not the SKU. SKUs are not stable across inventory migrations.
titleproduct.title + variant axesAppend color/size: "Acme Hoodie — Black, Large". Stay under 100 chars.
descriptionproduct.body_html → strip to plain textTikTok strips HTML aggressively. Send plain prose. Stay under 1,000 chars.
imageVariant image if set, else product featured imageMust be ≥600×600. Use image.src with the larger transform: ?width=1024.
additional_image_linkproduct.images minus the featured imageUp to 10.
pricevariant.price + currencyFormat as ${amount} ${currency_code}.
sale_pricevariant.compare_at_price if greater than variant.priceIf compare_at_priceprice, no sale is active. Skip the field.
availabilityInventory tracked + inventory_quantity > 0If inventory_management is null, default to in_stock (untracked products).
linkStorefront base + product.handle + variant query stringUse ?variant={variant_id} so the right variant pre-selects.
brandproduct.vendorShopify's vendor field is the standard mapping.
gtinvariant.barcodeValidate the value against the GS1 check-digit calculator — Shopify accepts whatever you type.
mpnCustom metafield or variant.sku as fallbackMost stores don't store MPN; SKU is acceptable.
conditionCustom metafield or hardcodeMost Shopify stores hardcode new.
category_idTikTok category ID — usually derivedTikTok's taxonomy is its own. Auto-categorization or AI-derived.
item_group_idproduct.id for all variantsUse consistently.
color, size, materialShopify variant option valuesMap by option name — find the option whose name is "Color", read its value.

TikTok category IDs vs Google product categories

This is where most Shopify → TikTok feeds quietly fail. TikTok publishes a category tree that does not match Google's product taxonomy. A "Men's Running Shoes" item maps to category ID 601151 in Google's taxonomy and a different ID in TikTok's. Sending the wrong ID, or letting TikTok auto-categorize generically, hurts ad performance.

Maintain a category mapping per channel — one for Google, one for TikTok, one for Meta — or use a tool that infers each from product title and description automatically.

Common Shopify → TikTok Shop errors

"Image does not meet requirements"

TikTok rejects images smaller than 600×600 or with promotional overlays. Some Shopify themes serve smaller variants for performance.

Fix: Append a Shopify CDN size transform: https://cdn.shopify.com/...image.jpg?width=1024. Confirm no theme element renders promotional badges into the image file.

"Invalid category"

Sending a Google Product Category ID where TikTok expects a TikTok category ID. The two systems have different IDs for the same product.

Fix: Use TikTok's category ID, not Google's. Maintain separate category maps per channel.

"Catalog upload task failed: row-level errors"

The async upload model returns row-level errors hours after the job completes. Common errors include "title contains forbidden characters" (emojis, certain symbols), "description exceeds 1,000 characters," and "price format invalid."

Fix: Validate every field server-side before upload. The async error path is too slow to be your primary feedback loop.

"Mismatched availability"

A product is sold out in Shopify but TikTok is still showing it as in stock because the last sync was hours ago.

Fix: Use webhook-driven sync that pushes inventory updates as they happen. The native app's daily sync is too slow for fast-moving inventory.

Products linger after deletion

A product is deleted in Shopify but still showing in TikTok ads days later. Without an explicit delete signal, TikTok keeps serving impressions until the next catalog refresh.

Fix: Push an explicit delete call to TikTok's catalog API on Shopify's product-delete webhook, not just an availability: out_of_stock flag.

Real-time vs scheduled — when does it cost you money?

TikTok ad spend often runs at higher velocity per impression than Meta or Google. The cost of stale data scales accordingly.

Stale price. A flash sale starts in Shopify. The native TikTok app reflects it after the next sync — minutes to hours. During the lag, TikTok shows yesterday's price, the click-to-checkout expectation breaks, conversion rate drops sharply.

Stale inventory. A product sells out. Until the next sync, TikTok keeps spending budget driving traffic to a product the customer can't buy.

Stale removal. A product is deleted (compliance issue, recall). Until the next sync, TikTok might still run ads for it. For regulated categories — supplements, alcohol, restricted goods — that's a compliance issue.

If your catalog has flash sales, limited inventory, or compliance-sensitive products, real-time sync is the difference between knowing your TikTok ads match your store and hoping they do.

How SnowPipe handles Shopify → TikTok Shop

SnowPipe connects to Shopify via GraphQL Bulk Operations and webhooks, pulls products, variants, inventory, and metafields, and pushes to TikTok via the Business API's catalog upload flow.

The relevant pieces:

  • Real-time and scheduled together. Shopify webhooks trigger immediate updates to TikTok for product changes; a scheduled full sync runs in the background to catch missed events. Both are wired by default.
  • TikTok's async upload model handled. SnowPipe handles the file-upload + async task-poll dance — you don't manage presigned URL TTLs, retry on stalled jobs, or reconcile row-level errors that come back hours later.
  • Variant flattening built in. Shopify product+variant input becomes TikTok item rows with item_group_id derived from the parent product. Each variant gets its own image from variant images when available, falling back to product image.
  • Image transform on the fly. SnowPipe rewrites Shopify CDN URLs to the larger size variant TikTok requires — so you don't ship 480×480 thumbnails by accident.
  • AI category assignment per channel. TikTok's category ID is inferred from title and description, separately from Google's taxonomy and Meta's. You don't maintain three category maps.
  • Removed products are pushed as deletions. A delete in Shopify becomes a delete in TikTok, not a stale out_of_stock flag. Orphans don't accumulate.
  • Multi-channel from one source. The same Shopify connection feeds TikTok Shop, Google Merchant Center, and Facebook Catalog without re-mapping.

The platform abstracts the file-upload + async-poll pattern that makes TikTok harder to integrate than Meta or Google, so you ship the same kind of real-time pipeline across channels.


Ready to fix this for good?

Try SnowPipe free — connect your Shopify store and get an accurate TikTok Shop catalog in minutes. Or, book a 15-min demo and I'll walk you through your specific setup.

Ready to automate your product feeds?

Connect your store and sync to Google, Facebook, and more — in minutes. No credit card required.