Commerce Software

Your ERP Data, Perfectly Mirrored in Shopify

Automated synchronization of products, variants, prices, media, metafields, translations, and warehouse stock — from structured ERP exports straight into your Shopify store. Change-aware, oversell-safe, fully auditable.

01

Catalog Automation

The ERP remains the single source of truth — products, prices, media, and stock flow to Shopify without manual maintenance or copy-paste errors

02

Oversell Protection

On-hand-based inventory writes preserve committed order stock, so aggressive sync schedules never cause overselling

03

SEO Stability

Checksum-based media diffing keeps Shopify image URLs permanent, protecting Google image rankings and Merchant Center feeds through every catalog update

04

Operational Trust

Dry runs, full diff previews, snapshot exports, and per-run audit logs make every change verifiable and reversible

What it's about

PM Shopify Product Sync

PM Shopify Product Sync connects your ERP system to Shopify without manual product maintenance. The tool reads structured JSON exports from your ERP, groups variant records into complete Shopify products, and syncs everything through the Shopify GraphQL Admin API — titles, descriptions, variants, prices, images, videos, metafields, collections, and translations.

Every sync run is change-aware: only data that actually changed is written to Shopify. Images keep their stable Shopify media URLs so Google and Merchant Center indexing is never disrupted. Prices with expiration dates handle themselves. Products go active or draft automatically based on your ERP's status flags.

A second module keeps your inventory honest: warehouse stock from XLS, XLSX, or CSV exports is pushed to Shopify as on-hand quantities — a deliberate design choice that preserves committed order stock and prevents overselling. Run everything from a browser dashboard with real-time progress, or fully automated via cron.

PM Shopify Product Sync is developed and operated by premotion media. Deployment and pricing are available on request.

Features

Thought through to the daily workflow.

Every building block is focused on a clear benefit and fits into existing processes.

01
Feature Section

The tool ingests variant-level JSON exports from your ERP, merges records that belong to the same product group, and builds complete Shopify products with color and size options. The designated master record supplies title, description, tags, and metafields; every record becomes a Shopify variant identified by its SKU.

01

Product & Variant Sync — From ERP Records to Complete Shopify Products

The tool ingests variant-level JSON exports from your ERP, merges records that belong to the same product group, and builds complete Shopify products with color and size options. The designated master record supplies title, description, tags, and metafields; every record becomes a Shopify variant identified by its SKU. Product creation follows Shopify's current best practices: the product shell is created first, then variants are added in bulk with atomic replacement of the auto-generated default variant — avoiding the option collisions that break naive importers.

  • Automatic grouping of variant records into one Shopify product per group ID
  • Color and size options with smart detection — accessories without meaningful sizes get a color option only
  • Bulk variant create, update, delete, and archive operations
  • Per-variant fallback: one bad SKU never blocks the rest of the product
  • Field-by-field change detection — untouched data is never rewritten
  • Automatic collection assignment via configurable category mapping
02

Media Sync — SEO-Stable Images with a 10-Rule Diff Engine

Product images are business-critical: their Shopify URLs are indexed by Google and referenced in Merchant Center feeds. PM Shopify Product Sync never re-uploads an unchanged image. A checksum-based diff engine with ten decision rules determines per image slot whether to upload, replace, or keep existing media — so stable images keep their permanent Shopify URLs forever.

  • MD5 checksum and filename comparison per media slot
  • Upload, replace, keep, and reorder decisions computed per image
  • Video support alongside images
  • Media sort order synced from your ERP export
  • Orphan media cleanup: images no longer in the ERP are removed automatically after the full product is synced
  • Force-media mode to deliberately re-evaluate everything, for example after a CDN migration
03

Price Sync — Sale Logic and Auto-Expiring Special Prices

Prices flow from up to three sources with a clear override hierarchy: a dedicated price export beats embedded status prices, which beat the base product export. Special prices carry expiration dates and retire themselves — no manual cleanup after a sale ends.

  • Active special price becomes the Shopify price, with the retail price shown as compare-at price
  • Expired or zero special prices automatically restore the regular retail price and clear the compare-at price
  • Wholesale prices stored as variant metafields for B2B use cases
  • Price-only sync mode for fast, frequent updates — for example hourly via cron
  • Supports Microsoft .NET date format in expiration fields, as produced by many ERP systems
04

Active Status Control — Products Go Live and Offline Automatically

Your ERP decides what is sellable. A dedicated status export activates and deactivates variants; the tool translates that into Shopify product status: if any variant in a group is active, the product is set to Active — if all variants are inactive, it becomes a Draft.

  • Simple SKU-list format or detailed per-record format
  • Product-level Active/Draft status derived automatically from variant states
  • Status-only sync mode for high-frequency runs, for example every 15 minutes
  • Orphan variant handling: variants missing from the export are archived (price set to zero, ID preserved) or deleted — your choice
05

Metafields & Translations — Structured Data in Every Language

Product attributes, care symbols, material compositions, bullet points, and wholesale prices are written as Shopify metafields with content-hash change detection and batched mutations. Multilingual stores are first-class: the tool registers translations for titles, descriptions, and metafields via Shopify's translation API.

  • Product and variant metafields synced in batches with change detection
  • Digest-based translation registration — only changed translations are re-registered
  • Configurable master locale and any number of translation locales
  • German and English product data supported out of the box, extendable per locale
  • Locale filter to sync a single language on demand
06

Warehouse Stock Sync — Oversell-Safe Inventory from XLS Exports

The inventory module reads warehouse stock from XLS, XLSX, or CSV files and pushes it to Shopify as on-hand quantities — never as available quantities. Shopify then calculates availability itself, which means stock committed to open orders is always preserved and the store cannot oversell during a sync. A step-by-step wizard makes every run verifiable: parse the file, fetch current Shopify inventory, review a full diff of every change, then apply in batches. Before writing anything, you can export a snapshot of current Shopify stock as XLSX for manual rollback.

  • Automatic column detection with German and English header aliases
  • Configurable warehouse-to-Shopify-location mapping: sum, split, or exclude warehouses
  • Full diff preview with delta and estimated post-sync availability per SKU
  • Items with committed order stock are flagged before applying
  • Filters by SKU, parent article, category, and brand for targeted syncs
  • XLSX snapshot export and a JSONL audit log recording every change with timestamp, user, and run ID
  • Runs standalone or embedded inside the Shopify Admin
07

Web Dashboard & CLI — Interactive Control and Full Automation

Every sync can be started from a clean, German-language browser dashboard with live progress via server-sent events, a result summary grid, and an integrated log viewer. The same pipeline is available as a command-line tool for cron automation — full syncs overnight, price updates hourly, status updates every quarter hour.

  • Web UI with real-time progress bar, result summary, and log viewer
  • Dry-run mode: preview every change without writing to Shopify
  • Five sync modes: full, products, prices, status, media
  • Single-group debug mode to sync one product in isolation
  • Basic Auth and CSRF protection on the web interface, plus optional IP whitelisting
  • Cron-ready CLI with configurable log levels
08

Reliability Engineering — Built for Unattended Operation

The sync is designed to run every night without a human watching. Failed products and variants are remembered and retried first on the next run. If a product was deleted in Shopify by hand, the tool detects the dead reference and recreates it. API throttling is handled adaptively based on Shopify's actual cost budget feedback.

  • Retry-first queue: previously failed entities are processed first on the next run
  • Dead reference recovery: externally deleted products are detected and recreated
  • Cost-based GraphQL throttling with exponential backoff on rate limits and server errors
  • Complete audit trail of every sync operation per run, with configurable retention
  • Local ID-to-Shopify mapping database enables fast, precise incremental updates
How it works

A clear path to the result.

  1. 01

    Step 1 — Connect Your Store

    Configure your Shopify store domain and credentials — either a static access token or modern OAuth client credentials with automatic token refresh. Grant the required product, inventory, and translation scopes.

  2. 02

    Step 2 — Provide Your ERP Exports

    Place your ERP's JSON exports in the data directory: the product export as the source of truth, plus optional price and status override files. For inventory, upload your warehouse XLS, XLSX, or CSV export.

  3. 03

    Step 3 — Map Your Structure

    Map ERP category IDs to Shopify collections and warehouse identifiers to Shopify locations. Set your master locale and translation locales.

  4. 04

    Step 4 — Preview with Dry Run

    Run a dry run from the CLI or the dashboard. Review exactly what would be created, updated, or removed — no changes are written to Shopify.

  5. 05

    Step 5 — Sync and Automate

    Start the sync from the browser with live progress, or schedule it via cron: full sync nightly, prices hourly, status every 15 minutes. The retry-first engine and audit log keep unattended runs reliable and traceable.

Who is it for?

Made for concrete requirements.

The solution is a particularly good fit for these teams, roles and business models.

Fashion & Apparel Merchants

Built for the realities of fashion data: color and size variant matrices, seasonal special prices with expiration dates, care symbols, material compositions, and per-color image sets — all mapped cleanly to Shopify's product model.

Merchants with an ERP System

If your ERP is the source of truth, your shop should follow it automatically. Structured exports go in; a fully maintained Shopify catalog comes out — no manual product editing, no copy-paste errors.

Multi-Warehouse Retailers

Aggregate stock from multiple warehouses into one Shopify location, split it across locations for B2B and B2C, or exclude warehouses entirely — with a full diff preview before any quantity changes.

Multilingual Shopify Stores

German master data with English translations out of the box, extendable to any set of locales via Shopify's native translation system.

E-Commerce Agencies

Operate product data pipelines for clients with dry runs, audit logs, snapshot exports, and a dashboard clients can monitor — while cron handles the day-to-day.

SEO-Conscious Store Owners

Image URLs stay stable across syncs, so Google image rankings and Merchant Center feeds are never disrupted by a catalog update.

Tech & scope

The key details at a glance.

Platform
Shopify (GraphQL Admin API 2026-01)
Runtime
PHP 8.3+
Database
MariaDB 10.6+ or MySQL 8.0+
Import formats
JSON (products, prices, status), XLS/XLSX/CSV (stock)
Interfaces
Web dashboard (real-time progress) + CLI for cron
Authentication to Shopify
Static token or OAuth client credentials (auto-refresh)
Web UI security
Basic Auth, CSRF protection, optional IP whitelist
Audit
Per-run job log, JSONL stock audit log, configurable retention
Quality assurance
80+ automated tests, static analysis (PHPStan level 5)
UI language
German
Content languages
German, English — additional locales configurable
Author
premotion media
Deployment & pricing
Available on request from premotion media
FAQ

Frequently asked questions.

Which data does PM Shopify Product Sync transfer to Shopify?

Products with titles, descriptions, and tags; variants with SKU, price, barcode, and weight; images and videos including sort order; product and variant metafields; translations; collection assignments; active/draft status; and warehouse stock levels.

Will syncing break my Google image rankings?

No. The media engine compares checksums per image slot and only touches images that actually changed. Unchanged images keep their permanent Shopify URLs, so Google indexing and Merchant Center feeds stay intact across every sync.

How does the stock sync prevent overselling?

It writes on-hand quantities instead of available quantities. Shopify then calculates availability itself by subtracting committed and reserved stock — so quantities reserved for open orders are never overwritten, even if a customer buys during the sync.

Can I preview changes before anything is written to Shopify?

Yes. The product sync has a full dry-run mode, and the stock sync uses a step-by-step wizard that shows a complete diff of every change — old value, new value, and delta per SKU — before you apply anything.

Does it work with my ERP system?

The product sync reads structured JSON exports and the stock sync reads XLS, XLSX, or CSV files with automatic column detection for German and English headers. If your ERP can export in these formats, it can feed the sync. premotion media can advise on mapping your specific export format.

Can everything run automatically?

Yes. The CLI is designed for cron scheduling: full sync nightly, price updates hourly, status updates every 15 minutes — each mode runs independently. Failed items are retried first on the next run, and every operation is logged.

What happens to products or variants that disappear from my ERP export?

You decide. Orphan variants can be archived — price set to zero while keeping their Shopify ID stable — or deleted entirely. Orphan media is cleaned up automatically once the complete product has been synced.

Is the tool ready for Shopify's current API requirements?

Yes. It targets the Shopify GraphQL Admin API version 2026-01, uses the current product model with bulk variant mutations, and supports the modern OAuth client credentials flow with automatic token refresh alongside classic static tokens.

Ready?

Set Up Once. Synced Every Day.

PM Shopify Product Sync turns your ERP exports into a fully maintained Shopify store — products, variants, prices, media, metafields, translations, and warehouse stock, all synchronized automatically and safely. Change-aware writes protect your SEO. On-hand inventory logic protects you from overselling. Dry runs and audit logs keep you in control. Talk to premotion media about connecting your ERP to Shopify — deployment and pricing are available on request.

Discuss your project