Skip to content

§00Connect

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.

Shopify → Priority
Sandbox

You

“Create Priority ERP orders from Shopify and keep stock, shipments, refunds and cancellations in sync.”

PartnerMCP· I will:

  1. 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.
  2. 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.
  3. 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.
  4. Reconcile Priority’s TOTPRICE, which includes tax, with what Shopify charged, and flag rounding or tax-rule differences instead of overwriting them.
  5. Watch the Priority documents that move stock with $since, re-read those parts’ warehouse balances and set Shopify’s available quantity per location with inventorySetQuantities.
  6. When Priority ships, create the Shopify fulfillment on the order’s fulfillment orders — with tracking where your shipments record it.
  7. Carry refunds and cancellations into Priority by your finance rules, and send anything already shipped or invoiced to review.
  8. 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 placedCustomer matchSchema mappingCreate sales orderMonitor fulfillmentShipmentFulfill + trackingInventory levelsRefunds & cancellations
Integration plan: Shopify ↔ Priority ERP. Shopify to Priority ERP.
  1. Order placed — Shopify: Trigger · webhooks
  2. Customer match — PartnerMCP: Customer ⇄ CUSTOMERS
  3. Schema mapping — PartnerMCP: SKUs · taxes · shipping
  4. Create sales order — Priority ERP: ORDERS + ORDERITEMS_SUBFORM
  5. Monitor fulfillment — PartnerMCP: picking · shipping · returns
  6. Shipment — Priority ERP: DOCUMENTS_D
  7. Fulfill + tracking — Shopify: Fulfillment
  8. Inventory levels — Shopify: InventoryLevel
  9. Refunds & cancellations — Priority ERP: Credit memo
Product preview · sample data
§01—What syncs

What syncs, and which way.

Every record that moves between Shopify and Priority: what starts it, and what it produces on the other side.

ShopifyPriority
  1. 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.
  2. 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.
  3. 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.
  4. Shopify to Priority ERP:

    Refund → Priority credit memo
    When
    refunds/create webhook
    Result
    A credit memo against the invoice, following your finance rules.
  5. 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.
§02—Field mapping

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.

Shopify ⇄ Priority
Draft
  1. Order.name

    to ORDERS.XXXX_SHOPORD (custom column)

    Looked up before every create

    Rule
    Shopify’s order name (#1001) is the duplicate guard. Custom columns carry your four-letter prefix.
  2. Customer.defaultEmailAddress

    to CUSTOMERS.EMAIL

    Match key for returning buyers

    90% confidence
    Customer.email is deprecated in Shopify’s 2026-10 API; defaultEmailAddress replaces it.
  3. Customer.displayName

    to CUSTOMERS.CUSTDES

    Trim to the column’s length, read from metadata

    90% confidence
    Only when each buyer gets a Priority customer; otherwise orders go to your web-sales customer.
  4. Order.shippingAddress

    to ORDERS.SHIPTO2_SUBFORM

    Address lines mapped from the tenant’s metadata

    85% confidence
  5. LineItem.sku

    to ORDERITEMS_SUBFORM.PARTNAME

    Must exist in LOGPART

    95% confidence
  6. LineItem.currentQuantity

    to ORDERITEMS_SUBFORM.TQUANT

    Excludes refunded and removed units

    93% confidence
    LineItem.quantity still counts removed units; currentQuantity doesn’t.
  7. LineItem.discountedUnitPriceAfterAllDiscountsSet

    to ORDERITEMS_SUBFORM.PRICE

    Shop currency; tax removed when Order.taxesIncluded is true

    86% confidence
    discountedUnitPriceSet leaves out order-level and code discounts. Shopify calls both values approximate, so the order total is reconciled.
  8. Order.shippingLines

    to ORDERITEMS_SUBFORM (shipping part)

    One line, on the part you designate for shipping charges

    80% confidence
  9. Order.currentTotalPriceSet

    to ORDERS.TOTPRICE — reconciled, not written

    Both include tax; compared once Priority has priced the order

    Rule
    currentTotalPriceSet is after returns; totalPriceSet is before.
  10. WARHSBAL.TBALANCE

    to InventoryLevel · available

    Priority warehouse → Shopify location; compare-and-set

    82% confidence
    WARHSBAL is Priority’s Warehouse Balances query form; its API path is confirmed on your tenant.
  11. DOCUMENTS_D.DOCNO

    to Fulfillment (fulfillmentCreate)

    The shipment number kept as the reference

    90% confidence
9 field mappings · 2 rules Confidence Lower, or verify on tenant
Product preview · sample data
§03—Edge cases

Edge cases, handled.

What goes wrong between Shopify and Priority in production, and what PartnerMCP does about it.

  1. 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.

  2. 02

    Discount codes hide in one price field

    Shopify’s discountedUnitPriceSet leaves out order-level and code-based discounts; discountedUnitPriceAfterAllDiscountsSet includes them. PartnerMCP takes the price the customer actually paid, so a promotion doesn’t turn into an unexplained gap between Shopify and Priority.

  3. 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.

  4. 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.

  5. 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.

  6. 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.

  7. 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.

  8. 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.

§04—Questions

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.

§05—References

§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.