Spreadsheet in. A scheduled month out.

Plan the month in a spreadsheet. Drop the CSV in. FoPost validates every row, shows you a preview, queues the whole month at once. Rollback if anything looks wrong, before a single post ships.

30 posts in 30 seconds, up to 500 a file
Preview every row before anything queues
Per-platform caption columns from the spreadsheet itself
One-click rollback before posts ship
What the upload actually looks like

Drop the CSV. See every row. Queue or fix.

Real shape of the bulk import: the file you uploaded, the validation summary, the row-by-row preview. Catch the over-length caption before it ships, not at 9am on Tuesday.

fopost.com/bulk
august-content.csv
26 rows · uploaded just now
24 ready
2 warnings
0 errors
#01Aug 5

Solo founder tip: stop launching on Tuesday. Talk to 5 customers this week.

#02Aug 6

5 reasons your Tuesday launch is dead on arrival, a thread.

#03Aug 7

Most launches die on Tuesday because the people who would have shared them are still catching up on their inbox. Here is what to do instead, with 5 concrete examples from last quarter.

LinkedIn caption is 1,247 chars · cut at 210 with "see more"
#04Aug 8

Solo founder workflow that ships 5 posts a week without Sunday batching.

#05Aug 9

What worked last week: top 3 posts across every platform.

+ 21 more rows
Validation before a single post queues
Rollback the whole batch in one click
A caption column per platform, from the sheet
The cost of scheduling 30 posts one at a time

Your batch-on-Sunday plan died in the scheduler, not in the spreadsheet.

You drafted 30 posts in a Notion table on Sunday. Then you opened the scheduler. Same form, 30 times. You gave up at post 12.

You scheduled 8 of the 30 posts manually. The other 22 sit in Notion until "later this week" turns into "never." Your weekly cadence is back to 2 posts.

The two posts you did schedule both landed Tuesday at 9am because you weren't tracking which slots you'd filled. Your feed shipped a doubled-up tweet.

Is this for you?

Is bulk scheduling for you?

For you if

  • You batch content (Sunday afternoon, end-of-month, before a launch) and the scheduling is the slow part
  • You plan posts in a spreadsheet, Notion table, or Airtable already, and just want them shipped
  • You run multiple campaigns and want to queue 30+ posts in one sitting without 30+ clicks
  • You're an agency or freelancer handing a month of content to a client and need a preview before anything queues

Not for you if

  • You post one at a time as ideas hit you. The composer is the right tool for that.
  • You're a real-time live-poster (events, breaking news). Bulk import is for planned content.
  • You need thousands of posts queued in one pass. A file caps at 500 rows, which is a month of daily posting across five accounts. Split a bigger plan across files, or use the API.
What's inside

Built for the Sunday batch that actually ships.

A spreadsheet is how you plan. A queue is how you publish. The bulk import is the bridge, with the validation step that catches the bad rows before they leave your laptop.

Drop the spreadsheet, done

CSV or TSV, up to 2 MB and 500 rows a file, in any column order. Drag it in and the importer reads the header, maps the columns, and validates every row in about 3 seconds.

Validation before anything queues

Pre-flight catches over-limit captions for each destination, dates in the past or in the wrong format, account and label names that do not resolve, and media the platform will refuse. You see what's wrong row by row, not after 3 posts fail to publish at 9am.

Per-platform captions from the sheet

Add a caption_twitter or caption_linkedin column and that platform gets its own wording for the row. Leave the cell empty and it falls back to the shared content column. No manual edit after upload.

Rollback before posts ship

Uploaded the wrong file? Caught a typo across 30 rows after you queued? Rollback the whole batch in one click. The queue empties, nothing ships, your sanity is intact.

Labels and accounts by name

Name the accounts and labels you want per row and the importer resolves them against the workspace. A typo in an account name is a flagged row, not a post that quietly went nowhere.

Per-workspace import

Drop the CSV into the workspace it belongs to. Client A's content never leaks into client B's queue. Agencies, you have an isolated upload pipeline per workspace.

How it works

Plan. Upload. Approve. Ship.

01

Plan in a spreadsheet

Content, schedule time, accounts, optional labels, an optional media URL, and a caption column per platform if you want one. Notion, Airtable, Google Sheets, Excel, anything that exports CSV or TSV.

02

Drop the file

Drag the CSV or TSV into the importer. It reads the header, maps the columns, and runs validation on every row in seconds.

03

Approve the preview

Scan the row-by-row preview. Edit warning rows inline, swap a date, drop a platform. Approve when it looks right.

04

Queue the batch

One click queues every approved row across every selected platform. The calendar fills up, the queue starts ticking, you close your laptop.

vs the alternatives

Why this beats clicking 30 times.

Three ways solo founders try to schedule a month at once. Only one of them is actually a drop-the-spreadsheet flow.

Manual scheduling, one post at a time

What most founders do today

  • Same form, 30 times. 90 seconds per post at best, so 45 minutes minimum.
  • No batch preview. You discover the over-limit caption at post 18.
  • No rollback. A typo in your draft ships to 30 followers' feeds.
  • You give up halfway. Half the batch never queues.

Zapier from Sheets to your scheduler

What technical founders rig up

  • $20 to $50 a month for Zapier on top of your scheduler.
  • Breaks the first time a column name changes.
  • No validation. Bad rows ship as bad posts.
  • No batch preview, no rollback, no per-row platform overrides.
FoPost

FoPost bulk scheduling

What you actually want

  • Drop the CSV. Validation runs in 3 seconds.
  • A caption column per platform, straight from the spreadsheet.
  • Whole-batch rollback in one click, before anything ships.
  • Included in your plan. No extra subscription.

Publishes to all major networks

Frequently asked questions

How big can the CSV be?

Up to 500 rows and 2 MB per file, on every plan. That is a month of daily posting across five accounts in one drop. For a larger plan, split it into two files or queue posts through the API.

What format does the CSV need?

A header row with content and schedule_at, plus optional accounts, labels, media_url, repeat, and a caption_<platform> column for any platform that needs its own wording (caption_twitter, caption_linkedin). Column order does not matter. TSV works the same way, the importer detects the delimiter from the first line.

Can I include images and videos?

One media item per row, referenced by URL in the media_url column. Auto-resize frames still images for each platform on publish. Video and GIFs go out exactly as they are, so upload the aspect ratio the platform expects.

Does it work for Instagram and TikTok?

Yes. Both hold you to tighter publishing limits than X or LinkedIn, and both want more space between posts. FoPost tracks each account against its own platform limits and holds a post back rather than burning it on a rejection, so a big batch simply spreads out. You do not have to think about it.

What happens if a row has an error?

The row is flagged in the preview with a specific reason (over-limit caption, missing media, invalid date, platform not connected). You edit the row inline or skip it. Only rows you approve are queued.

Can I roll back a batch after it queues?

Yes, until the first post in the batch publishes. Roll back from the batch summary page and every still-queued post is removed. Posts that already shipped stay shipped (they're already in your followers' feeds).

Can I set up recurring posts from the CSV?

Yes, from a single row. Fill the repeat column with something like "every 2 weeks x4" or "weekly x6" and that one row queues the whole run. Write out one row per send instead if you want each date under your own control.

Does it work with Google Sheets directly?

Export the sheet as CSV and drop the file in. There is no live Sheets link today, so a change in the sheet means exporting and re-importing rather than re-syncing.

Ready to try bulk scheduling?

7-day free trial. 30 platforms. Unlimited posts on every plan.