Skip to content

Bulk import

Turn a folder of media into scheduled posts with filename and manual caption matching.


Bulk import turns a batch of media into ready-to-schedule posts in one pass. Two ways to get media in: drop your videos or images directly (each file becomes one post — best for a handful of clips, including multi-GB videos, which stream straight to storage with no zipping), or drop one ZIP of a folder (best when you want subfolders to become carousels). Caption blocks keyed to exact filenames are attached automatically; anything else stays available for you to place by hand.

One flow
Upload → filename match → manual review → defaults → review each → confirm. You can always hand-edit before anything is created.

Step 1 — Upload your media

Uploading loose files: pick your videos/images straight from the file dialog (or drag them in). Each file becomes a single post — ideal for a few clips and for large videos, which upload in resumable chunks directly to storage and aren’t subject to the regular upload size limit. Carousels aren’t built this way; use a ZIP for those.

Uploading a ZIP is the way to get carousels and keep a folder structure. Organize your media in a folder, zip that folder, and drop the ZIP. The grouping rules:

  • Each subfolder becomes one post. Put 2–10 images/videos inside to make a carousel.
  • Slides are ordered by filename. Name them 1.jpg, 2.jpg, 3.mp4 … the first file is the cover.
  • A single file at the top level (not in a subfolder) becomes a single image or video post.
  • Supported: JPG, PNG, GIF, WebP, HEIC, MP4, MOV, PDF. HEIC and non-MP4 video are converted automatically (see Media auto-fix).

Example folder structure

my-batch/                  ← zip THIS folder
├── 01-product-launch/     ← one carousel post
│   ├── 1.jpg              ← cover
│   ├── 2.jpg
│   └── 3.mp4
├── 02-behind-the-scenes/  ← another carousel
│   ├── 1.png
│   └── 2.png
├── promo-clip.mp4         ← a single video post
└── quote-card.png         ← a single image post

That ZIP produces four posts: two carousels, one video, one image. The wizard shows you the detected grouping before anything is created.

Ordering tip
Numbering files (1, 2, 10) sorts naturally — 10.jpg correctly comes after 2.jpg, not after 1.jpg.

Step 2 — Add captions (optional)

Drop a caption file into the same ZIP and the wizard reads it automatically — you don’t pick a format. Any of these work, and the wizard detects which one you used:

  • Per-file blocks — a text file with @filename on its own line followed by that file’s caption. Best when captions are long or span multiple lines.
  • CSV / TSV — columns for filename, an optional title, and the caption (quoted fields are fine). The title fills each post’s internal name; if omitted, the filename is used. Best when you keep captions in a spreadsheet. Export as CSV, not .xlsx.
  • Captions only — one caption per line, matched to your media in order. Best for a quick batch where order is reliable.

Grab a starter file from the Sample link in the wizard. A per-post caption.txt inside a subfolder still sets that post’s caption directly.

Example — per-file blocks

@promo-clip.mp4
Launch day is here! Three years in the making.

@quote-card.png
"Build the thing only you can build."

Step 3 — Match and review

After upload, captions are attached using explicit file identity:

  • Filename match — a caption keyed to one unambiguous filename is attached to that media automatically.
  • Manual match — unmatched captions stay in a pool so you can drag each one onto the intended post.

You can reject or edit any filename match and drag a different caption in its place. Nothing is created until you confirm.

Why filename-keyed
Matching is keyed on filenames, so record boundaries never blur when you import many posts at once — caption 30 lands on file 30, not somewhere adjacent.

Use a clip’s audio transcript (when enabled)

If your workspace has transcription configured, video posts get an extra option: use audio transcript. The wizard transcribes what is said and places that transcript in the editable caption field. It does not invent a title, description, hashtags, or tone. Without transcription configured, the option is hidden and manual matching still works.

Step 4 — Review & schedule

  1. Defaults — set the brand, channels, and whether to save as drafts or auto-schedule the whole batch at a cadence.
  2. Review each — step through every post (“3 of 12”), edit the internal title and the caption, see per-platform validation, and check the auto-fix notes. The internal title is how you find the post later; it’s never published.
  3. Confirm — ready posts are created; anything blocked is flagged with a reason. Auto-fixable issues (HEIC, MOV, oversize) don’t block.

Troubleshooting

  • “No posts found in the ZIP” — make sure your media is inside the zipped folder (not an empty archive), and re-zip.
  • A caption didn’t match a file — check that the @filename or CSV filename matches a file in the ZIP exactly (case-insensitive). Unmatched captions stay in the pool so you can drag them in.
  • A filename match is wrong — reject the pair, then drag the correct caption from the pool.
  • A post is blocked in review — usually a caption over the platform limit or too many carousel slides. The message says which platform and limit.