Excel & CSV, properly
.xlsx and .csv, including the quirks of real files: Excel's Windows encoding, semicolon separators, typed dates and hyperlinked cells.
SteadyPost · free WordPress plugin
Plan posts in Excel, CSV or Google Sheets. SteadyPost turns every row into a WordPress post — content, categories, images and SEO fields — and lets you check it, undo it and bulk-edit it later.
Version 1.4.0 · GPL, free forever · WordPress 6.0+ · PHP 7.4+ · no account, no sign-up · try it with our sample spreadsheet
2 would be created · 8 would be updated
Will create the category “Seasonal”. Ready when you are.
How it works
Every step happens inside your WordPress dashboard. These are real screenshots of the plugin.
01 · Template
Download a blank or sample spreadsheet, fill in one row per post, and upload it back. The columns map themselves.
02 · Preview
The preview shows every row and column with a tickbox. Import all of them, a handful, or only those your "ready" column approves.
03 · Dry run
A dry run checks every ticked row and tells you exactly what the real import would do — and saves nothing.
04 · History & undo
Every import is kept with its full log. Undo sends the posts a run created to the Trash, and puts the posts it updated back exactly as they were.
05 · Bulk edit
Export posts — any post type, filtered by status, category or date — edit the cells you need, and upload the file. Each row updates the post it came from, even posts SteadyPost never created.
Fix 200 SEO titles in one sitting, then upload once.
06 · Page templates
Write a page once, with column names in double braces, and every row fills in its own details: one page per outlet, city, service or product.
What's inside
Made for the people who actually run content: marketers, editors and the agencies building their sites.
.xlsx and .csv, including the quirks of real files: Excel's Windows encoding, semicolon separators, typed dates and hyperlinked cells.
Write the body however you like; it's detected per row. Block-editor content is kept exactly as it is.
Upload a zip of images and write hero.jpg in a row — or reuse an image already in your media library. Each image is added once.
Run the same sheet again and the posts it created are updated in place, and rows that haven't changed are skipped. Nothing doubles up.
wp steadypost import with a dry run, plus history and undo, for scripts and agency workflows.
Comma-separated, created if they're missing. Any custom taxonomy works through a tax: column.
Registered post meta and simple Advanced Custom Fields fields appear as template columns automatically.
Meta title, description and keywords go straight into Yoast SEO, Rank Math or SEOPress — or meta keys you name.
Set a publish date and status "scheduled". 9:00 means nine in the morning where your site is.
Prefer Google? Read rows straight from a Sheet on a schedule, and pull a post's body from a Google Doc, images included.
Works with
Nothing to replace. SteadyPost writes ordinary WordPress posts, so your theme, editor and plugins keep working as they do.
Get started
Bigger than a spreadsheet?
A spreadsheet covers most imports. If you're leaving a legacy CMS, an old database or a site nobody dares touch, our engineers can plan and run the move for you — redirects, images and SEO included.
FAQ
.xlsx and .csv. Excel, Apple Numbers, LibreOffice and Google Sheets can all save one of those. Excel files are read from their first sheet. CSV files that Excel saves in Windows encoding, or with semicolons as separators, are detected automatically.## Heading and **bold**, or HTML. SteadyPost detects which one per row. Or put a Google Doc link in the Google Doc column and that doc becomes the body.hero.jpg as the featured image, or  in the content. A filename that isn't in the zip is looked up in your media library. Each image is added once, however many rows use it.Download SteadyPost, try it with our sample spreadsheet, and publish your next batch in minutes.
Tell us what you're importing and what's in your way. We usually reply within one business day.