GitHub

Bring the catalog. Keep the URLs.

Your data goes into a database schema you can read and query.

Three steps.

Test each step against a copy of the database first.

shopify
catalogmediathe rest
postgres
01

Import the catalog

Connect Shopify with Admin OAuth and pull products, variants, options, and images across. Each run is recorded as an ImportRun with per-record results, so a partial import is visible rather than mysterious.

02

Move the media

Images land in your own S3 bucket and stay associated with the products that use them. Nothing depends on a CDN you don't control.

03

Load everything else

Customers, historical orders, and reviews are ordinary inserts against a documented Prisma schema. Write the script once, run it against a copy, then run it for real.

What stops it going wrong.

Problems show up during the import, not weeks afterwards.

  • Slug and SKU uniqueness is enforced by Postgres, so duplicate rows fail loudly on import instead of quietly winning.
  • Old product URLs keep working, because a slug change leaves a redirect behind it.
  • Historical orders carry their own base-currency totals, so imported revenue doesn't drift with today's exchange rate.
  • Stock arrives as movements, so the ledger reconciles from day one instead of starting with an unexplained balance.

What you take on.

Know these before you start.

You take on hosting

Postgres, Redis, S3, and the deploy target become yours to run and back up. That is the trade for owning the system.

Checkout needs Stripe

Browsing and carts work without it, but taking money means your own Stripe account and keys.

There is no app store

Anything niche you relied on a paid app for is now something you build, integrate, or do without.