How to Export Blog Posts from Shopify

Shopify's admin exports products, customers and orders to CSV — but not blog posts. To get articles out as structured data you need one of three routes: a bulk import/export app, the GraphQL Admin API, or the blog's Atom feed. Which one depends on how many posts you have and where they're going.

This is about data export for migration or backup. If you want a formatted, readable copy to send to subscribers, see How to Download or Print Shopify Blog Posts instead.

Option 1: A bulk export app (easiest, handles everything)

Apps built for bulk data — Matrixify is the one most merchants land on — treat blogs and articles as first-class objects.

  1. Install the app from the Shopify App Store and open it from Apps in your admin.
  2. Choose Export.
  3. Tick Blogs and Blog Posts (articles) as the export types.
  4. Select the format: Excel or CSV.
  5. Choose All columns so you keep handles, metafields and SEO fields.
  6. Run the export and download the file when it finishes.

You get one row per post with body HTML intact, which is what a WordPress or Ghost importer expects. Free tiers usually cap the row count, so a large blog may need a paid month.

Option 2: The GraphQL Admin API (free, needs a little setup)

If you're comfortable with an API client, Shopify's GraphQL Admin API exposes blogs and articles directly.

  1. Go to Settings → Apps and sales channels → Develop apps → Create an app.
  2. Under Configuration → Admin API integration, grant read_content.
  3. Install the app and copy the Admin API access token.
  4. Query the articles connection, requesting id, title, handle, body, summary, publishedAt, author, tags, image and seo.
  5. For blogs with hundreds of posts, run it as a bulk operation and download the resulting JSONL file rather than paginating by hand.

No app cost, no row limits, and you control exactly which fields come out.

Option 3: The Atom feed (fast, partial)

Every Shopify blog publishes a feed at https://yourstore.com/blogs/<blog-handle>/atom — for the default blog that's usually /blogs/news/atom. Open it in a browser and save the XML.

The feed carries title, link, publish date, author and full body HTML for the most recent posts only, typically around 20. It's a decent emergency backup or a way to seed an importer for a small blog. It won't give you tags, SEO fields or older archives.

Keep these fields, whatever route you take

Migrations go wrong on the metadata, not the body copy.

  • Handle — the URL slug. Without it you can't build redirects and you lose every ranking.
  • Published date and author — importers often default to today and to the admin user.
  • Tags — needed if your tag pages have inbound links.
  • SEO title and description — not the same as the post title; they're stored separately.
  • Featured image URL — Shopify CDN URLs stay live after export, but download the files if you're leaving the platform.

Before you delete anything on the Shopify side, map old URLs to new ones and set redirects. Losing /blogs/news/<handle> is the most common reason traffic disappears after a blog migration — related reading in Why Google Is Not Indexing Your Shopify Blog Posts.

Going the other direction, into Shopify? See How Can I Import Blog Posts into Shopify.

FAQ

Can I export Shopify blog posts to CSV from the admin?

No. The Content → Blog posts screen has no export button, and the bulk CSV exports under Products, Customers and Orders don't include articles. You need a bulk data app, the Admin API, or the Atom feed. This catches out most merchants planning a migration, so budget time for it.

Does exporting blog posts include the images?

The export contains image URLs pointing at Shopify's CDN, not the image files themselves. Those URLs keep working after you export, but they'll break if the store is closed. If you're leaving Shopify, download the images separately and rewrite the URLs before importing elsewhere.

How do I export blog posts from Shopify to WordPress?

Export to CSV with a bulk app, keeping handle, date, author, tags and body HTML. Then use a WordPress CSV importer plugin, mapping handle to post slug. Finish by adding redirects on the Shopify side (or at the DNS level) from /blogs/news/<handle> to the new URLs so search rankings carry over.

Is there a limit on how many posts I can export?

The Atom feed is capped at roughly the 20 most recent posts. The Admin API has no practical limit if you use a bulk operation. Apps limit by their pricing tier, commonly a few hundred rows on free plans. For a blog of any size, the API or a paid app month is the reliable path.