Content: your content items, templates, CSV import and bulk scheduling
The Content list: what a content item is, its six statuses, New content item, + Add version, templates, Create drafts from ideas and Schedule posts from a spreadsheet.
More videos on this topic
Content (/app/content) lists every content item in the workspace, newest first. A content item is one post idea with one version per platform, each with its own text, hashtags and media. Everything you send from Create, AI Studio, Campaigns or the Library's RSS feeds becomes a content item here. Every member with the View content task sees this page; changing things needs the Create task. A member without it sees the list with "You can view content here. Creating and changing posts needs the Create task - ask a workspace admin." and no New content item, Import from a file, + Add version or templates. Archived items are left out of the list; tick Show archived above the list to see them again.
Step by step: start an item by hand
- Press New content item, type a Content title and press Create. Create stays grey until the title has more than spaces; a title of spaces only shows "Type a title - spaces alone are not a title." (at most 200 characters). An older item saved without a title shows as (untitled) in the list, so it can still be opened.
- On the new card, press + Add version.
- Choose the platform in the Platform… list, fill Hashtags (comma separated) and Caption (required), then Save. Cancel closes the form and clears it, so the next + Add version starts empty (opening the form on another item starts it empty too). If the version cannot be saved, the reason appears in red inside the form, above Save.
- Press Open editor → (or the title) to generate more versions with AI, attach media and publish. See Editing a content item. Members who cannot change posts, and archived items, show Open instead, which opens the item to read.
Fields and options
- Card — title, creation date, where it came from (From Create, Added by hand, Imported, From a template, From a campaign, From an RSS feed, From AI Studio, From an AI suggestion, From Monitor, From the setup wizard or Other), a one-line hint about the next step (it follows what you may do: on an item in review, a member who cannot approve sees "Awaiting approval by a reviewer.", and a member who can only look sees "Open it to see its versions and where it goes out."), the status badge (an item with a post that failed shows Failed - needs a fix instead, with the hint "A post did not go out. Open it, read why, then press Retry or fix it."; one a reviewer sent back with Request changes shows Changes requested, with "A reviewer asked for changes. Open it to read the note, edit, then send it for approval again.") and every version with its platform, text and hashtags (each with one #). A draft saved in the setup wizard before any account was connected shows No account yet in place of the platform until you connect an account on that platform.
- Platform (in + Add version) — required; a list of the platforms OmniBrand can publish to, for example Instagram, LinkedIn, Facebook or X. Messaging-only accounts (such as WhatsApp) are not in it.
- Load more — shows older items.
- Templates: row (only when you have templates) — click a template name to create a new draft item from it and open it (while it is being made the name reads "Creating from (name)…" and no template can be pressed, so one click makes one item); ✕ deletes the template after you confirm "Delete the template "(name)"? This cannot be undone." (press Cancel to keep it). Templates are made with Save as template on an item's page.
- Import from a file — a menu with two choices: Create drafts from ideas and Schedule posts from a spreadsheet (both below). On a phone, New content item takes the full width and Import from a file sits under it. If the list cannot be loaded, the page says "Couldn't load your content" with Retry instead of an empty list.
Content item statuses
- Draft — being prepared.
- In review — waiting for approval (set by Create when your workspace has an approval chain, by a client review link, or with → In review on the item's page).
- Approved — its posts were approved (on Approvals or the item's page, or by the client's review link).
- Scheduled — a post of it has a time.
- Published — a post of it is live. When its last live post is retracted, the item goes back to Scheduled (another account is still on its way), Approved (another account is approved or failed) or Draft.
- Archived — put away with Archive on the item's page; final. Archiving cancels its scheduled posts (see Editing a content item). An archived item is read-only: its card has no + Add version and its versions cannot be changed; use Save as template on its page to reuse the text. On its page and in Records, every account of it that had not gone out shows Archived.
The item status is a label for the whole idea; Approved, Scheduled and Published follow its accounts and are not set by hand. Each account has its own post status, which is what actually controls publishing. See Post statuses.
Create drafts from ideas
- Press Import from a file, then Create drafts from ideas.
- Paste one idea per line in the order
title,brief,platform: the title, what the post is about, and where it goes. The first line may hold these column names. Do not put a comma inside a title or a brief. At most 100 lines per import; the counter says "N rows ready (max 100 per import)." Download a template saves a starter file with these columns and two example lines. The platform is required: the network's name in small letters, for exampleinstagram,facebook,linkedin,x,tiktok,youtube. The box also says "Times are not read here: every row becomes a draft. To schedule posts from a file, use Schedule posts from a spreadsheet" - press Schedule posts from a spreadsheet there to switch to the bulk scheduling box. - Optional: switch on AI-enrich captions & hashtags per row (uses AI credits) to have the AI write a caption and hashtags for each row from its title and brief.
- Press Import. The result says "Created N, failed M." and lists every row with a problem, as "Row N: message" (the list scrolls when it is long).
Each row becomes a Draft item with one version: the title is the item's title; the caption is the AI caption, or the brief if AI enrichment is off or fails; the platform is the version's platform. A fourth column (a time) is accepted but not used: those rows say "Row 2: Its time was not used: Create drafts from ideas makes drafts. To schedule posts from a file, use Schedule posts from a spreadsheet." A row the AI wrote says "Row 2: AI wrote the caption and hashtags."
Schedule posts from a spreadsheet
- Press Import from a file, then Schedule posts from a spreadsheet.
- Press Download CSV template for a starter file with the header
account,caption,media,scheduledAt,platformOptions,firstComment,youtubeTitle,youtubeDescriptionand one example row: the name of your first connected account that can post and whose name no other account shares - when every such name is shared (your Instagram and your Website chat both carry the brand name, say) it is writtenplatform:name, for exampleinstagram:Najd Coffee(or "Your account name" when there is no account that can post yet), the caption "EXAMPLE - replace this row with your own post", and tomorrow at 10:00 with your computer's offset, for example2026-10-05T10:00+03:00. Replace that row with your own posts. The file opens in Excel with Arabic and other non-Latin text intact. - Fill one row per post. account is the connected account's name exactly as shown on the Accounts page, or, when two accounts share a name, the platform's key, a colon and the name, for example
instagram:Najd Coffee(the key in lowercase:instagram,facebook,linkedin,x,tiktok,youtube…). An account id works too. caption is the post text, up to 10,000 characters; it may run over several lines if the field is in double quotes (spreadsheet programs save it that way). media is optional: a media asset id already in this workspace, or anhttps://image URL to import. scheduledAt is optional:2026-10-01 14:00(year-month-day and a 24-hour time, as spreadsheets write it),2026-10-01T14:00(ISO-8601), or day first01/10/2026 14:00(day/month/year: always day first, so10/12/2026is 10 December, never 12 October). A date alone, such as2026-10-01, is read as midnight (00:00). A 12-hour time with AM or PM is not read. A time without an offset is read in the workspace time zone (Settings, Workspace, Timezone) - not your browser's zone as on Create; add an offset such as+03:00to be exact. It must be in the future and within one year. Leave it blank to save a Draft instead of scheduling. platformOptions is optional JSON for that account, for example{"youtube":{"visibility":"unlisted"}}- quote fields that contain a comma. Atiktokentry is ignored: TikTok choices (who can view it, comments, disclosure) can only be made in the TikTok settings panel on Create, so an imported TikTok post goes to the account's TikTok inbox as a draft (see TikTok). firstComment is optional: the post's first comment, posted as a comment right after the post goes live and checked against the platform's limit like a comment typed on Create; it wins over a firstComment written inside platformOptions. youtubeTitle and youtubeDescription are optional, for a YouTube row: the video's Title (up to 100 characters) and Description (up to 5,000). Left empty, the title is the caption's first line and the description is the caption with its hashtags; a title over 100 characters stops that row. - Press Choose file and pick the
.csvfile, then press Upload and schedule. The first line may be a header: its column names can come in any order and in any case. A column not named account, caption, media, scheduledAt, platformOptions, firstComment, youtubeTitle or youtubeDescription stops the file before anything is imported, with "This file has columns the import does not know: (names). Use only account, caption, media, scheduledAt, platformOptions, firstComment, youtubeTitle and youtubeDescription (in any order), or start from Download CSV template."; a header with no account column says "This file's first row has no account column. Name one column account, or start from Download CSV template." A file without a header line is read in the template's column order. Under the button the page says how many rows it read, for example "1 row ready (max 200 per import)." A file saved with semicolons between the columns (Excel in French, German, Spanish, Turkish, Portuguese or Indonesian saves "CSV" that way) or with tabs works too: the separator is read from the first line. The first five rows are listed as "Row 1: (account) — (caption)", each with the time it will be read as on the workspace clock, for example "Read as Thu, 10 Dec 2026, 10:00 (Europe/London)", or "No scheduledAt: saved as a draft", or in red ""tomorrow" is not a time the import can read. Write it as 2026-10-20 10:00 or 20/10/2026 10:00 (24-hour clock)." When both of the first two numbers of a day-first date could be a month, the row also says in amber, for example, "Read as 10 Dec - day/month order. If you meant 12 Oct, swap the first two numbers." - The rows go up 25 at a time. A bar under the button shows "Imported N of M rows…"; keep the page open until it finishes. If the connection drops, the page tries each group again by itself.
- Each row runs through the exact same checks a single post from Create does: an unknown account, a caption and media both missing, or text a platform rejects fails only that row, and the rest of the batch still runs. The result says "Created N, failed M." and lists every failed row as "Row N: message" (N is the row's place in your file; rows that failed for the same reason share one line, "Rows N, M: message", and the list scrolls when it is long) - fix those rows in the file and upload a file with just them. Above the failed rows, "Scheduled times, as read:" lists each scheduled row with the time the server read it as, for example "Row 3: Thu, 10 Dec 2026, 10:00 (Europe/London)". Posts made by the import show Imported as their source in the list.
If the upload stops part-way (the connection is lost or the page shows an error), the message says how many rows went through, for example "40 of 120 rows went through. Press Upload and schedule again to finish - rows already created are not created twice." Keep the same file selected and press Upload and schedule again: rows that were already created come back as they were, and the result adds "N row(s) had already been created by an earlier attempt and were not created again." Choosing the file again starts a new import, which would create those rows a second time.
A row with scheduledAt is validated and scheduled like a single post: if a platform rejects it, its row for that account lands in Needs a fix same as Post statuses describes, and if your workspace requires approval it waits in Needs approval instead of scheduling straight away. A row without scheduledAt is saved as a Draft. Successful rows appear in this list and, once scheduled, on the Calendar.
If something goes wrong
- "N rows - one import takes at most 100. Split the file and import it in batches." (Schedule posts from a spreadsheet: 200.)
- "Row N: title is required" — that row has no title.
- "Row N: Pick a platform (one of: …)" — that row's platform column is empty. Fill it and import that row again.
- "Row N: "(value)" is not a platform a post can be published to. Use one of: …" — the platform is misspelled or cannot publish posts. Use one of the keys listed.
- Schedule posts from a spreadsheet "Row N: No connected account named "X" in this workspace. Write the name as it shows on the Accounts page." — check spelling against the Accounts page, or use the account id. "Row N: The account column is empty." — fill it. "Row N: (account) needs reconnecting before posts can be scheduled on it. Reconnect it on the Accounts page, then import this row again." — that account's access was revoked or expired; reconnect it on the Accounts page first. Nothing was created for the row.
- Schedule posts from a spreadsheet "Row N: 2 connected accounts are named "X" (instagram, webchat). Write the platform before the name, for example instagram:X." — accounts on different platforms share that name. Write the account column as the message shows, with the platform of the account you want (the message lists them), for example
instagram:X. "Row N: 2 connected accounts match "X", so the name cannot pick one. Put one of these account ids in the account column instead: instagram 1a2b…, instagram 3c4d…" — two accounts on the same platform share the name, so writing the platform first cannot tell them apart (this message also shows forinstagram:X). Copy the id after the platform of the one you want from the message into the account column. - Schedule posts from a spreadsheet "Row N: "(value)" in the media column is not a media file id or an https link. Use the id of a file on the Media page, or a link that starts with https://." — the media column has neither.
- Schedule posts from a spreadsheet "Row N: platformOptions must be a JSON object" — that column is not valid JSON, or the comma inside it was not quoted.
- Schedule posts from a spreadsheet "Row N: "(value)" is not a date and time we can read. Write it as 2026-10-20 10:00 (year-month-day, 24-hour clock) or 20/10/2026 10:00 (day/month/year), in the workspace time zone.", "Row N: (value) has already passed. Pick a time in the future." or "Row N: (value) is more than a year away. Pick a time within the next 12 months." — fix the time in that row. Nothing was created for the row, so re-upload it once fixed.
- Schedule posts from a spreadsheet "Row N: The caption is N characters; the most is 10000." — shorten that caption.
- Schedule posts from a spreadsheet "Row N: An earlier attempt at this row is still running or did not finish - check the Content list before importing this row again" — an earlier try of the same upload was still working on that row, or stopped in the middle of it. Look for the post in the Content list; import the row again only if it is not there.