Guide

Import and export content as CSV or JSON

Bring a spreadsheet of posts, testimonials or FAQs into a collection as drafts, check every row first, undo an import, and download a collection.

Last updated Open in ClaudeOpen in ChatGPT
On this page

Move a collection in and out of Willo as a file. Import a spreadsheet of posts, testimonials or FAQs, or download a collection to edit, archive or use elsewhere.

Import a file

  1. Open your business and go to Content, then pick the collection.
  2. Select Import / Export in the toolbar, then Import a CSV or JSON file.
  3. Drop the file in, or click to choose it. Willo checks every row and changes nothing yet.
  4. Read the check: each row shows its title, its slug and OK, Skipped or the fields to fix.
  5. Select Create N drafts.

Every imported item is a draft. Nothing goes live until you publish it. From the result, Publish all opens the usual publish step for the new drafts (up to 100 at a time), or you can review them in the list first.

A file holds up to 2,000 rows and 10 MB. Editors, admins and owners can import.

How columns are matched

The first row names the columns. Each name is matched to a field of the collection, ignoring case: Description, description and fields.description all fill the description field, and title always fills the collection's title. To find a collection's names, export it and look at the header row.

ValueWrite it as
Text and MarkdownAs is. Quoted cells can hold line breaks.
Date2024-03-01, 2024-03-01T09:30:00Z or March 1, 2024
Yes/notrue/false, yes/no or 1/0
Number12 or 12.5
ChoiceOne of the field's options
List (tags, categories)Items joined with |: news|tips
Search settingsOne column per setting: seo.title, seo.description, seo.noindex
ImageA full https:// address, or a path on your site
Anything elsefields.<name> keeps it as an extra value
  • Slug is optional. Without one, Willo makes it from the title. If an item with that slug already exists, the row is skipped. To update those items instead, tick Update items whose slug is already in use before you choose the file. Updates to a published item wait as unpublished edits. A scheduled item is skipped; cancel its schedule to update it from a file.
  • With updates turned on, an empty cell clears that field on the existing item. Leave a column out of the file to keep its values.
  • Status is ignored. Items always import as drafts, and the check says so.
  • id, created_at and the other dates Willo sets are ignored.
  • A row with a field that doesn't fit, such as a word in a number field or a missing title, shows the field and the problem, and isn't imported. Fix the file and import it again.

Files saved as CSV UTF-8 work best. Separators can be commas, semicolons or tabs. A CSV cell holds up to 131,072 characters; import a longer post as JSON.

Images

Image addresses in image fields are copied into your own storage during the import, and the item points at the copy. The copies appear in Assets. An image that can't be copied, for example over 8 MB or not an image, keeps its original address and is listed in the result. One import copies up to 200 images.

Undo an import

The result has Undo import. It deletes the drafts that import created. Items you published, scheduled or edited since are kept and named. Items an import updated keep their changes; open an item's History to go back to an earlier version.

Export a collection

Select Import / Export, then Export as CSV or Export as JSON. The file includes drafts.

  • CSV has one row per item: id, slug, status, every field by name, body, then published_at, created_at and updated_at. Lists are joined with |. A cell that a spreadsheet would run as a formula starts with ', and the import removes it again.
  • JSON is a list of items in the same shape the content API and agents use.

An exported CSV imports straight back, so you can export, edit in a spreadsheet and import with updates turned on.

You can also ask Willo in chat: "Export my blog as a CSV." Willo replies with a link that downloads the file when you open it, signed in to Willo. Connected AI agents read a collection with the willo_content_export tool, which returns files up to 2 MB.

From Google Sheets

In Google Sheets, choose File → Download → Comma-separated values, then import that file. With Google Workspace connected, you can also ask Willo in chat to read the sheet and draft items from it.

Related: Drafts and publishing, Collections and items, Edit CMS content and publish.

Questions

Can an import publish items?

No. Every imported item is a draft. Publish them from the result with Publish all, or from the Content tab like any other draft.

What happens if I import the same file twice?

Willo tells you in the check. Rows whose slug already exists are skipped; rows without a slug would be added again.