Bulk scheduling
Validate and schedule up to 500 posts from one CSV with durable row-level progress.
- Documentation owner:
- BlendDuck Documentation
- Last reviewed:
Bulk scheduling lives in the Calendar. Select Import CSV to download a template, copy connected channel IDs, upload or paste CSV rows, and choose a failure policy.
Prepare the file
channel_id,content,mode,publish_at,media_urls,tags,topic_id,request_id,deduplication
channel_123,"Product update, now available",schedule,2026-08-04T09:30:00.000Z,,launch|product,,,prevent
channel_123,A draft for review,draft,,,ideas,,,prevent
channel_idandmodeare required.modeacceptsdraft,schedule,next, orprioritize.schedulerequires a future ISO 8601publish_at; other modes leave it empty.- A row needs content or at least one
media_urlsvalue. Separate multiple media URLs and tags with|. request_idis optional. Supply a stable value when another system creates the file and may retry it.- Imports accept up to 500 data rows and 2 MB of UTF-8 CSV.
Validate, then run
Validate is a no-write dry run. It uses the same channel, media, platform, duplicate, and schedule checks as normal post creation. Every issue stays tied to its source row.
Choose Keep valid rows moving when good rows should run even if others need correction. Choose All rows or none when one failing row must roll back the whole batch. Transactional all-or-nothing execution is available with PostgreSQL and local SQLite; Cloudflare D1 reports that policy as unsupported during the no-write preview. A direct non-dry-run D1 request retains a failed diagnostic batch for operators, but never creates posts.
Follow and recover a batch
Batch history shows persisted progress, not a browser estimate. Open a batch to inspect each row's status, error, attempt count, and created post targets. Queued or running batches can be cancelled. A partial, failed, or cancelled batch offers Retry failed only when it has rows that can safely run again; successful rows are never replayed.
Keep the source CSV and batch ID until every intended row has reached a terminal state. Use Troubleshooting when a provider or authorization failure repeats after the source row is corrected.