Why Your 3PL Can't See Orders with Digital Downloads

Published on September 2025 • 6 min read

A merchant on Reddit discovered their 3PL hadn’t shipped orders for two weeks. The reason? Every order contained a digital download.

Here’s what happened:

  1. Customer orders a physical product + digital file
  2. Shopify instantly fulfills the digital item
  3. Order status changes to “Partially Fulfilled”
  4. 3PL’s system only pulls “Unfulfilled” orders
  5. Physical product never ships

The customer gets their download but waits forever for the physical item. The merchant thinks the 3PL is incompetent. The 3PL swears they never received the order.

Everyone’s right. And that’s the problem.

Shopify’s Own Documentation Warns About This

From Shopify’s Digital Downloads documentation:

“If you have a product with a physical and digital component, and you have automatic fulfillment set up for the digital file, then the digital file is automatically sent and marked as fulfilled within the Digital Downloads app. The fulfillment of your product’s physical component depends on your physical fulfillment settings.”

Translation: Shopify knows this splits your order. They just assume your 3PL will figure it out.

The Root Cause: 3PLs Only Look for Completely “Unfulfilled” Orders

Here’s the core problem: 3PLs filter for orders where NOTHING has been fulfilled yet. They assume if anything in an order is fulfilled, they’ve already handled it.

But with digital products:

  1. Customer places order (physical item + digital download)
  2. Digital item auto-fulfills instantly
  3. Order is now “partially fulfilled” - not “unfulfilled”
  4. 3PL’s filter skips it entirely
  5. Physical item never ships

Your 3PL isn’t broken. They’re just looking in the wrong place.

The Technical Details (How Each Integration Fails)

REST API (Most Legacy 3PLs Use This)

According to Shopify’s REST API documentation, orders have a fulfillment_status field:

  • null = Nothing fulfilled yet (what 3PLs filter for)
  • partial = Some items fulfilled (your mixed orders land here)
  • fulfilled = Everything fulfilled

Most 3PLs query: GET /admin/api/2025-01/orders.json?fulfillment_status=null

They never see orders with fulfillment_status=partial.

GraphQL API (Modern 3PLs)

The GraphQL API uses different terminology:

  • UNFULFILLED = Nothing fulfilled (what they query)
  • PARTIALLY_FULFILLED = Some items fulfilled (missed completely)
  • FULFILLED = Everything fulfilled

Their query filters for fulfillmentStatus: UNFULFILLED only.

CSV/FTP Exports (Old School 3PLs)

Daily CSV dumps via SFTP/FTP filtered to “Unfulfilled” status. Same blind spot, just delivered over ancient protocols.

The Right Way (That Nobody Uses)

Shopify introduced FulfillmentOrders in 2019 specifically to solve this problem. They even made a whole video about it. Instead of filtering entire orders by status, FulfillmentOrders assigns specific items to specific fulfillment services.

When an order has digital and physical items:

  • Digital items get assigned to the Digital Downloads app
  • Physical items get assigned to your 3PL
  • Each service only sees their assigned items
  • No conflicts, no missed orders

But implementing FulfillmentOrders requires:

  • Registering as a proper fulfillment service
  • Implementing the request/accept workflow
  • Handling webhooks correctly
  • Rebuilding their entire integration from scratch

Most 3PLs built their integrations years ago, before FulfillmentOrders existed. And even in 2025, this API isn’t well-known or well-documented. Many 3PLs don’t even know it exists.

Why This Kills You at Scale

Silent failure: No errors. No alerts. Orders vanish. Your 3PL dashboard shows zero pending orders while customers wait.

Both systems look fine:

  • Shopify shows the order ✓
  • 3PL shows clean queue ✓
  • Customer never gets their product ✗

Gets worse with growth: 10 orders? You’ll catch it. 1,000 orders? Good luck finding the mixed ones.

How to Actually Fix It

Option 1: Turn Off Auto-Fulfillment Store-Wide (Then Automate)

The brute-force fix: Go to Settings → Checkout → Order Processing and turn OFF “Automatically fulfill the order’s line items” for your entire store.

Now nothing auto-fulfills. Your 3PL sees every order. Problem: you’ve broken instant digital delivery.

To fix that, use Shopify Flow or Order Automator to:

  1. Wait 10-15 minutes (giving 3PL time to grab the order)
  2. Fulfill only the digital line items
  3. Send the download to the customer

Downside: Customers wait 10-15 minutes for their “instant” download. You’re managing fulfillment logic outside Shopify’s native settings. But at least your 3PL sees the orders.

Option 2: Force 3PL to See All Orders

Two approaches:

A. Change Integration Settings Ask your 3PL to update their API filters:

For REST API:

  • fulfillment_status=null OR fulfillment_status=partial

For GraphQL:

  • fulfillmentStatus: [UNFULFILLED, PARTIALLY_FULFILLED]

Most won’t. Requires rewriting their integration.

B. Use Middleware Route orders through a tool that:

  • Captures all orders regardless of status
  • Sends only unfulfilled line items to 3PL
  • Maintains visibility across both fulfillment types

What Your 3PL Should Tell You (But Won’t)

Most 3PLs know this problem exists. They just:

  • Don’t want to rebuild their integration
  • Assume you won’t sell digital products
  • Hope you’ll figure it out yourself

When evaluating 3PLs, ask directly: “How do you handle orders that contain both digital downloads and physical products?”

If they say “that won’t be a problem” without explaining how, you’ve found your red flag.

The Real Cost

The real damage:

Customer Trust: They paid, got partial delivery, then silence

Support Burden: Every mixed order becomes a ticket

Revenue Impact: Refunds, reshipments, and lost customers

3PL Relationship: You blame them for orders they never saw

How to Audit Your Current Setup

Run this check today:

  1. In Shopify Admin, filter orders by “Partially Fulfilled”
    • REST API: fulfillment_status=partial
    • GraphQL: fulfillmentStatus: PARTIALLY_FULFILLED
  2. Check how many contain unshipped physical items
  3. Cross-reference with your 3PL’s pending orders
  4. If there’s a mismatch, you have this problem

For ongoing monitoring, track the delta between:

  • Shopify “Partially Fulfilled” orders with physical items
  • 3PL reported shipments

That gap is your blind spot.

Bottom Line

Your 3PL isn’t incompetent. Your setup isn’t broken. But the assumption that all items in an order fulfill the same way breaks everything.

Until 3PLs update their integrations to handle mixed fulfillment types, you need a workaround.

The Worst Part

It’s not finding this problem. It’s not knowing how long it’s been happening. That merchant on Reddit discovered two weeks of unfulfilled orders. How many customers got their digital download, assumed everything was fine, then wondered where their physical product went?

By the time customers complain, trust is gone. They got half their order and silence.

This blind spot destroys customer relationships. Your 3PL swears they’re processing everything. Shopify shows orders as “Partially Fulfilled” which sounds like progress. Nobody’s lying, but customers aren’t getting their products.


3PL Pulse monitors for these exact disconnects - tracking orders that are “Partially Fulfilled” in Shopify but missing from your 3PL’s queue. We alert you within minutes, not hours or weeks. Before customers even notice.

Ready to optimize your fulfillment operations?

Get early access to our platform and start tracking these metrics across your 3PL network.