Bulk import
A file uploaded, read back, shown line by line, and only then written. Nothing is created before you have seen the preview.
The file
- CSV, in UTF-8. A file saved in any other encoding is refused, not converted: guessing an encoding means being right four times out of five and publishing broken characters the fifth.
- The separator is detected: comma, semicolon or tab. If two tie, the file is refused rather than arbitrated.
- At most 200 posts, and at most 512 KB. Past that, split the file: nobody reviews a thousand-line preview.
- A regular spreadsheet works. A native spreadsheet workbook is not read: it has to be saved as CSV.
The “Download an example” link hands you a sample file already filled with your accounts: it imports as is, which a generic template never does.
The columns
| Column | Required | What it holds |
|---|---|---|
| text | yes | The post text. A line break inside it is fine, between quotes. |
| accounts | yes | The targeted accounts, separated by a vertical bar. By display name, or by id. |
| date | yes | The day, as year-month-day. |
| time | no | The time, if it is not already in the date column: 09:00, or 9:00 AM. |
| first_comment | no | The comment to post under the post. |
| variant_<network> | no | The adapted text for one network. One column per network. |
Column names are accepted in French as well (texte, comptes, heure…), with or without accents or capitals. An unknown column is ignored: a competitor’s export always carries three we have no use for. A variant column naming a network that does not exist, on the other hand, stops everything: that is a typo, and ignoring it would send the common text everywhere.
Dates
Three ways to write one, and no other:
2026-10-01 , 09:00 two columns, team local time
2026-10-01T09:00 one column, team local time
2026-10-01T09:00:00Z one column, absolute instantA date written as day/month/year is refused, and that is not pedantry. The first of April and the fourth of March are written the same way depending on the country: guessing means publishing a post six months early, and nobody re-reads a date a tool has “understood”.
A row with no date is not an error: it becomes a draft with no time. A time that does not exist (the night the clocks go forward) is reported rather than silently shifted.
The two steps
The preview writes nothing. It replays on every row exactly the checks of a post written by hand: each network’s limits, accounts that belong to you, your role, the approval loop. Refused rows carry their reason; the others, their warnings.
Confirming writes, all or nothing: one refused row and nothing is created. You then choose what the posts become: drafts, submitted for approval, or scheduled directly if your role allows it.
Import is not a back door: an editor asking for “schedule directly” in an organization with approvals gets the whole file refused, with the reason.
See also
A question this page doesn’t answer? contact@timalio.com