Jobs and row results
Every import you've ever run is kept, with a durable outcome for each row. This is where you find out what happened, what it created, and what to fix.
The Jobs page
Jobs in the left nav splits into two sections:
- Active
- Jobs currently running, each with live progress. Cancel from here too.
- Past imports
- Everything finished, newest first, with the file name, import type, target, row counts and credits used. Click one to expand its detail.
The app's Home page shows the five most recent jobs as a shortcut, alongside your credit balance.
The Jobs page
One active job with a live progress bar above a list of past imports showing mixed statuses — Done, Cancelled, Error — with their counts.
assets/screenshots/jobs-list.png
A job's detail
Opening a job gives you five stat tiles:
| Tile | Meaning |
|---|---|
| Total rows | Data rows in the file, excluding the header. |
| Succeeded | Rows written to Shopify. |
| Failed | Rows that couldn't be written. Refunded. |
| Skipped | Rows that matched something existing and wrote nothing. Not charged. |
| Credits used | The actual charge, after refunds. Should equal Succeeded. |
Plus the metadata: import type, target, file name, started and completed timestamps, and status. And, if the job has any, an uncertain count.
Done means every row reached a final outcome. Read the Failed tile too — a job where 400 of 500 rows failed is still Done.
The per-row results table
Four columns: row number, title, status and details.
- Row number
- 1-based, excluding the header — so results row 12 is spreadsheet row 13.
- Title
- A label identifying the row in your terms: the definition key, the metaobject handle, the article title.
- Status
- One of the six below.
- Details
- For a success, the Shopify ID of what was created. For a failure, the reason. Plus any warnings.
Results are paged 200 rows at a time. On very large jobs the detail view shows the first portion with a banner saying how many of how many you're looking at.
Job detail with per-row results
The five stat tiles above a results table containing a success with its
gid://shopify/… ID, a failure with its message, and a success carrying a
warning.
assets/screenshots/job-detail-rows.png
Row statuses
| Status | Meaning | Charged |
|---|---|---|
| Pending | Not attempted yet. On a finished job this means it was cancelled or interrupted before reaching this row — Retry will pick it up. | No |
| Success | Written to Shopify. The created object's ID is in the details. | Yes |
| Skipped | Matched something that already existed; nothing written, per your conflict mode. | No |
| Error | Failed. Nothing was written. The reason is in the details. | Refunded |
| Uncertain | Interrupted mid-write, so it may or may not exist in Shopify. Never silently retried and never silently dropped — check this one by hand. | Refunded |
Warnings on successful rows
A row can succeed and still have something worth telling you. Warnings sit alongside the success in the details column, and they're easy to miss if you only read the counts.
Common ones:
-
custom.written_by: no metaobject entry matches "Jane Do", so it was left out— the article was created, minus that reference. - A metafield that couldn't be set on an article that was otherwise created successfully.
- A metaobject reference type that couldn't be narrowed to a specific definition, so the field will accept any metaobject.
-
An
$app:prefix stripped from a metaobject type, which was imported as merchant-owned instead.
Worth a scan after any migration. The data is in, but not always all of it.
Download errors as CSV
On a job with failures there's a Download errors as CSV button. It produces
import-<jobId>-errors.csv:
Row,Title,Error
14,care_guide,"No product found matching ""merino-crewneck"""
27,highlights,"ownerType ""PRODUCTS_VARIANT"" is not valid — did you mean ""PRODUCTVARIANT""?"
58,loyalty_tier,"CUSTOMER metafields need the ""write_customers"" access scope, which this app hasn't been granted."
Open it next to your source file, use the row numbers to find the originals, fix them, and import just those rows as a new file. Full walkthrough →
Verifying against Shopify
Successful rows carry the ID of what they created, which is the link back to your store.
| What you imported | Where to check |
|---|---|
| Metafield definitions | Settings → Custom data → the owner resource |
| Metafield values | Open the product, page or collection; the field is in its metafields section |
| Metaobject definitions | Settings → Custom data → Metaobjects |
| Metaobject entries | Content → Metaobjects → the definition |
| Blog articles | Online Store → Blog posts |
For a blog migration in particular, the ID list is how you tell which articles came from which run — useful if you need to unpick an accidental double import, since ImportKit can't delete anything for you.
How long results are kept
Job records and their rows are kept while the app is installed, so you can review or resume an import later. They're deleted when Shopify sends a shop redaction request after you uninstall, or sooner if you ask us.
The uploaded file itself is never saved — only the values from the columns you mapped, stored with the job so failures can be reviewed and imports resumed. What's stored, in detail →
Getting help with a job
Email support@importkit.app with your store domain and the job number — it's in the URL when you open a job. Attach the errors CSV if you have one. That's usually enough to answer without going back and forth.