Skip to Content
MappingsResource mappingsOverview

Resource mappings

Each resource has a staging model — the flat, user-friendly shape your JSONata mapping should produce. Graftport then converts that shape into a Shopify-ready payload before pushing.

The point of staging models: you don’t have to learn Shopify’s full GraphQL input shapes. You return simple, flat JSON; Graftport handles the nested gymnastics.

Pages

ResourceStaging model
ProductStagingProduct — title, price, variants, inventory, files.
CollectionStagingCollection — title, image, product list, menu metadata.
CustomerStagingCustomer — identity, single flat address, marketing consent.
OrderStagingOrder — flat addresses, flat discount fields, nested line items / transactions.
Discount codeStagingDiscountCode — single value (percentage / amount / free-shipping), flat min requirements.
Gift cardStagingGiftcard — code, value, recipient, debit history.
Blog & articleStagingBlog — one article + its blog reference.
RedirectStagingRedirectpath + target.

Shared fields

Every staging model inherits from a base. These fields are available on every resource — see Shared fields for the details.

  • original_id — the source’s stable ID (becomes a tracking metafield).
  • source_url_path — original URL path (used by the redirect resource).
  • exclude — boolean to skip this row entirely.
  • dict_metafields — flat dict for any custom merchant data.
  • metafield_prefix — namespace override for dict_metafields.

How to read each page

Each resource page has the same structure:

  1. Quick reference — the bare-minimum mapping that loads.
  2. Fields — every field grouped by purpose, with type, default, and a one-liner example per field.
  3. Patterns — fuller JSONata snippets for the common shaping problems.
  4. Gotchas — what trips people up the first time.

Extending the staging models

If you need a field that the staging model doesn’t expose:

  • Custom merchant data — use dict_metafields. That’s its job.
  • Source-platform-specific quirks — the staging model should cover the shape Shopify accepts; if a real merchant need is missing, contact the Graftport team to extend the model.
  • A field Shopify doesn’t store — store it in dict_metafields if it has post-migration value (audit, history); skip it otherwise.

Not yet supported

The following resource types have no staging model today, so JSONata output is passed through to the loader unchanged:

  • Market — set up Shopify Markets manually after the migration.
  • Article-only updates — articles are migrated as part of the blog resource; standalone article updates aren’t a separate resource.
Last updated on