---
title: "TikTok Ads to Snowflake: connector setup and SQL"
canonical: "https://www.owox.com/blog/articles/tiktok-ads-data-snowflake"
updated: "2026-10-05"
---

# How to load TikTok Ads data into Snowflake with OWOX Data Marts

To get TikTok Ads data into Snowflake, create a connector Data Mart, sign in with TikTok, enter the advertiser IDs, choose the data level and the Ad Performance endpoint, and publish. The data level sets the grain of the table and should not be changed after the first load. The connector then refreshes the table on a schedule.

[Snowflake](/blog/topics/snowflake) · Updated October 1, 2026 · [Vadym Kramarenko](/team/vadym-kramarenko) · 7 min read

![How to load TikTok Ads data into Snowflake with OWOX Data Marts](https://cdn.owox.ai/www/webflow/69a01ff360011e9e74407414_Collect-TikTok-Ads-Data-into-Snowflake-for-Trusted-Paid-Media-Reporting.png/public)

TikTok spend tends to arrive in a marketing budget quickly and in reporting slowly. The campaigns are live within a week. Six months later the numbers still reach the channel report as a monthly export, because nobody set up the load.

This guide sets it up: TikTok Ads data in Snowflake, loaded by the TikTok Ads connector in [OWOX Data Marts](https://www.owox.com/app-signup), refreshed on a schedule. It also covers the one decision in the setup that cannot be changed afterwards, and the SQL to read the table.

## What you end up with

A table in your own Snowflake account, `tiktok_ads_ad_insights`, with one row per ad per day by default: impressions, clicks, spend, conversions, video views and engagement.

The connector reads the TikTok Marketing API, writes that table and repeats on a schedule. It does not model the data. Reports on top of it are SQL you write.

## Before you start

**In TikTok.** A TikTok for Business user assigned to the advertiser account, and the numeric **advertiser ID**. You find it in TikTok Ads Manager.

**In Snowflake.** A storage of type [Snowflake](https://www.owox.com/data-storages/snowflake) connected to your project, as described in the [storage guide](https://docs.owox.com/docs/storages/supported-storages/snowflake/): account identifier, warehouse, and a key pair or a username with a programmatic access token. The role must be able to create a database, a schema and tables. A small dedicated warehouse with auto-suspend is enough, and [Snowflake pricing explained](https://www.owox.com/blog/articles/snowflake-pricing-cost-control) shows what a daily load costs.

## The Turning Point

OWOX Data Marts

See your first report built in real time. _15 minutes._

1.  Connect your data warehouse
2.  Pick your metrics
3.  Get a live Google Sheets report

In the time it takes to write a ticket. Then imagine never writing that ticket again.

[Book a Demo](/book-a-call)

We'll use your actual use case

## Step 1: create the Data Mart

Click **New Data Mart**, enter a title such as “TikTok Ads Insights”, select the Snowflake storage and click **Create Data Mart**. On the Data Setup tab, set **Definition Type** to **Connector** and choose **TikTok Ads**.

## Step 2: sign in and enter the advertisers

**Continue with TikTok** is the short way. Sign in as a user who can access the advertiser account and approve access. It needs no developer app.

**Manually** means your own TikTok developer app: an access token, an App ID and an App Secret. TikTok reviews every app, which can take up to seven business days, so this route is slower. The [credentials guide](https://docs.owox.com/packages/connectors/src/sources/tik-tok-ads/credentials/) covers it.

Then fill in **Advertiser IDs**. Use the numbers only. Several advertisers go in one field, separated by commas or semicolons, and they all write into the same table.

![Edit Connector form for TikTok Ads in OWOX Data Marts on a Snowflake Data Mart, with a Continue with TikTok button, a Manually link, a required Advertiser IDs field and a Data Level selector set to AUCTION\_AD – the grain is chosen in the same form as the sign-in](https://cdn.owox.ai/www/content-marketing-article/tiktok-ads-data-snowflake/screens/1.png/public)

## Step 3: choose the data level

This is the setting to get right the first time. **Data Level** decides what one row of the performance table means.

*   **AUCTION\_AD**, the default. One row per ad per day.
*   **AUCTION\_ADGROUP.** One row per ad group per day.
*   **AUCTION\_CAMPAIGN.** One row per campaign per day.
*   **AUCTION\_ADVERTISER.** One row per advertiser per day.

A finer level means more rows and more detail. A coarser one means a smaller table that cannot be broken down later.

The level also decides the keys the connector merges rows on, which is why you should **not change it after data has been loaded**. New rows would be matched on a different set of keys than the rows already in the table. If you need a second grain, create a second Data Mart with its own table.

For most reporting, keep the default. Ad level can always be summed up to campaigns. The reverse is not possible.

## Step 4: choose the endpoint and the fields

Each Data Mart loads one endpoint.

*   **Ad Performance** (`ad_insights`). Daily performance at the data level you chose. The one for reporting.
*   **Ad Performance by Country** (`ad_insights_by_country`). The same, with a country breakdown.
*   **Campaigns**, **Ad Groups** and **Ads**. Names, objectives, budgets, statuses and creative details.
*   **Advertiser** and **Audiences**. Account details and custom audiences.

Then select fields. The key fields for your data level are locked, and the panel says which ones.

![Connector Fields panel for TikTok Ads in OWOX Data Marts with 21 of 39 fields selected for ad\_insights, a note that required fields depend on the data level, and ad\_id, advertiser\_id and stat\_time\_day locked as keys – the keys follow from the grain chosen earlier](https://cdn.owox.ai/www/content-marketing-article/tiktok-ads-data-snowflake/screens/2.png/public)

Beyond impressions, clicks and spend, the TikTok-specific fields are worth a look: video views, two-second and six-second views, completion, and likes, comments, shares and follows.

The last screen asks for the database, schema and table. The setup proposes a database named after the source, the schema `PUBLIC` and a table named after the endpoint.

## Step 5: publish, backfill and schedule

Click **Publish & Run Data Mart**. The first run loads data from the first day of the previous month and can take several minutes. Afterwards the Data Setup tab shows the source, the Snowflake table and its columns.

![Data Setup tab of a TikTok Ads connector Data Mart in OWOX Data Marts, showing the TikTokAds source with the ad\_insights endpoint, the Snowflake database, schema and table it writes to, and the output schema with ad\_id and stat\_time\_day as keys – the table is in your own account](https://cdn.owox.ai/www/content-marketing-article/tiktok-ads-data-snowflake/screens/3.png/public)

**History.** Click **Manual Run** and choose **Backfill (custom period)**. One backfill run covers at most 31 days. For a longer history, run consecutive periods, each after the previous one has finished.

![Manual Run panel in OWOX Data Marts with Backfill (custom period) selected, start and end date fields and a note that a backfill run can cover at most 31 days – history is loaded one month at a time](https://cdn.owox.ai/www/content-marketing-article/tiktok-ads-data-snowflake/screens/4.png/public)

**Schedule.** A Data Mart without a trigger does not run again. On the **Triggers** tab, add a trigger of type **Connector Run**: daily, weekly, monthly or at an interval.

![Create Scheduled Trigger form in OWOX Data Marts on the TikTok Ads Data Mart, with trigger type Connector Run, a daily schedule at 09:00 and a time zone – the load repeats without anyone starting it](https://cdn.owox.ai/www/content-marketing-article/tiktok-ads-data-snowflake/screens/5.png/public)

Each scheduled run re-requests the days set by the **Reimport Lookback Window**, two by default. Impressions, clicks and spend settle within a day or two. Conversions keep arriving for as long as your attribution window, so if you report on them, set the lookback at least that long.

One advanced setting to leave alone: **Create Empty Tables**. With it off, an account with no delivery yet gets no table, and later runs fail because the table is not found.

## What the table looks like in Snowflake

**Names are case-sensitive.** The connector creates the schema, table and column names quoted. In Snowflake that makes them case-sensitive, and an unquoted name is read as upper case. `ads_owox.public.tiktok_ads_ad_insights` fails with “does not exist or not authorized”. `ads_owox."PUBLIC"."tiktok_ads_ad_insights"` works. The database is not quoted; the schema, the table and every column are.

**The day is `stat_time_day`**, a date column.

**IDs, not names.** The performance table carries `campaign_id`, `adgroup_id` and `ad_id`. Names are in the Campaigns, Ad Groups and Ads endpoints. Load the ones you need as separate Data Marts and join on the ID.

**Metrics are numbers.** `impressions`, `clicks`, `spend`, the video counts and the engagement counts can be summed directly.

## Query the data

Both queries were validated on Snowflake against a table loaded by the connector. The examples use a shared database, `ads_owox`, for all ad platforms.

Spend, clicks and cost per click by campaign and day, for the last 30 days:

```
SELECT
  "stat_time_day" AS date,
  "campaign_id",
  SUM("impressions") AS impressions,
  SUM("clicks") AS clicks,
  SUM("spend") AS spend,
  SUM("spend") / NULLIF(SUM("clicks"), 0) AS cpc
FROM ads_owox."PUBLIC"."tiktok_ads_ad_insights"
WHERE "stat_time_day" >=
  DATEADD(day, -30, CURRENT_DATE())
GROUP BY "stat_time_day", "campaign_id"
ORDER BY date, spend DESC;
```

Engagement rate by campaign, a number TikTok reports are often read for:

```
SELECT
  "campaign_id",
  SUM("impressions") AS impressions,
  SUM("likes") + SUM("comments") + SUM("shares")
    AS engagements,
  (SUM("likes") + SUM("comments") + SUM("shares"))
    / NULLIF(SUM("impressions"), 0)
    AS engagement_rate,
  SUM("spend") AS spend
FROM ads_owox."PUBLIC"."tiktok_ads_ad_insights"
WHERE "stat_time_day" >=
  DATEADD(day, -30, CURRENT_DATE())
GROUP BY "campaign_id"
ORDER BY spend DESC;
```

What counts as an engagement is your definition. Here it is likes, comments and shares. Write it down once, in a query that is published, and not in each report.

Compute `cpc`, `ctr` and `cpm` from sums, as above. The columns with those names hold the ratio for one ad on one day and cannot be averaged across rows.

## From table to report

A connector Data Mart can be reported from directly. On its **Destinations** tab you attach reports to Google Sheets, Data Studio, Slack or email, each with its own columns and schedule. [Snowflake reports in Google Sheets](https://www.owox.com/blog/articles/automate-snowflake-google-sheets) walks through it.

For a report with campaign names and your own engagement definition, publish that query as a second Data Mart and report from it. To put TikTok next to the other channels in one table, see [self-service marketing analytics on Snowflake](https://www.owox.com/blog/articles/snowflake-self-service-marketing-analytics).

## Where to go next

The same setup loads the other sources into the same Snowflake account: [Facebook Ads](https://www.owox.com/blog/articles/facebook-ads-to-snowflake-data-marts), [Google Ads](https://www.owox.com/blog/articles/google-ads-data-snowflake-owox), [Microsoft Ads](https://www.owox.com/blog/articles/microsoft-ads-snowflake-owox), [LinkedIn Ads](https://www.owox.com/blog/articles/linkedin-ads-to-snowflake), [Reddit Ads](https://www.owox.com/blog/articles/reddit-ads-to-snowflake) and [Shopify](https://www.owox.com/blog/articles/shopify-data-to-snowflake).

On Databricks the steps are the same and the table names have three parts: see [TikTok Ads to Databricks](https://www.owox.com/blog/articles/how-to-connect-tiktok-ads-to-databricks). For the platform itself, start with [what Snowflake is and how it works](https://www.owox.com/blog/articles/snowflake-data-warehouse-explained).

## Your New Normal

Turn your data into decisions.

Governed data marts give you the clean foundation ML needs to actually work.

*   No AI hallucinations
*   Analyst-governed definitions
*   Every number traces to SQL

[Get started free](https://www.owox.com/app-signup)

## FAQ

## Frequently Asked Questions

Why does my query say the TikTok Ads table does not exist in Snowflake?

The connector creates schema, table and column names quoted, which makes them case-sensitive in Snowflake, and an unquoted name is read as upper case. Write the names in double quotes exactly as created, for example ads\_owox."PUBLIC"."tiktok\_ads\_ad\_insights" and "stat\_time\_day". The database name is not quoted.

How do I deliver TikTok Ads data from Snowflake to stakeholders?

On the Data Mart's Destinations tab, create reports to Google Sheets, Data Studio, Slack or email, each with its own columns and schedule. For campaign names and your own engagement definition, publish that query as a second Data Mart and report from it. The data stays in your Snowflake account.

How can TikTok Ads be combined with other paid channels in Snowflake?

Load each platform with its own connector Data Mart into the same Snowflake account. Then write one query that selects date, channel, impressions, clicks and spend from each table and combines them with UNION ALL. For TikTok the day is stat\_time\_day and spend is the spend column. Publish the query as a Data Mart so every report uses the same definition.

What is the data level in the TikTok Ads connector?

The data level sets what one row of the performance table means: one ad, ad group, campaign or advertiser per day. The default is the ad level. It also sets the keys the connector merges rows on, so it should not be changed after data has been loaded. For a second grain, create another Data Mart with its own table.

Which TikTok Ads endpoints can I load into Snowflake?

Ad Performance for daily metrics at the chosen data level, and Ad Performance by Country for the same metrics with a country breakdown. Campaigns, Ad Groups and Ads hold names, objectives, budgets and statuses. Advertiser and Audiences hold account details and custom audiences. Each endpoint is its own Data Mart and table.

What do I need before connecting TikTok Ads to Snowflake?

Your store address, permission to create and install an app in the store, and an Admin API access token issued for that app with read scopes. In Snowflake you need a connected storage with an account identifier, a warehouse and a key pair or a username with a programmatic access token, on a role that can create a database, schema and tables.

How far back should the lookback window go for TikTok Ads?

The Reimport Lookback Window is two days by default, and each scheduled run re-requests those days. Impressions, clicks and spend settle within a day or two. Conversions keep arriving for as long as your attribution window, so if you report on conversions, set the lookback at least as long as that window.

How do I load TikTok Ads data into Snowflake automatically?

Create a Data Mart in OWOX Data Marts on your Snowflake storage, set its definition type to Connector and choose TikTok Ads. Sign in with TikTok, enter the numeric advertiser IDs, choose the data level, pick the Ad Performance endpoint and the fields you need, then publish. A Connector Run trigger on the Triggers tab repeats the load daily, weekly, monthly or at an interval.

## Who wrote this

![Vadym Kramarenko](https://cdn.owox.ai/www/webflow/6798e703afdf787334941cde_Vadym-Kramarenko.png/public)

[Vadym Kramarenko](/team/vadym-kramarenko) · Growth Marketing Manager

Vadym Kramarenko is a Growth Marketing Manager at OWOX, where he drives user acquisition and product-led growth strategies. He hosts the OWOX podcast, interviewing analytics professionals about data-driven marketing, attribution, and reporting best practices. Vadym specializes in turning complex analytics concepts into practical, actionable marketing frameworks.

[LinkedIn](https://www.linkedin.com/in/vadim-kramarenko/) · [All articles](/team/vadym-kramarenko)

[Snowflake](/blog/topics/snowflake)

## Related articles

[Snowflake · Automate Snowflake reports in Google Sheets with OWOX Data Marts · October 1, 2026](/blog/articles/automate-snowflake-google-sheets)

[Snowflake · How to load Facebook Ads data into Snowflake with OWOX Data Marts · October 1, 2026](/blog/articles/facebook-ads-to-snowflake-data-marts)

[Snowflake · How to load Google Ads data into Snowflake with OWOX Data Marts · October 1, 2026](/blog/articles/google-ads-data-snowflake-owox)

[See all articles →](/blog/articles)

## Book a call

You are booked. The invitation is on its way to , with the calendar invite and the meeting link.

[Reschedule](#)

[Cancel](#)

## Links

Pages this page links to, on this site and on docs.owox.com. Where the page has a Markdown twin, its address follows the link.

- [Snowflake](https://www.owox.com/blog/topics/snowflake) — /blog/topics/snowflake.md
- [Vadym Kramarenko](https://www.owox.com/team/vadym-kramarenko) — /team/vadym-kramarenko.md
- [OWOX Data Marts](https://www.owox.com/app-signup)
- [Snowflake](https://www.owox.com/data-storages/snowflake) — /data-storages/snowflake.md
- [storage guide](https://docs.owox.com/docs/storages/supported-storages/snowflake)
- [Snowflake pricing explained](https://www.owox.com/blog/articles/snowflake-pricing-cost-control) — /blog/articles/snowflake-pricing-cost-control.md
- [Book a Demo](https://www.owox.com/book-a-call) — /book-a-call.md
- [credentials guide](https://docs.owox.com/packages/connectors/src/sources/tik-tok-ads/credentials)
- [Snowflake reports in Google Sheets](https://www.owox.com/blog/articles/automate-snowflake-google-sheets) — /blog/articles/automate-snowflake-google-sheets.md
- [self-service marketing analytics on Snowflake](https://www.owox.com/blog/articles/snowflake-self-service-marketing-analytics) — /blog/articles/snowflake-self-service-marketing-analytics.md
- [Facebook Ads](https://www.owox.com/blog/articles/facebook-ads-to-snowflake-data-marts) — /blog/articles/facebook-ads-to-snowflake-data-marts.md
- [Google Ads](https://www.owox.com/blog/articles/google-ads-data-snowflake-owox) — /blog/articles/google-ads-data-snowflake-owox.md
- [Microsoft Ads](https://www.owox.com/blog/articles/microsoft-ads-snowflake-owox) — /blog/articles/microsoft-ads-snowflake-owox.md
- [LinkedIn Ads](https://www.owox.com/blog/articles/linkedin-ads-to-snowflake) — /blog/articles/linkedin-ads-to-snowflake.md
- [Reddit Ads](https://www.owox.com/blog/articles/reddit-ads-to-snowflake) — /blog/articles/reddit-ads-to-snowflake.md
- [Shopify](https://www.owox.com/blog/articles/shopify-data-to-snowflake) — /blog/articles/shopify-data-to-snowflake.md
- [TikTok Ads to Databricks](https://www.owox.com/blog/articles/how-to-connect-tiktok-ads-to-databricks) — /blog/articles/how-to-connect-tiktok-ads-to-databricks.md
- [what Snowflake is and how it works](https://www.owox.com/blog/articles/snowflake-data-warehouse-explained) — /blog/articles/snowflake-data-warehouse-explained.md
- [See all articles →](https://www.owox.com/blog/articles) — /blog/articles.md
