How to bulk schedule social media posts: write one post per row in a spreadsheet (the date, the time, the text, the platforms and any media file name), save it as a .csv file and upload it to a scheduler that reads CSVs. In PostEverywhere, upload your images and videos to the Media library first, then upload the .csv on the Bulk Upload page: one file takes up to 200 posts, every row is checked against each platform's rules in a preview you can edit, and one click schedules the lot. See PostEverywhere's bulk scheduling for the feature itself.
This guide gives you the exact template, explains each column with examples, and lists the per-platform rules and the mistakes that make rows fail.
| Posting one at a time | A CSV bulk upload | |
|---|---|---|
| How posts are made | Open the composer, fill it in, pick a time, repeat | Write every post in one spreadsheet, upload once |
| A month of daily posts | 30 trips through the composer | One file of 30 rows |
| Several platforms per post | Select them each time | One cell, such as instagram+facebook |
| Mistakes caught | As you go | All at once, in a preview before anything schedules |
| Best for | A few posts a week | A batch, a campaign, or moving from another tool |
What is social media bulk scheduling?
Social media bulk scheduling means loading many posts into a scheduler in one go instead of one at a time. The usual format is a CSV file, a plain spreadsheet where each row is a post and each column is a detail of it.
Every major spreadsheet app exports one: Google Sheets through File, then Download (Google's download help page), and desktop Excel through Save As, where Microsoft's CSV help page notes that Excel for the web can't save CSV files.
Native apps rarely do this. Most schedule one post at a time, and YouTube Studio, one of the more generous, takes up to 15 uploads at once according to its Shorts upload help, with the details for each still filled in one by one.
A CSV upload to a scheduler is how most teams get a month of posts in one sitting.
It pairs naturally with batching: write a week or a month of posts in one session, turn one long piece into many as our guide to repurposing one piece of content into a week of posts describes, then upload the result.
How to bulk schedule social media posts with a CSV
This is the flow in PostEverywhere today.
Bulk schedule posts from a CSV in PostEverywhere
On a computer, which is easier for spreadsheets.
- Connect your accountsIn Accounts, connect every profile the batch will post to. The Bulk Upload page lists them with their account IDs.
- Upload the media firstPut every image and video the batch uses in your Media library, by upload or from Google Drive on the Media page.
- Download the templateOn Bulk Upload, download the blank template or the example CSV, which is filled in with your connected platforms.
- Fill one row per postDate, time, text, platforms and the media file name. Save it as a .csv.
- Upload the .csvDrop the file on Bulk Upload. Every row appears in a preview grid with the number of valid rows, errors and destinations.
- Validate, fix and scheduleClick Validate to check media and accounts, edit any flagged cell in place, check the time zone, then click Schedule N Posts.
Limits to plan around: a file of up to 200 posts and 5 MB, and up to 10 uploads a day. A batch of 300 posts is simply two files. Posts themselves are unlimited on every plan.
The CSV template, column by column
The header row PostEverywhere's template uses is:
date,time,content,platforms,media,cover,cover_timestamp
Only date, content and platforms are required. You can also download our bulk upload template, a ready-made month of example rows in these columns. Here is a small batch as it would look in the file:
date,time,content,platforms,media,cover,cover_timestamp
2026-11-02,09:00,Monday tip: plan the week before you open the inbox.,linkedin+x,,,
2026-11-02,12:30,"New menu, same coffee. Come say hi.",instagram+facebook,menu-photo.jpg,,
2026-11-03,,Behind the scenes from the roastery.,instagram,roast-1.jpg|roast-2.jpg|roast-3.jpg,,
2026-11-04,17:00,How we pour a latte heart in 20 seconds,youtube,latte-heart.mp4,latte-thumb.jpg,
2026-11-05,19:00,Three grinder mistakes and the fix for each.,tiktok,grinder.mp4,,2.5
| Column | What goes in it | Also accepted as a header |
|---|---|---|
| date | The day it goes out, as YYYY-MM-DD, for example 2026-11-02 | schedule date, post date, when |
| time | HH:MM on a 24-hour clock, for example 14:30. Optional | post time, hour |
| content | The post text | caption, text, post, message |
| platforms | Platform names or account IDs joined with + | channels, networks, accounts |
| media | A Media library file name; several joined with | make a carousel | image, video, file |
| cover | A custom thumbnail for a video: a library file name or an https link. Optional | thumbnail, cover photo |
| cover_timestamp | A frame of the video to use as the cover, in seconds, such as 2.5. Optional | cover time, thumbnail time |
Because common header names are mapped for you, a sheet exported from another scheduler with a "Caption" or "Channels" column usually works as it is.
Date and time: what happens with a blank time
Dates are YYYY-MM-DD and times are 24-hour HH:MM, read in the time zone shown above the preview, which you can change before scheduling. Leave the time empty and PostEverywhere spreads that day's posts across set slots (9:00, 12:00, 15:00, 17:30 and 20:00), then moves each to a suggested best hour on the same date where it has results for those accounts.
PostEverywhere looks at when your posts have done best and suggests those times; our page on how suggested posting times work explains it.
A date and time already in the past isn't an error: the row is flagged with a warning and publishes straight away, so check those before you schedule.
Platforms: names or account IDs
The platforms cell takes platform names joined with a plus sign: instagram, facebook, x, linkedin, tiktok, youtube, threads, pinterest, bluesky, telegram, discord, wordpress and google_business. instagram+facebook+threads sends one row to all three.
If you have more than one account on a platform, such as two Facebook Pages for two clients, use the account ID from the Bulk Upload page instead of the name, so each row lands on the right profile. You can mix the two, as in instagram+4472.
If a name could mean two accounts, the preview asks you which one. This is how agencies run several brands from one upload; PostEverywhere's multi-account management covers the wider set-up.
Media and carousel syntax
Media goes in by file name, not by link: upload the files to your Media library first, then type each name in the media column. Matching is forgiving:
- Extension and case don't matter. Image.JPG in the CSV matches image.png in the library.
- The newest upload wins when two files share a name.
- Typos get a suggestion, so a near miss is flagged with the closest match.
For a carousel, list several file names in one cell separated by a pipe, in the order you want them: slide1.jpg|slide2.jpg|slide3.jpg. Leave the media cell empty for a text-only post.
Covers for video posts
For a video row, the cover column sets a custom thumbnail from your library or an https link, and cover_timestamp picks a frame from the video instead, in seconds. Covers apply to TikTok, YouTube, Facebook and Instagram videos and are ignored for carousels, where the first slide is the cover.
What a CSV can't set
The file carries the essentials, not every platform option. A Pinterest board, Pin title and destination link, and settings such as YouTube tags or TikTok privacy, have no column, and a column named link is read as media.
Set those in the post editor after the upload, or send them through the API. The full column rules are also in our bulk upload help article.
A month of posts, one upload. Write the batch in any spreadsheet, check it in the preview and let every post go out on time. See PostEverywhere's bulk scheduling.
Per-platform rules your CSV is checked against
Every row is checked against the rules of each platform it names before anything schedules. These are the ones that catch people out:
| Platform | Media | Files per post | Text |
|---|---|---|---|
| An image or video is required | Up to 10 | 2,200 characters | |
| TikTok | A video or images is required | Up to 35 images | See our TikTok guide |
| YouTube | One video is required | 1 | The first line becomes the title; the rest is the description |
| Optional | Up to 10 | Long posts are fine | |
| Optional | Up to 9 images | 3,000 characters | |
| X (Twitter) | Optional | Up to 4 images | 280 characters on a free account |
| Threads | Optional | Carousels supported | 500 characters |
| An image is required | 1 | 500 characters | |
| Bluesky | Optional | Up to 4 images | 300 characters |
| Telegram and Discord | Optional | Up to 10 | Long messages are fine |
| WordPress | Optional | Up to 20; the first is the featured image | The first line becomes the post title |
| Google Business Profile | One photo, no video | 1 | 1,500 characters, posted as an update |
When one row goes to several platforms, the strictest rule applies to the shared text. A 400-character post to linkedin+x is flagged because of X. Give X its own row with shorter text, or drop it from that row.
Google Business Profile rows go out as updates with one photo; for events and offers, see how to schedule Google Business Profile posts. For TikTok captions and photo posts in detail, see our guide to scheduling TikTok videos and photo posts.
Why bulk-uploaded rows fail, and how to fix them
Most problems show up in the preview, before anything is scheduled.
| What you see | Likely cause | Fix |
|---|---|---|
| Missing required columns | No date, content or platforms header | Add the header, or rename yours to one of the accepted names |
| Every row has a date error | Dates like 11/02/2026, which spreadsheets often produce | Format the column as YYYY-MM-DD before you export |
| Media not found | The file isn't in your Media library yet, or the name is misspelt | Upload the file first, or accept the suggested match |
| Not a valid platform | A name like twitter or ig | Use x, instagram and the other names listed above, or an account ID |
| Over the character limit | Shared text is longer than one platform allows | Split that platform into its own row with shorter text |
| Instagram or TikTok row flagged | No media in the row | Add a file name, or remove that platform from the row |
| Text split into the wrong columns | A comma inside the post text | Wrap that cell in double quotes; most spreadsheet apps do this when they export |
| File rejected | More than 200 rows, or over 5 MB | Split it into two files |
| Some X posts held back | X posts are capped at 100 a day per team | They go out when the window reopens, or spread them over more days |
The quoting rule is part of the CSV format itself: RFC 4180 says fields containing commas, double quotes or line breaks should be enclosed in double quotes, and a double quote inside a field is written twice.
Spreadsheet apps handle this for you when they export; it matters if you write the CSV by hand or with a script.
After the upload
Once the batch is scheduled, every post sits in the content calendar like any other, so you can drag one to another day, edit its text or delete it until it goes live.
Want a post on more networks, or different wording on each? Open it and use Customise per platform, or see how PostEverywhere's cross-posting handles one post across all top platforms.

If you would rather give each post a recurring slot than a fixed time, a queue of weekly openings does that, and works alongside bulk uploads. For filling the spreadsheet itself, our free content calendar templates are a good starting grid.
Bulk scheduling with an AI agent or the API
A CSV isn't the only way to load a batch. Connect Claude, ChatGPT or any MCP client to PostEverywhere and hand it your list of topics: it can write each post for each platform and schedule the whole set, up to 50 posts per request, with no spreadsheet at all.
Developers get the same through the REST API, which creates up to 50 posts per call on every plan.
Comparing how other schedulers handle CSV imports? Our roundup of bulk schedulers and their upload limits puts them side by side. For the wider field beyond CSV imports, see our comparison of the best social media scheduling tools.
Hand the batch to your agent. Give Claude or ChatGPT a month of topics and let it write and schedule every post through PostEverywhere. See bulk scheduling in PostEverywhere.
FAQ
How many posts can you bulk schedule at once?
In PostEverywhere, up to 200 posts per .csv file of up to 5 MB, and up to 10 uploads a day. An AI agent or the API can create up to 50 posts per request.
What columns does a bulk upload CSV need?
At least date, content and platforms. Add time, media, cover and cover_timestamp when you need them. The full header row is date,time,content,platforms,media,cover,cover_timestamp.
Can you bulk schedule carousels?
Yes. Put several Media library file names in the media cell separated by a pipe, such as slide1.jpg|slide2.jpg|slide3.jpg. Each platform's own limit applies, for example up to 10 on Instagram.
Can you bulk schedule videos and Reels?
Yes. Upload the videos to your Media library, then put each file name in the media column. TikTok and YouTube rows need a video, and the cover column sets a custom thumbnail.
Can you use links to images in the CSV?
Not in the media column. Media goes in by Media library file name, so upload the files first. Only the cover column also accepts an https link.
What happens if I leave the time blank?
PostEverywhere spreads that day's posts across set times, then moves each to a suggested best hour on the same date where it has results for those accounts.
Can I edit posts after a bulk upload?
Yes. Edit any cell in the preview grid before scheduling, then edit, move or delete any post in the content calendar until it goes live.
Is bulk scheduling included on every plan?
Yes. Bulk Upload is on every PostEverywhere plan, from $9 a month, and every plan starts with a 7-day free trial. Plans are compared on the pricing page.
Sources
Outside facts in this guide come from the pages below. Product details for PostEverywhere come from the app itself.
- Google Docs Editors Help: Create, view, or download a file
- Microsoft Support: Save a worksheet as a CSV file
- IETF: RFC 4180, Common Format and MIME Type for CSV Files
- YouTube Help: Upload YouTube Shorts

Founder & CEO of PostEverywhere. Writing about social media strategy, publishing workflows, and analytics that help brands grow faster.



