> ## Documentation Index
> Fetch the complete documentation index at: https://docs.publishbuddy.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Bulk upload posts from a CSV

> Load up to 500 posts from a spreadsheet, then schedule or queue them in one go.

Moving from another tool, or planning a month at once? Put your posts in a spreadsheet, save it as a CSV and import it. One file holds up to 500 posts.

<Note>
  Bulk scheduling is on the Pro and Business plans, and in the 14-day trial. On Free the import runs, but saving the posts fails with "Please upgrade your plan." Only the workspace owner and admins can import a CSV.
</Note>

## Set up your file

The first row holds the column names. You need two columns: **Date** and **Message**. Spell them exactly like that. PublishBuddy ignores any other column.

| Column | Required | What goes in it |
| - | - | - |
| `Date` | Yes | When the post goes out, like `2026-11-03 09:30`. Use that year-month-day hour:minute format. You can leave a cell empty if you plan to queue the posts. |
| `Message` | Yes | The post text, up to 10,000 characters. A cell can be empty if that row has a link or media. |
| `Description` | No | The post title. YouTube and Pinterest use it. |
| `Link` | No | A link. PublishBuddy adds it to the end of the post text, on its own line. |
| `Media URLs` | No | Public links to images or videos, starting with `http` or `https`. Separate them with commas. Up to 8 per row. |
| `Labels` | No | Labels for the post, separated by commas. PublishBuddy removes spaces, so `Morning News` becomes `MorningNews`. |

PublishBuddy reads the times in your own time zone. To check it, click your avatar, choose **Settings** and look at **Timezone**. Don't add a time zone to the dates in the file.

Here's a small file you can copy:

```csv theme={null}
Date,Message,Description,Link,Media URLs,Labels
2026-11-03 09:30,New week. New playlist. What are you listening to?,,,https://example.com/images/playlist.jpg,weekly
2026-11-04 12:00,Our winter menu is live.,Winter menu,https://example.com/menu,,"menu,winter"
2026-11-05 17:15,Behind the scenes at the shoot.,,,"https://example.com/images/shoot-1.jpg,https://example.com/images/shoot-2.jpg",
```

Wrap a cell in double quotes when it contains a comma, like the two media links on the last row.

<Tip>
  Most spreadsheet apps can export a CSV. Save it as CSV UTF-8 and keep it under 5 MB. The file name must end in `.csv`.
</Tip>

## Import it

<Steps>
  <Step title="Open the composer">
    Click **New Post** at the top of the app. The **Create Post** window opens.
  </Step>

  <Step title="Open the bulk menu">
    Click the layers icon next to the post type. It has no label. Choose **Import CSV**.
  </Step>

  <Step title="Add your file">
    Drop the file into the box, or click **Browse file**. Check the preview. It shows **Detected rows:** and **Detected columns:**, with a tick next to Date and Message if both are there.
  </Step>

  <Step title="Click Import">
    You'll see "CSV import started. Posts will appear once processing finishes." You can keep working in the meantime.
  </Step>

  <Step title="Open the notification">
    When it's done, the bell at the top of the app shows "Your CSV posts are ready to review". Click it. The composer opens with one card per row.
  </Step>

  <Step title="Pick your accounts">
    Choose the social accounts at the top of the composer. Every post from the file goes to every account you pick.
  </Step>

  <Step title="Schedule or queue them">
    PublishBuddy hasn't saved anything yet. Pick how the whole batch goes out:

    * To keep the dates from your file, click the arrow next to **Add to Queue** and choose **Schedule**. Every post then needs a date.
    * To put every post in the queue, click **Add to Queue**. This ignores the dates in your file. See [Set up your posting queue](/help/set-up-your-queue).
    * Not ready to post? **Save as Draft** keeps them for later.

    You'll see "Post(s) created successfully." when they're in.
  </Step>
</Steps>

<Warning>
  Your choice in the last step applies to every post in the batch, whatever each card says. Want some posts on fixed dates and the rest in the queue? Import them as two files.
</Warning>

## If something goes wrong

<AccordionGroup>
  <Accordion title="Some rows are missing">
    The notification tells you how many rows PublishBuddy skipped, but not which ones. It skips a row when:

    * the date isn't in a format it can read
    * a field is too long, or the link isn't valid
    * the row has more than 8 media links
    * the row has no message, link or media at all

    Fix those rows and import them again.
  </Accordion>

  <Accordion title="An image or video didn't come through">
    PublishBuddy downloads each media link during the import. If a link fails, it drops that file without a warning. Check every card for its media before you save. Links must open the file itself to anyone, without a login.
  </Accordion>

  <Accordion title="The CSV must include a Date column">
    The full message is `The CSV must include a "Date" column in the first row.` (or "Message"). Check the spelling in your first row. Spaces around a name are fine.
  </Accordion>

  <Accordion title="The CSV file must be UTF-8 encoded">
    Save the file again and choose UTF-8 as the encoding. Most spreadsheet apps offer "CSV UTF-8" as a format.
  </Accordion>

  <Accordion title="More than 500 rows">
    The preview shows "exceeds 500 row limit". If you import anyway, it stops with "The CSV must not contain more than 500 data rows." Split the file in two.
  </Accordion>

  <Accordion title="Please add a schedule date to all posts first">
    You chose **Schedule** but at least one post has no date. Add the missing dates on the cards, or click **Add to Queue** instead.
  </Accordion>
</AccordionGroup>

## No spreadsheet? Upload media instead

Got a folder of images or videos and want one post per file? Open the same bulk menu and choose **Upload Media**. Each file you upload becomes its own post card. Write the text on each card, then schedule or queue them like above.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.