X rewards volume more than most platforms, which makes batching genuinely worth it, and 280 characters means a batch of thirty posts is a shorter writing session than it sounds.
Write the batch, then schedule it
The mistake is composing in the scheduler. You end up picking times instead of writing, and the posts get worse.
Write thirty short posts wherever you write. Then load them in and schedule in one pass. It’s the same total work in a fraction of the time, and reading thirty together shows you which ones are actually good.
Importing a batch
BulkPublish’s bulk composer at /compose/bulk takes a CSV with:
| Column | Required |
|---|---|
content | Yes |
scheduled_at | No |
media_urls | No |
A file with nothing but a content column and thirty rows is a valid import, which is usually all a text-only X batch needs.
Rows with no content and no media are skipped, so trailing blank lines don’t become empty posts. If your text contains commas, quote the field, and save as UTF-8 so emoji survive.
Character counts are checked per post
280 characters, validated as each post is queued rather than at publish time. In a batch that matters more than usual: one over-length post in thirty is easy to miss by eye and impossible to miss when the composer flags it.
The same applies per post in a thread.
Threads in a batch
At 280 characters, threading is how anything substantial gets said. Two rules that don’t change in bulk:
The first post has to work alone. It’s what gets shown, and a first post that only works as a preamble loses everyone.
Don’t thread by default. In a batch it’s tempting to turn every idea into three posts. A two-post thread that fits in one is worse than the one.
The 280-character bonus
X has the tightest limit of the short-text networks:
| Platform | Limit |
|---|---|
| X | 280 |
| Bluesky | 300 |
| Threads | 500 |
| Mastodon | 500 |
Which means a batch written for X publishes unchanged to all four. If you’re on more than one of these, selecting the extra channels while composing turns one batch into four platforms for no additional writing.
The exceptions are mentions, since handles differ, and replies, which only make sense where the conversation is.
Don’t schedule too far out
X is the platform where scheduled content ages fastest, because so much of what works there is responsive to something current.
Four to six weeks is a sensible ceiling for evergreen posts. Anything referencing something happening now shouldn’t be in a batch at all.
Plan limits
- Posts: Free: 3/day. Pro: 30/day. Business: unlimited.
- Channels: Free: 3 (1 per platform). Pro: 30 (2 per platform). Business: 75 (5 per platform).
X publishing is priced differently from other platforms because its API carries a real per-request cost: pay-as-you-go credits on the free plan, an included monthly budget on paid plans. Worth knowing before queueing a large batch.
The short version
Write the batch away from the scheduler, import it as a CSV with a content column, and let per-post character validation catch the over-length one. Keep the queue shallow because X content ages fast. And write to 280, since that single decision gets you Bluesky, Threads and Mastodon from the same batch.