TikTok Non-Spark Ad Upload Specs: Check Your Render Before You Upload
TikTok non-Spark ads need 9:16 at 540x960 or more, up to 500 MB, 516 kbps or higher. Use Timeline 1.0, video trim and video inspect to meet and check them.

The short answer
TikTok's ad specification page lists, for non-Spark ads: vertical 9:16 at 540 by 960 pixels or more, horizontal 16:9 at 960 by 540 or more, square 1:1 at 640 by 640 or more; formats .mp4, .mov, .mpeg, .3gp and .avi; a duration of up to 10 minutes; a size of 500 MB or less; and a bitrate of 516 kbps or more (read 2026-10-09). Sume's Timeline 1.0 default is 1080x1920, which is above the vertical minimum.
The spec as a checklist
Treat the table as a gate on the file that leaves your pipeline, not on the prompt. A generated clip can look fine and still miss a number, especially bitrate and size after an extra re-encode.
| Item | Requirement |
|---|---|
| Vertical | 9:16, at least 540x960 px |
| Horizontal | 16:9, at least 960x540 px |
| Square | 1:1, at least 640x640 px |
| Formats | .mp4, .mov, .mpeg, .3gp, .avi |
| Duration | Up to 10 minutes |
| File size | 500 MB or less |
| Bitrate | 516 kbps or more |
| Ad captions | White, uniform font that cannot be customized; no clickable links, @ symbols or hashtags |
Where Sume helps
Timeline 1.0 returns an MP4 and defaults to 1080x1920. output.width and output.height take even values from 256 to 2160, so you can set 720x1280 to cut size. The default frame rate matches the sources, and a forced rate that differs from the source adds judder, which the job reports as output_fps_resamples_sources.
Video trim with precision: exact can conform an output to { width, height, fps } with fps 24, 25, 30 or 60, at $0.02 per job. Run video inspect on the result; it returns probe facts for the clip. Check the probe result for the fields it returns; if bitrate is not among them, read it with your own tool and check file size from the download header.
Do the check on the final file, after captions and any trim, because each step can re-encode. Then keep the passing render as the master and name it with its resolution, so the next variant starts from a known good spec. If an upload is refused, change one number at a time and rerun the check instead of re-generating the clip. A re-render in Timeline 1.0 with a different output.width is $0.10 per minute, far cheaper than a new generation. Also confirm the fit of every clip slot: cover fills the frame and crops the edges, while contain leaves bars, and bars inside a 9:16 file still count as part of the 9:16 picture.
- Burned-in captions from Sume's caption job are part of the picture; TikTok's own ad captions are separate and white.
- Keep links, @ symbols and hashtags out of the ad caption field, which TikTok says does not support them.
- A 15-second 1080x1920 ad at 8 Mbps is about 15 MB, far below 500 MB; the bitrate floor is the check that matters.
Sources
Related posts
More in Use cases
- TikTok AI disclaimer sits at the bottom: keep burned captions higher
TikTok's ad disclaimer shows at the bottom of in-feed video for the whole ad. Place Sume burned-in captions higher with placement.anchor_ratio and test.
- TikTok safe zones are files, Meta's are percentages: which to use
Meta gives Reels safe zones as 14% top, 35% bottom, 6% sides; TikTok gives downloadable files. How to build to both and place captions on Sume.
- TikTok Shop: labeling real footage as AI is itself a violation
TikTok Shop's page counts labeling non-AI content as AI-generated as a false disclosure. How to keep a clearly camera-shot cut apart from a generated one.
- TikTok Spark Ads have no duration limit: what file to post
TikTok's ad specs list mp4 or mov and no duration limit for Spark Ads, with captions taken from the organic post. Cut the post, not the ad.
Written by Sume