Graftport is built for teams running migrations as a recurring
operation, not a one-shot project. This guide is how agencies and
multi-brand parents typically structure their account, what
Graftport gives you that a per-project tool does not, and the
billing implications of running parallel migrations.
The mental model
In Graftport the unit of access is a tenant: one billable
account, one set of users, one shared monthly allowance. Inside
the tenant you have migrations: one per (source, destination)
pair. Inside each migration you have mappings (one per
resource type) and runs (every extract/transform/load attempt).
For an agency, the typical pattern is:
- One tenant per agency. All your migration work, on one
account.
- One migration per client × source × destination. A client
with one Magento store going to one Shopify store is one
migration. A client with two Magento installs going to two
Shopify stores is two migrations.
- Mappings are local to a migration. Two clients can pick the
same template seed and customise differently without affecting
each other.
For a multi-brand parent, the same structure works:
- One tenant for the parent. Internal brands all on the same
account.
- One migration per brand replatform. Acme EU and Acme US,
each migrating from BigCommerce to a separate Shopify store,
are two migrations.
Strict isolation between migrations
Graftport is multi-tenant at the database level, but the same
isolation principle applies between migrations inside a single
tenant. No migration can read another migration's source data,
mappings, or runs. The pipeline runner refuses to cross migration
boundaries even if you ask it to via raw SQL — the row-level
security policies do not allow it.
What this means in practice:
- A bug in one migration's mapping cannot affect another. Two
Magento → Shopify migrations can have completely different
product handle conventions, completely different metafield
namespaces, no overlap.
- Different team members can own different migrations. User
permissions are per-tenant, not per-migration, but the
per-migration audit trail records who ran what.
- Re-syncing one client never touches another. Run identifiers
are scoped to the migration. The pipeline never reaches across.
Parallel runs
You can run extract, transform, and load on multiple migrations
simultaneously. The runner queue inside Graftport supports
concurrency at the migration level. Two migrations can be in the
load phase at the same time without contending — they write to
different destination Shopify stores, so the only shared resource
is your tenant's pipeline runner pool.
For agencies in launch crunch, this matters: you can ship five
clients on the same week, each on their own destination, without
serialising the work.
The shared monthly allowance
Pricing on Graftport is one platform fee per tenant plus per-record
usage. The monthly included records allowance is shared across
every migration on your account that month. Records that go beyond
the allowance are charged at the tier rates. Re-syncs are charged
at the (cheaper) sync rate.
Practically:
- A small client's migration can ride for free if a larger
client's migration covered the platform fee for the month.
- The included allowance does not split per migration. It
pools at the tenant level. A 100k-record allowance fully
consumed by one client leaves the next migration that month
charging at tier 1 from record one.
- Re-syncs get the cheaper rate everywhere. Re-running a
migration on launch night after the original load gets
the sync rate, not first-load tier rate. This is the same
on a single-migration tenant as on a fifty-migration tenant.
The pricing page's calculator estimates the bill for a single
migration in isolation; for a multi-migration month, sum the
projected first-load and sync record counts across migrations
and run the projection once at the tenant level.
Templates as agency standards
Mapping templates are global to the platform — every tenant sees
the same defaults. But your tenant can fork any template and edit
freely; the upstream template is unchanged.
Agencies typically end up with a working set of forked templates
that encode their house style: their preferred metafield
namespace, their convention for how to handle bundle products,
their policy on customer group → tag mapping. These live as
template versions inside your tenant.
When a new client comes in, the wizard's Step 3 picks the
upstream template by default. To use your house version, edit the
mapping after creation and pick your forked version. Or, if you
want it as the default for all future migrations on your tenant,
contact us about provisioning a tenant-default template — we
ship that as a setting on app.tenant.
Customer-data ownership and access
A common agency question: "If I lose access to a client at the
end of an engagement, what happens to their migration data in
Graftport?"
- The migration row stays on your tenant. It is your record
of work performed.
- The source credentials are encrypted at rest. Once the
client revokes the source-side admin user, the credentials are
useless even on our side.
- The destination Shopify store is the client's. The
destination Admin API token they gave you can be revoked from
Shopify Admin → Settings → Apps and sales channels by them,
at any time.
- Run history and mappings are auditable. They live on your
tenant. If you and the client want to hand over the migration,
contact us — we can move a single migration row across tenants.
Internal team patterns we see work
- One member owns the source extract pipeline. They handle
source-side authentication, credential rotation, and any
source-platform-specific gotchas (Magento module quirks, Woo
plugin compatibility).
- One member owns mappings. They become the agency's resident
expert on Shopify's metafield model and the standard transforms.
- The launch engineer owns runs. They schedule the rehearsals,
watch the dry-runs, hit the button on launch night.
This is overkill for one or two migrations a year, just right for
ten plus.
When to escalate to a per-tenant arrangement
If you are running more than 20 brand replatforms a year, the
included allowance and the standard tier rates are not the
optimal shape for your usage. Email
hello@graftport.com about an
enterprise plan: bigger allowance, lower per-record rate above
the included tier, dedicated runner pool for your tenant so other
tenants' loads do not contend with yours.
Related reading
Running fifty migrations a year through Graftport is the same
operation as running one. That is the point.