Bulk posting is the fastest way to move a large content calendar into Postly. It is best when you already know the schedule, the copy, and the media plan, and now need reliable throughput.
Best use cases
- seasonal campaigns
- ecommerce promotions
- agency content calendars
- event countdowns
- franchise or multi-location schedules
- spreadsheet-driven marketing teams
How bulk posting works
Connect all channels you want to publish to in the destination workspace before uploading a CSV. Include every intended account, page, group or location, and reconnect any expired connections. Use the platforms column; no channels column is needed. After upload, open each row in preview to add or remove connected channels before confirming.
- Select Choose platforms & download and choose only the destinations and fields you need. Get a fresh template before each batch: columns change frequently, so avoid keeping an old full template as your working copy.
- Fill in due_date, comma-separated platforms, post_content, and media references.
- Upload the CSV into the bulk posting flow.
- Let Postly validate the rows before scheduling.
- Resolve any issues, then import the final batch.
The full template is still available beside Choose platforms & download as Download full template on the Bulk Post page. Platform templates are smaller and easier to maintain. For blog SEO and featured images, see CSV, Sheets, API and MCP fields.
Date rules for CSV and Google Sheets
The due_date field is required. Enter a future date/time, preferably as YYYY-MM-DD HH:mm, or enter NOW (case-insensitive) to queue immediate publishing. Blank dates never publish. Past, invalid, impossible, and ambiguous or nonexistent daylight-saving times are rejected.
Postly applies the destination workspace timezone automatically. No Action or Timezone column is needed. For multiple workspaces, the same entered time is interpreted separately in each workspace. Check the timezone in workspace settings before importing.
New Date cells are blank by default. For example, 2030-09-10 14:30 schedules a post; NOW queues it immediately. NOW still follows workspace approval rules and does not guarantee instantaneous delivery.
Review the immediate/scheduled counts, dates, workspaces and channels before confirming. Fix every validation error before submitting. Review each row result: queued, scheduled and awaiting approval do not mean published. In Google Sheets, use Refresh post results to check delivery without resubmitting.
Retry unchanged rows after an interrupted request to reuse the same posts. Changing a row creates a new submission. Correct existing posts with missing schedules in Postly; they are never automatically published as a backlog.
Make media easier before import
Bulk posting works best when your media is already stable and reachable.
Recommended patterns:
- host reusable assets in Postly Cloud first
- use durable public URLs
- keep filenames and references consistent across the sheet
- avoid last-minute manual edits after validation
What to validate before import
- target channels belong to the right workspace
- dates are valid and the workspace timezone is correct
- media URLs resolve to the intended asset
- copy length makes sense for the destinations involved
- recurring content is separated from one-off content
Required fields and platform columns
Postly marks genuinely required fields with a red * in the dashboard and only blocks a row when the selected destination requires that value. Optional platform columns may be left blank.
For Pinterest rows:
- an image or video and a selected board are required
pinterest_title,pinterest_description,pinterest_destination_url, and alt text are optional- when
pinterest_destination_urlis blank, Postly uses the first non-media link in the Pinterest or shared post text - the same behavior applies to CSV imports and the Google Sheets add-on
If the same CSV workflow repeats every week or month, create a reusable spreadsheet process around it. Bulk posting becomes much more valuable when the import pattern is standardized.
When bulk posting is not the best tool
Choose another flow if:
- each post needs heavy manual review
- your campaign depends on dynamic AI generation at the last minute
- platform-specific overrides vary too much post by post
- the content should actually be recurring instead of imported in batches
Good next guides
US and international date formats
CSV and Google Sheets accept numeric dates with slashes, hyphens or dots, English month names, AM/PM or 24-hour time, and optional seconds:
- US:
9/4/30 2:30 PMmeans September 4, 2030. - Day-first:
14/9/30 14:30means September 14, 2030. - Year-first:
2030/9/4 14:30or2030-09-04T14:30. - Written month:
4 Sep 2030 14:30orSeptember 4, 2030 2:30 PM.
Ambiguous numeric text uses month/day order. Use DMY: 9/4/30 14:30 for April 9, or spell the month. The calendar display setting does not change this import rule. Two-digit years mean 2000–2099. A time is required; date-only text, timezone suffixes, relative dates and raw spreadsheet serial numbers are not accepted.
Google Sheets date/time cells follow the spreadsheet locale when entered. Postly reads their wall-clock time in the spreadsheet timezone and schedules it in the destination workspace timezone. Review the cell and final timing before publishing. Existing templates remain compatible; no new template date format is required.
Custom fields (shortcodes)
Use {{store_name}} or another saved custom field in post text to personalize each destination account. See setup, examples and fallback behavior.
Facebook formats
Normal multi-image Facebook Feed Posts use multiple image URLs and share_to_facebook_feed=true. Facebook Linked Carousel is a separate feature with individual card links. The current CSV and Google Sheets templates do not supply those cards. Leave share_as_facebook_carousel false; use the dashboard or API/MCP for linked cards. See Facebook feed posts and linked carousels.
Post content and platform names
New templates begin with due_date, platforms, and post_content, in that order. campaign_id is optional: use an existing campaign ID to group posts. Google Sheets loads IDs for the selected workspace; refresh sources after adding a campaign. Campaign names and internal organization labels are omitted from new templates. Older imports remain compatible.
Write the shared copy in post_content (shown as Post content in the dashboard). Enter comma-separated names in platforms, such as facebook,instagram,threads. Names are case insensitive: Facebook and facebook match. All matching connected channels in the current workspace are selected automatically. New CSV and Google Sheets templates do not need a separate content column for every destination. Legacy text, content, and platform override columns remain supported.
Review character-limit errors for each destination before submitting. Edit the shared content manually, edit a platform version in the CSV preview, or use separate rows with the relevant platforms. The CSV preview offers AI optimization only with the workspace owner's unlimited AI text allocation; always review generated wording. A limited allowance, such as 20,000 AI text tokens, does not enable bulk AI optimization and is not consumed by a denied optimization click. Manual editing remains available on every plan. Google Sheets validates rows and reports what to fix directly in the sheet.
Check and correct character counts
Validation shows the character count and limit for each affected platform, such as 501/500 for Threads. In CSV preview, edit Post content or open the row editor to change platform-specific text. In Google Sheets, Publish Posts validates before confirmation and writes over-limit counts and limits into the row error. Edit post_content in the sheet or use Review / Edit Posts → Prepare changes → Apply review changes. Edit any existing platform text overrides in their cells, or use separate rows for different wording. Validate again after changing text or channels. These checks do not publish the post.
Choose one X publishing mode
Set x_publishing_mode to one value:
| Value | Behavior |
|---|---|
classic | One post with the standard 280-character limit. |
thread (default) | Split longer content into replies. |
numbered_thread | Split content into numbered replies. |
long_form | Long-form post for eligible X accounts, with thread fallback when needed. |
Google Sheets provides a dropdown with all four choices. CSV is plain text and cannot retain dropdown validation. Do not put the whole list in one cell. The Threads social network is a separate destination: use threads in platforms.
Adjust destinations in preview
For Google Sheets, connect all channels you want to publish to in each destination workspace before submitting posts. Refresh sources after connecting or reconnecting channels so the sheet has the current choices, then review the workspace and selected destinations before confirming.
Keep preparation simple: shared post content, destinations, date and optional media. In the dashboard CSV preview, open a row’s editor to add or remove connected channels and change content, media, schedule and platform settings. Select at least one channel before saving.
Google Sheets uses your API key to fetch accessible workspaces and connected channels. Choose a workspace from its dropdown; channel choices are scoped to that workspace. Leave the channel cell blank for all matching connected channels. The optional platforms filter is case insensitive; leave it blank to use all workspace platforms.
Select a row in the sheet, then choose Extensions → Postly → Review / Edit Posts. Select channels by name and edit post content, image/video URLs, date or X mode. Choose Prepare changes, close the popup, then choose Apply review changes from the Postly menu to save. Other platform fields remain editable in their cells. Saving does not publish. Then use Publish Posts to validate and confirm. Already submitted posts must be edited in the Postly dashboard. If the row changes while review is open, reload it before saving.
Custom replies
See Custom replies across CSV, Google Sheets, API and MCP for platform-specific numbered columns, attachment markers, supported destinations, and delays after parent publication.