Scheduling imports and getting alerts
Run a saved import on a schedule and receive an email showing what happened. The Schedule tab controls when imports run. Its Email reports panel controls who hears about success, issues, failures and stopped runs.
Scheduled imports require the paid edition. Email reports are available in every edition and cover browser, CLI and scheduled runs.
Schedule a saved import
First run your saved import and check its results. Then open Schedule, choose it in Import to Schedule, and select a cadence:
- Once at a specific date and time.
- Hourly at a chosen number of minutes past each hour.
- Daily at a chosen time, with day-of-week checkboxes.
- Weekly on a chosen day and time.
Tick Enabled and click Save schedule. The tab displays the clock and timezone used for scheduling. Check that clock when setting the time; it may differ from your own local clock.
A scheduled run uses the saved import’s configuration and mode. For example, an import configured to update prices and stock only keeps that mode when scheduled.
Make the latest source file available
A schedule runs the saved import. For a supplier feed, the current source file must be available before the run starts. A URL fetched when creating an import downloads a local copy; it does not by itself configure recurring downloads.
Remote WP All Import jobs migrated with their source settings fetch that source before each run. For a new feed, arrange delivery of the latest file to the saved source path before its schedule runs. XML-backed sources retain their record path when Super Speedy Imports rebuilds the working import file.
How long runs continue
The scheduled runner advances through bounded slices and saves progress between requests. This reduces dependence on one long PHP request. Individual database stages can still take time; a request timing out does not necessarily mean its database work stopped.
When a worker stops, recovery checks its saved progress and active work. It can advance finished stages, repeat safe work or resume supported checkpoints. A recoverable interruption stays part of the same run rather than generating a failure email for each slice.
- A run that has made no progress for five minutes, with no worker holding it, is picked up by the stalled-run recovery, including a run left waiting at the taxonomy stage. A worker that is still running one long stage holds the run however long the stage takes, so recovery leaves it alone.
- Fixing product attributes runs one page of products per slice (the Products per query setting under Fix Woo Attributes in Performance Options), so a slice stopped part way resumes from the page it had reached.
- A slice stopped part way through loading the file resumes after the rows it had loaded, so no row is loaded twice.
- A run that dies is recovered as often as it dies, until it completes or you stop it: there is no retry limit. Each recovery is recorded beside the schedule’s last run (
Recovering: Stage "upsert-relationships" died (death 2 since the run last made progress): ... - re-running it.). - A worker that dies while the run is finishing (writing its summary and report) is recovered too, and the summary, report email and completion hooks still happen once.
- A worker that dies during setup, before anything is imported, ends the run: the reason beside the schedule’s last run starts
Setup died before the run started:and setup is not repeated. - A stage that cannot be resumed ends the run. The message names the stage and says when the run last made progress, and it says the stage died only when a PHP fatal error was recorded.
A run that fails, for any reason, shows its reason beside the schedule’s last run. A recurring schedule stays armed and runs again at its next time; a Once schedule is left disabled. Review the error and the run’s History details before deciding whether to retry the import.
A source file with a header but no data rows stops a scheduled run with No rows found in CSV before anything changes, so an empty feed can never remove items through delete-missing.
Make sure background work gets triggered
WordPress background events need a trigger. On a quiet site, a run scheduled for 03:00 can start late if nothing triggers WP-Cron.
For reliable unattended operation, configure a server cron to trigger WordPress’s due events. WooCommerce Action Scheduler is used for scheduled slices when available, with a WP-Cron safety net; it still needs background execution on the host.
If you prefer to run the import directly from your own server cron, the Schedule tab generates its WP-CLI command, wp ssi <id>. For a recurring cadence, it also displays the matching crontab line using the scheduling clock.
Set up email reports
Open Schedule → Email reports. In Settings for, choose Site defaults & daily summary or a particular saved import.
For a saved import, choose:
| Mode | What happens |
|---|---|
| Use site defaults | Uses the site’s recipients, events and subject. Later changes to the defaults apply to future reports for this import. |
| Custom for this import | Uses this import’s own recipients, events and subject. |
| Off | Creates no individual-run report for this import. |
The site defaults control inherited individual-run reports. A saved import can use custom reports even when those defaults are off. The site daily summary is a separate choice.
Add the people who need the result
Paste email addresses separated by commas, semicolons or new lines. Duplicate addresses are combined without regard to letter case. Invalid addresses must be corrected before saving. Each recipient receives a separate email.
Previously used suggestions come from saved notification settings on this site. Removing a suggestion only removes it from the picker; it does not remove that address from saved imports. Notification settings require administrator access, and recipient lists are not included in ordinary import configuration exports.
Choose the events
Select any combination of:
- Succeeded – the import finished without recorded issues.
- Succeeded with issues – the import finished, but row issues or After Import warnings need attention.
- Failed – the attempt ended with an error.
- Stopped – the run was deliberately cancelled.
Every finished run selects all four. A saved import rejected before starting, or a recoverable interruption in a running import, is not a finished-run event.
Set the subject
Leave the subject blank or choose Reset to default to use:
[{site_name}] {import_name}: {outcome}
You can insert these tokens:
| Token | Value |
|---|---|
{site_name} | WordPress site name |
{import_name} | Saved import name |
{outcome} | Result, including issues where recorded |
{duration} | Elapsed time |
{rows_processed} | Source rows processed |
{run_id} | This run’s history ID |
Subjects accept up to 240 characters. Unknown tokens and line breaks are rejected. The subject is plain text; it does not execute PHP.
Click Save email reports to save your choices for the selected scope. Saving does not send an email.
Preview and send a test
Preview email shows the subject, HTML report and plain-text version using the newest completed report for the selected import. Site-level preview uses the newest completed report across imports. If no completed report is available, the preview is clearly labelled as a sample.
Preview uses the form’s current choices without sending mail. Send test email… lists the recipients and asks you to confirm before sending. The message is marked TEST and does not start an import.
Each recipient gets a separate acceptance result. Accepted means WordPress accepted the message for sending, not that it reached the inbox. If mail is rejected, check the site’s mail configuration and diagnostic message.
Understand the report
The report includes:
- The outcome, import name, run ID and recorded start and finish times.
- Source rows processed and recorded created and updated counts, plus the items moved to the Trash and the items deleted permanently.
- Database-write counters, kept separate from source rows and imported items.
- Elapsed duration, average source rows per second and stage timings.
- Measured peak PHP worker memory, rather than total server RAM.
- Grouped row issues and a separate section for After Import warnings.
- A safe failure cause and stage when a run fails.
- View this run, which opens the exact History record after administrator sign-in, and a link to edit notifications.
Missing measurements appear as Not recorded. A zero-row run or a maintenance run is described according to its recorded work. A failed or stopped run can have applied some changes; its outcome is not an undo operation.
Check delivery in History
Open the run’s History details to inspect notification states and attempts. The recipient list is captured when the import ends, so changing settings affects future reports. To stop a queued report, use Cancel queued email on that run.
| State | Meaning and next step |
|---|---|
pending | Waiting for a background worker. You can cancel it before dispatch. |
claimed | A worker has taken the message for sending. It cannot be cancelled while in progress. |
accepted | WordPress accepted the message for sending. Check your mail provider if it is absent from the inbox. |
failed | A recorded rendering or mail error prevented acceptance. Inspect the diagnostic and retry after fixing the cause. |
uncertain | The worker stopped or the mail operation threw an exception before acceptance could be established. Check mail logs before deliberately retrying. |
cancelled | The queued message was cancelled. A deliberate retry can queue it again. |
Clearly failed deliveries get up to three automatic attempts: the initial attempt, another after five minutes, and a final attempt thirty minutes after the second failure. Due retries need WordPress background execution, so those intervals are not inbox-delivery deadlines.
Retry email queues another attempt without rerunning the import. Uncertain deliveries are not automatically resent, because the mailer may have accepted the first message. Accepted deliveries cannot be resent through this control.
Notification and hook diagnostics are separate from the data outcome. A mail or custom-hook failure does not turn a successful import into a failed import.
Receive a daily summary
Under Site defaults & daily summary, enable Daily summary, choose the site-time sending time and save. It uses the site recipients and can remain enabled while individual-run reports are off.
The digest describes activity in the last 24 hours: successes, success with issues, failures, cancelled attempts and separately recorded running work. It includes imports with custom or disabled individual-run reports. It also reports an empty activity window.
An empty digest is a reason to inspect the schedule, not proof that a run was missed. Check the schedule’s enabled state, next occurrence, source availability and background execution.
The panel shows the last daily report’s per-recipient results. Send daily summary now… asks for confirmation before sending another digest from the saved settings. It does not start an import.
Use custom actions beyond email
For webhooks, cache warming or dependent tasks, see Run your own code when an import completes. The completion action covers every terminal outcome; use the succeeded action for work that depends on success.
Email intent is saved and queued independently before external hooks run. You do not need a custom completion listener to receive the built-in reports.
Further reading
Written for Super Speedy Imports 3.68.0.

Comments