Importundo

Answers

Frequently asked questions

Will running the same file twice create duplicates?

Not if you set a matching key. With a key set — post ID, slug, title or a custom field — the second run finds the posts the first run created and updates them. The second run reports zero created. Without a matching key every row creates a new post, and the importer warns you about that before it starts.

What exactly does rollback restore?

Posts the import created are deleted permanently, along with images it downloaded for them, unless something outside the import now uses one of those images. Posts the import updated are restored to their previous values for every field the import touched — post columns, custom fields and taxonomy assignments — including post_modified, so the row goes back to exactly what it was.

Rollback does not restore anything the import never touched, and it cannot restore a post you deleted yourself after the import ran. The report tells you when that happened. The rollback reference is precise about the limits.

How long can I roll back for?

30 days. The window is shown on screen before you start, not buried. When it expires, only the rollback data is deleted — your imported content is untouched. Importundo Pro can set the window to anything from 7 to 365 days, globally or per import.

My import stopped part way. What now?

It did not stop; it is queued. Imports run in background batches, so a closed tab, a dropped connection or a PHP timeout does not end them. Open Importundo → History to see where it is. A watchdog checks once a minute for imports that have stopped making progress and restarts them, so even a fatal error or a server restart only costs a minute.

How does it run imports in the background?

Three ways, in order of preference, all using stock WordPress:

  1. As each batch finishes, the site sends itself a quick request asking for the next one. This is the normal path and needs nothing configured.
  2. If your host blocks a site from calling itself, WP-Cron takes over, plus a once-a-minute check that restarts anything stalled.
  3. If your host allows neither, the import screen drives the work itself while it is open, and says so on screen.

Importundo → Settings shows which of these applies to your server, and there is a Test again button for after you change a firewall or security setting.

If the first way is unavailable, the settings screen also says why — a login prompt in front of the site, a security plugin, a certificate problem, a firewall — and what to do about it. Three of the four common causes you can fix yourself.

Does it work on shared hosting?

That is what it is built for. The performance target is a 50,000-row file completing on PHP 7.4 with a 128 MB memory limit and a 30 second execution limit, with no shell access and no WP-CLI. Batches stop themselves before they reach either limit and queue the next one.

Can it import WooCommerce products?

Yes, if WooCommerce is active. Choose Products as the target and the mapping screen offers the product fields — SKU, regular and sale price, stock, dimensions, tax, attributes, gallery, upsells and the rest — alongside the usual title, content and categories.

Products are saved through WooCommerce rather than written as post meta, which matters more than it sounds: WooCommerce derives the active price, the stock status and the row in its lookup table from the values you set, and a product missing those is invisible to the shop while looking perfectly correct in the database.

Variable products are described as a parent row followed by one row per variation, each naming its parent by SKU. Set the matching key to SKU and a second run updates the same products and the same variations instead of duplicating them. The product reference →

Does it need WooCommerce?

No. WooCommerce support appears only when WooCommerce is active; without it the importer works exactly as it does for posts and custom post types. This plugin bundles nothing from WooCommerce and does not modify it.

Does it import Advanced Custom Fields?

Yes, if ACF is active. Choose the content type and the mapping screen lists that type's ACF fields under their own heading, labelled the way your field group labels them — so a column called "Page count" maps itself.

Values are written through ACF rather than as custom fields, which matters for the same reason it does with products: ACF stores a second row beside every value saying which field it belongs to, and a value without it shows up as an empty field on the edit screen. It also translates as it writes — your spreadsheet says "Hardback" where the field stores "hb", says "Print, Audiobook" where the field stores a list, and says 15/01/2024 where the field stores 20240115.

ACF Pro's galleries and repeaters work too: a gallery is a column of addresses, a repeater is a column per field inside it. Flexible content is the one that is not imported. The ACF reference →

Can it export?

With Importundo Pro, yes: Importundo → History gets an Export button for each kind of content, and the file it produces is designed to be imported back — the column names are the ones this importer maps automatically, and the post ID is included so the round trip updates rather than duplicates. The free plugin still exports failed rows, the full row log, and the current values of anything an import is about to change.

Where are uploaded files stored?

In a randomly named directory inside wp-content/uploads that is protected against direct web access by .htaccess, web.config and an index stub, with randomised filenames. Uploads are deleted when their import finishes, or when the rollback window expires. Files you point to by server path are never deleted — they are yours.

Which user do imported posts belong to?

Whoever the author column says, matched by user ID, login, or email address. Rows whose author cannot be matched are attributed to the user who started the import, and the preview warns you first.

Does it send anything anywhere?

No. There is no telemetry, no licence check and 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.