Connect Shopify to Pipe17

The Shopify connector enables integration between your Shopify storefront and Pipe17. Shopify is a leading cloud-based eCommerce platform supporting direct-to-consumer and wholesale sales, with built-in order management, product catalog, and inventory tracking.

Key capabilities:

  • Pull orders from Shopify into Pipe17 for routing and fulfillment
  • Push fulfillment confirmations and tracking back into Shopify
  • Pull fulfillments from Shopify into Pipe17
  • Push orders from Pipe17 into Shopify
  • Sync inventory levels from Pipe17 into Shopify to keep stock counts accurate
  • Detect cancellations in Shopify and update Pipe17 order statuses accordingly
  • Sync returns between Pipe17 and Shopify in both directions
  • Pull payout statements from Shopify into Pipe17

Supported API version: Shopify REST Admin API 2024-10
Authentication: OAuth
Rate limits: 2 requests/sec REST (leaky bucket, 40-request burst), 1,000 points/sec GraphQL


Setup

Prerequisites

Before configuring the connector, ensure you have:

  1. A Shopify store on the Basic plan or higher.
  2. A Shopify account with Owner permissions or the Apps and sales channels staff permission.
  3. Your store's myshopify.com subdomain (e.g., yourstore.myshopify.com).

Steps

1. Start the OAuth flow

  • In Pipe17, navigate to Integrations → Add Integration.
  • Select Shopify from the catalog.
  • Enter your Store URL (e.g., yourstore.myshopify.com) and click Connect.
  • You will be redirected to Shopify to authorize the Pipe17 app. Log in with an account that has Owner or Apps permissions.
  • After approving the required scopes, you will be redirected back to Pipe17. The connection is created automatically - no manual token entry is required.

If you have multiple Shopify stores, you can repeat this process to connect additional stores.

2. Configure webhooks in Shopify

  • The connector automatically registers the required webhooks on first save.
  • To verify, go to Shopify Admin → Settings → Notifications → Webhooks.
  • If webhooks are missing, re-save the connector to re-register them.

You can read more about staff permissions on Shopify's help documentation.


Settings

Connection settings

Setting Description Default
Store URL Your Shopify store's myshopify.com domain (e.g., yourstore.myshopify.com). Set automatically after OAuth - read-only. None

Integration settings

Orders

Setting Description Options / Default
Exclude orders created before this date Orders created before this date are not pulled into Pipe17. If left blank, the default is the date the integration was created. Date/time field; defaults to integration creation date
Process only regular Shopify orders, POS Shopify orders, or both types of orders from Shopify Controls which Shopify order types the app ingests. Regular orders / POS orders / Both; default: Regular orders
Process only orders assigned to specific channels in Shopify Restricts order ingestion to specific Shopify sales channels. Leave blank to pull from all channels. Text field; blank = all channels
Never process orders matching following Shopify note attributes values Orders with note attributes matching any value in this list are excluded. Each element is an attribute name and match pattern separated by a semicolon. Text field
Process only orders with specific order ID patterns Restricts ingestion to orders whose IDs match the specified patterns. Pure string value = precise match (case-insensitive); string wrapped in / / = regex pattern. Text field
Process only orders with following financial statuses Limits ingestion to orders with the specified Shopify payment statuses. If blank, only paid, refunded, and partially refunded orders are pulled. Multi-value tag field; default: paid, refunded, partially refunded
Process only orders with following fulfillment statuses Limits ingestion to orders with the specified Shopify fulfillment statuses. If blank, orders of any fulfillment status are pulled. Multi-value tag field; blank = all statuses
Process only orders assigned following tags Only orders carrying these Shopify tags are pulled. If left blank, all orders are pulled. Text field; blank = all orders
Only process line items with unmatched SKUs Pulls only line items whose SKUs do not exist in Pipe17's catalog. Pure string = precise match (case-insensitive); string wrapped in / / = regex pattern. Regex/string field
Never process line items with matched SKUs (regex) Excludes line items whose SKUs match the specified pattern. Regex/string field
Pull only orders allocated to warehouses tied with fulfillment locations in Pipe17? When enabled, only orders allocated to warehouses linked to Pipe17 fulfillment locations are pulled. Toggle; default: off
Always pull Amazon Buy with Prime orders When on, orders containing Prime line items are pulled without a warehouse allocation check. Toggle; default: off
Adjust order line item price when taxes are reported as included in price by Shopify When enabled, the app adjusts line item prices to back out tax amounts reported as included by Shopify. Toggle; default: off
Pull payments information available for Shopify orders When enabled, payment details associated with Shopify orders are pulled into Pipe17. Toggle; default: off
Collect localized fields for orders when order shipping country is not in the list below Pulls localized order fields when the shipping country is outside the specified list. Empty value means localized fields are collected for all orders. Country code list field; default: US
Fetch company profile while pulling orders from Shopify When enabled, the company profile associated with each order is fetched from Shopify during order ingestion. Toggle; default: off
Update Shopify order note with a link to the Pipe17 order page When enabled, the app appends a link to the corresponding Pipe17 order page in the Shopify order note field. Toggle; default: off
Apply following tag to Shopify order, when order is successfully created in Pipe17 This tag is added to the Shopify order when the order is successfully ingested into Pipe17. Text field; default: pipe17_accepted
Apply following tag to Shopify order, when order is sent to fulfillment in Pipe17 This tag is added to the Shopify order when the order is sent to fulfillment in Pipe17. Text field; default: pipe17_routed
Apply following tag to Shopify order, when order is cancelled in Pipe17 This tag is added to the Shopify order when the order is cancelled in Pipe17. Text field; default: pipe17_cancelled
Push order tags updates from Pipe17 to Shopify When enabled, tag changes made in Pipe17 are pushed back to the corresponding Shopify order. Toggle; default: off
Automatically resolve conflicts caused by duplicate customer email or phone while pushing orders to Shopify When enabled, the app resolves duplicate email or phone conflicts automatically when pushing orders to Shopify. Toggle; default: off
Automatically remove incorrect values for customer email and/or phone while pushing orders to Shopify When enabled, invalid email or phone values are stripped before orders are pushed to Shopify. Toggle; default: off
Split shippable order lines according to Fulfillment Order(s) statuses in Shopify When enabled, shippable line items are split based on Shopify Fulfillment Order statuses. Toggle; default: off
Collect delivery method information according to Fulfillment Order(s) in Shopify When enabled, delivery method details are collected from Shopify Fulfillment Orders. Toggle; default: off
Update Shopify fulfillment order structure to reflect Pipe17 shipments When enabled, the Shopify fulfillment order structure is updated to match how Pipe17 has split and routed shipments. Toggle; default: off
Only allow order updates for orders with a matching Pipe17 order status Restricts outbound order updates to orders that have one of the specified Pipe17 statuses. If blank, updates apply to orders in any status. Multi-value tag field; e.g., draft, new, onHold, toBeValidated, reviewRequired, readyForFulfillment

Outbound orders matching

Setting Description Options / Default
Apply rules below only to orders with matching Pipe17 status Scopes the outbound order rules to orders with the specified Pipe17 statuses. Only orders with the specified statuses are processed. Text field; blank = all statuses
Apply rules below only to orders with matching Pipe17 order sources Scopes the outbound order rules to orders originating from the specified Pipe17 sources. Empty value matches any order source; specific source value defines a precise match; regex pattern can be wrapped in / / (e.g., /tagValue/). Text field; blank = all sources
Apply rules below only to orders with matching Pipe17 tags Scopes the outbound order rules to orders carrying the specified Pipe17 tags. Empty value matches any order tag; specific value defines a precise match; regex pattern can be wrapped in / /. Text field; blank = all tags

Order flow

Setting Description Options / Default
Matched orders should be pushed to Shopify for fulfillment process Matched orders are sent to Shopify to initiate the Shopify fulfillment process. Radio button
Matched orders should be pushed to Shopify for order tracking Matched orders are sent to Shopify for tracking purposes only, without initiating fulfillment. Radio button
Once order is pushed to Shopify, mark it as 'sentToFulfillment' in Pipe17 When enabled, the order status in Pipe17 is updated to sentToFulfillment as soon as it is pushed to Shopify. Toggle; default: off
Default orders location The default Shopify location matched orders are pushed to. Dropdown
Hold & release fulfillment orders in Shopify according to Pipe17 order status When enabled, Shopify fulfillment orders are held or released based on the corresponding Pipe17 order status. Toggle; default: off
Allow applying updates to orders in Shopify When enabled, subsequent updates to orders in Pipe17 are applied to the corresponding orders in Shopify. Toggle; default: off

Fulfillments

Setting Description Options / Default
Disable sending shipping notification for specific Shopify order ID patterns Suppresses the Shopify shipping notification for orders whose IDs match the specified pattern. Pure string = precise match (case-insensitive); string wrapped in / / = regex pattern. Regex/string field
Allow swap to actual fulfillment locations When enabled, the app swaps fulfillment location assignments to reflect the actual locations used during fulfillment. Toggle; default: off
Allow pulling fulfillments for orders originated in Shopify and fulfillable in Pipe17 When enabled, fulfillments for Shopify-originated orders that can be fulfilled in Pipe17 are pulled into the app. Toggle; default: off
Cancel order line items in Shopify for rejected fulfillments When enabled, line items are cancelled in Shopify when their associated fulfillment is rejected in Pipe17. Toggle; default: off
Cancel order line items in Shopify for canceled shipping requests When enabled, line items are cancelled in Shopify when their associated shipping request is cancelled in Pipe17. Toggle; default: off
Cancel order in Shopify when all order line items are canceled When enabled, the entire Shopify order is cancelled once all its line items have been cancelled. Toggle; default: off

Returns

Setting Description Options / Default
Only pull returns with shipping information defined in Shopify When enabled, only returns that include shipping details in Shopify are pulled into Pipe17. Toggle; default: off
Only pull returns associated with fulfillable location in Pipe17 When enabled, only returns linked to a fulfillable Pipe17 location are pulled. Toggle; default: on
Pull returns only created with following Shopify Apps Restricts return ingestion to returns created by the specified Shopify apps. Pure string = precise match (case-insensitive); string wrapped in / / = regex pattern. Text field; blank = all apps
Pull returns not created with following Shopify Apps Excludes returns created by the specified Shopify apps. Pure string = precise match (case-insensitive); string wrapped in / / = regex pattern. Text fiel

Products

Setting Description Options / Default
Apply product updates only for specific SKUs Restricts product sync to SKUs matching the specified values. Pure string = precise match (case-insensitive); string wrapped in / / = regex pattern. Text field; blank = all SKUs
Apply product updates only for products with specific tags Restricts product sync to products carrying the specified Shopify tags. Pure string = precise match (case-insensitive); string wrapped in / / = regex pattern. Text field; blank = all products
Apply product updates only for products with specific types Restricts product sync to products of the specified types. Multi-value tag field; options: Parent, Child, Simple
Use following Pipe17 product price names as product 'Price' in Shopify Specifies which Pipe17 price name is mapped to the 'Price' field in Shopify. Pipe17 uses this name when pushing price updates. Text field; default: price

Inventory

Setting Description Options / Default
Apply inventory updates only for SKUs matching following patterns Restricts inventory sync to SKUs that match the specified patterns. Pure string = precise match (case-insensitive); string wrapped in / / = regex pattern. Text field; blank = all SKUs
Apply inventory updates only for SKUs not matching following patterns Restricts inventory sync to SKUs that do not match the specified patterns. Text field
Apply inventory updates only for products matching following tags Restricts inventory sync to products carrying the specified tags. Pure string = precise match (case-insensitive); string wrapped in / / = regex pattern. Text field; blank = all products
Apply inventory updates only for products not matching following tags Restricts inventory sync to products that do not carry the specified tags. Text field
Enable periodic inventory reconciliation between 12:00AM PST – 2:00AM PST When enabled, the app runs a scheduled inventory reconciliation job nightly during the 12:00AM–2:00AM PST window. Toggle; default: off
Increase Shopify inventory only during dedicated hours between 12:00AM PST – 2:00AM PST When enabled, inventory level increases are only pushed to Shopify during the 12:00AM–2:00AM PST window. Pipe17 will not post increased inventory levels outside these hours. Toggle; default: off
Force inventory resync Triggers a full inventory resync between Pipe17 and Shopify. Toggle

Statements

Setting Description Options / Default
Exclude Statements created before this date Statements created before this date are excluded from processing. Date field

Flows

Orders in: Pipe17 ← Shopify

Pulls new and updated orders from Shopify into Pipe17 for routing and fulfillment.

Trigger: Shopify webhook (orders/create, orders/updated) with polling fallback every 15 minutes.

  • Only orders matching the Order financial status filter setting are imported
  • Orders can be further filtered by type, sales channel, note attributes, and creation date using the corresponding settings
  • Orders containing unrecognized product variants are flagged for review in Pipe17
  • Shopify draft orders are excluded unless explicitly converted to orders in Shopify

Orders out: Pipe17 → Shopify

Pushes orders from Pipe17 into Shopify.

Trigger: Pipe17 poll for orders designated for outbound push to Shopify.

Fulfillments out: Pipe17 → Shopify

Pushes Pipe17 fulfillment records back into Shopify, marking orders as fulfilled and adding tracking information.

Trigger: Pipe17 poll for fulfillment records linked to Shopify orders in fulfilled status.

  • Partial shipments create partial fulfillments in Shopify, one per shipment
  • Tracking number and carrier are mapped from the Pipe17 fulfillment record
  • Customer shipping notifications can be suppressed per order using the Disable sending shipping notification for specific Shopify order ID patterns setting

Fulfillments in: Pipe17 ← Shopify

Pulls fulfillment records from Shopify into Pipe17.

Trigger: Shopify webhook (fulfillments/create, fulfillments/update) with polling fallback.

  • Useful when fulfillments originate in Shopify or a Shopify-native fulfillment app rather than being pushed from Pipe17

Inventory out: Pipe17 → Shopify

Pushes current inventory quantities from Pipe17 into Shopify by location.

How it works:

  1. Pipe17 computes the available quantity per SKU per fulfillment location
  2. Inventory levels are read via the Shopify REST inventory_levels endpoint
  3. Quantity updates are applied using GraphQL-based quantity resolution

Scheduling: Syncs run every 15 minutes by default. Use Force Inventory Resync to trigger an immediate full update outside the normal schedule.

  • Use the Apply inventory updates only for SKUs matching following patterns setting to limit updates to specific products
  • Inventory is location-aware - each Shopify location must be mapped to a Pipe17 fulfillment node

Manual action: Pull orders by ID

The connector supports an on-demand action (orders.in.by.id) to pull one or more specific Shopify orders immediately, without waiting for the next scheduled poll. Use this to recover a missed order or reprocess an updated one.

Returns in: Pipe17 ← Shopify

Pulls return requests initiated in Shopify into Pipe17.

Trigger: Shopify webhook for return events with polling fallback.

  • Both full and partial returns are supported
  • Restocked line items are reflected in Pipe17 inventory adjustments if restock is enabled in Shopify

Returns out: Pipe17 → Shopify

Pushes return requests from Pipe17 into Shopify.

Trigger: Pipe17 poll for return records designated for Shopify.

Locations in: Pipe17 ← Shopify

Pulls Shopify fulfillment location data into Pipe17 to support inventory and fulfillment mapping.

Trigger: Vendor poll against Shopify's locations endpoint.

Cancellations in: Pipe17 ← Shopify

Detects orders canceled in Shopify and updates the corresponding Pipe17 order status.

Trigger: Shopify webhook (orders/cancelled) with polling fallback.

  • When a cancellation is detected, the Pipe17 order is updated to the status configured in the Fulfillment canceled action setting
  • Default status applied is canceledRestock
  • Available statuses: reviewRequiredcanceledcanceledRestockfailed
  • Partial cancellations (line-item level) are not supported - the entire order status is updated

Statements in: Pipe17 ← Shopify

Pulls Shopify Payments payout statement data into Pipe17.

Trigger: Vendor poll against Shopify's payouts endpoint.

  • Requires the read_shopify_payments_payouts scope
  • Only available for stores using Shopify Payments as their payment provider

Troubleshooting

Connection test fails

Symptom Likely cause Resolution
OAuth authorization error Insufficient permissions to install the app Ensure you are logged into Shopify as an Owner or a staff account with Apps and sales channels permission
Store not found Incorrect Store URL format Confirm the URL is formatted as yourstore.myshopify.com with no https:// prefix or trailing slash
Forbidden error after OAuth Token missing required OAuth scopes Reinstall the app via the OAuth flow to reauthorize with the current full scope set

Orders not appearing in Pipe17

  • Confirm the order's financial status matches one of the values in the Order financial status filter setting - the default includes paidpartially_refunded, and refunded
  • Check whether the Order ID filterOrder typesOrder channels, or Order note attribute exclusions settings are active and inadvertently excluding orders
  • Check whether orders.in.filter.since is set to a date that excludes the orders you expect
  • Verify webhooks are registered under Shopify Admin → Settings → Notifications → Webhooks - re-save the connector if any are missing
  • Review Pipe17 error logs for import validation failures; the log will indicate which field or variant was rejected

Fulfillments not pushing to Shopify

  • Confirm the Pipe17 fulfillment record status is fulfilled - records in other statuses will not be pushed
  • Check that the Shopify order has not already been fully fulfilled or canceled - Shopify will reject fulfillment requests for closed orders
  • Verify the tracking carrier value in Pipe17 maps to a carrier recognized by Shopify
  • Ensure the fulfillment location in Pipe17 is correctly mapped to a valid Shopify location; use fulfillmentSwapLocations if IDs differ

Fulfillments not pulling from Shopify

  • Confirm the fulfillments/create and fulfillments/update webhooks are registered in Shopify Admin → Settings → Notifications → Webhooks
  • Verify the originating Shopify fulfillment is associated with an order that was imported into Pipe17 - fulfillments for unknown orders will be skipped

Inventory counts are incorrect in Shopify

  • Inventory sync runs on a 15-minute schedule; use Force Inventory Resync to trigger an immediate update
  • If you only need to update specific products, use the Inventory SKUs setting to scope the sync
  • Check that the Pipe17 fulfillment node is correctly mapped to the target Shopify location - mismatched locations update the wrong stock level
  • Confirm the token has write_inventory scope - a missing scope causes silent failures on inventory updates

Cancellations not reflecting in Pipe17

  • Confirm the Fulfillment canceled action setting is configured to the intended target status
  • Verify the order was fully canceled in Shopify, not just placed on hold or partially refunded - partial cancellations do not trigger the cancellation flow
  • Check that the orders/cancelled webhook is registered in Shopify Admin

Returns not syncing

  • For returns in: confirm the return-related webhooks are registered in Shopify Admin → Settings → Notifications → Webhooks
  • Verify the original order exists in Pipe17 - returns for orders not imported into Pipe17 will be skipped
  • For returns out: check Pipe17 error logs for mapping failures; confirm the write_returns scope was granted during OAuth

Request limit errors

Rate limit retries are handled automatically - the connector backs off and retries based on Shopify's REST and GraphQL rate limit headers. If you are consistently hitting limits, reduce the frequency of manual actions or avoid triggering bulk inventory resyncs during peak order volume periods.


Need Help?

If you need additional assistance:

We're here to help you succeed with your operations.

Was this article helpful?
0 out of 0 found this helpful

Comments

0 comments

Article is closed for comments.

Have more questions?
Submit a request
Share it, if you like it.