Migration·7 min read·

Medium export ZIP to VeloCMS — full walkthrough

Medium's export gives you HTML files for every story you've written. VeloCMS's web-based import wizard reads them directly and creates draft posts — no CLI or separate conversion step.

Medium's export is a ZIP file containing one HTML file per story you've published. Unlike Substack (which gives you a structured CSV for subscribers), Medium has no subscriber export — you're migrating content only. The HTML files include your stories and drafts, with embedded images pointing to Medium's CDN.

Step 1 — Download your Medium export

Go to medium.com, click your avatar, Settings, Security and apps, Download your information. Medium emails you a download link within 24 hours (usually much faster). The ZIP contains a posts/ directory with one HTML file per story, an export_info.json, and a few other files you won't need for this migration.

Step 2 — Import into VeloCMS

Go to Admin → Tools → Import → Medium and upload your ZIP directly. VeloCMS reads each HTML file in the posts/ directory, extracts the title, body, and publication date from Medium's HTML structure, and creates draft posts. You'll get a summary table showing which posts imported cleanly and which had parsing warnings.

Medium's HTML export uses Medium-specific markup, not clean markdown. VeloCMS's importer handles the conversion, but some formatting — Medium's drop-cap feature, partner-program paywall notices, embedded gists — won't carry through cleanly and needs manual review after import. Embedded images still reference Medium's CDN URLs; they'll keep loading until you re-upload them to R2 (or Medium takes them down).

What carries over automatically

  • Story title, subtitle, and body text carry over.
  • Tags carry over as VeloCMS post tags.
  • Medium 'responses' (comments on other people's posts) are not included in the export, so there's nothing to import for those.
  • Locked/paywalled Medium stories import as regular published posts — Medium's paywall logic doesn't carry over.

Step 3 — Set up canonical URLs

After import, consider setting canonical URLs on your VeloCMS posts pointing back to the original Medium URLs, or updating each Medium story's own canonical URL to point to your new VeloCMS post — either direction tells Google which version is authoritative, which transfers ranking equity to your domain over time. In the VeloCMS post editor, the SEO panel has a Canonical URL field for this.