Import existing posts

On this page

Import the posts you already have into your Quillly Blog, from a WordPress, Ghost, Blogger or Medium export or from a CSV file. Every imported post arrives as a draft, so you can check it before it goes live.

Before you start, you need:

  • A website in Quillly. Import fills its Blog section. See Content types and URLs.

  • An export file from the platform you're leaving. The next section says how to get one.

Export from your old platform#

The import dialog shows these steps too, under How to export from your platform.

Table

Platform

How to export

File

WordPress

In your WordPress dashboard, go to Tools → Export, choose Posts (or All content), and click Download Export File.

One .xml file, up to 50 MB

Ghost

In Ghost Admin, go to Settings → Labs and click Export under Export your content.

One .json file, up to 50 MB

Blogger

In Blogger, go to Settings, then Back up content under Manage blog, and click Download.

One .xml file, up to 50 MB

Medium

Go to Settings → Security and apps → Download your information. Medium emails you a .zip file. Unzip it and open the posts folder.

Several .html files, up to 10 MB each

CSV

Make a spreadsheet with one row per post, as the CSV section below describes.

One .csv file, up to 10 MB

For more detail, see WordPress's Export screen, Ghost's guide to exporting content and Blogger's backup help.

The Import Blogs dialog in Quillly, listing the five sources you can import from: WordPress, Ghost, Blogger, Medium and CSV

Import your posts#

  1. Open Import in your blog#

    Under Content, open Blog. Click Import in the toolbar, next to the button for a new post.

    Open your blog

  2. Pick your platform#

    In Import Blogs, click WordPress, Ghost, Blogger, Medium or CSV.

  3. Upload the export file#

    Click the upload area and choose the file. For Medium, select every .html file you want at once. Your browser reads the file, and nothing is saved yet.

  4. Choose the posts and import them#

    The list shows each post Quillly found, with its status on the old platform, its tags and its length. Clear the box next to any post you don't want, then click Import, which shows how many posts you picked, such as Import 2 Blogs. When it's done, the dialog reads 2 blogs imported successfully and lists any post that failed.

    The review step of Import Blogs, with two of three posts ticked, the note that every post is saved as a draft, and the Import 2 Blogs button

    Warning

    One import takes at most 200 posts. If you tick more, the whole import fails with Invalid import data. For a bigger blog, clear all but 200 and import them, then open Import again with the same file and tick the next batch.

What carries over#

Every source brings the title and the body. Bodies in HTML are converted to Markdown, and headings, lists, links, images, quotes, tables and code blocks survive the conversion. The rest depends on the source:

Table 2

Source

Slug

Excerpt

Featured image

Tags

SEO title and meta description

WordPress

Yes

Yes

No

Tags and categories

No

Ghost

Yes

Custom excerpt

Yes

Tags

Yes

Blogger

From the post's URL

No

No

Labels

No

Medium

From the file name

Subtitle

No

No

No

CSV

Yes

Yes

Yes

Yes

Yes

A few things change on the way in:

  • Every post is a draft. The status from your old platform shows in the list, but Quillly doesn't apply it.

  • Publish dates aren't kept. A post gets its date when you publish it in Quillly.

  • Tags become target keywords, the keywords Quillly scores the post against. From WordPress, categories count as tags too.

  • Images stay where they were. The post links to each image at its old address, so keep those images online, or replace them before you shut the old site down.

  • Embeds become links. A YouTube video or other embedded frame becomes a link named Embedded content.

  • Only posts come across. WordPress pages and attachments, Ghost pages, and Blogger comments are skipped, and the list says how many.

  • Without its own SEO title, a post uses its title, and without a meta description, it uses the excerpt.

Ghost posts that have no HTML or plain text in the export, only Ghost's editor format, are skipped with a warning.

CSV columns#

A CSV file needs a header row with at least a title and a content column. Content can be Markdown or plain text. Quillly matches columns by name, and each column accepts a few names:

Table 3

Column

Also accepted as

title

post_title, name, heading, blog_title

content

body, post_content, text, html, markdown, blog_content

slug

url_slug, post_name, permalink, url

excerpt

summary, description, post_excerpt, short_description

tags

categories, labels, keywords, topics. Separate tags with commas or semicolons.

featured_image

image, thumbnail, cover_image, featured_image_url. It must be a full URL.

meta_title

seo_title, og_title

meta_description

seo_description, og_description

status

post_status, state. It shows in the list only.

text
title,slug,content,tags,meta_description
"Choosing trail running shoes",choosing-trail-shoes,"## Fit comes first

Try shoes on in the afternoon.","Gear, Trail running","How to pick trail shoes that fit."

Quote any cell that holds a comma or a line break, as above.

After the import#

The posts wait in Blog as drafts. Open each one, check the SEO score and fix what it flags, then publish. If the old posts lived on another domain or path, set up redirects from the old URLs on the old host, so links and search rankings follow the posts. Redirects and moving to a new domain explains how.

Common questions#

Can I import docs or changelog entries?#

No. Import fills the Blog section only. To bring docs in, ask your AI assistant to create them with bulk_create_content and content_type set to docs, up to 10 pages per call. The MCP tool reference lists the tool.

What happens if I import the same file twice?#

Nothing is overwritten. A post whose slug already exists on the website fails to import and is listed as an error. A post with no slug in the file gets a new one, so it can come in twice.

Why did my import fail with Invalid import data?#

Either more than 200 posts were ticked, or one post broke a limit, such as a title over 500 characters, an excerpt over 1,000 or a featured image that isn't a full URL. Clear that post, or fix it in the file, and import again.