Shopify ↔ Priority ERP
Every Shopify order in Priority. Every stock change back in Shopify.
Online orders arrive in bursts, and Priority is where they become documents — a sales order, a shipment, an invoice — and where stock is actually counted. Without an integration, someone exports orders from Shopify and imports them into Priority, while the store keeps selling what the warehouse no longer has. PartnerMCP creates each Shopify order in Priority as it’s placed, keeps Shopify’s available quantities in line with Priority’s warehouse balances, and carries shipments, refunds and cancellations across.
You
“Create Priority ERP orders from Shopify and keep stock, shipments, refunds and cancellations in sync.”
PartnerMCP· I will:
- Subscribe to orders/paid (or orders/create), orders/cancelled and refunds/create, verify every X-Shopify-Hmac-SHA256 signature and de-duplicate on X-Shopify-Webhook-Id.
- Match the buyer to a Priority customer by email — or post to the single web-sales customer you choose — and keep each delivery address on its own order.
- Create the sales order in ORDERS: SKU to PARTNAME, quantity to TQUANT, the price the customer actually paid to PRICE, and shipping as its own line.
- Reconcile Priority’s TOTPRICE, which includes tax, with what Shopify charged, and flag rounding or tax-rule differences instead of overwriting them.
- Watch the Priority documents that move stock with $since, re-read those parts’ warehouse balances and set Shopify’s available quantity per location with inventory
Set Quantities. - When Priority ships, create the Shopify fulfillment on the order’s fulfillment orders — with tracking where your shipments record it.
- Carry refunds and cancellations into Priority by your finance rules, and send anything already shipped or invoiced to review.
- Queue orders during a sale to stay under Priority Cloud’s per-user limit, and reconcile against Shopify every day so a missed webhook can ’t lose an order.
- Order placed — Shopify: Trigger · webhooks
- Customer match — PartnerMCP: Customer ⇄ CUSTOMERS
- Schema mapping — PartnerMCP: SKUs · taxes · shipping
- Create sales order — Priority ERP: ORDERS + ORDERITEMS_SUBFORM
- Monitor fulfillment — PartnerMCP: picking · shipping · returns
- Shipment — Priority ERP: DOCUMENTS_D
- Fulfill + tracking — Shopify: Fulfillment
- Inventory levels — Shopify: InventoryLevel
- Refunds & cancellations — Priority ERP: Credit memo
What syncs, and which way.
Every record that moves between Shopify and Priority: what starts it, and what it produces on the other side.
Shopify to Priority ERP:
Order → ORDERS + ORDERITEMS_SUBFORM- When
- orders/paid or orders/create webhook, HMAC-verified
- Result
- Priority sales order with a line per SKU and the delivery address in SHIPTO2_
SUBFORM; the Shopify order name kept for duplicate checks.
Priority ERP to Shopify:
WARHSBAL → InventoryLevel- When
- $since on stock-moving documents: Customer Shipments (DOCUMENTS_
D), goods receipts (DOCUMENTS_ P), transfers (DOCUMENTS_ T) - Result
- Shopify’s available quantity set per location — only for the parts that moved.
Priority ERP to Shopify:
DOCUMENTS_D → Fulfillment- When
- Customer Shipment created, or its status changes
- Result
- fulfillmentCreate on the order’s FulfillmentOrders; the shipment number kept as the reference.
Shopify to Priority ERP:
Refund → Priority credit memo- When
- refunds/create webhook
- Result
- A credit memo against the invoice, following your finance rules.
Shopify to Priority ERP:
Cancellation → ORDERS- When
- orders/cancelled webhook
- Result
- Untouched orders canceled in Priority; orders that already have a shipment or invoice held for review.
Field by field.
Every mapping PartnerMCP proposes, with its transformation and confidence. Rules — keys, reconciliation, duplicate guards — carry no confidence: they’re decided and approved, not inferred.
Order.
name to ORDERS.
XXXX_ SHOPORD (custom column) Looked up before every create
RuleShopify’s order name (#1001) is the duplicate guard. Custom columns carry your four-letter prefix.Customer.
default Email Address to CUSTOMERS.
EMAIL Match key for returning buyers
90% confidenceCustomer.email is deprecated in Shopify’s 2026-10 API; defaultEmailAddress replaces it. Customer.
displayName to CUSTOMERS.
CUSTDES Trim to the column’s length, read from metadata
90% confidenceOnly when each buyer gets a Priority customer; otherwise orders go to your web-sales customer.Order.
shipping Address to ORDERS.
SHIPTO2_ SUBFORM Address lines mapped from the tenant’s metadata
85% confidenceLineItem.
sku to ORDERITEMS_
SUBFORM. PARTNAME Must exist in LOGPART
95% confidenceLine
Item. current Quantity to ORDERITEMS_
SUBFORM. TQUANT Excludes refunded and removed units
93% confidenceLineItem.quantity still counts removed units; currentQuantity doesn’t. Line
Item. discounted Unit Price After All Discounts Set to ORDERITEMS_
SUBFORM. PRICE Shop currency; tax removed when Order.
taxesIncluded is true 86% confidencediscountedUnit Price Set leaves out order-level and code discounts. Shopify calls both values approximate, so the order total is reconciled. Order.
shippingLines to ORDERITEMS_
SUBFORM (shipping part) One line, on the part you designate for shipping charges
80% confidenceOrder.
current Total Price Set to ORDERS.
TOTPRICE — reconciled, not written Both include tax; compared once Priority has priced the order
RulecurrentTotalPriceSet is after returns; totalPriceSet is before.WARHSBAL.
TBALANCE to Inventory
Level · available Priority warehouse → Shopify location; compare-and-set
82% confidenceWARHSBAL is Priority’s Warehouse Balances query form; its API path is confirmed on your tenant.DOCUMENTS_
D. DOCNO to Fulfillment (fulfillment
Create) The shipment number kept as the reference
90% confidence
Edge cases, handled.
What goes wrong between Shopify and Priority in production, and what PartnerMCP does about it.
- 01
Tax-inclusive prices
Stores that show prices including tax set Order.
taxesIncluded; Priority’s line PRICE is before tax. PartnerMCP derives the pre-tax price from each line’s tax lines and reconciles the order against TOTPRICE, so a rounding difference is visible instead of buried. - 02
Discount codes hide in one price field
Shopify’s discounted
Unit Price Set leaves out order-level and code-based discounts; discounted Unit Price After All Discounts Set includes them. PartnerMCP takes the price the customer actually paid, so a promotion doesn’t turn into an unexplained gap between Shopify and Priority. - 03
Sales spikes versus fair use
A sale can produce more orders per minute than Priority Cloud accepts calls — 100 per minute per API user, up to 15 at once. PartnerMCP acknowledges each webhook within Shopify’s five-second window, queues the order and creates it in Priority at a steady pace, oldest first.
- 04
Webhooks need a safety net
Shopify retries a failed delivery 8 times over 4 hours, then deletes a subscription created through the Admin API, and deliveries arrive in no guaranteed order. PartnerMCP de-duplicates on X-Shopify-Webhook-Id, re-reads each order from the GraphQL Admin API and runs the reconciliation job Shopify recommends.
- 05
Stock is a balance, not an event
Priority computes Warehouse Balances (WARHSBAL) from warehouse transactions. PartnerMCP watches the documents that move stock, re-reads only the parts they touched, and writes Shopify quantities with changeFromQuantity — a stale value fails instead of overwriting a newer one — plus the idempotency key Shopify requires since API 2026-04.
- 06
Locations aren’t warehouses
Shopify counts stock per location; Priority per warehouse. PartnerMCP maps each Shopify location to the Priority warehouses that feed it and publishes only those, so stock you hold back for B2B customers or quality checks stays out of the store.
- 07
Canceling after shipping
Priority’s Cancel Sales Order action needs every document opened from the order canceled first, and the REST API can’t run actions. PartnerMCP cancels untouched orders through Priority’s Web SDK; an order that already has a shipment or an invoice goes to review.
- 08
A refund is money; a return is goods
A Shopify refund becomes a credit memo in Priority’s invoice forms; goods go back into stock only when the return is received. PartnerMCP keeps the two apart, so a goodwill refund never adds stock that isn’t on the shelf.
Questions about Shopify and Priority.
One Priority customer per shopper, or one web customer?
Either. Some finance teams post every web order to one web-sales customer and keep the delivery address on each order; others want a Priority customer per buyer, matched by email on repeat orders. PartnerMCP asks, and the plan shows the choice.
Sales order, or an over-the-counter invoice?
It depends on how you ship and bill. Order → shipment → invoice suits stock you pick and pack; Priority’s Over-the-Counter Invoices record a sale and its payment in one document. PartnerMCP builds the flow your finance team signs off, on the forms they already use.
Which Shopify API does it use?
The GraphQL Admin API — Shopify’s REST Admin API has been legacy since October 2024. PartnerMCP pins the quarterly API version the integration was tested on (each is supported for at least 12 months) and treats an upgrade as a reviewed change.
Can we bring in older orders?
Shopify exposes only the last 60 days of orders by default; older ones need the read_all_orders scope, which Shopify approves separately. Backfills run as bulk operations, which don’t count against query-cost limits.
Does Priority have to be on Priority Cloud?
No. On Priority Cloud, PartnerMCP connects to your tenant over HTTPS. On-premises, the Edge Agent is designed to connect out from your network, so Priority never needs a public endpoint.
Vendor documentation.
The public documentation behind the technical details on this page.
- Shopify — Order object (GraphQL Admin API)shopify.dev (opens the vendor’s site in a new tab)
- Shopify — LineItem objectshopify.dev (opens the vendor’s site in a new tab)
- Shopify — inventorySetQuantitiesshopify.dev (opens the vendor’s site in a new tab)
- Shopify — fulfillmentCreateshopify.dev (opens the vendor’s site in a new tab)
- Shopify — webhooksshopify.dev (opens the vendor’s site in a new tab)
- Shopify — API rate limitsshopify.dev (opens the vendor’s site in a new tab)
- Priority REST API — queries and $sinceprioritysoftware.github.io (opens the vendor’s site in a new tab)
- Priority REST API — create, update and $batchprioritysoftware.github.io (opens the vendor’s site in a new tab)
- Priority SDK — conditions of record display (Warehouse Balances)prioritysoftware.github.io (opens the vendor’s site in a new tab)
- Priority SOP — Sales Orderscdn.priority-software.com (opens the vendor’s site in a new tab)
Product names and logos are trademarks of their respective owners. Their use indicates compatibility only and does not imply endorsement or partnership.
§06Build
Build this integration.
Start from this plan, or change it in your own words. PartnerMCP builds it against your Shopify and Priority: sandbox first, production when you approve.