How to bulk schedule social media posts (with a CSV template)
What a bulk scheduling CSV needs, the caption and image limits for nine platforms, the five mistakes that break an import, and a template you can copy.
William Lindberg, Customer Success

Some weeks you have 3 posts to write, and the composer is the right tool. Then there's the week you have 40. A month of evergreen tips. A launch that hits 6 platforms a day for 2 weeks. Two hundred posts stuck in a tool you're leaving. Typing those in one at a time is how a Sunday disappears.
Bulk scheduling fixes that. You plan every post in a spreadsheet, one row each, export it as a CSV, and upload it once. This guide covers what the file needs, the platform limits to respect while you write, the workflow that keeps mistakes out, and a template you can copy.
What a bulk file needs
A bulk scheduler reads a CSV: a plain text file where each row is one post and each column is one field. You don't write it by hand. Plan in Google Sheets, Excel, or Numbers, then export. These are the columns worth having, and the rule each one has to pass.
| Column | What goes in it | The rule |
|---|---|---|
| Date | The day the post publishes | Must be in the future. Past dates get rejected. Use one format for every row (2026-09-14 is the safe one). |
| Time | The clock time, in the timezone you set | 24-hour format avoids the AM/PM mix-up. 09:00, not 9. |
| Caption | The post text | Can't be empty. A row with no caption gets flagged. |
| Media URL | A link to the image or video | Must be a public link that points straight at the file. Leave it empty for a text-only post and attach media after import. |
| Platforms | Where the post goes | Every platform in the cell has to be connected to your account. Unconnected ones get flagged. |
| First comment (optional) | Hashtags or a link to post as the first comment | Only some platforms support it (Instagram, LinkedIn, Facebook, YouTube). Leave it empty where it doesn't apply. |
Past dates and unconnected platforms are the errors people hit first. Both are cheap to fix before upload: check today's date, and check your connected accounts.
A row is a promise to publish. If any cell in it is wrong, you want the tool to say no, not guess.
Per-platform limits to respect in the sheet
One row can go to several platforms, but it carries one caption. So the shortest limit among the platforms in that row is the one that counts. A 600-character caption is fine for LinkedIn and useless for X in the same row.
Keep this table next to your sheet.
| Platform | Caption or text limit | Images per post |
|---|---|---|
| 2,200 characters, 30 hashtags | Up to 10 in a carousel | |
| TikTok | 2,200 characters | Up to 35 in a photo post |
| Long captions are fine; the first lines show before See more | Up to 10 | |
| 3,000 characters | Up to 20 | |
| X | 280 characters | Up to 4 |
| YouTube | Title 100 characters, description 5,000 | One video |
| Title 100 characters, description 500 | One image or video per pin, and every pin needs a board | |
| Threads | 500 characters | Up to 10 |
| Bluesky | 300 characters, a hard limit | Up to 4 |
The practical move: sort your sheet by platform before you write. Rows that include X or Bluesky get short captions. Rows that go to LinkedIn alone get the longer take. If one post needs both, give it two rows with the same date and media, and a caption sized for each.
The workflow
This is the order that keeps a bad row from becoming a broken post.
- Write in a sheet. One row per post, using the columns above.
- Export as CSV. File, then Download or Export, then CSV. The spreadsheet app quotes the commas and line breaks in your captions for you.
- Map your columns. On upload, match each column in your file to a field in the scheduler.
- Fix flagged rows. The importer checks every row and lists the ones with a past date, an empty caption, or a platform you haven't connected. Fix them in the sheet and export again.
- Review as drafts on the calendar. Imports should land as drafts, not live posts. Look at the month view. Gaps and pile-ups jump out.
- Drag to fine-tune. Two posts on the same morning? Drag one to the afternoon. Open any post to adjust the caption per platform.
- Schedule the batch. Once it looks right, confirm. Every post is now scheduled for its time.
No plan yet? Build a content calendar first, or start from the content calendar template, which maps onto Lemonpost's bulk CSV. Bulk upload moves a planned month onto the calendar fast, but it can't plan the month for you.
Bulk scheduling in Lemonpost, step by step
Bulk scheduling is included on every Lemonpost plan, including the 7-day trial. Here's the flow.
- Grab the template. Download Lemonpost's CSV template so your columns line up from the start. Or bring your own sheet and map it in step 3.
- Fill a row per post. Date, time, caption, a public image or video URL, and the platforms it goes to. Any of the nine: Instagram, TikTok, Facebook, LinkedIn, X, YouTube, Pinterest, Threads, and Bluesky. Add as many rows as you want.
- Upload and map. Drop the file in and match each column to its field. Lemonpost remembers the mapping, so the next upload is one click.
- Fix what's flagged. Every row is checked before a single post is created. Past dates, missing captions, and unconnected platforms are flagged so you can fix them first.
- Review on the calendar. Imported posts land on the content calendar as drafts. Nothing publishes on its own. Open any post to customize it per platform in the full composer, add a first comment, or turn it into a Reel. Drag it to a new slot if you need to.
- Schedule the batch. Confirm, and every post is scheduled for its time.
Media comes in by public URL, and Lemonpost fetches and attaches it. For a text-only row, open the post after import and attach media from your media library, which can pull from Canva, Google Drive, or Pexels.
Mistakes that break a bulk import
Five things cause most failed uploads.
1. Dates in the wrong format, or in the past. 03/09 means March 9 in one app and September 3 in another. Use YYYY-MM-DD for every row. And check the year: a sheet copied from last month's plan imports 30 rows dated in the past.
2. Commas in captions without quotes. In a CSV, a comma is a column break. "Fresh drop, in three colors" splits into two cells unless it's wrapped in quotes. Spreadsheet apps add the quotes on export. Editing the CSV by hand in a text editor is how they go missing.
3. Media links that aren't file links. A Google Drive or Dropbox share link opens a preview page, not the file. The importer needs a public URL that ends at the image or video itself. Private links, expiring links, and preview pages all fail.
4. One long caption for a row that includes X or Bluesky. The row's caption has to fit the shortest limit among its platforms. Split the post into two rows, or trim the caption to 280 characters, before you upload. The X character counter counts links and emoji the way X does.
5. Platforms you haven't connected. The sheet says TikTok, but TikTok isn't connected yet. Connect every account before the upload, and spell platform names the way the template does.
A CSV template you can copy
Paste this into a blank sheet, or save it as a .csv file. The first row is the header; each row after it is one post.
date,time,caption,media_url,platforms,first_comment
2026-09-14,09:00,"Fresh drop, in 3 colors. Link in bio.",https://example.com/fall-drop.jpg,"Instagram, Facebook","#newarrivals #fallstyle"
2026-09-15,12:30,"3 ways to plan a week of posts in one sitting.",,X,
2026-09-16,17:00,"How we shoot a month of content in one afternoon.",https://example.com/bts.mp4,"TikTok, Instagram, Threads",
Row 1 is an image post to 2 platforms with hashtags in the first comment. Row 2 is text-only, so the media cell is empty; attach media after import if you want one. Row 3 is a video to 3 platforms, and its caption fits every limit in the row.
Keep it as a tab in your planning sheet. When the tab is full, export and upload.
FAQ
What is bulk scheduling? Bulk scheduling means creating many social media posts at once from a spreadsheet instead of typing them in one at a time. You fill one row per post, upload the file as a CSV, and every post is scheduled in one step.
What file format do I need? A CSV. Google Sheets, Excel, and Numbers all export one. Keep the header row so the importer can map your columns to its fields.
Can I bulk schedule to Instagram and TikTok? Yes. In Lemonpost one upload can schedule to all nine platforms: Instagram, TikTok, Facebook, LinkedIn, X, YouTube, Pinterest, Threads, and Bluesky. You list the platforms for each post in its own row.
How do I add images and videos in bulk? Put a public link to each file in the media column. Lemonpost fetches the file from that URL and attaches it to the post. For a text-only row, open the post after import and attach media from your library.
Do bulk-uploaded posts publish straight away? No. Imported posts land on the content calendar as drafts. You review the whole batch, fix anything wrong, and then schedule it. Nothing from an upload goes live on its own.
Does bulk scheduling cost extra? No. It's on every Lemonpost plan, starting with Creator at $29 a month for 5 channels, and every plan has unlimited seats. The 7-day free trial includes it too. See pricing for the full comparison.


