The pre-import check

A read-only pass over your whole file that reports, per row, exactly what the real import would do. It never writes anything, never consumes credits, and you can run it as many times as you like.

Why this exists

ImportKit can't undo an import — nothing is ever deleted and there's no rollback. The honest answer to “what if I get it wrong?” has to be prevention rather than reversal, so the check is the feature that carries that weight. Use it every time.

When you get one

Four of the five import types get a check: metafield definitions, metafield values, metaobject definitions and metaobject entries. All four are uniquely keyed, so ImportKit can compare your file against your store and predict each row's outcome.

Blog articles don't. Articles aren't uniquely keyed — there's nothing to compare against — so step 3 for that type is a preview of how the first row maps instead.

The five verdicts

VerdictMeaningWill be charged
Create Nothing matching this row exists yet, so it will be created. Yes
Update It exists and will be patched with this row's values. Only appears when your conflict mode is Update. Yes
Skip It exists and will be left completely alone. The default behaviour, and free. No
Conflict It exists but is incompatible with this row — a different type, say — or your conflict mode is Fail. No
Error The row itself is invalid and can never import, whatever your settings. Fix it in the file. No

The counts appear as badges across the top, along with the headline figure: “N of M rows will be written”. That N is precisely what the import will cost in credits.

Screenshot

A check with a mix of verdicts

Badges showing creates, skips and errors together, the “N of M rows will be written” line, the conflict-mode selector, the Re-check button, and the per-row report below with at least one error message expanded.

assets/screenshots/check-mixed-verdicts.png

The per-row report

Every row appears with:

Where a row collides with something existing, the report identifies what it collided with. For metafield values it shows the value currently in your store, which is what makes the check genuinely useful before a bulk overwrite.

Errors versus warnings

Error — the row cannot import
Fix it in your file, or delete the row. Errored rows are never charged.
Warning — the row will import, with a caveat
Worth reading. A warning usually means something resolved less precisely than you intended: a metaobject reference that couldn't be narrowed to a specific definition, or an unrecognised metafield type that Shopify might still accept.

What it catches

All of this is found before a single credit is spent:

A file that's wrong in five ways

Worth trying once, so you recognise the output. Every row here is broken differently:

deliberately-broken.csv
name,key,type,ownerType,namespace
,care_guide,multi_line_text_field,PRODUCT,custom
Bad key,care guide,multi_line_text_field,PRODUCT,custom
Bad owner,valid_key,multi_line_text_field,PRODUCTS_VARIANT,custom
Reserved namespace,valid_key,multi_line_text_field,PRODUCT,shopify--foo
Typo in type,another_key,multi_line_text_fied,PRODUCT,custom
RowVerdictWhy
1Errorname is required
2ErrorThe key contains a space
3ErrorInvalid owner type, with the correct spelling suggested
4ErrorNamespace reserved by Shopify or an app
5 Create + warning Unrecognised type, with a suggested spelling — not an error, see below
Why row 5 isn't an error

Shopify adds metafield types faster than any app can track. If ImportKit treated its own list as definitive, a brand-new Shopify type would be rejected by us even though Shopify would accept it. So an unknown type is a warning and Shopify stays the authority — and if it really was a typo, Shopify rejects the row and the credit is refunded.

Choosing a conflict mode

The conflict mode selector sits on the check step, above the report. Change it and press Re-check to see the same file's verdicts under the new setting — rows that were skips become updates, or conflicts, and the credit total changes with them.

Re-checking is free, so trying all three before deciding costs nothing but a moment. Conflict modes in detail →

The loop to get into

  1. Run the check

    Read the badges, then read the rows. The totals hide the interesting parts.

  2. Fix the errors in your spreadsheet

    Row numbers in the report match your file, excluding the header — so report row 12 is spreadsheet row 13.

  3. Re-upload and re-check

    Repeat until the only rows left are the ones you intended. Still free.

  4. Read the warnings once more

    They're the things that will import slightly differently than you assumed.

  5. Confirm the credit figure, then import

    “N of M rows will be written” should match what you expect to happen.

When everything is blocked

If no row in the file is importable, the wizard blocks rather than letting you start a job that can only fail. The report tells you why — usually one systematic mistake, like an owner type column mapped to the wrong CSV column.

Large files skip the check

The check reads every row at once, because duplicate detection and credit totalling are whole-file questions. That gives it a lower ceiling than the import itself:

ImportPre-import check
Maximum rows1,000,00050,000
Maximum size50 GB32 MB

Above those, you'll see a “This file is too large to preview” notice and the import is still allowed. You lose the preview, not the safety: every row is still checked against your store as it's imported, and your conflict mode is applied per row in exactly the same way.

If you'd rather keep the preview, split the file into parts under 50,000 rows. Rows are independent, so splitting is safe. All limits →

What the check can't tell you

Two honest caveats:

Next