Skip to content
Tools Bulk Post
Bulk publishingAutomationMedia management

Bulk schedule social media posts with CSV and Google Sheets

CSV, Google Sheets, API and MCP submissions share destination media checks. URL access checks remain in place; file format, size, supported media types, and available dimensions or duration also matter. Bulk errors identify the source row before new rows are scheduled. Replace incompatible files or use Fix images in the Postly channel preview, then review the result. Videos require manual export when incompatible. A limited MP4/MOV header check can identify encoding and reported frame rate; incomplete checks are guidance, not a failed upload or a reason to resubmit an accepted post. Review image and video requirements. Prepare videos for publishing.

Upload a CSV, let Postly validate your rows, and automate publishing across your channels.

Sample URLs shown below

Any URLs showcased on this page are sample examples for formatting and validation guidance only. They are not real customer URLs, not guaranteed live assets, and should not be treated as production links.

Best choice: Postly Cloud
For bulk publishing and media management in general, Postly Cloud is the best option.
Review before publishing
Check your channels, media and timing in one preview before confirming.
More posts. One CSV.CSV filePostDatePostlySchedule1. Prepare rows2. Validate3. Schedule
Bulk publishing
Bulk publishing that scales with your calendar

Upload a CSV, validate your rows, and automate bulk publishing across your channels.

New + advanced

Want a more powerful bulk workflow?

Try Google Sheets Bulk Publishing — it's the advanced mode for managing large content plans.

Postly dashboard – Bulk Post upload and validation
Postly validates your upload and highlights issues so you can fix them quickly.
Guide

Bulk Post guide

Prepare a CSV, give each destination the right copy, review platform and media validation, then publish or schedule the valid rows.

CSV rules
  • Download a fresh platform-specific template before each batch. Choose only the destinations and fields you need; the full template remains available. Keep the first row as headers.
  • Keep recognizable, unique column names. Columns may be reordered.
  • Keep post_content, platforms and due_date, plus all fields required by your destinations. Optional columns can be removed.
Timing at a glance

Facebook Feed Post or Facebook Linked Carousel?

For a normal multi-image feed post, use share_to_facebook_feed=true and up to ten image URLs. This does not create linked cards.

Facebook Linked Carousel is a separate feature with two to ten image cards and a destination URL per card. CSV and Google Sheets currently have no fields for those cards. Create them in the dashboard or use the API/MCP card settings; do not enable share_as_facebook_carousel in a bulk row.

Compare formats and see API/MCP examples

Post content and platforms

Write once in post_content, then list comma-separated names in platforms, for example facebook,instagram,x. Platform names are case insensitive: Facebook and facebook match. All matching connected channels in the workspace are selected automatically. Edit destinations in preview. Older text and content headers still work.

Templates begin with due_date, platforms, and post_content. Optionally add a campaign_id. Google Sheets loads campaign IDs for the selected workspace; refresh sources to see new campaigns.

Review character-limit errors for each destination. Edit the content manually or use separate rows for different versions. The dashboard CSV preview can optimize a flagged row with AI when the workspace owner has unlimited AI text. Limited allowances, such as 20,000 tokens, do not enable this bulk AI action. Manual editing remains available. Review the result before publishing.

View all platform requirements and field examples →

X publishing mode: choose one

  • classic: one post, with the standard 280-character limit.
  • thread: split longer content into replies. Default when blank.
  • numbered_thread: split into numbered replies.
  • long_form: a long post for eligible X accounts, with thread fallback when needed.

Enter one value in x_publishing_mode. Google Sheets offers a dropdown; CSV cannot preserve dropdowns. The separate Threads platform is selected with threads in the platforms column.

Choose when to publish

Your workspace timezone applies

Schedule for later

2030-09-10 14:30

Recommended: YYYY-MM-DD HH:mm

Publish now

NOW

Queues immediately, subject to approval

Fill in due_date, then check the timing preview. Blank dates never publish.

International date formats
USA · month first
9/4/30 2:30 PM
UK / Europe · day first
DMY: 9/4/30 14:30
Year first
2030/9/4 14:30
Month name
4 Sep 2030 14:30

Ambiguous numeric text defaults to US month/day order: 9/4 means September 4. Use DMY: for April 9, or spell the English month. Unambiguous day-first dates such as 14/9/30 14:30 also work.

Use slashes, hyphens or dots, with 24-hour time or AM/PM and optional seconds. Two-digit years mean 2000–2099. Always include a time; date-only text, timezone suffixes, relative dates and raw spreadsheet serial numbers are not accepted.

Google Sheets and timezones

Google Sheets interprets date/time cells using its spreadsheet locale. Postly reads the wall-clock time in the spreadsheet timezone and schedules it in the destination workspace timezone. Text cells follow the international formats above.

No Action or Timezone column is needed. Your calendar display preference does not change text import rules. Existing templates remain compatible. Check the cell, workspace settings and timing preview before sending.

Validation and publishing results
  • Correct missing, past, invalid and ambiguous or nonexistent daylight-saving times before submitting. New Date cells start blank. NOW is case-insensitive.
  • Review the dates, workspaces, channels and publish-now counts before confirming. Queued, scheduled and awaiting approval do not mean published; delivery is not necessarily instantaneous.
  • In Google Sheets, choose Refresh post results to check delivery.
  • Retry unchanged rows after an interrupted request to reuse the same posts. Changing a row creates a new submission. Existing posts with missing schedules need correction and never publish automatically as a backlog.
One post, multiple platforms

Write your post in post_content and enter comma-separated destinations such as instagram,threads in platforms. New templates use one shared content column.

Shorten content when validation flags a destination limit. Edit a platform version in the preview or use a separate row for different wording. Existing platform override columns remain compatible in older files.

Review and fix before publishing
  • Postly checks character and hashtag limits for every selected platform.
  • With unlimited AI text, use the AI action on a flagged row to create shorter platform-specific copy while preserving the shared version.
  • Image URLs are checked for access and destination requirements. Fix incompatible source files before resubmitting, or use supported image repairs in the channel preview.
  • Video issues are flagged with the platform requirement so you can replace the source file.

Bulk publishing supports Facebook, Instagram, Threads, X, LinkedIn, Google Business Profile, Pinterest, YouTube, TikTok, Bluesky, Telegram, Discord, WhatsApp, WordPress, Ghost, Hashnode, DEV Community, and Blogger.

Guide

Media URL examples

Use direct/public URLs. Avoid private or permission-gated sources such as Google Drive, and similar services.

Video URLs that work
  • https://www.youtube.com/watch?v=dQw4w9WgXcQ
  • https://youtu.be/dQw4w9WgXcQ
  • https://vimeo.com/76979871
  • https://download.blender.org/peach/bigbuckbunny_movies/BigBuckBunny_320x180.mp4
  • https://cloud.postly.ai/media/your-video.mp4
Video URLs to avoid
  • https://youtube.com/shorts/XXXXXXXXXXX
  • https://drive.google.com/file/d/FILE_ID/view?usp=share_link
Image URLs that work
  • https://upload.wikimedia.org/wikipedia/commons/9/9a/Gull_portrait_ca_usa.jpg
  • https://cloud.postly.ai/media/your-image.jpg
  • https://static.cdn.example.com/banner-v3.png
Image URLs to avoid
  • https://www.instagram.com/p/XXXXXXXXX/
  • https://photos.google.com/share/XXXX
  • data:image/png;base64,iVBORw0K...
Need help? Visit Help docs or open your dashboard.

Plan your first publish

How do I bulk schedule social media posts?

Download a current Postly CSV template for the platforms you need, add your post text, media references, and required due_date values, then upload and validate the batch. Resolve errors before importing and review each row’s result afterward.

A practical example

For a two-week campaign, prepare separate rows for each post and destination. Use future dates such as 2030-09-10 14:30, check the workspace timezone, and validate media links before confirming the batch.

Before you schedule

  • Use a freshly downloaded template; available fields can change.
  • Blank dates do not publish. NOW queues immediate publishing and still follows approvals.
  • Postly interprets dates using each destination workspace’s timezone.
  • Check queued, scheduled, awaiting-approval, and published results separately.