Blog  /  Formats
WordPress → CSV

How to Export a WordPress Site to CSV

By Hossam Hamdy 11 min read Updated July 2026

A spreadsheet is still the fastest way to see your whole site at once (every post, its SEO title, its word count, its last update) in rows you can sort, filter, and hand to anyone. Here’s how to get clean CSV out of WordPress, and what to do with it once you have it.

For all the dashboards WordPress gives you, there’s one view it can’t: your entire site as a table. Every post in one place, sortable by date, filterable by word count, with the SEO title and meta description in columns next to it. That view lives in a spreadsheet, and getting there means exporting to CSV.

CSV is the universal spreadsheet format: Excel, Google Sheets, Airtable, Notion, and every database on earth read it. This guide covers how to get clean CSV out of WordPress (it has no built-in option), what a good export looks like, and the three things people actually use it for, content audits, bulk edits, and moving structured content into other systems.

Why export WordPress to CSV

Markdown and WXR are for migrating. CSV is for seeing and manipulating your content. It’s the format you reach for when the job isn’t “move the site” but “understand it,” “edit it in bulk,” or “hand it to someone who doesn’t use WordPress.” One row per item, columns you choose, opens anywhere.

What a CSV export unlocks

What a good CSV export looks like

The single most important decision is one table per content type. Posts, pages, and each custom post type have different fields, a “services” CPT has a price and duration; a “staff” CPT has a title and photo. Flatten them all into one giant CSV and you get a mess of half-empty columns. Give each type its own file and every column means something.

A clean per-type export carries the fields that make the sheet useful:

id,title,slug,status,date,modified,seo_title,meta_description,word_count
128,"Corneal Cross-Linking",corneal-cross-linking,publish,2024-03-12,2025-01-08,"Corneal Cross-Linking | Cairo Eye","A minimally invasive treatment…",612
131,"LASIK Surgery",lasik-surgery,publish,2024-04-01,2025-02-20,"LASIK Eye Surgery in Cairo","See clearly without glasses…",840

Note what’s in there beyond the basics: the seo_title and meta_description (so an audit can flag what’s missing) and word_count and modified (so you can spot thin and stale content instantly).

How to export WordPress to CSV

WordPress ships no CSV export, so you have three routes:

// quick CSV of published posts (run once via WP-CLI, then remove)
$rows = get_posts(['post_type' => 'post', 'numberposts' => -1]);
$out = fopen('posts.csv', 'w');
fputcsv($out, ['id', 'title', 'url', 'date', 'status']);
foreach ($rows as $p) {
  fputcsv($out, [$p->ID, get_the_title($p), get_permalink($p), $p->post_date, $p->post_status]);
}
fclose($out);

That handles standard posts. The moment you need custom post types, resolved ACF fields, SEO meta, and correct UTF-8 for non-English content, the script grows fast.

Migratik exports one clean CSV per content type

Migratik reads every content type separately and writes a tidy CSV for each (posts, pages, and every custom post type) with SEO fields and resolved ACF/JetEngine/Pods values already in columns, UTF-8 safe for any language. Builder-agnostic and read-only. Free to install; CSV, Markdown, WXR, and media bundling are Pro.

Run a content audit in the sheet

Once your content is in a spreadsheet, an audit is just sorting and filtering. What to look for:

The output of an audit is a plan: keep, update, merge, or redirect, decided in minutes instead of clicking through the dashboard page by page.

Edit in the sheet, then bring it back

CSV is a round trip. For bulk changes (rewriting a hundred meta descriptions, retagging posts) edit the cells in your spreadsheet, export back to CSV, and re-import with a mapping tool (WP All Import and similar). Two rules keep it safe: match rows by post ID so you update existing items instead of creating duplicates, and back up the database first, because a bulk import is a bulk change.

Into Airtable, Sheets & other systems

Because CSV is universal, a per-type export maps cleanly into other tools. Each content-type CSV becomes a table in Airtable: ideal for turning a WordPress directory or catalog into a relational base. Google Sheets and Notion import CSV directly for reporting and collaboration. And if you’re moving structured records into a custom app or a headless CMS, CSV (or JSON) is the handoff format.


Pitfalls to avoid

Get a per-type, UTF-8, field-resolved export and the spreadsheet does the rest, audits, bulk edits, and handoffs all become a matter of sorting rows.

Frequently asked questions

Does WordPress have a built-in CSV export?

No. WordPress’s native export produces a WXR file (XML), not CSV. To get CSV you need a plugin or a small script that queries your content and writes comma-separated rows, ideally one table per content type.

How do I export WordPress posts to a spreadsheet?

Export your posts to CSV (one row per post; columns for title, URL, date, SEO fields), then open the file in Excel, Google Sheets, or Airtable. A per-content-type export keeps posts, pages, and custom post types in clean separate tables.

Can I bulk edit WordPress content in a spreadsheet?

Yes, export to CSV, edit in your spreadsheet, then re-import with a mapping tool. Match rows by post ID so you update existing items instead of creating duplicates, and back up the site first.

How do I export custom post types and ACF fields to CSV?

Use an exporter that reads each content type separately and resolves custom fields into columns. Custom post types have different fields than posts, so a good export gives each type its own CSV with its own columns.

Turn your whole site into clean spreadsheets

Migratik exports one tidy CSV per content type (posts, pages, and every custom post type) with SEO and custom fields already in columns, UTF-8 safe. Perfect for content audits, bulk edits, and Airtable. Free to install, read-only, safe on a live site.