Bulk upload posts from a CSV file

Step-by-step guide
  • About 10 minutes
  • 8 steps
  • Checked 2 Nov 2026
0 of 8 steps done

Before you start

  • You can write posts in this workspace (any role except Viewer). Contributors' rows still need approval.
  • The accounts you want to post to are already connected under Accounts.
  • Images and videos are already in the Media library, because rows refer to media by its id.
  • A spreadsheet app that can save CSV UTF-8, such as Excel, Google Sheets or Numbers.

Steps

  1. Step 1

    Open Bulk upload

    In the left-hand menu, click Bulk upload. Times on this page use your workspace time zone, shown at the top.

    Where to find it in Skylane
    1. Bulk upload
  2. Step 2

    Download the template

    Under 1. Get the template, click Download template. You get skylane-bulk-template.csv with the right columns and two example rows that use one of your accounts.

    Diagram: on the Bulk upload screen, press Download template.
  3. Step 3

    Copy your account ids

    Under Your account ids on the same page, each account shows an id such as acc_... or a short form such as instagram:yourhandle. Use either in the accounts column, and separate several with |.

  4. Step 4

    Copy media ids, if a post has media

    Open Media in a new tab. Each file has a Copy id button. Paste ids into the media_ids column, separated by |.

    Where to find it in Skylane
    1. Media
    2. Copy id
  5. Step 5

    Fill in one row per post

    Use the columns in the table below. For a fixed time, set scheduled_at to YYYY-MM-DD HH:MM (for example 2026-12-01 09:30). Leave it empty, or set mode to queue, to fill your next free queue slot.

  6. Step 6

    Save as CSV UTF-8

    In Excel choose File, Save As, then CSV UTF-8 (Comma delimited). In Google Sheets choose File, Download, Comma-separated values (.csv). UTF-8 keeps emoji and accented letters intact.

  7. Step 7

    Upload the file

    Under 2. Upload your file, drop the CSV onto the box or click it to choose the file. Files can be up to 2 MB and 500 rows. Skylane checks every row against each network's rules.

  8. Step 8

    Check and confirm

    Under 3. Check and confirm, use Problems to see rows that need fixing - each shows the reason. When you are happy, click Schedule with the number of ready rows (for example Schedule 12 ready rows). Rows with problems are skipped, so fix them in your spreadsheet and upload just those rows again.

Good to know

  • Dates can also be written as DD/MM/YYYY HH:MM. Times in the past are flagged.
  • Every row also goes through the same pre-flight checks as the composer, so caption length, media type and required fields are caught before scheduling.
Columnsreference
caption        required  The caption. Wrap it in double quotes if it has commas or line breaks.
accounts       required  Account ids or platform:handle, separated by |
scheduled_at   for scheduled posts  YYYY-MM-DD HH:MM in the workspace time zone
mode           optional  schedule or queue. Rows with no scheduled_at go to the queue.
media_ids      optional  Media ids from your library, separated by |
first_comment  optional  First comment, where the network supports it
title          YouTube and Pinterest  Video or Pin title
Example CSVcsv
caption,accounts,scheduled_at,mode,media_ids,first_comment,title
"3 money habits that pay off in December. Which one will you start?",instagram:yourhandle,2026-12-01 09:30,schedule,,"Save this for later",
"Budgeting in 60 seconds",instagram:yourhandle,,queue,,,

Common problems

"This file is not a CSV"

Save your spreadsheet as CSV UTF-8 (step 6) rather than .xlsx or .numbers, then upload again.

"The CSV needs a caption column"

The first row must be the column names. Download the template and paste your rows under its header row.

"One or more accounts in this row are not connected to this workspace"

Copy the id or platform:handle exactly as shown under Your account ids. Handles are not case-sensitive, but the platform part must match, for example linkedin:.

"One or more media ids were not found"

Upload the file in Media first, then use its Copy id button. Ids from another workspace do not work.

"We could not read the scheduled_at date"

Use YYYY-MM-DD HH:MM, for example 2026-12-01 09:30. Spreadsheet apps sometimes reformat dates: format the column as plain text before typing.

Still stuck? Contact support

Tell us which step you reached and what you see on screen. A screenshot helps.