Docs

Importing from a CSV

One row, one post. Up to 50 rows per request, and each row is checked on its own.

The file

The first row holds the column names. Separate with commas and quote texts that contain commas or line breaks. The dashboard can download a template with your profile’s accounts.

posts.csv
content,accounts,schedule_time,timezone,media_urls,first_comment
"We open Monday, see you there!",acc_ig|acc_li,2026-11-02 09:00,Europe/Madrid,https://cdn.acme.com/store.jpg,#valencia
Idea for next week,acc_li,,,,

Columns

ColumnWhat it holds
contentThe text. Required unless there are media_urls.
accountsAccount ids separated by |.
groupOr the name of an account group (added to accounts).
schedule_time2026-11-02 09:00 with timezone, or an ISO date with offset. Empty: posts now.
timezoneIANA timezone, for example Europe/Madrid.
queuetrue for the next queue slot.
drafttrue to save it as a draft.
media_urlshttps URLs separated by |. The type comes from the extension.
first_commentFirst comment on Instagram, Facebook, LinkedIn, Threads and YouTube.
instagram_format, facebook_formatfeed, reel or story.
youtube_title, youtube_visibility, youtube_playlistTitle, public/unlisted/private and playlist id.
tiktok_privacyRequired with TikTok accounts: public, friends, followers or private.
pinterest_title, pinterest_link, pinterest_boardThe Pin’s title, link and board.
reddit_subreddit, reddit_titleSubreddit (without r/) and title.
google_cta_type, google_cta_urlGoogle Business button and its link.

Check, then import

With dryRun: true every row is checked and nothing is posted. Then send the same CSV without dryRun: valid rows are created and the rest come back with their error.

POST /v1/posts/import
curl -X POST "https://api.usecrier.com/v1/posts/import" \
  -H "Authorization: Bearer $CRIER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "csv": "content,accounts\nHello,acc_ig",
    "dryRun": true
  }'
200 OK
{
  "data": {
    "total": 2,
    "valid": 1,
    "invalid": 1,
    "dryRun": true,
    "unknownColumns": [],
    "rows": [
      { "row": 1, "ok": true },
      { "row": 2, "ok": false, "error": "accounts: acc_old is not a connected account" }
    ]
  }
}
🚧 Not ready yet

We're finishing building it

Crier is in early access. Leave your email and you'll be among the first in, with launch terms.

or with your email

No spam. We'll only write to give you access.

You're on the list!

We'll write to you as soon as your access is ready.