Shopify video storage by plan: 50 GB, 500 GB, 2 TB, and a clip cap
Shopify caps video and 3D files by count (250 to 100,000) and storage (50 GB to 2 TB) per plan. A short script finds which limit your AI clip batch hits first.

Shopify limits video and 3D files two ways: a count per plan and a storage ceiling. The count runs from 250 on Starter and Basic to 100,000 on Enterprise, and storage runs from 50 GB on Starter and Basic to 2 TB on Plus. The smaller of the two limits is the one you hit first, and it depends on clip size. The numbers are from Shopify's file uploads help page, read 2026-10-03.
Limits by plan
Counts include 3D models as well as video, so a store that already hosts 3D files has less room than the table suggests. The page did not state a storage figure for Enterprise in the entry we kept, so the table leaves it open.
| Plan | Video and 3D files | Video storage |
|---|---|---|
| Starter / Basic | 250 | 50 GB |
| Grow | 1,000 | 500 GB |
| Advanced | 5,000 | 500 GB |
| Plus | 50,000 | 2 TB |
| Enterprise | 100,000 | not recorded |
Which limit comes first
Divide the storage by your average clip size and compare it with the count. On a Basic plan, 250 files fit in 50 GB if the average clip stays under about 200 MB, so for short product loops the count is the binding limit. A store that uploads long 1080p clips of several hundred megabytes each runs out of storage long before it reaches 250 files.
The same logic holds higher up. On Advanced, 5,000 files against 500 GB means the storage limit binds once the average passes about 100 MB. Short clips make the count the limit; long clips make storage the limit.
A planning script
The script takes your average clip size in megabytes and prints the limiting factor on each plan that has both numbers. It uses decimal gigabytes, so confirm which unit Shopify applies before you rely on a close result.
PLANS = {
"Starter/Basic": (250, 50),
"Grow": (1000, 500),
"Advanced": (5000, 500),
"Plus": (50000, 2000),
}
def headroom(avg_clip_mb):
for name, (count, gb) in PLANS.items():
by_storage = int(gb * 1000 / avg_clip_mb)
limit = min(count, by_storage)
which = "count" if count <= by_storage else "storage"
print(f"{name}: {limit} clips (limited by {which})")
headroom(40)Keep generated clips lean
Clip size follows length, resolution and motion. Sume's video API lets you choose duration and resolution per request, and most product loops do not need 1080p or more than a few seconds. Render the ratio each template needs rather than a master you crop later, and delete drafts from Shopify rather than leaving them hosted. Measure real file sizes from your first batch before you scale, because the average is the number the planning script depends on.
Sources
Related posts
More in Use cases
- Skippable YouTube ads: check the first 5 seconds with stills
Skippable in-stream ads can be skipped after 5 seconds and Google recommends under 3 minutes. Sample the pre-skip frames of a Sume clip with video inspect.
- Snap ad video size: API says 1080x1920, ad specs page says 720x1280
Snap's Ads API lists 1080x1920 for top snap video while its ad specs page lists 720x1280. Render one 9:16 file at 1080p and check the pixels with Sume.
- Snap image ads become 5-second videos: generate a real clip instead
Snap's Ads API converts a top snap image into a 5-second video. If you want camera motion, generate a 5-second clip from the same image with Sume.
- Snapchat ad specs: 9:16 only, 3 to 180 s, a simple batch target
Snap's ad formats page lists 9:16 at 720x1280 and 3 to 180 s for most formats. The Ads API page says 1080x1920. How to render one file that fits both.
Written by Sume