GraftportPlatformsPricingGuidesLog inBook a call

For Shopify agencies & in-house teams

Replatform a client to Shopify in days, not quarters.

Graftport moves products, customers, order history, discounts and redirects out of Magento, BigCommerce, WooCommerce or another Shopify store. Versioned field mappings, dry-runs on a sandbox, and a re-run on go-live night that creates zero duplicates.

  • Your team runs it. Software you licence, not a service you queue for.
  • Read-only on the source. Your client's live store keeps trading.
  • Every mapping versioned and dry-runnable before a record ships.
  • And when a migration is genuinely scary, we're on the call with you.

Book a 20-minute migration review

Tell us what you're moving. We come back within one business day with a scope and a price.

One reply from a human. We only use your email to follow up on the migration.

What we move

Every record that matters. Nothing left behind.

Anything a Shopify store needs, lifted across with the right shape, the right relationships and the right SEO. Theme, apps and design decisions stay yours.

#
Record
What comes across
01
Products & variants
Configurable, simple, grouped and bundle products mapped to Shopify variants and metafields
02
Categories to collections
Full tree preserved with nested smart collections
03
Customers
Profile, address book, customer groups and store credit balances
04
Orders
Full history with line items, taxes, shipping, refunds and order comments
05
Cart price rules
Catalog and cart rules become Shopify automatic discounts where possible
06
301 redirects
URL keys, old paths, every existing redirect preserved
07
CMS pages & blog
All static pages and blog posts with their original publish dates
08
Multi-store
Multiple Magento stores split into Shopify stores or Markets, your call

How it works

Four steps. Re-run as many times as you want.

The same pipeline runs on day one and on go-live night. Nothing is a one-shot.

01

Connect a source store

Read-only credentials for Shopify, BigCommerce, WooCommerce or Magento. We never write back to the source.

02

Review the mapping

Start from a per-platform template, tweak any field, version every change, dry-run on a sandbox first.

03

Load to Shopify

Push every record into the destination store. Errors are click-through, not buried in a log file.

04

Re-run on go-live

Same migration, run again on launch night. Pulls only what changed. Zero duplicates, rollback one click away.

AI-first · MCP

Forward the scope to your favorite AI.

Graftport ships an MCP server. Forward the client's brief to the agent your team already uses, and it comes back with a mapping where every field has been checked against real rows.

Step one — forward the requirement

“Weights are in kg on some products and grams on others, please normalise. Status 1 goes live, everything else stays draft.”

Pasted from the client's email. Unedited.

Step two — the agent worksgraftport mcp
Reply to the agent…

Real context, not guesses

Source schema, Shopify target schema and live sample rows reach the agent as MCP tools it can call.

Every field validated

Each expression is evaluated against real rows before you see it, with a pass count and the edge cases surfaced.

Gated on a human

Loading records into a client's store always waits for your confirm. See the MCP server.

Works with the agents your team already uses

Claude Code
Cursor
Windsurf
GitHub Copilot
Zed

Field mappings

Bend any field into the shape Shopify wants.

Combine fields, fall back, normalise units, derive values, drop into metafields. Dry-run against real source rows, see the exact Shopify result, then publish a new version.

ProductOverride · version 4magento → shopify
Source rowentity_id 12481
{
  "entity_id": "12481",
  "sku": "VLA-2025-OAK",
  "name": "Oak Side Table",
  "weight": "12.5",
  "weight_unit": "kg",
  "status": "1",
  "tags": "furniture,oak,living",
  "stock": [
    { "loc": "berlin",  "qty": 4 },
    { "loc": "antwerp", "qty": 11 }
  ]
}
JSONataedit any field
{
  "title":  name,
  "sku":    sku,
  "status": status = "1"
            ? "ACTIVE"
            : "DRAFT",
  "weight_g": weight_unit = "kg"
    ? $number(weight) * 1000
    : $number(weight),
  "tags":      $split(tags, ','),
  "inventory": $sum(stock.qty)
}
Outputwhat Shopify gets
{
  "title": "Oak Side Table",
  "sku": "VLA-2025-OAK",
  "status": "ACTIVE",
  "weight_g": 12500,
  "tags": [
    "furniture",
    "oak",
    "living"
  ],
  "inventory": 15
}
✓ Evaluated against entity_id 12481dry-run, then publish v5

Live preview, real rows

Pick any source record and see the output exactly as it will land. No ship-it-and-pray.

Versioned, never destructive

Every publish is a new immutable version. Roll back to any prior one with a click.

From simple to surgical

Use the template untouched, or rewrite a single field, or transform all of them.

Compare

The narrow path through this whole mess.

Graftport
DIY in-house
Migration agency
Time to first migration
Hours
2 to 4 weekends
3 to 6 weeks of intake
Multiple brands at once
Unlimited
One at a time
Only if staffed
Mappings you can review
Versioned, dry-runnable
Buried in scripts
In the agency repo
Re-run safely, no duplicates
Built in
DIY
Quoted
Cost before you start
Quoted up front
Per record
Hourly billing
Rollback
One click
DB restore
Quoted

Support

The migration that keeps you up at night? We'll take that one with you.

Most of the time you will not need us. That is the point of the product. But every agency has the one job with a decade of order history, four brands on one database and a launch date that cannot move.

On those, we get in the shared channel, read the mapping, sit through the dry-run, and stay reachable on go-live night. Not a ticket queue. The people who built the pipeline.

What that looks like

  • A shared Slack channel with the engineers, not a support inbox
  • We review your first mapping before you publish it
  • Someone on call with you on go-live night, by arrangement
  • Honest answers when Graftport is the wrong tool for a job

Security

Your client's data is borrowed, not stored.

Source credentials are the most sensitive thing a merchant hands over. Minimum exposure, automatic disposal, per-tenant boundaries from day one.

Read-only by design

We only request view permissions on the source store. No code path writes back to Magento, Shopify, BigCommerce or WooCommerce.

Per-account encryption

Credentials are encrypted at rest with keys derived per account, and decrypted only inside the pipeline runtime.

Strict brand separation

Every brand on your account lives in its own audit boundary. No tenant can read another tenant's data.

EU-hosted, GDPR-friendly

Data stays in the EU. No transfers to US analytics pipelines. One-click wipe of everything we created, on request.

FAQ

Questions agencies ask first.

Something not covered? hello@graftport.com reaches a person, not a queue.

What source platforms do you support?

Shopify (re-platform, consolidate, or split a multi-store), BigCommerce, WooCommerce, and Magento (1.7+ and 2.x). Anything else can be loaded via CSV. Each source has a per-platform guide with a ready-to-use field mapping.

Can I re-run a migration without creating duplicates?

Yes. Every record is tracked by its source identity, so anything already loaded is skipped on the next run. Re-run on go-live night without a single duplicate ending up in the store.

What happens if a mapping is wrong?

Re-edit the mapping, dry-run it, then re-load. Mappings are versioned, so you can revert to any prior version with one click. Re-runs only touch what changed, so nothing leaks into Shopify until you say so.

How does the pricing actually work?

Pricing is quoted case by case so the plan matches the source platforms, brand count and re-run cadence of your migration. Tell us what you're moving and we'll come back with numbers within one business day.

Where does my client's data live?

EU-hosted infrastructure with strict access boundaries per account. Source store credentials are encrypted at rest and wiped on request.

We're an agency. Can we run this for clients?

That's the main use case. Unlimited brands on one account, each in its own audit boundary, with mappings you can review in a pull request and hand to a client as a deliverable.

Talk to us

Bring us your worst migration.

A decade of Magento order history, four brands on one database, a Woo install with nine plugins. Tell us the shape of it and we'll tell you honestly whether Graftport is the right tool.

  • Scope and price back within one business day
  • An honest answer on whether we're the right fit
  • Hands-on support through your first migration