Skip to content

Import Posts to Substack: WordPress, Medium and Markdown

By the newsletterapi team · Published · Updated · 5 min read

The problem: “Moving my archive or Markdown drafts to Substack means pasting every post by hand and fixing the formatting.”

Cover image: Import Posts to Substack: WordPress, Medium and Markdown

Short answer

Substack's post importer (Settings → Import/Export → Import posts) takes a URL from Medium, Ghost, WordPress, Mailchimp, beehiiv, Seeking Alpha, Tumblr or Blogspot, or any RSS feed. Mailchimp, Webflow and Tumblr need an uploaded export. Markdown and Google Docs have no direct importer, so you either paste each post into the editor or turn them into a feed first.

The problem

"The handoff was the worst part of my week: select all, paste, watch the formatting break, re-upload every image by hand, fix the footnotes." (r/ObsidianMD, August 2026)

"There is still no API for writers. There is still no support for Markdown." (@herbertyang on X, September 2026)

In the 111 public forum, review and GitHub sources we coded, 18 writer sources complained that they can't get posts in from their own tools: Obsidian and Markdown, old TinyLetter or Ghost archives, and AI drafts. Formatting and publishing problems were the largest theme in the GitHub issues of open-source Substack tools, for example python-substack.

Moving an archive to Substack is usually a ten-minute job when your old platform is on Substack's list. When it isn't, it's an afternoon of copy-paste. This guide covers both paths, as of October 2026, using Substack's own help articles plus what writers report once they've done it.

Which platforms can Substack import posts from?

Substack's importer article lists these sources:

Source How the importer reads it Notes
Medium Paste your profile URL, e.g. medium.com/@you —
Ghost Paste your Ghost URL A full guide covers members and Stripe too (Ghost guide)
WordPress Paste your site URL —
Mailchimp Campaign archive URL plus an uploaded campaigns zip Don't unzip the file. The archive may show only up to 20 emails (Mailchimp guide)
beehiiv Paste your URL —
Seeking Alpha seekingalpha.com/author/<name> —
Tumblr, Webflow Upload an export —
Blogspot Paste your URL —
TinyLetter Example URL format given: tinyletter.com/your —
Anything with RSS (Squarespace, ConvertKit…) Paste the feed URL "Some platforms will only include the most recent posts, such as the latest 20 posts, in their RSS."

How do I import posts step by step?

  1. Go to Settings → Import/Export → Import posts.
  2. Paste the URL of your old blog or newsletter, and upload the export file if your platform needs one.
  3. When the importer finds the archive, click Import. If payments are on, you can import the posts as paid, which paywalls them for free subscribers. If you're re-running an import, tick Update existing posts.
  4. Confirm that you own the publication and agree to the terms.
  5. Clean up. Imported posts may carry the old platform's subscribe box or footer. Open each one, delete the leftover text or image, and save.

Imports don't email anyone by default. Substack says imported posts "will appear as a web post on your Posts page". To send one, edit it and tick "Send via email and the Substack app" (help).

Bringing your list too? Subscriber imports are a separate step, and Substack reviews them for consent. See how to add subscribers to Substack.

How do I move a WordPress blog to Substack?

The supported route is the URL import. Paste your public WordPress address into Import posts, and the importer reads your archive. In practice:

  • Make the archive public first. Private, password-protected or maintenance-mode sites can't be read.
  • Check your feed length. If the importer falls back to RSS, WordPress (Settings → Reading) controls how many posts the feed shows. Raise it temporarily before you import, then set it back.
  • Images and embeds. Check a sample of posts with galleries, shortcodes and embedded media after import. Plugin shortcodes don't mean anything in Substack.
  • Self-hosted and offline sites. If the site is down and you only have the WordPress XML (WXR) export, Substack's importer doesn't list WXR as an upload format. You'll need to convert it, or paste the posts by hand.

For a side-by-side of the two platforms before you move, see Substack vs WordPress.

What about Medium, TinyLetter and other sources?

Medium is supported by URL. One caveat on the way in: Substack's embed signup form "work[s] on any platform that supports iFrames… but this excludes Medium" (embed help). If you keep posting on Medium, link to your /subscribe page instead.

Large migrations take care. Christoph Janz moved 12 years of Point Nine's Medium posts with an AI coding agent, and noted: "A Substack post body isn't HTML, it's a ProseMirror document" (LinkedIn). That's why formatting can shift between the source and the imported post.

For TinyLetter, Substack's import article still shows a tinyletter.com/your example. If your old archive is no longer online, use any local copy you have: an exported CSV for the list, and saved emails or files for the posts.

How do I import Markdown or Google Docs into Substack?

As of October 2026 there is no direct Markdown or Docs importer, which is exactly the handoff pain quoted above.

Your options:

Method Good for Watch out for
Paste formatted text into the editor A handful of posts Footnotes, tables and images need fixing by hand. Set the original date in post settings (help)
Render Markdown to HTML in a browser preview, then copy Obsidian or static-site posts Local image paths won't upload. Host the images or re-insert them
Google Docs copy and paste Docs drafts Check headings and links after pasting
Build an RSS feed of your posts and point the importer at it Dozens or hundreds of static-site posts Test with 2–3 posts first; check that images and dates come through

One Hacker News commenter put it plainly: "Substack doesn't have an API for composing a newsletter, but their rich text editor DOES accept copy-pasted data - and copy-paste is the universal API." (HN). For a few posts, that's the right answer.

What are the limits and gotchas?

  • RSS truncation. Feeds often carry only the latest 20 posts. Use full exports where supported.
  • Mailchimp archive cap. The campaign archive may hold only up to 20 emails, which is why Substack also asks for the zip.
  • Leftover branding. Old subscribe forms and footers come along and need deleting.
  • Paid posts. Choosing "import as paid" paywalls every imported post. Decide which ones should be free first.
  • Re-imports. Without "Update existing posts" you may get duplicates.
  • Ownership. You confirm you own what you import. Only import your own work, never someone else's archive.
  • Paid members. Ghost paid members move through Stripe, not the post importer. Substack's Ghost guide says the scan "can take up to 30 minutes".

Once you've moved, set up a backup routine the other way: see how to back up your Substack.

Is there a converter for archives Substack can't read?

The newsletterapi import converter takes Medium, Ghost, WordPress XML, Google Docs, Markdown or TinyLetter files and produces something Substack's importer accepts, with images and dates kept. It works on files you give it and never logs in to Substack as you. If your archive is stuck, get access or email hello@newsletterapi.io, and check Substack integrations for what already connects today.

Questions people ask

Will imported posts be emailed to my subscribers?
No, not automatically. Imported posts appear as web posts. To email one, edit it, click Continue and tick 'Send via email and the Substack app'.
Why did only some of my posts import?
When the importer reads an RSS feed, many platforms include only the most recent posts (often the latest 20). Use the platform's own export where Substack supports an upload, or import the rest by hand.
Can I keep the original publication dates?
Imports keep the archive's posts in your Home and Archive. For posts you copy and paste manually, Substack lets you change each post's publication date in its settings.
Can Substack import Markdown files?
Not directly as of October 2026. Convert Markdown to formatted text (or to an RSS feed the importer can read), then check images, footnotes and tables by hand.

Sources

  1. Substack Help: How do I import my posts from another platform, such as Mailchimp, WordPress, Medium, or Ghost? (accessed 2026-10-21)
  2. Substack Help: If I import a post from elsewhere, will it be emailed out to my list? (accessed 2026-10-21)
  3. Substack Help: How do I move from Mailchimp to Substack? (accessed 2026-10-21)
  4. Substack Help: How do I move from Ghost to Substack? (accessed 2026-10-21)
  5. Substack Help: How do I import my mailing list from another platform? (accessed 2026-10-21)
  6. Substack Help: Can I embed a signup form for my Substack publication? (accessed 2026-10-21)
  7. Christoph Janz (LinkedIn): migrating Point Nine's Medium posts to Substack (accessed 2026-10-21)
  8. r/ObsidianMD: Obsidian to Substack handoff (2026-08-27) (accessed 2026-10-21)
  9. Hacker News comment: copy-paste into Substack's editor (2026-07-28) (accessed 2026-10-21)
  10. Herbert Yang on X: no Markdown support (2026-09-05) (accessed 2026-10-21)
  11. GitHub: python-substack issue #27 (accessed 2026-10-21)