How to Move Grav Blog to Substack

Short answer: get Grav blog sitemap.xml and add it to https://apisubstack.com. After that your blog will automatically migrate step-by-step to substack.

For example, ahrefs.com, yep.com

Step-by-step guide to move your Grav blog to Substack. Export your archive, create a publication, connect it to API Substack, and republish as a Substack newsletter.

Moving from Grav to Substack means turning a blog archive into an owned email newsletter - with a public Substack home page and posts that arrive in readers’ inboxes.

Why sync your Grav blog to Substack?

When you sync your Grav blog from your website to Substack, the same posts reach Substack readers and email subscribers. That extra channel brings additional traffic and leads without replacing your original site.

Keep publishing on your site and let API Substack mirror articles to Substack automatically. You grow an owned newsletter audience while your site keeps ranking and converting visitors into leads.

How API Substack helps the move

API Substack is the unofficial posting API for Substack authors. After you create a Substack publication, you connect it to API Substack and republish your archive as drafts/posts - then keep shipping new issues without living in the browser editor.

  • Register on API Substack and generate an API key
  • Connect your Substack publication (publication URL + `substack.sid` session cookie)
  • Create drafts, publish now, or schedule posts from API, CLI, or MCP
  • Turn the migration queue into a repeatable newsletter workflow

In practice: export from Grav → create Substack → connect the publication to API Substack → republish cleaned posts → keep writing as a Substack newsletter.

Step 1 - Export from Grav

  1. Copy `user/pages` Markdown folders.
  2. Copy page media beside Markdown files.
  3. Export ESP subscribers.
  4. Clean Grav shortcodes.

Step 2 - Create your Substack publication

  1. Create a publication at Substack and choose your name/URL
  2. Write About / Welcome posts so new subscribers understand the move
  3. Import your subscriber CSV in Substack (where you legally have consent)
  4. Optionally connect a custom domain in Substack settings

Step 3 - Connect the publication to API Substack

  1. Register on API Substack and start your key
  2. Set your publication URL (example: `https://yourname.substack.com`)
  3. Copy the browser cookie `substack.sid` while signed into Substack (DevTools → Application → Cookies)
  4. Store the API key + cookie in your CLI, HTTP client, or Substack API MCP

Step 4 - Republish Grav posts to Substack

  1. Clean each post (title, subtitle, body, images, tags)
  2. Create a draft on Substack via API Substack (`create_post` / draft flows)
  3. Review the draft in Substack if the piece is sensitive or heavily formatted
  4. Publish or schedule - work oldest→newest or ship a “best of” first
  5. Announce the move to remaining Grav readers with the Substack URL

For non-technical authors, install the MCP into Claude, Cursor, or Codex and ask the agent to draft/publish. For developers, use the Python client / CLI or raw HTTP. See How to post to Substack via API.

Corner cases

  • Modular pages should be merged into single posts.
  • Themes/plugins stay behind.
  • Markdown → API Substack drafts is a natural path.
  • `substack.sid` expires - refresh it when you get 401/403
  • API Substack does not replace Substack’s own subscriber CSV import - connect the publication, then republish content
  • Image upload and Notes are not the focus of the posting API - optimize for newsletter posts
  • This is unofficial and not affiliated with Substack - keep browser login as backup

After the move

Once the Grav archive is on Substack, keep using API Substack as your publish rail: draft tomorrow’s issue, schedule the week, or let an AI agent post through MCP. Your blog becomes a Substack newsletter you actually control.

Related

How to Move Hashnode Blog to Substack

Short answer: get Hashnode blog sitemap.xml and add it to https://apisubstack.com. After that your blog will automatically migrate step-by-step to substack.

How to Move Hexo Blog to Substack

Short answer: get Hexo blog sitemap.xml and add it to https://apisubstack.com. After that your blog will automatically migrate step-by-step to substack.

How to Move HubSpot Blog to Substack

Short answer: get HubSpot blog sitemap.xml and add it to https://apisubstack.com. After that your blog will automatically migrate step-by-step to substack.

How to Move Hugo Blog to Substack

Short answer: get Hugo blog sitemap.xml and add it to https://apisubstack.com. After that your blog will automatically migrate step-by-step to substack.

How to Move Jekyll Blog to Substack

Short answer: get Jekyll blog sitemap.xml and add it to https://apisubstack.com. After that your blog will automatically migrate step-by-step to substack.

How to Move Joomla Blog to Substack

Short answer: get Joomla blog sitemap.xml and add it to https://apisubstack.com. After that your blog will automatically migrate step-by-step to substack.

How to Move Kirby Blog to Substack

Short answer: get Kirby blog sitemap.xml and add it to https://apisubstack.com. After that your blog will automatically migrate step-by-step to substack.

How to Move Laravel Blog to Substack

Short answer: get Laravel blog sitemap.xml and add it to https://apisubstack.com. After that your blog will automatically migrate step-by-step to substack.

How to Move LinkedIn Articles Blog to Substack

Short answer: get LinkedIn Articles blog sitemap.xml and add it to https://apisubstack.com. After that your blog will automatically migrate step-by-step to substack.

How to Move LiveJournal Blog to Substack

Short answer: get LiveJournal blog sitemap.xml and add it to https://apisubstack.com. After that your blog will automatically migrate step-by-step to substack.

Partners

API Substack

The posting API for Substack authors — draft, publish, and schedule posts from code.

© 2026

API Substack