Importundo
Most CSV importers ask you to trust them. This one shows you its work first, then keeps a receipt so you can tear it up.
Check the whole file before you touch anything. The preview shows the first rows resolved; one click checks every row in the file — how many will be created, how many updated, how many are already correct, and exactly which ones would fail — without writing a single thing. When you are satisfied, one more click runs the very import it just described. For an import that overwrites existing content you can also download what those posts hold right now, as a CSV this importer reads back.
A preview that actually predicts the outcome. Before anything is written, you see the first rows exactly as they will be created — resolved values, not raw cells. Each row is labelled create or update against the matching key you chose, and updated rows show a field-by-field diff of old versus new. Terms that do not exist yet are flagged as new. Image URLs are tested. Nothing is written to your database until you say so.
One-click rollback. Every import records what it changed. Undo it and posts it created are deleted, posts it modified are restored to their previous values — including custom fields and taxonomy terms — and you get a report of exactly what was reverted and anything that could not be, such as a post you deleted yourself in the meantime. Rollback data is kept for 30 days. Importundo Pro can set anything from 7 to 365 days.
It does not rewrite what is already right. A row whose every mapped value already matches the post is left completely alone: no write, no modified date changed, no caches cleared. Re-importing a 50,000-row supplier feed in which 200 prices changed touches 200 posts, not 50,000 — and finishes several times faster.
Built for cheap hosting. Imports run in background batches. Close the tab, lose your connection, hit the PHP time limit, restart the server — the import carries on and picks up at the last committed row without duplicating anything. The file is streamed, never loaded into memory, so a 50,000-row import uses about as much memory as a 1,000-row one.
No dependencies. No bundled libraries, no external services, no third-party queue plugin to install alongside it. Background work uses nothing but stock WordPress, and the importer tells you on its settings screen exactly how it is running on your host.
Shop products, as products. A product is not a post with some custom fields on it — write the fields yourself and you get something that looks right in the database and does not exist as far as the shop is concerned: no price, not purchasable, missing from the catalogue. This importer saves products through WooCommerce itself, so prices, stock status and the lookup table every shop query reads are all derived the way WooCommerce derives them. Simple, grouped, external and variable products, variations included. Undo works on all of it.
What it imports
- Posts, pages, and any public custom post type
- Title, content, excerpt, slug, status, date, author, parent, menu order, password, comment and ping status
- Hierarchical and flat taxonomies, including
Parent > Childpaths - Any number of custom fields
- Featured images from a URL, with alt text, deduplicated against your media library
- WooCommerce products: SKU, regular and sale price with a schedule, stock quantity and status, backorders, weight and dimensions, tax status and class, virtual and downloadable flags with their files, purchase note, catalogue visibility, featured, attributes, gallery images, upsells, cross-sells, grouped children, and the external product URL and button text
- WooCommerce variations, written as a row per variation naming its parent by SKU
- Advanced Custom Fields: text, textarea, WYSIWYG, number, range, email, URL, password, colour, select, radio, button group, checkbox, true/false, the date and time pickers, post object, page link, relationship, taxonomy, user, image, file, link, oEmbed and Google Map fields
- ACF Pro’s galleries and repeaters, with Importundo Pro active. Clones and groups are ordinary fields and work without it
Advanced Custom Fields, as ACF reads them back. An ACF field is two rows in your database, not one: the value, and beside it the key that tells ACF which field owns it. Written as plain custom fields the values look perfectly correct in the database and the edit screen shows every field empty. This importer writes them through ACF itself, and translates as it goes — the label you see in a dropdown becomes the value ACF stores, a comma-separated list becomes the list a checkbox field expects, a date becomes the format ACF keeps, and a post or user named by title, slug or email becomes the ID it points at. Undo restores both rows.
Files it copes with
- Comma, semicolon, tab and pipe delimited, detected automatically
- UTF-8, UTF-8 with a byte order mark, and Windows-1252 / Latin-1, transcoded rather than mangled
- Quoted fields containing commas, escaped quotes and line breaks
- Windows and Unix line endings
- Rows with too few or too many columns
- Files with no header row at all
Detection can be overridden by hand whenever it guesses wrong.
Create or update, on your terms
Choose what identifies an existing post — post ID, slug, title, or any custom field — and what to do when a row matches: update it, skip it, or record it as an error. Choose what happens when nothing matches: create, or skip. Choose, per column, whether a blank cell means “set this empty” or “leave it alone”. The default is to leave it alone.
Because matching is on a key you control, running the same file twice changes the same posts instead of creating a second copy of everything.
When rows go wrong
A bad row never stops the import. It is logged with its row number, its raw content, the field that failed and a plain-English reason. Filter the log by error type, export the failed rows as a CSV you can correct in a spreadsheet, or retry just those rows against the same mapping.
And every message tells you what to do next. Not “invalid value” but which value, why it was refused, and the steps that fix it — usually a change in your spreadsheet you can make in a minute. Where the answer really does need your host, you get the question to send them, written so their support team can act on it without you having to know the terminology. The technical detail is there too, folded away, for when somebody asks for it.
Free and Pro
Everything on this page is the free plugin, complete: importing, the whole-file check, the preview, the undo, WooCommerce products and plain ACF fields. There is no account and no licence key, and none of it expires.
Importundo Pro is a separate add-on plugin, sold at importundo.com/pro. It adds:
- Importing straight from a web address, such as a supplier’s feed
- Saved mapping templates — set a file up once, apply it to the next one in a click
- Exporting your content as a CSV that imports straight back
- An undo window of 7 to 365 days instead of the fixed 30
- ACF Pro’s galleries and repeaters
The free plugin never nags about it and works the same beside it as without it.
Privacy
This plugin sends nothing anywhere. There is no telemetry, no license check, no external API. The only outbound requests it makes are downloads of the image URLs in your own CSV, from your own server, and only if you map an image column.
