Skip to Content
RunsPhases

Phases

Every run picks a non-empty subset of the three phases. The picker in the Start run modal shows them as toggles; turn off the ones you don’t want.

Extract

Pulls the latest data from the source platform’s API and stores it locally so subsequent transforms don’t need to re-pull.

For each enabled resource, Graftport pages through the source API and upserts each row keyed by the source’s stable ID — re-extracting updates in place rather than duplicating.

After extract:

  • The migration’s view of the source is up to date as of the moment of the pull.
  • Nothing has happened to Shopify.
  • Previously staged records are untouched, but their underlying data is now stale until you transform again.

Extract-only is your validation hammer. Run it first on every new source to confirm credentials, see how many rows you’re dealing with, and look at real source shapes.

Transform

Runs the pinned JSONata mapping over the latest extracted data, producing the Shopify-shaped records that the load phase will push.

If the resulting record is identical to what’s already staged, Graftport keeps the staged version and skips marking it as needing a re-push — saving unnecessary load work later.

You can transform without extracting: this re-runs the mapping against the data already pulled. Useful for iterating on mappings without re-hitting the source.

Load

Takes the staged records and pushes them to Shopify via the Admin API.

For each record:

  • If it’s never been loaded before → create.
  • If it already exists on Shopify → update or skip, depending on the conflict strategy.

On success, the record is marked as loaded and won’t be re-pushed unless you turn off only-dirty or transform produces a new version.

On failure, the record is left in the queue so the next load retries it. The error is captured on the run item, with the source ID, so you can drill into which records broke.

Common combinations

PhasesUse case
ExtractFirst contact / refresh source data.
TransformIterating on a mapping.
LoadPushing previously-transformed data without re-doing work.
Extract + TransformFull refresh from source, no Shopify writes.
Transform + LoadApply mapping changes and push results.
Full (Extract + Transform + Load)Production run.

What you can’t do

  • Extract + Load without transform — illegal. The load phase reads the staged records that only transform produces.
  • Resume a failed run — start a new run instead. Graftport automatically picks up where the data left off.
Last updated on