Understanding your import results
Read the Import History table and the job details modal: what each counter means, why a re-upload skips everything, and how to use the failed rows download.
Every import you run is recorded in Import History, at the bottom of Subscriptions → Actions → Import Subscriptions.

The single most important thing about these numbers is stated above the table itself:
That distinction matters because a contract with several products takes up several rows. A file with 26 rows can hold only 13 subscriptions. Comparing a row count against a contract count is the usual reason the numbers look wrong at first glance.
The Import History columns
Job ID
The import's reference number. Quote it to support.
Status
Completed or Invalid.
Date
When the import ran.
Rows in file
Lines in your CSV. The only row-based figure.
Subscriptions
Subscription contracts the import worked on, counted by subscription ID.
Created
New contracts created in Shopify.
Updated
Existing contracts that were changed.
Skipped
Contracts deliberately left out, for example cancelled ones, or ones already present with the same details.
Errors
Contracts that could not be imported. Counted by subscription ID, so two bad rows for the same contract count once.
Each heading carries an information icon with the same definition, so you can check a column without leaving the page.
Created and Updated are both counted within the Subscriptions figure. Skipped and Errors are reported alongside it.
Opening a job
Click View on any row to open the job details.
The modal shows the job number and status at the top, then Started, Completed, and Batches, followed by a Results list of the same counters. Where products changed, the Updated line carries a note beneath it, for example 4 product line changes on these subscriptions.

Failed rows
When a job has anything to report, a Failed rows panel appears at the bottom of the modal with a Download CSV button.
That file holds rows with an error or a warning, and each row carries its own reason. This is the only place row-level detail lives, which is deliberate: the headline counters stay at the contract level so they remain readable, and the download tells you precisely which line to fix.

A warning is not a failure. A row can appear in this file because the import changed a billing date or because a later row disagreed with an earlier one, and still have imported.
A worked example
Three jobs run one after another show how the counters behave.
Job 803. A 26-row file holding 13 subscriptions, each with two product lines.
Rows in file
26, Subscriptions12, Created11, Updated1, Skipped1, Errors1One subscription was cancelled, so it was skipped and never counted in Subscriptions.
Of the 12 worked on, 11 were new and 1 already existed and was updated.
One contract could not be read and is counted once under Errors, however many of its rows were bad.
Job 804. The same file, uploaded again.
Rows in file
26, Subscriptions12, Created0, Updated0, Skipped13, Errors1Nothing was created, because everything was already there from job 803. Those 12 duplicates plus the cancelled contract make up the 13 skipped.
Because the job created and updated nothing, its status reads Invalid rather than Completed. The file was fine. There was simply nothing left to do.
Job 805. A 6-row file holding 4 subscriptions, run with the products option on.
Rows in file
6, Subscriptions4, Created0, Updated4, Skipped0, Errors1All four already existed, so all four were updated rather than created, with
4 product line changes on these subscriptionsnoted under Updated.
What to check when the numbers surprise you
Subscriptions is lower than Rows in file. Expected. Multi-product contracts span multiple rows.
Everything was skipped. The contracts are already in Shopify with the same details, or they are all cancelled contracts. Re-running an import is safe and will not duplicate anything.
Errors is lower than the number of bad rows you can see in the download. Expected. The Errors column counts the number of unique subscription contract ids, the download column counts the number of rows.
A contract imported but kept its old payment method. The payment method could not be migrated. The contract is fine and the reason is reported against it.
For a large migration, run Actions → Verify Import afterwards. It compares your CSV against what is now live in Shopify, reports any mismatches, flags subscriptions that ended up with two live contracts that could both bill, and shows the reason the import refused anything it would not apply.
Related guides
Last updated