Back to Super Speedy Imports
Super Speedy Imports changelog
Release notes for every version we have on record, newest first.
Latest 3.68.3 · 30 Oct 2026
40 versions
Since Oct 2026
2026 40 versions
3.68.3 Latest 30 Oct 2026 1 changed
Changed
- Every version heading in this changelog shows its date again; 3.20.0 to 3.68.2 had been listed without one.
3.68.2 29 Oct 2026 1 improved
Improved
- Updated super-speedy-settings to 1.14.3: update downloads now send the licence key in a request header instead of the download URL.
3.68.1 29 Oct 2026 1 fixed
Fixed
- Fixed two image workers occasionally saving different images to the same file in the media library, so one product could show another product's image or an image with no width or height.
3.68.0 29 Oct 2026 2 fixed3 changed
Fixed
- An import whose update-posts stage, scheduled fix-attributes stage or load-csv finalize dies part-way is now re-run until it completes, giving the same result as an uninterrupted run.
- Scheduled imports fix product attributes one page of products at a time, so a server that stops long PHP processes no longer stops that stage from finishing.
Changed
- A browser import whose final step dies is re-sent until it completes; its history row, report, emails and completion hooks still happen once.
- A setup that dies now ends the run at once with the reason, on the browser and scheduled runners, instead of waiting 15 minutes or leaving a scheduled run queued for ever.
- A scheduled run that spends more than five minutes in one stage is no longer mistaken for a dead one.
3.67.0 29 Oct 2026 1 security1 changed
Security
- The Change Source actions check the administrator's permission and the request's security token in each action, as every other screen action does.
Changed
- The prices-only _price update, the back-in-stock change capture and title matching now write their SQL entirely inside prepared statements; the SQL they run is unchanged.
3.66.0 29 Oct 2026 1 removed2 changed
Removed
- Removed the messages "died server-side twice", "finalize died server-side twice", "timed out 5 times without the server committing any further rows", "ended without answering, so this run cannot continue safely" and "died repeatedly with no progress"; the run log and the schedule's last result show each death with its real cause instead.
Changed
- Imports now keep retrying until they complete: a stage, a finalize, a segment, a WP-CLI worker or an After Import job whose request times out or whose PHP process is killed or runs out of memory is re-run as many times as it takes, on the browser, WP-CLI and scheduled runners, and only Stop ends the run.
- A stage that returns an error, such as a refused file or an SQL error, still fails the run straight away with its message.
3.65.0 28 Oct 2026 2 changed
Changed
- The back-in-stock notifier switches (Back In Stock Notifier for WooCommerce, WooCommerce Back In Stock Notifications) moved from Additional Options to the After Import section, under Notify other plugins, and appear in the Ready to import? popover.
- Each keeps the choice saved on your existing imports, is on by default, and when switched off the import still hands nothing to that plugin.
3.64.0 28 Oct 2026 1 new1 improved1 removed5 changed
New
- Added a Change Source button to every import, with three choices: Choose an uploaded file (files with the same columns first, the others marked "different columns"), Upload a new file, and Use a URL, which downloads the URL as soon as it is saved.
Improved
- Change File's run-only alternative file in the browser is replaced by Change Source, which switches the import's file; wp ssi --file= is unchanged.
Removed
- Removed the Download now button, the Remote URL box and its "Stop downloading from the URL" tick box, replaced by Change Source.
Changed
- The import settings screen now shows one Source row, "Source: products.csv (CSV file)" or the URL the import downloads from (no login details, and a query string shown as ?…), in place of the file row and the Remote URL box.
- Choosing a file stops an import downloading from its URL, and choosing a URL makes it a URL import; the download is stored under a name taken from the URL, so your uploaded file is not overwritten.
- A new source with different columns is accepted without changing or saving your mappings, and the Source row lists the mapped columns that are no longer in the file and the new ones, so you can remap them and press Save Import.
- The Source row now scrolls with the page; only the import name and its buttons stay pinned at the top.
- A run refused with "no longer has the column(s)" now tells you to use Change Source > Use a URL and save the URL again.
3.63.0 28 Oct 2026 1 fixed
Fixed
- Fixed WP-CLI imports still delivering back-in-stock notifications straight away when the superspeedyimports_change_event_deliver_inline filter returns false; the events now stay queued for the background queue runner, as on the other runners.
3.62.0 28 Oct 2026 1 fixed1 changed
Fixed
- Fixed imports whose unique item identifier combines several fields, or uses a post field or taxonomy, failing on MySQL 8 with "BLOB/TEXT column '_ssi_uid_hash' used in key specification without a key length".
Changed
- A gallery image's title, alt text, caption and description are now set only when the image is first imported, from the first row of that image with a value; later rows and runs no longer change them.
3.61.0 27 Oct 2026 3 fixed1 changed
Fixed
- Fixed imports stopping with "Illegal mix of collations" when your WordPress tables or columns use different collations: each import's working tables now match the WordPress columns they are compared with.
- Fixed hierarchical categories failing with "COLLATION 'utf8mb3_general_ci' is not valid for CHARACTER SET 'utf8mb4'" on sites whose wp_terms table is utf8mb3.
- Fixed the WooCommerce attribute lookup build failing with "Illegal mix of collations" when the WordPress and WooCommerce tables use different collations.
Changed
- Preview & Run, WP-CLI and scheduled runs now warn when two WordPress columns an import compares use different collations, with SQL to align them and a guide.
3.60.0 28 Oct 2026 2 changed
Changed
- History, a run's stages and Export history now show the database error when the history cannot be read, instead of "No import history found." or an empty list.
- The daily email report now states the database error when it cannot read the import history, instead of reporting no activity, and the Email reports panel shows it; the email preview, get-history, get-run-status and get-import-issues report it too.
3.59.0 28 Oct 2026 1 improved
Improved
- History again lists every run on sites where it showed none since 3.51.0 with the database error "Unknown column 'h.rows_processed'"; the column is now created when the plugin is activated or updated.
3.58.0 27 Oct 2026 5 changed
Changed
- Thorough image search now links one featured image per product, preferring the exact file name, instead of a _thumbnail_id row for every image whose name contains it.
- A gallery image whose download fails is now retried up to three times on every runner, as featured images are.
- An image URL used as both the featured image and a gallery image is now downloaded once, including URLs with spaces, { } or spaces around the | separator.
- A featured image's title, alt text, caption and description are now set only when the image is first imported, from the first row of that image with a value; later rows and runs no longer change them.
- A run whose mapping names a column the file does not have now warns, naming the column, on the completion screen, in History, the email report and wp ssi; a field mapped only to it keeps its current value, as before.
3.57.0 27 Oct 2026 8 changed
Changed
- A price feed with no sale price column no longer cancels a product's running sale: _price keeps the sale price while the sale is active.
- Existing products with no product type are given Simple when an import matches them, so WooCommerce's product lists and searches find them.
- Force delete now removes the deleted products' rows from WooCommerce's product lookup table.
- The After Import term recount now includes product types, so the Simple, Variable and other counts are right after an import.
- Term names are kept whole up to WordPress's 200-character limit instead of being cut at 150, so two names that differ after character 150 stay two terms; a longer name is cut to 200 and reported for its row.
- A term created by an earlier version with its name cut at 150 characters is renamed to its whole name on the next import, keeping its ID, slug and URL.
- With no author mapped, or a blank author cell, products get the user who created the import on every runner (browser, WP-CLI and scheduled); imports created before this version, or by wp ssi create without --user, use the site's first administrator; --user on wp ssi no longer chooses the author.
- A Full import that maps only metadata (for example SKU and price) now restores matched items from the trash, and lists rows that match no item as skipped in History.
3.56.0 27 Oct 2026 1 changed
Changed
- Imports now hand the WooCommerce Back In Stock Notifications plugin every stock status change a manual save in wp-admin would, including out of stock to on backorder, which notifies its subscribers.
3.55.0 27 Oct 2026 1 fixed4 changed
Fixed
- Pro: Fixed variations gaining an extra selector value, one more on every re-import, when a tag or a non-variable attribute shares a value with a variation attribute; the next import removes the extra rows.
Changed
- Pro: Variations no longer get the default product category (Uncategorized) when no category is mapped, and a re-import removes it from variations imported by earlier versions.
- Pro: "Only update existing items" now updates the option a variation is offered as on the product page when the feed changes its attribute value, for example Blue to Green.
- Matching by Post title, Post title + category or a custom combination now finds items in the trash, which are restored, and variations made in WooCommerce, as SKU matching does; a live and a trashed item with the same identity stop the run with "matches more than one existing item".
- Matching by Post title, Post title + category or a custom combination no longer writes a tracking key onto existing items the run does not update, including in "Only create new items".
3.54.0 27 Oct 2026 2 changed
Changed
- On SQLite sites such as WordPress Playground, a browser import pauses the WordPress Heartbeat until the run ends, so its requests no longer wait behind Heartbeat calls.
- On SQLite sites, a browser image request no longer starts a download expected to finish after its 20 s budget, so image requests answer inside the browser's 30 s timeout.
3.53.0 27 Oct 2026 1 new
New
- Added compatibility with WooCommerce Back In Stock Notifications: when a product import brings a product back into stock, that plugin notifies its subscribers with its own rules and emails, controlled per import by the new "WooCommerce Back In Stock Notifications detected" option in Additional Options (on by default).
3.52.0 27 Oct 2026 2 fixed
Fixed
- Fixed a remote URL download that waits a long time for the supplier's server being started a second time, now on every edition including the WordPress.org one.
- Fixed the WordPress.org edition failing to build since 3.49.0.
3.51.0 27 Oct 2026 3 fixed1 changed
Fixed
- The History tab lists runs that started in the same second in one fixed order, so paging through History no longer repeats or skips a run.
- Fixed ACF fields being written twice for a post when a scheduled or browser run re-ran the insert-postmeta stage after it died.
- The ACF repeater editor in fixed-rows mode stays responsive at 100 rows when the file has hundreds of columns.
Changed
- Wp ssi schedule now runs a schedule at the time of day and on the days saved on the Scheduled tab, so CLI-made schedules run at their saved time instead of one interval after the command.
3.50.0 27 Oct 2026 1 new3 changed
New
- Added developer hooks for add-on Data tab term checks: the superspeedyimports_data_term_checks, superspeedyimports_data_term_analyse, superspeedyimports_data_term_report, superspeedyimports_data_term_export_columns and superspeedyimports_data_term_export_row filters, the superspeedyimports_data_term_checks_fieldset and superspeedyimports_data_term_download_buttons actions, and the ssi:data-term...
Changed
- The Data tab's Duplicate description term check moves to the Term Descriptions add-on, with its other repeated-description checks; Missing description and Short description stay in every edition.
- A Data tab term check that no installed add-on runs is reported as an error instead of being counted as zero.
- Without an add-on term check installed, one line under the Data tab's term checks says what the Term Descriptions add-on finds (paid edition and GitHub Lite).
3.49.1 27 Oct 2026 1 changed
Changed
- The help for "What should this import do?" now says in plain words what each option changes and what it never touches, so "Only update existing items" and "Only update prices & other item details" are easy to tell apart.
3.49.0 26 Oct 2026 1 fixed13 changed
Fixed
- Fixed a database read that the server interrupted, for example "Query execution was interrupted", being treated as "no rows" so the run carried on and reported success; the run now fails with the database's message.
Changed
- Browser runs whose setup takes longer than 30 seconds, for example on a busy server, now carry on when setup finishes instead of failing with "timeout".
- A failed browser setup, and a Stop, now show their own message instead of "The import/setup request returned a non-JSON response".
- An import that downloads its file from a URL no longer starts a second download while a slow one is still running, and always imports the file it downloaded.
- A browser run whose page is closed part-way now ends as failed in History with the counts it reached; a paused run is kept.
- A late request from an earlier browser run of the same import is now turned away instead of running into a newer run.
- Stop on the run screen for an import running under wp ssi now stops it at the next stage, and the import stays locked until it has stopped.
- Pro: wp ssi schedule-run now refuses to start while that import's scheduled run is in progress, instead of abandoning it.
- Pro: With several wp ssi workers, a new run waits for a stopped run's last database statements, and the workers of a killed wp ssi process stop instead of carrying on.
- An After Import job that keeps crashing PHP now stops a browser run after its second attempt, naming the job.
- When a stage is re-run after the server stopped part-way, History, the completion screen and the email report now say its counts are partial.
- Durations in the import summary and the After Import log can no longer be negative when the server clock is corrected.
- An add-on counter logged with logStageMetric() and updateSummaryMetrics() now appears in the run summary on browser and scheduled runs too.
- Superspeedyimports_before_import_setup, superspeedyimports_before_import_stages and superspeedyimports_after_import_stages now fire once per run on WP-CLI, browser and scheduled runs.
3.48.0 26 Oct 2026 1 new1 fixed15 changed
New
- Wp ssi --show-sql now prints a whole run and exits 0, and no --show-sql run adds an Import History entry.
Fixed
- Pro: a multi-line value typed into an ACF repeater's fixed row keeps its line breaks.
Changed
- Wp ssi refusals (an import ID that does not exist, a missing or header-less --file, an unknown command) now print an Error: line and exit with code 1.
- Wp help ssi now documents every subcommand, its arguments and flags, with examples.
- Wp ssi now refuses a flag the subcommand does not accept, naming it and listing the flags it does accept.
- Wp ssi create accepts only a registered import template, so wp ssi create x WP_User file.csv is refused.
- Wp ssi changes, retry-events and deliver-events take --import= or --history=, refuse a number that is both an import ID and another import's history ID, and say which they used.
- Pro: wp ssi save-config now exports the import's PHP functions, so wp ssi load-config restores them.
- Wp ssi schedule, schedule-run, schedule-pause, discard-preview and the other per-import commands refuse an import that does not exist.
- MCP abort-run, and Stop, now halt a run started from WP-CLI or a schedule at the next stage, and get-run-status reports it as cancelled.
- Deleting an import, from the Imports tab or MCP delete-import, now also removes its schedule, run history details and settings; the products it imported are kept.
- The hook reference returned by MCP list-hooks now lists every hook with its arguments and which runners fire it, and superspeedyimports_before_import_setup now fires on WP-CLI runs too.
- Building many import templates in one request no longer holds each one in memory.
- An XML file holding one record is now read at that record's path, with the path shown so you can change it, instead of asking you to type it.
- The Delete import dialog scrolls when it lists many CSV files, so its buttons stay reachable.
- Wp ssi schedule-run refused because the import is already running now says so.
- Wp ssi save-config refuses an output path outside its folder instead of writing it inside under another name.
3.47.0 26 Oct 2026 3 changed
Changed
- Pro: The Schedule tab shows a scheduled run's error message as text.
- Product, variation and synthesised parent titles from a feed are stored without HTML tags or scripts, using WordPress's own title filtering; titles without markup are stored exactly as before.
- MCP: upload-csv, upload-xml and convert-xml refuse a file name an existing import reads, with ssi_file_in_use, or ssi_run_in_progress while that import runs; pass import_id to upload-csv to replace that import's own source.
3.46.0 26 Oct 2026 1 fixed5 changed
Fixed
- Pro: Fixed long galleries losing their last images on MySQL servers left at the default group_concat_max_len (1,024 bytes); every gallery image is now kept, in file order.
Changed
- Pro: A term image that cannot be downloaded no longer writes its URL into the term's thumbnail_id; the term keeps its previous image and the failure is listed in the run's issues.
- Pro: A gallery mixing Media Library file names and image URLs now keeps both, instead of trying to download the file name as http://name.
- Pro: The gallery stage's "Remote Images Previously Attached" figure is now recorded on browser runs too.
- Imports that map no featured image no longer run the upload-remote-images stage.
- Re-running an unchanged import no longer rewrites the title, caption or description of images whose details have not changed.
3.45.0 26 Oct 2026 3 fixed3 changed
Fixed
- Fixed a SKU of exactly 0 aborting the import with "blank unique identifier", and tags, attribute values and category levels named 0 being dropped.
- Fixed category paths using a separator other than > (for example / or ::) aborting with "Failed to import hierarchical terms".
- Fixed the "Terms created" count, which now counts every new tag, attribute term and category once.
Changed
- An unchanged re-import of a downloadable product now leaves its download files exactly as they were.
- A database error while writing product attributes now fails the run with the database's message instead of finishing without attributes.
- Wp ssi --user= --workers=N now gives new products that author on every worker.
3.44.0 26 Oct 2026 1 new2 changed
New
- Pro: "Only variations (parents already in db)" adds the variations to their existing parent product instead of creating them as separate simple products.
Changed
- Pro: Variable products created from a variations-only file now accept reviews like every other imported product, and are dated in the site's time zone.
- Pro: A variation with a blank parent grouping value now stops the import with "have a blank parent grouping value", naming the column and row, instead of reporting a blank unique identifier.
3.43.0 26 Oct 2026 1 new2 changed
New
- Added a Download now button to the Remote URL row, which downloads the file straight away and takes its columns even when some were renamed or removed, so you can map the new ones.
Changed
- A run refused with "no longer has the column(s)" now tells you to use Download now.
- A field mapped to a column the file no longer has is marked missing on the import's settings and keeps its mapping until you change it.
3.42.3 26 Oct 2026 1 changed
Changed
- Changelog: marked two earlier entries as Pro.
3.42.2 26 Oct 2026 1 changed
Changed
- The Back In Stock Notifier option's Read more link opens the new Using Back In Stock Notifier with Super Speedy Imports guide.
3.42.1 26 Oct 2026 1 changed
Changed
- Description: the million-product import time now quotes the published benchmark, about 22 minutes for Pro and under 90 minutes for the WordPress.org edition.
3.42.0 26 Oct 2026 1 new1 changed
New
- Added a Remote URL field under the file on each import's settings: paste the URL the file comes from, save, and every run downloads it again first. Use it to switch an import you created from a URL before 3.41.0.
Changed
- A refused Save now says why instead of reporting "import saved".
3.41.0 26 Oct 2026 3 changed
Changed
- Imports created with Import from URL now download the URL again on every run, from the browser, WP-CLI and a schedule. An import created from a URL before 3.41.0 keeps using its first download until you create it again from the URL.
- A URL import whose file has lost a column the import was set up with now stops before changing anything, naming the missing column and keeping the previous file.
- A failed import step now shows its own error message in the browser instead of "The import/run request returned a non-JSON response".
3.40.1 26 Oct 2026 1 changed
Changed
- The browser timeout message now names the *REST chunk size (rows)* setting in Performance Options instead of "Rows per call".
3.40.0 21 Oct 2026 1 changed
Changed
- WordPress.org Live Preview offers a 100-product sample first on the Demo Data tab, so a visitor can run a complete import with images without waiting for 1,000 products; real sites list the same samples as before.
3.39.0 21 Oct 2026 3 fixed1 changed
Fixed
- Fixed the demo samples' images failing to download in WordPress Playground (wordpress.org's Live Preview) with "Download failed (http_private_ip)"; image downloads on every other server are checked exactly as before.
- Fixed the Data tab's taxonomy term checks failing on SQLite (WordPress Playground) with "no such function: REGEXP_REPLACE".
- Fixed After Import progress checks failing on SQLite (WordPress Playground) with "no such function: IS_FREE_LOCK".
Changed
- Data tab database errors are now shown as plain text instead of HTML markup.
3.38.0 21 Oct 2026 1 changed
Changed
- WP-CLI imports now retry a failed image download up to 3 times, as browser and scheduled imports already do.
3.37.0 21 Oct 2026 3 fixed1 changed
Fixed
- Fixed Keep sold items not protecting a product sold shortly before an import: it now checks completed, processing and on-hold orders directly instead of WooCommerce Analytics, which records new orders hours later.
- Fixed every delete-missing run with Keep sold items failing with "Table 'wp_wc_orders' doesn't exist" on stores that never enabled High-Performance Order Storage.
- Fixed delete-missing failing with an SQL syntax error when a superspeedyimports_filter_deletes condition ending in a number was used with Keep sold items.
Changed
- Keep sold items no longer keeps a product whose only order was fully refunded, matching its promise to keep products in completed, processing or on-hold orders.
