Overview
If you’re moving from in-house shipping to a third-party logistics provider (3PL), your Shopify locations setup is critical. It determines clean order routing, accurate rates, and reliable stock levels.
This guide shows you how to change Shopify inventory location to 3rd party fulfillment without breaking checkout. You’ll get a decision framework, bulk migration steps (CSV/API), post-purchase reassignment options, and a risk checklist.
You’ll learn when to add your 3PL as a Location, a Custom Fulfillment Service, or an app connector. You’ll also learn how to bulk move stock, reroute open orders safely, and adjust shipping profiles, SLAs, and KPIs.
We’ll also cover international workflows, returns, platform limits, and a quick comparison of major 3PL options.
Choose the right 3PL integration model: Location vs Custom Fulfillment Service vs app connector
Before you touch inventory, choose the model that fits your catalog and goals. Shopify treats each warehouse as a Location that tracks inventory and routes via the Fulfillment orders model.
This keeps routing and reporting native to the platform. See Locations and Fulfillment orders for how these objects work together.
Adding a 3PL as a Location gives you native multi-location inventory. You get fulfillment priority control and compatibility with shipping profiles and POS.
A Custom Fulfillment Service can send pick requests but lacks inventory levels. It won’t work well with multi-origin routing or split shipments.
App-managed connectors can add rules, SLAs, and returns features. Confirm they write to Shopify’s inventory and fulfillment order objects to keep your source of truth consistent.
Decision criteria by merchant profile and catalog complexity
Match your catalog and order patterns to the simplest model that still works. If you stock products in two or more warehouses, use a 3PL that creates a Shopify Location and updates InventoryLevels.
This keeps routing transparent and aligned with shipping profiles. If you have a small catalog with no inventory tracking needs, a Custom Fulfillment Service can work.
Expect limited visibility and fewer automation options in that case. Complex catalogs with bundles, kits, subscriptions, or made-to-order SKUs often need app connectors with rules.
Examples include routing bulky SKUs to 3PL A and fragile SKUs to 3PL B. You can also hold preorders until stock is available.
International stores should prefer Location-based integrations. That lets you tie stock and duties or taxes per market.
If you’re unsure, pilot as a Location first. You can add an app later without re-platforming your inventory model.
Prerequisites and risk checklist before adding a 3PL location
A clean cutover starts with a few checks. These prevent rate, routing, and stock issues.
Confirm your shipping profiles. Review edge-case products and set a clear cut-over window to avoid straddled orders.
- Identify products moving to the 3PL and confirm their variants/SKUs match the 3PL’s WMS records.
- Audit custom and general shipping profiles for services that depend on origin, weight, or carrier accounts.
- Flag bundles/kits, backorders/preorders, subscription items, and draft orders that could misroute or misquote.
- Capture a full inventory export for rollback and reconciliation.
- Agree on SLAs, cut-off times, and blackout dates with the 3PL to set correct expectations.
Shipping profiles, zones, rates, and surcharge impacts to review
Shipping profiles govern which locations can fulfill a product and how rates are calculated. Misconfiguration can hide rates at checkout or misquote totals.
See Shipping profiles for how products, locations, and services connect. When you add a new location, confirm each product’s profile includes that location.
Make sure zones and services exist for the new origin. Otherwise, checkout may show incomplete or no options.
If you use carrier-calculated rates, confirm your 3PL’s ship-from address. It must align with carrier accounts and dimensional rules.
Review free shipping thresholds and promotions. They might not apply evenly across origins.
Validate packaging data such as dimensions and weights. Small discrepancies can trigger oversized or out-of-area surcharges.
After configuration, test five to ten real SKU and zone combinations. Use draft checkout to confirm rates and ETAs before go-live.
Configure locations, stock, and priorities in Shopify
Once you choose the model, add the 3PL’s warehouse as a Location. Set accurate addresses and adjust fulfillment priority.
This ensures Shopify routes new orders to the 3PL only when stock exists there. It also respects your backup locations.
In Shopify Admin, go to Settings → Locations → Add location. Name it clearly (e.g., “3PL – East”) and enter the precise ship-from address used by carriers.
Enable “Fulfill online orders from this location.” Place this location in Fulfillment priority so it routes as intended.
Assign products to the correct shipping profiles that include this new location. Confirm the location is “active” for POS or pickup only if applicable.
After saving, verify routing on new orders. SKUs with available stock should route to the 3PL, and backups should behave as expected.
Location creation, address accuracy, and staff/app permissions
Your 3PL’s address drives rate estimation and, in some markets, tax calculation. It also appears on customs documents for cross-border shipments.
Ensure the address matches your SLA and the actual warehouse. This matters if your provider has multiple nodes.
Grant staff only the permissions they need. Typical scopes include Inventory, Orders, and Locations.
Confirm any 3PL or integration app has the minimum OAuth scopes. These include read_locations, write_inventory, read_fulfillments, and write_fulfillments.
Periodically audit who can reorder priorities or toggle “Fulfill online orders.” This prevents accidental routing changes.
Document a single owner for Locations, Profiles, and Priorities. You can then trace adjustments quickly if rates or routing shift.
Bulk migration: move inventory to a 3PL via CSV and the Shopify API
For most catalogs, move stock in bulk to avoid manual updates. The CSV method is approachable and reversible.
The API method suits larger catalogs and phased cutovers. It supports multi-node staging, automation, and alerts.
Export a baseline inventory snapshot first for rollback and reconciliation. Pilot on 10–20 SKUs and validate availability in Shopify and the 3PL WMS.
Create a simple cutover playbook. Make sure everyone knows when to stop shipping in-house and start the 3PL.
CSV method: templates, required fields, and validation
Shopify’s inventory CSV lets you update Available quantities by location across many SKUs. Export current inventory via Products → Inventory → Export.
Choose “All locations” so the file includes columns per location. Fill the 3PL location column with the starting on-hand and reduce in-house locations accordingly.
You can’t create locations or change priorities via CSV. You also can’t adjust committed quantities—only Available.
- Keep SKUs/Variant IDs intact and ensure location column headers match the location names exactly.
- Avoid negative Available values by aligning transfers and adjustments before import.
- Test a small batch, import, then spot-check five products across Admin and storefront availability.
- Retain the original export as your rollback; re-import it to revert quantities if needed.
After the import, confirm the new 3PL location shows the expected Available counts. Check Products → Inventory and verify routing to the 3PL for those items.
If discrepancies appear, compare the CSV to the 3PL’s WMS counts. Resolve any SKU mismatches or rounding issues before migrating the full catalog.
API method: InventoryLevel, Location, and FulfillmentOrder endpoints
For granular control and phased moves, use the Admin API. Connect inventory items to the 3PL location and set quantities.
Use the InventoryLevel endpoints to set or adjust Available quantity. Review InventoryLevel to plan your connect, set, and adjust calls.
A typical sequence is simple. GET /locations to find the 3PL location_id, then GET /variants to obtain inventory_item_id.
POST /inventory_levels/connect to link the item to the location. Then POST /inventory_levels/set (or /adjust) with available and location_id.
Respect API rate limits and add idempotency or checkpointing. A rerun should not double-adjust stock.
After migration, validate routing with draft orders. Confirm fulfillment orders spawn at the 3PL location.
For larger runs, log errors per SKU and pause after threshold failures. This helps avoid stock drift.
Reassign open orders to a new 3PL without canceling them
During a switch, some unfulfilled orders may sit at your old location. Shopify’s fulfillment order model can move an order to a different location under certain conditions.
This avoids cancellations and reorders. In Admin, eligible orders may show “Move to another location” on the fulfillment card.
This is available if items are in stock at the target location. It also requires that no third-party service has already accepted the request.
Via API, use the fulfillment_orders/move endpoint to transfer an order. Moves are subject to holds and service constraints.
Orders tied to legacy Custom Fulfillment Services or partially fulfilled may need manual steps. An app workflow can split remaining lines if needed.
Test those edge cases before a broad reroute. That prevents surprises during cutover.
Automation patterns with Shopify Flow and app-based connectors
Automation reduces errors during reassignment or holds. A practical pattern starts with the Order created trigger.
Evaluate tags, shipping address, or product type. Tag orders intended for the 3PL and notify your connector to claim them.
On Fulfillment order ready for fulfillment, re-check inventory at the 3PL. Move the fulfillment order if stock is sufficient.
Shopify Flow can add tags, set notes, and call app actions. Some apps provide native “move fulfillment” actions.
Native Flow cannot directly invoke fulfillment order moves without an app. During a phased migration, add a temporary rule to hold orders with 3PL-bound SKUs.
Release holds once counts reconcile. For Flow capabilities and triggers, see Shopify Flow.
Shipping profiles, split shipments, delivery estimates, and SLAs
A new origin affects rate calculation and ETA display at checkout. Shipping profiles and fulfillment priorities decide whether orders split.
If an order has items stocked only at separate locations, Shopify creates split shipments. Rates are calculated per origin.
Communicate this with clear ETA ranges and post-purchase notifications. If splits are common, set expectations to avoid surprises.
Align your SLAs and daily cut-off times with the 3PL. Shopify uses the location’s processing time in ETA logic.
Ensure these settings mirror your agreement. That keeps promised delivery windows accurate.
Split-shipment implications for checkout rates and ETAs
Split shipments can raise cost-to-serve and change checkout totals. Each shipment’s rate is based on origin, packaging, and service rules.
Your profile may present a combined option. Complex profiles can show higher totals when a single order pulls from two warehouses.
Confirm that free shipping thresholds still make sense. One shipment may be free while another is paid.
Many brands adopt a blended subsidy. Others enforce single-origin rules for certain SKUs to protect margins.
After enabling the 3PL, run test orders that split. Verify rate math and ETA messaging under real profiles.
Adjust rules or product assignments to reduce negative surprises. Monitor margins as you tweak.
Cost and ROI model: 3PL vs in-house fulfillment
A structured ROI model makes the decision objective. It also sets targets for ongoing reviews.
Compare your in-house fully loaded cost per order to the 3PL’s all-in fees. Include storage, pick/pack, packaging, postage, surcharges, software, labor, and returns.
Start with a per-order baseline. In-house equals labor per order plus packaging, postage, and overhead allocation.
For 3PL, add pick/pack, packaging, postage, storage, account fees, and surcharges. Determine breakeven order volume by solving for equal per-order cost.
Stress test peak surcharges and dimensional weight penalties. If you operate multiple origins, model cross-zone reductions and transit gains.
3PL networks often reduce distant-zone postage enough to offset new fees. Document assumptions and revisit monthly for the first quarter.
Validate savings or adjust SLAs and routing as needed. Keep the model current.
International expansion: Markets, DDP vs DDU, HS codes, and customs handling
If your 3PL fulfills cross-border, align Shopify Markets and product data. Align 3PL customs workflows to prevent delays and surprise fees.
Shopify Markets can collect duties and import taxes at checkout. Configure it correctly and review Markets duties and import taxes.
Complete HS codes and country of origin for each variant. Ensure the 3PL copies this metadata to labels and documents.
Missing or incorrect codes often cause customs holds. For requirements and examples, see Shopify’s guidance on HS codes.
Configure Markets pricing and duties collection per region. Test real orders to confirm the 3PL honors your DDP or DDU strategy.
Returns and reverse logistics with a 3PL
Returns can break stock accuracy if items restock to the wrong location. Define a simple RMA flow with a unique RMA number.
Ensure the return label points to the 3PL’s return address. Specify dispositions the 3PL can execute and report.
These include restock, quarantine, refurbish, and dispose. In Shopify, use the Return flow on the order and choose the correct restock location.
That sends Available counts back to the 3PL. Align refund timing with inspection rules to match customer expectations.
If your 3PL needs two business days for QA, reflect that in messaging. Track return rate, restock yield, and time-to-restock by location.
Audit shrinkage with periodic cycle counts. Reconcile against 3PL reports to catch issues early.
Reporting and KPIs by location: COGS, stock accuracy, and alerts
The first 30 days after moving to a 3PL are critical. Catch drift between Shopify and the warehouse quickly.
Establish a dashboard for on-time fulfillment, order aging, and inventory accuracy. Include exceptions by location.
Key KPIs include on-time ship rate vs SLA and average fulfillment latency by location. Track order defect rate for address, pick, and pack errors.
Monitor inventory accuracy between Shopify and the 3PL. Include shrinkage, write-offs, and aged inventory.
Many plans support inventory value and aging reports by location. Set alert thresholds, such as over 2% variance or a 24-hour average delay.
Investigate root causes with your 3PL weekly. Continue until stability holds.
Post-migration day 1–30 audit plan and success metrics
Use a lightweight audit cadence for early warnings. In week 1, verify daily orders meet cut-off times.
Spot-check 20 orders for correct routing and label details. In week 2, compare Shopify Available vs 3PL WMS counts for your top 100 SKUs.
Reconcile variances promptly. In week 3, dig into exceptions like splits, backorders, and address errors.
Evaluate if rules or priorities need tweaks. In week 4, review cost-to-serve vs plan, including surcharges and returns fees.
Adjust packaging data or carrier selections as needed. Keep a single issue log with owner, fix, and verification date.
This institutionalizes learning and speeds resolution. Maintain it for future changes.
Plan limits, API constraints, security, and permissions
Your Shopify plan sets your active location cap and report access. Verify your cap before adding warehouses and consider future growth.
Fulfillment order architecture governs moves and splits. Some third-party services add holds or acceptance states that limit reassignment.
When automating, observe REST and GraphQL rate limits. Batch or throttle inventory updates to avoid denial and drift.
Shopify’s developer docs outline constraints and best practices. Keep least-privilege access for staff and apps.
Grant write_inventory, read_locations, and write_fulfillments only to trusted integrations. Rotate app credentials annually.
If you add new physical nodes, consider tax nexus implications. Physical presence can trigger registration in certain jurisdictions.
Testing in a dev store, edge cases, and rollback plan
Staging your integration in a development store reduces risk. Replicate a subset of SKUs and install the 3PL app.
Simulate orders with realistic addresses and weights. Use a test payment gateway to verify routing, rates, and SLAs.
Document edge cases in advance. Examples include bundles across locations, preorders, subscriptions, hazmat, and heavy or oversize DIMs.
Create a rollback plan with clear steps. Restore the pre-migration inventory CSV and revert fulfillment priorities.
Disable “Fulfill online orders” at the 3PL location if needed. Pause any Flow or app automations during rollback.
Timebox a go/no-go window on launch day. Revert quickly if on-time rate, error rate, or stock variance breach thresholds.
Comparison snapshot: ShipBob, Amazon MCF/FBA, and other 3PLs for Shopify
Most Shopify-focused 3PLs create a Location and maintain InventoryLevels via API. This keeps routing and reporting native.
ShipBob and similar providers offer multi-node networks and SLAs. Many include app-based rules that tag or route orders.
The app should write fulfillment updates back to Shopify. Evaluate how deeply it integrates with fulfillment orders and returns workflows.
Amazon’s options split between FBA and MCF. FBA is for Amazon orders, while Amazon Multi-Channel Fulfillment serves off-Amazon orders.
For Shopify, MCF can act as your 3PL, but packaging and branding differ. Some service constraints also apply.
Confirm how the connector handles inventory sync, FO moves, and split shipments. Choose a provider with a production-grade Shopify connector.
It should use Locations, InventoryLevel, and FulfillmentOrder APIs. Prefer apps that expose Flow actions and provide transparent SLA and exception reporting within Shopify.