Fulfillment Costs - 3PL, Percentage, and Per-Product Methods
Configure fulfillment costs in MerchantFlow with 3PL carrier data, a percentage of product cost, or per-unit supplier rates. Covers cost estimation, the 3PL gate, and choosing the right method for your store.
Fulfillment Costs
Fulfillment cost in MerchantFlow is what it costs you to get a sold order to the customer - carrier charges, pick and pack fees, or the per-unit shipping price your supplier bills you. It is tracked as its own line in the P&L waterfall, separate from COGS, and MerchantFlow supports three ways to capture it: real carrier costs from a connected 3PL, a percentage of product cost, or per-unit rates you set on each product. This guide explains all three methods, how to configure them, and how they interact.
Note: In-app labels use the British spelling "Fulfilment" (for example, the "Fulfilment Cost" settings card). This guide quotes those labels exactly as they appear on screen.
What Is Fulfillment Cost?
Fulfillment cost covers the order-level cost of delivery:
- Carrier shipping charges reported by your 3PL
- Pick, pack, and packaging material fees
- The per-unit fee a dropshipping supplier charges to ship each item
Fulfillment cost is not part of COGS. COGS is the cost to acquire or produce the product (including freight from your supplier to your warehouse); fulfillment is the cost of delivering a sold order. The two land in different lines of the profit waterfall:
Gross Profit = Net Revenue - COGS
Contribution Margin = Gross Profit - Shipping - Fulfillment - Payment Fees - Ad Spend
Why it matters: if you fold delivery costs into COGS, your gross margin understates product profitability and you cannot see fulfillment efficiency trends separately.
Note: Use this fulfillment configuration for per-order delivery costs. Fulfillment-adjacent overhead that does not scale per order - bulk packaging purchases, warehouse rent, storage fees - belongs in Expenses. Recording the same cost in both places would double-count it.
The Three Fulfillment Cost Methods
| Method | Cost is based on | Precision | When it applies |
|---|---|---|---|
| 3PL integration | Actual carrier charges per order | Highest | Whenever a supported 3PL is connected |
| Percentage | A percentage of each unit's product cost (COGS) | Approximate | No 3PL connected, method set to Percentage |
| Per product | A per-unit rate you set on each variant | High (if rates are accurate) | No 3PL connected, method set to Per product |
Method 1: 3PL Integration (Actual Carrier Costs)
If you fulfill through a supported 3PL - Speedfulfill, ShipMonk, or CJ Dropshipping - MerchantFlow syncs the actual cost charged for each order and attributes it to that order in the P&L.
Carrier-reported costs always win. Once a 3PL reports a cost for an order, MerchantFlow never overwrites it with a derived or estimated figure. Even a reported cost of zero is treated as authoritative (for example, when a shipping discount covered the full charge).
Use when: your 3PL is supported. This is the most accurate method and needs no manual configuration beyond connecting the integration.
Method 2: Percentage of Product Cost
The Percentage method estimates fulfillment as a percentage of each sold unit's product cost (COGS) - not a percentage of revenue or order value. For every unit sold, MerchantFlow adds unit COGS x percentage to the fulfillment line.
Fulfillment cost per unit = Unit COGS x (Percentage / 100)
- The percentage must be between 0.01 and 100.
- Units with no COGS entry contribute nothing to the estimate, so COGS coverage directly affects how complete this figure is.
- Orders with a refund are skipped by the percentage calculation.
Use when: you want a quick, blended approximation and your fulfillment spend genuinely tracks your product cost. Because the percentage applies to product cost, this method is a poor fit when shipping costs many times more than the product itself (common in dropshipping, where a $0.90 product may cost $7.00 to ship) - use the Per product method instead.
Method 3: Per-Product Rates
The Per product method lets you enter what you pay your supplier to fulfill each unit of each variant. MerchantFlow multiplies the rate by the quantity on every order line:
Fulfillment cost per line = Per-unit rate x Quantity
- Rates are set per variant on the COGS page (see below).
- A variant with no rate contributes exactly 0 - it is never backfilled with an estimate.
- The method only applies while no 3PL is connected. Connecting a supported 3PL switches fulfillment to carrier data automatically.
Use when: you pay your supplier a known per-unit fee to fulfill orders (typical for dropshipping and supplier-fulfilled stores) and no supported 3PL is in the picture.
Note: The rate is per unit, not per parcel. If you enter your full per-parcel shipping price as the rate, an order of 2 units will book twice that price. If your supplier charges less per unit as quantity increases, use Country Fulfillment Rates with quantity tiers to model it accurately.
How to Access
Navigate to Settings > Integrations and find the "Fulfilment Cost" card. The card shows an "Active" pill once a method is configured.
To use the Percentage method:
- Select "Percentage" on the card's toggle
- Enter a value in the "Fulfilment Cost %" field (for example,
15) - Click "Save"
To use the Per product method:
- Select "Per product" on the toggle
- Click "Enable per-product costs"
- Follow the "Set per-product costs on the COGS page" link to enter rates per variant
To turn the feature off entirely, click "Remove fulfilment cost".
The mode toggle is only shown while no usable 3PL is connected - with a 3PL active, carrier data owns the fulfillment line and the manual methods are not applicable.
Choosing a Method During Onboarding
The onboarding flow includes a Fulfillment & Shipping Costs step. You can connect a supported 3PL directly, choose "My 3PL is not listed" to set a percentage of product cost, or choose "I pay my supplier directly" to enable per-product rates. Picking "Skip for now" leaves fulfillment cost unconfigured - your contribution margin will overstate profit until you set one up.
Setting Per-Unit Rates on the COGS Page
With the Per product method enabled, go to Dashboard > P&L > COGS and expand a product to its variants. Click a variant's cost to open the inline editor: alongside the unit cost input you will see an amber "Fulfilment cost per unit" input. Enter the per-unit rate and save.
- Under each variant's cost, the page shows the saved rate (for example, "$6.81 fulfilment") or an amber "Fulfilment unset" marker.
- "Fulfilment unset" means that variant adds 0 to fulfillment cost on every order. MerchantFlow deliberately never estimates a missing per-product rate, so unset variants silently understate your costs - review them regularly.
- Saving a fulfillment rate without changing the cost does not create a manual COGS override, so store cost sync keeps working for that variant.
- You can also load rates in bulk through the CSV importer's
fulfillment_costcolumn - see Importing COGS.
Fulfillment Cost Estimation
Carriers and 3PLs can take a few days to report costs back. The Fulfilment Cost Estimation setting (in Settings > Financial Preferences) fills that reporting gap on the dashboard:
- Off - show only carrier-reported cost (default): profit reflects only confirmed fulfillment data.
- On - estimate the last 7 days: orders placed in the last 7 days that have no reported cost receive an estimated cost.
The estimate uses your store's historical average cost per order (computed over the last 90 days of carrier-reported costs, and only once at least 5 such orders exist). If there is no reliable history, it falls back to your configured fulfillment percentage. When an estimate is included, the dashboard shows an amber pill: "Includes {amount} estimated fulfilment".
Two important boundaries:
- Estimation never touches stores using the Per product method with no 3PL connected - per-product figures are already complete at order time, and unset rates are intentionally left at 0 rather than guessed.
- Estimates are a dashboard overlay only. Stored P&L records keep the confirmed figures, and the estimate disappears as real carrier data arrives.
Connecting or Disconnecting a 3PL
Connecting a supported 3PL changes fulfillment behavior immediately:
- Per-product derivation stops; carrier data takes over as each order's cost syncs.
- Previously derived per-product figures are kept until the carrier reports the real cost for those orders, then overwritten order by order.
- The estimation overlay becomes available for orders the carrier has not reported yet.
Switching your fulfillment method (for example, from Per product to Percentage, or turning it off) triggers an automatic recalculation of historical order margins so the P&L stays consistent with the new method.
Best Practices
1. Let the 3PL Win
If a supported 3PL is connected, do not try to maintain per-product rates alongside it - carrier data is authoritative and the manual methods are inactive by design.
2. Use Percentage as a Stopgap, Per Product for Accuracy
The percentage method is quick to set up but blends everything into one ratio of product cost. If you know your per-unit supplier fees, per-product rates give order-accurate figures.
3. Audit "Fulfilment unset" Variants
Unset variants contribute zero fulfillment cost without warning. Scan the COGS page for amber "Fulfilment unset" markers whenever you add products.
4. Enable Estimation Only Once History Exists
The 7-day estimation needs at least 5 orders with carrier-reported costs (or a configured percentage) before it can produce a number. Turning it on earlier has no effect.
Troubleshooting
Fulfillment cost is 0 for some orders
Cause: The ordered variants have no per-unit rate set ("Fulfilment unset"), and unset rates are never estimated. Solution: Set the rate in the variant's inline editor on Dashboard > P&L > COGS, or bulk-load rates via CSV import. Historical orders recalculate automatically.
Per-product rates are being ignored
Cause: A supported 3PL is connected, so carrier data owns the fulfillment line. Solution: This is by design. Disconnect the 3PL only if it no longer fulfills your orders; otherwise trust the carrier-reported costs.
Fulfillment cost doubles or triples on multi-unit orders
Cause: A per-parcel shipping price was entered as the per-unit rate, so it multiplies by quantity. Solution: Enter the true per-unit fee, or model quantity discounts with Country Fulfillment Rates quantity tiers.
The estimated fulfillment pill never appears
Cause: The estimation setting is off, fewer than 5 orders have carrier-reported costs and no percentage is configured, or your store uses the Per product method without a 3PL (estimation is intentionally inactive there). Solution: Check Settings > Financial Preferences, and confirm your store meets the history or percentage requirement.
Percentage cost looks far too low
Cause: The percentage applies to product cost, not to revenue or order value. A 15% setting on a $2 unit cost adds only $0.30 per unit. Solution: If your delivery cost does not track product cost, switch to the Per product method and enter real per-unit rates.
Frequently Asked Questions
Is fulfillment cost part of COGS?
No. COGS covers acquiring or producing the product, including supplier-to-warehouse freight. Fulfillment cost covers delivering sold orders and is deducted separately at the contribution margin line. See COGS Management.
Which method wins if more than one is configured?
A connected 3PL always wins. The Percentage and Per product methods only apply while no supported 3PL is connected, and only one of them can be active at a time.
Do refunded orders get fulfillment cost?
Under the percentage method, orders with a refund are skipped. Under the per-product method, refunded orders keep their fulfillment cost - you paid the supplier to ship regardless. 3PL costs reflect whatever the carrier actually charged.
What currency are rates and percentages in?
Everything is in your store currency. Per-unit rates, country rates, and derived costs are all entered and reported in the same currency as your P&L.
Why does Margin by Region show an estimated fulfillment figure?
The Margin by Region page uses the same fulfillment configuration described here, including the estimation overlay for recent orders that carriers have not reported yet.
Can I vary fulfillment cost by destination country?
Yes - with the Per product method, enable Country Fulfillment Rates to override the flat per-unit rate for specific destination countries and quantity tiers.
Related Guides
- Country Fulfillment Rates - per-destination rates and quantity tiers
- COGS Management - product cost tracking fundamentals
- Importing COGS - bulk-load costs and fulfillment rates
- Speedfulfill Integration - automatic carrier cost sync
- P&L Overview - the full profit waterfall
- Margin by Region - country-level profitability
- Expense Tracking - fulfillment-adjacent overhead
Last updated: July 31, 2026
COGS Accuracy - Effective Dates, Coverage, and Recompute
Keep MerchantFlow COGS accurate with effective-dated entries, cost history badges, manual override precedence, coverage metrics, refund treatment, and recompute behavior.
Country Fulfillment Rates - Per-Destination Quantity Tiers
Set per-country, per-unit fulfillment rates with quantity tiers in MerchantFlow. Covers the per-unit tier math, how rates are resolved on each order, and bulk setup via CSV.