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
- Content audits: see every page’s word count, last-modified date, and missing metadata at a glance, so you know what to prune, refresh, or merge.
- Bulk editing: rewrite titles or meta descriptions across hundreds of posts in a spreadsheet, then push the changes back.
- Client & team reporting: a content inventory anyone can read, no WordPress login required.
- Migrating structured content: directories, staff profiles, listings, or products drop cleanly into Airtable, a headless CMS, or a custom app as rows.
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:
- A dedicated plugin. Tools like WP All Export are powerful but built for complex mapping and can be overkill (and paid) for a straightforward dump; simpler free exporters often only handle standard posts, not custom post types or fields.
- A few lines of code, if you’re comfortable with PHP and only need a quick one-off:
// 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.
- An exporter that does per-type CSV in one click, with SEO and custom fields already resolved into columns, the least effort, and the safest with non-Latin content.
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:
- Thin content: sort by
word_countascending to surface pages too short to rank. - Stale content: sort by
modifiedto find what hasn’t been touched in years and may need a refresh. - Missing metadata: filter for empty
meta_descriptionorseo_titlecells. - Duplicate or cannibalizing titles: conditional-format duplicates in the title column.
- Orphans and redirects: cross-reference against your sitemap or analytics to find pages with no traffic.
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
- Encoding breakage: non-Latin content (Arabic, accented characters, emoji) turns to garbage without proper UTF-8. Insist on UTF-8 output and open with the right encoding in your spreadsheet.
- One giant table: flattening every post type into a single CSV buries real columns under empty ones. Export per type.
- Raw HTML in cells: rendered content is full of markup. Decide up front whether you want raw HTML, plain text, or just the metadata, so the sheet stays readable.
- Dropped custom fields: a basic export gives you title and date and nothing else. If your CPTs carry their real content in custom fields, make sure those become columns.
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.