Bulk upload posts from a CSV or Excel file
On this page
Schedule many posts at once by filling in a CSV or Excel (.xlsx) file, uploading it and choosing the social accounts it goes to.
Before you start
- Connect the social accounts you want to post to.
- Check you're in the right workspace. Posts use the workspace's timezone, shown at the top of the first step.
- Put each image or video in the file as a public link. If your media is in your Media Library, you can get its links from the upload screen.
Open the feature
Choose Publish in the left sidebar, then Bulk Upload.
Steps
- On Upload CSV or Excel File, click Download the basic CSV file template. For YouTube posts, use Download the advanced CSV file template (Recommended for YouTube). instead. To get links for media in your library, click Add media from your Library.
- Fill in one row per post. Use Text for your post, and Year, Month (1 to 12), Date, Hour (from 0 to 23) and Minutes for when it goes out. To use your queue instead, put QNEXT or QLAST in Queue Schedule. Bulk Upload CSV File Classification, below the upload box, explains every column.
- Click Upload file (or drag the file onto the page). For an Excel workbook with more than one sheet, choose the sheet to import from the list that appears. The sheet being imported stays shown under the file name. Then click Next.
- On Select Social Account(s), open the account list, tick the accounts to post to and click Next. If your file uses the Quick Select column, this step is skipped.
- On Review Posts, check each row. Ready rows can be scheduled. For an Error row, click the arrow next to Error to see why.
- Untick any row you don't want to upload. Every row starts ticked. The current review-row selection workflow excludes unticked rows from the upload and error file. Before proceeding, check that at least one Ready row remains ticked; otherwise Next is disabled.
- Click Next to start the upload. The All Done! step shows In Progress... while your posts are scheduled. You can leave the page and come back.
Schedule one row from the composer
- On Review Posts, click the pencil icon on the row. Its tooltip says Edit and schedule.
- The row opens in the composer with its text, media and time. Fix anything you need, then schedule it as usual. It's removed from the upload, so it isn't scheduled twice.
Excel (.xlsx) files
An Excel workbook uses the same columns as the template: save the template as .xlsx, or paste your posts under its headings. After the upload everything works as it does for a CSV.
- One sheet per import. A workbook with several sheets asks which one to import. Hidden sheets aren't offered.
- Dates. The Date column can hold the day of the month, as in the CSV template, or a full date: an Excel date cell, or text such as
2026-10-13 14:30or13 Oct 2026. A full date fills in Year, Month (1 to 12) and Date, and Hour (from 0 to 23) and Minutes when the cell shows a time. If those columns already hold different values, the row is listed so you can fix it. - Dates are never guessed. Text such as
03/04/2026can mean 3 April or 4 March, so the file isn't imported and the affected rows are listed by their row number in Excel. A date cell that hides a time it doesn't show, a time without a date, or a date with a time zone is listed the same way. - Formulas. The value Excel saved with the file is imported; nothing in the workbook is recalculated or run. A cell with an error such as
#REF!, or a formula without a saved value, is listed by row. Open the file in Excel and save it again before uploading. - Limits. Excel files can be up to 10 MB and 200 columns. Password-protected workbooks, the older .xls format and macro workbooks (.xlsm) aren't accepted. Save the sheet as .xlsx or CSV instead.
CSV columns and platform options
Keep every column from the downloaded template, even if you leave some cells blank. Column names must match the template. Use public media URLs; adding an Image URL disables the link preview. Instagram feed posts and Pinterest posts require an image URL. For Instagram REEL or SHORTS, provide a Video URL instead. Alt Texts supplies image descriptions, while Thumbnail URL sets the image shown before a video.
- Post Type controls the format. Available values include REEL, REEL_FEED, FEED, SHORTS, STORY, VIDEO and NOTIFICATIONS. For an Instagram video row, choose REEL_FEED or FEED to show a Reel on the profile grid. In this CSV classification, Facebook Pages publish REEL_FEED or FEED video rows as Reels; Facebook Groups do not support that Reel path. YouTube publishes those values as Shorts. SHORTS is for short YouTube videos, STORY is for Instagram Professional stories, and VIDEO is the standard video format. For TikTok, NOTIFICATIONS sends a push notification to mobile devices.
- Number Of Repetitions accepts 1–10 or FOREVER. For X and Facebook Pages, Time Gap between Repetitions accepts 1–24 hours, WEEKLY or MONTHLY. For other networks, including Facebook Groups, finite repeats greater than one must be at least 48 hours apart: use WEEKLY or MONTHLY, or set Repeat Every (days) to 2–365. YEARLY requires FOREVER. Repeat Every (days) works with 1–10 repetitions, replaces the hourly gap and cannot be combined with FOREVER, WEEKLY, MONTHLY or YEARLY.
- Pinterest Title and Pinterest Link set the Pin title and destination. Google Business Profile Type accepts BOOK, ORDER, SHOP, LEARN_MORE, SIGN_UP or CALL; Google Business Profile URL is not used with CALL.
- First-comment columns are available for Instagram, Facebook, LinkedIn, TikTok and Threads. X First Comment is also shown in the current basic template classification. X and Threads comments publish as replies; a Threads first comment supports up to 500 characters. Delay First Comment is in minutes, from 0 to 2880 (48 hours); blank or 0 means no delay. Threads Topic is optional, up to 50 characters, and applies to the first post in a thread.
- Document URL and Document Title attach a LinkedIn document. Labels assigns labels and creates a missing label; keep each label name within 30 characters. Tag Users on Instagram Reels takes comma-separated usernames without
@. - In a file exported from Calendar (one that keeps the name the export gave it), media links that point to another Social Champ account's library are copied into your account when you upload. Your posts then keep working if the other account deletes that media. Files over 500 MB stay as links. Uploading the same file again reuses the same copies. Other public links are used as they are.
- For Instagram or Facebook location tags, search the place in Location tag lookup, copy the generated location ID (for example,
location:123), and put it in the matching location column.
YouTube advanced template
The advanced template adds YouTube metadata. Video Title is required; Post Type is SHORTS or VIDEO. Optional fields include Thumbnail URL, Subtitles URL, Category and Playlist. Subtitles Language accepts en, de, es, it, pt, fr, ja, ko, nl, hi, ar or zh and is stored as given; leave it empty for English (en). Any other value is rejected for that row. Subtitles Auto-Sync accepts YES or NO (default NO). Privacy Status accepts PUBLIC, PRIVATE or UNLISTED (default PUBLIC). Tags are comma-separated. License accepts YOUTUBE or CREATIVE (default YOUTUBE). Embeddable, Notify Subscribers and Made For Kids each accept YES or NO (default NO).
Look up a location ID
Open the bulk-upload location lookup and search for the intended Facebook or Instagram location. Copy the returned ID into the matching platform's Location ID column in the CSV. Do not use one platform's ID in another platform's column. Review the prepared rows before scheduling.
Expected result
When the upload finishes you see All done! with links to Queue and Calendar, where your new posts appear. If some rows couldn't be scheduled you see Posts Partially Failed and an Error File to download. See Review bulk upload errors.
If your workspace uses post approval, your posts go to Post Approval first and appear in Calendar once approved.
Example
To schedule a week of tips to your Facebook Page and Instagram account, download the basic template. Add seven rows, each with Text, a public Image URL (Instagram needs one) and a date, with 9 in Hour (from 0 to 23) and 00 in Minutes. Upload the file, tick both accounts on Select Social Account(s), check all seven rows show Ready, and click Next. Fourteen posts appear in Calendar, one per account per day.
Limits and permissions
FOREVER cannot be used with hourly repetition gaps or QNEXT/QLAST queue rows.
- Quick Select uses groups from your current workspace. It schedules only to social accounts in that workspace that you can post to. If a row has no accessible accounts, it appears in the error file. Check the group and ask the account owner to check your access before trying again.
- Your plan sets how many posts one file can hold, for CSV and Excel alike. The upload step shows the number before you upload. If your file has more, you can continue with the first ones and the rest are left out.
- Next stays disabled on Review Posts until at least one ticked row is Ready. Error rows that stay ticked aren't scheduled.
- A row can be Ready but still skip some networks. It shows Not scheduled on and the network, with the reason.
- Bulk Delete uses its own checkboxes to remove rows from the review. It doesn't change which rows are ticked for upload.
- If your workspace requires labels, every row needs a Labels value. Otherwise the whole file is refused.
- In the YouTube columns Embeddable, Notify Subscribers and Made For Kids, YES turns the option on. Any other value, including NO, leaves it off.
- If you upload the same file again, a row an account already has from an earlier bulk upload is skipped on that account instead of being scheduled twice. It only counts as the same row if every column is unchanged. Posts from uploads more than 30 days old or made before this was added, and posts you created another way, aren't recognized.
Troubleshooting
- Next is greyed out on Review Posts: tick at least one row marked Ready. If every row shows Error, fix the file and upload it again.
- You see "There is a content issue in the first row of the file": download the template again and copy your posts into it, keeping its column headings. For a workbook, check you chose the sheet that holds your posts.
- You see "Rows ... have a date or time we can't read without guessing": in those rows, enter the date as YYYY-MM-DD HH:mm (for example 2026-10-13 14:30), use an Excel date cell, or use the day of the month with the Year and Month columns. Then upload the file again.
- You see "This file isn't an Excel workbook" or "password-protected or uses the old .xls format": open the file in Excel, save it as an unprotected .xlsx or as CSV, and upload it again.
- A row shows "Image URL is required": add a public image link. Instagram feed posts and Pinterest posts need one. For Instagram REEL or SHORTS, provide a Video URL instead.
- You want to stop an upload in progress: after a short wait, Cancel processing appears. Select it and confirm Cancel processing and delete my posts. This requests cancellation and cleanup; it may not recall posts already handed to scheduling or publishing. Check Queue and Calendar to see what completed before retrying.
- The page closed during the upload: open Bulk Upload again to see its progress. Check Calendar before uploading again to avoid duplicates.