In this video
- Why TikTok is unlike every other network: a ZIP, not a single HTML file
- index.html at the first level, and what config.json is actually for
- Orientation 0, 1 and 2 — and how to pick the right one
- The 5 MB cap, measured on the compressed archive
- No mraid.js, no JS redirects, no HTTP requests at runtime
- The Pangle SDK and window.openAppStore() — and why both halves matter
- Building and exporting a TikTok ZIP end to end
- Opening the archive and reading all three files
- Uploading in TikTok Ads Manager, in TikTok’s own words
About this video
TikTok asks for a different package from almost every other ad network: a ZIP rather than one HTML file, with index.html at the top level, a config.json that declares the orientation, a 5 MB limit measured after compression, and a store exit that comes from the Pangle SDK rather than MRAID. This tutorial builds a creative from scratch, exports it for TikTok, opens the archive and reads every file in it, then covers the upload. Every specification quoted is TikTok’s own, with the source on screen.
Playable Ads Maker — build playable ads and end cards, export to 13 ad networks.
Transcript
Captions in 18 languages on YouTube
In this video you'll build a playable ad that passes TikTok's requirements, and understand every rule it has to pass - the packaging, the size, and the one line of code that makes the CTA work.
TikTok is the network most likely to catch you out, because almost nothing it wants is what the other networks want.
It takes a ZIP, not a single HTML file. Inside it, the main page has to be called index.html and sit at the top level of the archive — not in a folder.
Read the full transcriptShow less
The limit is 5 MB, and it is measured on the compressed ZIP — after zipping, not before.
Beside index.html sits a small file called config.json, and it carries one thing: the orientation your creative supports.
0 means either way up, 1 means portrait only, 2 means landscape only.
Then three things TikTok does not allow. No mraid.js — the standard most other networks require is the one thing TikTok rejects.
No JavaScript redirects, and no HTTP requests once the ad is running. Everything the ad needs has to already be inside that ZIP.
That last rule is the one creative teams trip over: a web font, an image on your CDN, an analytics pixel. Each one is a request, and each one can fail review.
And the part that decides whether you get any installs at all: the click-through. TikTok does not use the MRAID call other networks use.
Its documentation asks you to include the Pangle playable SDK in the page, before your own script, and then to open the store by calling window.openAppStore().
Both halves matter. The call is defined by the SDK, so a creative that calls it without loading the SDK has a button that looks perfect and does nothing.
I know that because it was true of this exporter until today. The call was there, the SDK was not, and every TikTok build quietly fell back to a plain window.open() — which is the JavaScript redirect the same page forbids.
So let's build one. Anything you make here works - I'll keep this deliberately simple, because the packaging is the subject, not the art.
Design it portrait. TikTok's feed is vertical and full screen, so a landscape creative letterboxes inside a player that is the wrong shape for it.
Open Export, and pick TikTok. Your App Store and Play links go in here - they are wired into the creative's own click handler, which reads the device and opens the right store.
They do not go into config.json, whatever you may have read. That file holds the orientation and nothing else.
The modal shows you the size before you build, and it knows each network's cap - so you find out here rather than after an upload is rejected.
Build it, and what lands is a ZIP with three files: index.html, main.js and config.json.
index.html carries the SDK tag and your styles. main.js is the playable itself, with every image inlined so nothing is fetched. And config.json is that single orientation number.
Uploading is TikTok's part of the story, so here it is in their words rather than mine.
One thing worth knowing: TikTok and Pangle share this format and this SDK. The same creative runs on TikTok's own feed and on Pangle's publisher network, which is a lot of inventory from one file.
Three mistakes to avoid. Exporting the wrong network's file - a creative built for an MRAID network has a CTA that silently does nothing here, because those calls are ignored.
Designing landscape and shipping portrait. Your config declares what you built, so decide the shape before you start, not after.
And measuring the wrong thing: the cap is on the zipped archive. If you are close, compress your images before you blame the exporter.
Build one, unzip it, read the three files. Once you have seen what a compliant creative actually contains, every other network gets easier.
That is TikTok's requirements, end to end. See you in the next video!