Metaobject definitions

One row creates one metaobject definition, with all of its fields. A metaobject is a custom content type of your own — an Author, a Size chart, a Store location, an FAQ — that isn't a product, page or collection.

Template available

Choose Metaobject definitions on the upload step and click Download template. Only type and fields are required.

A worked example

metaobject-definitions.csv
type,name,fields,displayNameKey,publishable,storefrontAccess
author,Author,name*:single_line_text_field|bio:multi_line_text_field|photo:file_reference,name,true,PUBLIC_READ
ingredient,Ingredient,name*:single_line_text_field|allergen:boolean,name,false,PUBLIC_READ

Two definitions, two credits. The first creates an author type with three fields, where name is required and doubles as the display name, and entries can be draft or published.

The fields column

This is the only genuinely unusual thing about this import type. A CSV row can't have a variable number of columns, and a definition can have any number of fields — so the whole field set is packed into a single cell.

Compact form

key:type pairs separated by |. A trailing * on the key marks the field required. :required works too.

fields cell
name*:single_line_text_field|bio:multi_line_text_field|photo:file_reference

That cell means:

KeyTypeRequired
namesingle_line_text_fieldYes
biomulti_line_text_fieldNo
photofile_referenceNo

No commas are involved, so the cell doesn't need quoting — which is exactly why the pipe was chosen as the separator.

Shopify allows at most 40 fields per definition

So no more than 40 key:type pairs in one fields cell. The pre-import check counts them, so a 41st field is reported as a row error before anything is written. Shopify's limits →

JSON form

For anything more elaborate, or if you're generating the file from a script, a JSON array is accepted. Remember to quote the cell, because it contains commas.

fields cell
[{"key":"name","type":"single_line_text_field","required":true},
 {"key":"bio","type":"multi_line_text_field"}]

Field types are the same catalogue metafields use — see metafield types. Reference types are allowed, so a metaobject can point at products, files or other metaobjects.

Columns

Required

ColumnWhat it controlsExample
type Required Unique handle for the definition, 3–255 characters, letters, numbers, hyphens and underscores. This can never be changed. author
fields Required The definition's fields — see above. name*:single_line_text_field

Optional

ColumnWhat it controlsExample
nameHuman-readable name shown in the admin. Defaults to something derived from the type if blank.Author
descriptionInternal note explaining what this definition models.A blog post author
displayNameKeyKey of the field to use as each entry's display name. Must be one of the keys in fields.name
adminAccessMERCHANT_READ or MERCHANT_READ_WRITE.MERCHANT_READ_WRITE
storefrontAccessNONE or PUBLIC_READ. Use PUBLIC_READ to expose entries to your theme.PUBLIC_READ
publishabletrue to give entries draft and published status. This also adds a status column when you import entries.true
translatabletrue to allow entries to be translated.false
renderableMetaTitleKeyKey of the field to use as the SEO page title. Setting this enables the renderable capability.name
renderableMetaDescriptionKeyKey of the field to use as the SEO page description.bio
onlineStoreUrlHandleEnables the Online Store capability and serves entries at /pages/<handle>.authors
Display name is worth setting

Without displayNameKey, entries show up in the admin identified only by handle, which makes picking one from a dropdown miserable. Point it at the field a human would recognise.

Capabilities, briefly

publishable
Entries get a draft/published status, so you can load content before it goes live. Turn it on and the entries importer gains a status column accepting ACTIVE or DRAFT.
onlineStoreUrlHandle
Makes entries addressable on your storefront under /pages/<handle>. Set it to a plural noun — authors, locations.
renderableMetaTitleKey / renderableMetaDescriptionKey
Enables the renderable capability, letting Shopify build SEO tags for those pages from fields you nominate.
translatable
Makes entry content available to Shopify's translation tooling.

Rules enforced before anything reaches Shopify

Re-importing a definition that exists

A definition is identified by its type. Your conflict mode decides what happens:

ModeResultCharged
Skip (default)Left completely alone.No
Update New fields are added. Existing fields are never rewritten. A row whose field type differs from the existing one produces a warning, not a silent overwrite. Yes
FailReported as a conflict.No
Why update only adds fields

A metaobject field's type is immutable in Shopify, and entries already hold data in those fields. Rewriting a merchant's field configuration from a CSV would be destructive in a way that can't be undone, so ImportKit adds what's missing and tells you about anything that doesn't match. Restructuring an existing definition is deliberate work for the Shopify admin.

A practical consequence: adding a field to an existing definition works well. Re-import the row with the extra field in the fields cell, in Update mode, and only the new field is created.

After importing definitions

Check them in the Shopify admin at Settings → Custom data → Metaobjects, then:

Screenshot

The imported definition in Shopify

Shopify admin at Settings → Custom data → Metaobjects → Author, showing the three fields with name marked required and set as the display name.

assets/screenshots/shopify-metaobject-author.png