ImportKit documentation
ImportKit imports Shopify custom data from CSV files: metafield definitions, metafield values, metaobject definitions, metaobject entries and blog articles. Every import is checked before it runs, records an outcome for every row, and charges only for rows that were written.
New here?
Quick start
Install, download a template, and run a real import in about five minutes.
Start here →
Getting started
The concepts, the four steps of the wizard, and a checklist for your first real import.
Read the tour →
Preparing your CSV
What the file has to look like: encoding, quoting, blank cells, lists, and the size limits.
File rules →
Every import type has a Download template button on the upload step. The template has a correct header row plus worked example rows, and it's importable as-is. There's also a Download column guide that documents every column and whether it's required.
What you can import
Five content types. Pick the one you need — each page lists its exact columns, which are required, what values they accept, and a worked example.
Metafield definitions
Create the fields themselves: name, key, type, owner type, validations, pinning and access. One row per definition.
Columns and examples →
Metafield values
Set values on products, variants, collections, pages, articles, blogs and the shop itself. Reference resources by handle, SKU, ID or GID.
Columns and examples →
Metaobject definitions
Define a custom content type and all of its fields in a single row, with required flags, display name and capabilities.
Columns and examples →
Metaobject entries
Bulk-load entries for a definition you already have. The columns come from that definition's own fields.
Columns and examples →
Blog articles
Titles, HTML bodies, authors, tags, handles, summaries and featured images — with article metafields in the same row.
Columns and examples →
Compare all five
Which types need a target, which support the pre-import check, which can update what already exists, and which have templates.
Comparison table →
How an import works
Mapping columns
Your headers don't have to match anything. How mapping works, and what happens to columns you ignore.
The pre-import check
The free read-only pass that gives every row a verdict and tells you what the import will cost.
Duplicates and conflicts
What happens when a row targets something that already exists, and how skip, update and fail differ.
Running an import
Background jobs, live progress, cancelling, retrying, resuming, and running out of credits mid-file.
Jobs and row results
Reading history, understanding each row status, and downloading the failures as a CSV.
Credits and billing
What a credit is, what's charged, what's refunded, and how purchases work through Shopify.
How-to guides
Task-shaped walkthroughs for the jobs people actually arrive with.
Export a CSV from Excel, Sheets or Numbers
Including the UTF-8 setting that stops accented characters turning into gibberish.
Copy custom data to another store
Moving definitions, metaobjects and values from a development store to production, in the right order.
Bulk-update existing values
Changing metafield values on hundreds of products without creating duplicates.
Import references and relationships
Linking products, files and metaobjects together, and what a reference cell can contain.
Fix and re-import failed rows
Download the failures, correct them in your spreadsheet, and import just those rows.
Reference
Permissions and owner types
What ImportKit can reach in your store, and the owner types it deliberately can't.
ImportKit's limits
File size, row counts, pagination caps, throughput and retries — with the reasoning.
Shopify's limits
Definition counts, value sizes and list lengths Shopify enforces — and which ones we catch for you.
Error messages
Every message you might see, what caused it, and how to fix the row.
Still stuck?
The FAQ covers the questions that come up most, including what ImportKit deliberately doesn't do and why. If your answer isn't there, email support@importkit.app with your store domain and the job number — the number is in the URL when you open a job from Jobs.