> For the complete documentation index, see [llms.txt](https://docs.coupler.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.coupler.io/sources/category/ecommerce/tiktok-shop.md).

# TikTok Shop

Connect TikTok Shop to Coupler.io to export orders, products, and shop, product, and SKU performance — setup, data reference, troubleshooting, FAQ.

TikTok Shop is TikTok's in-app marketplace. Sellers list products, take orders, and sell through videos, LIVE streams, and product cards. Connecting TikTok Shop to Coupler.io pulls your orders, catalog, and sales analytics into your own spreadsheets, warehouse, or BI tool on a schedule, instead of exporting reports from TikTok Seller Center by hand.

**Why connect TikTok Shop to Coupler.io?**

* Export orders, with or without one row per line item, for fulfillment and revenue reporting
* Keep a full product and SKU catalog with prices, inventory, and listing status in one table
* Track shop, product, and SKU performance (GMV, orders, items sold, traffic) over a date range
* Blend TikTok Shop with Shopify, Amazon, and ad platforms such as TikTok Ads in one dataset
* Export to AI tools, Google Sheets, Excel, BigQuery, Data Studio, or other supported destinations
* Keep reports current with scheduled refreshes

## Prerequisites

Before you start, make sure you have:

* A TikTok Shop seller account with at least one shop
* Permission to authorize third-party apps for that shop. Authorization is done by the shop's account owner or an admin with equivalent access

{% hint style="info" %}
Each connection exports one shop. To report on several shops, add each one as a separate source in the same data flow.
{% endhint %}

## Quick start

{% hint style="success" %}
Start with **Orders**. It needs only a shop and an optional start date, and it's the table most sales reports are built on. Use **Orders with line items** when you need product-level revenue.
{% endhint %}

## How to connect

{% stepper %}
{% step %}
**Create a new data flow in Coupler.io.** Search for and select **TikTok Shop** as your source, then click **Connect**.\
Sign in to TikTok Shop and authorize Coupler.io for the shop you want to export.
{% endstep %}

{% step %}
**Choose a data entity.** Select what to export in **Data entity**, for example **Orders**. See [Data overview](#data-overview) for what each entity returns.
{% endstep %}

{% step %}
**Select a shop.** In **Shop**, choose the TikTok Shop to export from. The list shows the shops you authorized.
{% endstep %}

{% step %}
**Set the period.** For Orders, Orders with line items, and Products, optionally set a start date under **Advanced settings**. For the three performance reports, set the **Start date** and **End date** with the date pickers.
{% endstep %}

{% step %}
**Choose a destination.** Select where the data should land — Google Sheets, Excel, BigQuery, Data Studio, or an AI destination like ChatGPT, Claude, or Gemini.
{% endstep %}

{% step %}
**Run the data flow.** Click **Run** for a manual sync, then set a schedule so the data refreshes on its own.
{% endstep %}
{% endstepper %}

## Configuration options

### Data entity

| Data entity                 | Grain (one row per…) | Best for                                          |
| --------------------------- | -------------------- | ------------------------------------------------- |
| Orders                      | Order                | Order volume, status, payment totals, fulfillment |
| Orders with line items      | Order line item      | Revenue by product or SKU, quantities             |
| Products (with SKUs)        | SKU                  | Catalog, pricing, inventory, listing status       |
| Shop performance report     | Day                  | Daily GMV, orders, and traffic for the whole shop |
| Products performance report | Product              | Which products drive sales in a period            |
| SKU performance report      | SKU                  | Which variants sell in a period                   |

See [Data overview](#data-overview) to check which fields and metrics each data entity returns.

### Shop

Every entity is scoped to one shop, chosen from the shops you authorized. Switching **Data entity** keeps the selected shop.

### Start date for Orders, Orders with line items, and Products

The start date picker is labeled **Orders created after** or **Products created after**. It filters on the creation time, not on the last update. Leave it empty to export everything the shop has.

Orders and Orders with line items sync incrementally by creation time, so later runs pick up newly created orders.

### Product status filter

Products can be filtered by **Status**: All (default), Draft, Pending, Failed, Activate, Seller Deactivated, Platform Deactivated, Freeze, or Deleted. Select **Activate** to export live listings only.

### Report period for performance reports

Shop, Products, and SKU performance reports use **Start date** and **End date**. The default is the last 60 days. Both pickers accept date macros such as `{{60daysago}}` and `{{today}}` for a rolling window. See [Macros in data flows](https://docs.coupler.io/functionality/macros-in-data-flows).

{% hint style="warning" %}
TikTok Shop's analytics endpoints cap a single request at 90 days. Keep the report period within 90 days. For longer history, add the same entity as several sources in one data flow, each with its own date range, and append them in the data sets step.
{% endhint %}

## Data overview

TikTok Shop in Coupler.io has six data entities. You pick one per source, select the shop, and set a date range or start date. Entity choice decides the grain of the table.

### Orders

One row per order. Timestamps are converted from Unix time to ISO 8601 (UTC). Nested objects appear as dotted columns, for example `payment.total_amount`.

| Group               | Columns                                                                                                                                                                                                                        |
| ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| Identity and status | `id`, `status`, `order_type`, `commerce_platform`, `user_id`, `is_sample_order`, `is_on_hold_order`, `is_replacement_order`, `is_exchange_order`, `is_cod`                                                                     |
| Dates               | `create_time`, `update_time`, `paid_time`, `delivery_time`, `collection_time`, `rts_time`, `cancel_time`, `request_cancel_time`, plus SLA and due-time fields such as `delivery_due_time`, `shipping_due_time`, `rts_sla_time` |
| Buyer               | `buyer_email`, `buyer_nickname`, `buyer_message`, `seller_note`                                                                                                                                                                |
| Fulfillment         | `fulfillment_type`, `delivery_type`, `shipping_type`, `warehouse_id`, `tracking_number`, `shipping_provider`, `delivery_option_name`, `packages`                                                                               |
| Cancellation        | `cancellation_initiator`, `cancel_reason`, `is_buyer_request_cancel`                                                                                                                                                           |
| Recipient address   | `recipient_address.full_address`, `region_code`, `postal_code`, `name`, `phone_number`, `district_info`, and more                                                                                                              |
| Payment             | `payment.currency`, `total_amount`, `sub_total`, `shipping_fee`, `tax`, `seller_discount`, `platform_discount`, `original_total_product_price`, plus fees such as `small_order_fee`, `buyer_service_fee`, and `handling_fee`   |

Amounts are returned as text, with the currency in `payment.currency`.

### Orders with line items

Same order columns as Orders, but one row per line item. The line item is in `line_item.*` columns:

| Group               | Columns                                                                                                                              |
| ------------------- | ------------------------------------------------------------------------------------------------------------------------------------ |
| Product             | `line_item.id`, `sku_id`, `sku_name`, `sku_type`, `product_id`, `product_name`, `seller_sku`, `sku_image`                            |
| Price               | `line_item.original_price`, `sale_price`, `currency`, `platform_discount`, `seller_discount`, `small_order_fee`, `buyer_service_fee` |
| Tax                 | `line_item.tax_type`, `tax_rate`, `tax_amount`                                                                                       |
| Status and shipping | `line_item.display_status`, `package_id`, `package_status`, `tracking_number`, `shipping_provider_name`, `rts_time`                  |
| Cancellation        | `line_item.cancel_reason`, `cancel_user`                                                                                             |

An order with no line items still returns one row, with empty `line_item.*` columns.

{% hint style="warning" %}
**Order-level amounts repeat on every line item row.** Summing `payment.total_amount` across Orders with line items counts each order once per line item. Sum `line_item.sale_price` multiplied by quantity for product revenue, or use **Orders** for order totals.
{% endhint %}

### Products (with SKUs)

One row per SKU. Product columns repeat on each SKU row, and the SKU is in `sku.*` columns. A product with no SKUs returns a single row.

| Group         | Columns                                                                                                                                          |
| ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ |
| Product       | `id`, `title`, `status`, `create_time`, `update_time`, `is_not_for_sale`, `listing_quality_tier`, `has_draft`                                    |
| SKU           | `sku.id`, `sku.seller_sku`, `sku.price`, `sku.inventory`, `sku.list_price`, `sku.pre_sale`, `sku.fulfillment_type`, `sku.handling_duration_days` |
| Status detail | `status_info`, `integrated_platform_statuses`, `audit`, `product_sync_fail_reasons`                                                              |
| Other         | `sales_regions`, `recommended_categories`, `product_families`                                                                                    |

### Shop performance report

One row per day in the period.

| Column                                                             | Description                                        |
| ------------------------------------------------------------------ | -------------------------------------------------- |
| `start_date`, `end_date`                                           | The day                                            |
| `sales.gmv.overall.amount`, `sales.gmv.overall.currency`           | Gross merchandise value                            |
| `sales.gmv.breakdowns`                                             | GMV split by channel, such as LIVE or VIDEO        |
| `sales.gross_revenue.overall.amount`, `.currency`                  | Gross revenue                                      |
| `sales.orders_count`, `sales.sku_orders_count`, `sales.items_sold` | Order and unit counts                              |
| `sales.avg_customers_count`                                        | Average number of customers                        |
| `sales.refunds.amount`, `.currency`                                | Refunds                                            |
| `traffic.avg_page_views`, `traffic.avg_visitors`                   | Traffic                                            |
| `traffic.avg_conversation_rate`                                    | Conversion rate as a decimal, for example `0.3342` |

### Products performance report

One row per product, totaled over the whole period.

| Column                                        | Description                   |
| --------------------------------------------- | ----------------------------- |
| `id`                                          | Product ID                    |
| `overall_performance.gmv.amount`, `.currency` | GMV for the period            |
| `overall_performance.items_sold`              | Units sold                    |
| `overall_performance.orders`                  | Orders containing the product |

### SKU performance report

One row per SKU, totaled over the whole period.

| Column                       | Description               |
| ---------------------------- | ------------------------- |
| `id`, `product_id`           | SKU and parent product    |
| `gmv.amount`, `gmv.currency` | GMV for the period        |
| `sku_orders`                 | Orders containing the SKU |
| `units_sold`                 | Units sold                |

### Common field combinations

| Goal                    | Data entity                 | Fields to use                                                            |
| ----------------------- | --------------------------- | ------------------------------------------------------------------------ |
| Daily sales trend       | Shop performance report     | `start_date`, `sales.gmv.overall.amount`, `sales.orders_count`           |
| Revenue by product      | Orders with line items      | `line_item.product_name`, `line_item.sale_price`, `create_time`          |
| Order status monitoring | Orders                      | `status`, `create_time`, `delivery_due_time`                             |
| Low-stock check         | Products (with SKUs)        | `title`, `sku.seller_sku`, `sku.inventory`                               |
| Best-selling products   | Products performance report | `id`, `overall_performance.gmv.amount`, `overall_performance.items_sold` |

## Use cases by role

{% tabs %}
{% tab title="Sellers and ecommerce managers" %}

* Pull Orders into Google Sheets for a live order log with status and delivery deadlines
* Use Shop performance report daily to track GMV and orders in a dashboard
* Check Products (with SKUs) for out-of-stock SKUs before a campaign
  {% endtab %}

{% tab title="Marketers" %}

* Join TikTok Shop performance with TikTok Ads spend in one data flow to compare ad cost with GMV
* Use the GMV channel breakdown to see how much comes from LIVE versus video
* Send performance data to ChatGPT or Claude for a weekly written summary
  {% endtab %}

{% tab title="Analysts" %}

* Load Orders with line items to BigQuery for revenue and basket analysis by SKU
* Compare SKU performance across periods by adding the report as multiple sources with different date ranges
* Blend TikTok Shop, Shopify, and Amazon orders in one table with Append
  {% endtab %}
  {% endtabs %}

## Common Issues

### Connection issues

<details>

<summary>The connection fails or the shop list is empty</summary>

Check the following:

* **The shop wasn't authorized.** The **Shop** list shows only shops you authorized during the connection. Reconnect and grant access to the shop.
* **The authorization expired or was revoked** in TikTok Shop. Reconnect the account in the source settings.
* **You signed in with an account that can't authorize apps** for the shop. Use the shop owner or an admin.

</details>

### Missing data

<details>

<summary>Orders or products from before a certain date are missing</summary>

Check the **Orders created after** or **Products created after** date in **Advanced settings**. It filters on creation time, so anything created before it is excluded. Clear the field to export everything.

</details>

<details>

<summary>Products are missing from the export</summary>

The **Status** filter defaults to **All**. If it's set to a single status, such as **Activate**, products in other statuses, including drafts and deactivated listings, aren't exported. Also check you selected the right shop.

</details>

<details>

<summary>A performance report is empty or the latest days look incomplete</summary>

* Check that the **Start date** and **End date** cover days when the shop had activity.
* Performance data can lag behind real time, so the most recent day is often incomplete. Set the end date to yesterday, or refresh again later.
* The shop, product, and SKU reports return only entities with performance in the period.

</details>

<details>

<summary>The performance report fails for a long date range</summary>

TikTok limits analytics requests to 90 days. Shorten the period, or load longer history as several sources with separate date ranges in one data flow.

</details>

## FAQ

<details>

<summary>Can I pull more than one TikTok Shop in a single source?</summary>

No. A TikTok Shop source exports one shop. Add each shop as a separate source in the same data flow, and use Append in the data sets step if you want a single table.

</details>

<details>

<summary>What's the difference between Orders and Orders with line items in TikTok Shop?</summary>

Orders returns one row per order. Orders with line items returns one row per product in each order, with the order columns repeated. Use Orders for order counts and totals, and Orders with line items for product-level reporting.

</details>

<details>

<summary>Can I get more than one data entity in a single table from TikTok Shop?</summary>

Not from one source, since each source returns one entity. Add each entity as a separate source in the same data flow and load each to its own table or sheet. There is no need for separate data flows.

</details>

<details>

<summary>Can I average the TikTok Shop conversion rate column in my dashboard?</summary>

No. `traffic.avg_conversation_rate` is a ratio, so it can't be summed, and averaging daily rates misweights busy days. Recalculate it at the level you report from totals if you have the underlying counts.

</details>

<details>

<summary>Can I send TikTok Shop data to an AI tool?</summary>

Yes. Coupler.io supports AI destinations including ChatGPT, Claude, Gemini, Cursor, Perplexity, and OpenClaw, so you can route orders and performance data into one for summaries or analysis. The connection is read-only: Coupler.io exports TikTok Shop data and doesn't change your shop.

</details>


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.coupler.io/sources/category/ecommerce/tiktok-shop.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
