Core systems

Billing System

PrepFlow’s Billing System gives you full control over how clients are charged — from per-unit pricing to category-based overrides, service add-ons, and storage fees.
It’s flexible, hierarchical, and built to adapt to any fulfillment model your prep center supports.


1. Billing for Units

Unit-based billing is the foundation of your client charges. Each fulfillment type (e.g., FBA, FBM, Storage, Manual, Two-Step) has its own pricing structure that can be customized globally or per client.

Pricing Hierarchy

PrepFlow uses a four-level pricing override system that determines which price applies to a given item:

PriorityLevelDescription
1️⃣Default Fulfillment Type PriceThe base per-unit price set in your Settings → Billing Defaults.
2️⃣Client-Specific Fulfillment Type PriceOverrides the default for that particular client.
3️⃣Default Category PriceApplies to items belonging to a specific category (see below).
4️⃣Client-Specific Category PriceHighest priority — applies if a client has custom pricing for a category.

In other words, the flow of overrides is: Default Fulfillment Type Unit Price → Client-Specific Fulfillment Type Unit Price → Default Category Price → Client-Specific Category Price

PrepFlow automatically determines the correct rate based on this hierarchy.

Categories for Product-Level Pricing

Categories allow you to define pricing at a product-group level.
A category can include one or more ASINs.

To set one up:

  1. Go to the Billing Page → Categories tab.
  2. Create a new category and assign relevant ASINs.
  3. Set pricing for that category (e.g., different rates for FBA vs. FBM).
  4. (Optional) Override the category pricing for specific clients.

This gives you precise control — for example, charging higher rates for fragile, oversized, or specialty products without manually adjusting every shipment.

💡 Tip: Use categories for frequently repeating ASINs or SKUs with unique handling needs. It’s faster than adjusting each shipment individually.


2. Billing for Boxes & Services

Beyond per-unit rates, PrepFlow also lets you bill clients for boxes and additional services.

Default Boxes and Services

In Settings → Billing, you can:

  • Create new box types (e.g., Small, Medium, Large)
  • Define base pricing for each box
  • Create and price out custom services

These default prices apply to all clients unless overridden in the billing page.


Services

Services are price add-ons applied to shipments for specific handling tasks or conditions.
They’re calculated based on the quantity of the service, not the number of units in the shipment.

Example:

  • Create a service called Oversized Fee priced at $0.25
  • Add a quantity of 10 for a shipment that includes 10 oversized items
  • The total service fee = 10 × $0.25 = $2.50

You can manage, edit, and assign services globally or per client from the Billing Page → Pricing section.

💡 Tip: Common service types include:

  • Bubble wrap
  • Oversized item handling
  • Custom labeling
  • Bundling labor
  • Repackaging

Client-Specific Pricing

Just like unit pricing, you can customize box and service pricing per client:

  1. Go to the Billing Page → Select Client
  2. Click Pricing
  3. Adjust Box or Service prices to fit the client’s contract or agreement

This allows you to maintain global defaults while accommodating client-specific rates for boxes or services.


3. Other Pricing

PrepFlow also supports custom billing for other cost categories beyond unit and service charges.

Storage Fees

PrepFlow bills inventory storage automatically, once a day, for every client with inventory that's past its grace period. There are two billing modes — you pick one per tenant and can override it per client:

  • Per-unit daily (default) — charges every unit still in the warehouse at a per-unit-per-day rate.
  • Hybrid (pallet/bin monthly) — charges a flat monthly rate per pallet or bin, prorated by day, for inventory that sits in a location you've tagged as a pallet or bin. Anything not in a tagged location falls back to per-unit daily.

The grace period (in days) is set in Settings → Pricing → Inventory Storage — a common default is 14 days. By default it only applies to per-unit daily mode; you can opt pallet/bin monthly charges in too (see below).

When to use which mode

Per-unit daily works well for clients with lots of SKUs and moderate volume per SKU — billing scales naturally with how much space they actually take up.

Hybrid is the right choice when a client has huge volume in a small physical footprint — e.g., 5,000 identical units that fit on a single pallet. Per-unit daily would massively overcharge them for space they aren't actually using, so instead you bill them for the pallet itself (e.g. $25/month) regardless of unit count.

💡 Tip: Hybrid mode requires every warehouse to be in warehouse-map mode. If any warehouse is still in free-text mode, the Hybrid option is disabled in the dropdowns — otherwise inventory in the free-text warehouses would silently bypass the monthly billing. Migrate every warehouse first on the Warehouse Map page.

Setting the tenant-wide default

In Settings → Pricing → Inventory Storage:

  1. Default Storage Billing Mode — pick Per-unit daily or Hybrid (pallet/bin monthly). Every client without an explicit override inherits this.
  2. Apply Grace Period To Monthly Billing — when enabled, pallet/bin locations only start billing monthly once their oldest check-in is older than the grace period. When disabled, monthly billing starts on day one of occupancy.
  3. Set the monthly rates by editing the Pallet storage (monthly) and Bin storage (monthly) entries further down the same page — both are in dollars per container per month.

Overriding the mode per client

Open the client drawer → Client settings → Storage billing tab. You'll see three options:

  • Use tenant default — clears the override. The client inherits whatever you've set in the Pricing page.
  • Per-unit daily — forces per-unit daily regardless of the tenant default.
  • Hybrid (pallet/bin monthly) — forces hybrid regardless of the tenant default.

The dropdown also shows what the tenant default currently resolves to, so you can see at a glance what "Use tenant default" actually means for this client.

Per-unit daily mode — how it works

Every time a unit is checked in (received and scanned into the warehouse), PrepFlow records a check-in row tied to that inbound order, with a timestamp and quantity. This is the clock the billing system uses to age inventory — not the date the order was created, and not the date the unit was stored to a location.

When multiple inbound batches arrive for the same SKU, each batch creates its own check-in row and starts its own grace clock. Older and newer stock are tracked as separate "layers" of inventory.

The system runs a storage-billing pass once per day. For every inbound order that still has units sitting in the warehouse, it:

  1. Pulls the full check-in history for that order.
  2. Walks the check-ins FIFO — outbound shipments are assumed to consume the oldest check-ins first, so the units still in storage are always attributed to the most recent check-ins.
  3. For each remaining unit, checks how old its check-in is.
    • If the check-in is within the grace period → no charge that day.
    • If the check-in is past the grace period → that unit is billed at the storage rate for that day.
  4. Adds the day's total to the client's currently-open invoice.

This means a single unit can be billed storage on many days — once per day, every day it continues to sit past the grace period — and each day's charge lands on whatever invoice is open at the time.

Worked example (per-unit daily)

A client sends 500 units of SKU A. You check them all in on Day 0. Grace period is 14 days. Storage rate is $0.01 / unit / day.

DayEventUnits in storage (past grace)Daily charge
0500 units checked in0$0.00
7Ship 50 to Amazon (remaining: 450)0 (still inside grace)$0.00
14Ship 40 to Amazon (remaining: 410)0 (grace ends end-of-day)$0.00
15No movement410$4.10
16–35No movement410 / day$4.10 / day
36Ship 100 to Amazon (remaining: 310)310$3.10
37+No movement310 / day$3.10 / day

If a second inbound batch of 200 units arrives on Day 30 and is checked in, those 200 units start their own 14-day grace clock (expiring Day 44). Because shipments consume the oldest check-ins first, every shipment after Day 30 draws down the original Day 0 layer first, and the new Day 30 layer only starts being shipped once the original 500 are exhausted.

Hybrid (pallet/bin monthly) mode — how it works

Hybrid mode bills per physical container, not per unit. Every warehouse-map location has a Container tag (None / Pallet / Bin) alongside its functional type. The moment a client's inventory occupies a pallet-tagged location, they start being billed the monthly pallet rate for that location — prorated by day so cross-month boundaries work naturally.

Setting up containers on the map:

  1. Go to Settings → Warehouse Map → [warehouse].
  2. When creating or editing a location, use the Container dropdown next to the usual Type dropdown. None keeps the location on per-unit daily billing, Pallet and Bin opt it into monthly billing.
  3. You can also set the Container on the bulk-generate form, so a whole aisle of pallet slots gets tagged in one shot.

Locations tagged as pallet or bin show a colored badge in the map's location table so warehouse staff can see at a glance.

How hybrid clients are billed each night

Each night, before computing charges, PrepFlow takes a snapshot of which pallets and bins each client currently occupies. That snapshot becomes the audit trail for the day's billing.

Then, for every hybrid-mode client:

  1. Count distinct occupied pallet and bin locations — if a client has inventory in 3 pallet locations and 1 bin location, they're billed for 3 pallets + 1 bin that day, regardless of how full each container is.
  2. Prorate by daydaily charge = monthly rate ÷ days in current month × container count. In a 30-day month, a $30/pallet/month rate produces $1/pallet/day.
  3. Deduct covered inventory from the per-unit pass — any units sitting in a pallet or bin location are excluded from the per-unit calculation so the client is never double-charged for the same physical stock.
  4. Fall back to per-unit daily for anything that isn't in a pallet or bin location (e.g., shelf storage, damaged, or untagged locations).
Partial containers bill the full rate

If a pallet location is 20% full, the client still pays for the full pallet that day. The pallet slot can't be resold or reassigned, so from a billing perspective it's fully occupied.

Mixed-location orders

If a single order is split across locations — say, 50 units in a pallet location and 30 units on an untagged shelf — the pallet portion bills at the pallet rate, and the 30-unit remainder bills per-unit daily. Each order-and-location pair is evaluated independently.

Optional picking system

If your warehouse uses the Pick & Pack system, picked units are automatically removed from their source locations each day, so the snapshot always reflects what's actually still there. If you don't use picking, PrepFlow estimates the remaining inventory at each location from the order's outbound activity — so monthly billing still works either way.

Worked example (hybrid)

A client sends 5,000 units of SKU B. You assign them to pallet location A-01-1. Pallet rate is $25/month. Grace period does not apply to monthly (the default).

DayEventPallets billedDaily charge
05,000 units checked in to pallet A-01-11$25 ÷ 30 ≈ $0.83
1–29No movement (30-day month)1$0.83 / day (total $25.00)
30 (May 1)Month rolls over (May has 31 days)1$25 ÷ 31 ≈ $0.81 / day
45Pick 4,000 units (1,000 remain)1$0.81 (partial pallet = full)
50Pick remaining 1,000 (pallet empty)0$0.00

The client pays for 51 days of pallet occupancy at the appropriate daily rate for each month — not a per-unit charge, regardless of whether 5,000 or 1,000 units were on the pallet.

What shows up on the invoice

The nightly invoice job rolls every daily storage charge up into one line item per charge type. A hybrid client with mixed inventory could see up to four distinct line items on one invoice:

Line itemWhen it appears
Inventory storage chargesPer-unit daily storage on inventory past the grace period.
Received-order storage chargesReceived but not checked-in units past the grace period.
Pallet storage (monthly)Monthly pallet rate, prorated by day.
Bin storage (monthly)Monthly bin rate, prorated by day.

Clients see the totals per line item, not a per-day breakdown. The per-day history is kept internally for auditing and dispute resolution.

Optional: billing un-checked-in inventory

By default, PrepFlow only charges storage on units that have been checked in. If your prep center also wants to charge storage on inbound orders that have been received but not yet processed (i.e. sitting in the receiving area past the grace period), an admin can enable the Inventory Storage Billing For Needs Attention toggle on the Pricing page. When enabled, the daily pass additionally bills the full quantity of any received order older than the grace period at the same storage rate. This applies regardless of billing mode — received orders aren't in a location yet, so they always bill per-unit daily.

Per-client rate overrides

Per-client pricing is respected automatically. If a client has a custom Storage unit rate, Pallet storage (monthly), or Bin storage (monthly) set on the Billing Page, the daily pass uses that rate instead of the default when calculating their charges.

💡 Tip: If a client disputes a storage charge, open their invoice and look at the relevant line item — the per-day history behind each line item is kept for auditing, so support can reconstruct exactly which days, units, and pallets or bins contributed to the total.


Multipack & Bundle Pricing

Two specialized pricing options handle cases where products are shipped as multi-unit packs or bundles.

TypeDescriptionExample
Multipack PricingApplied when multiple identical units are sold as one pack.If 14 total units ship, and 4 of them are in 2-packs, PrepFlow bills 10 at the regular rate and 2 at the multipack rate.
Bundle PricingApplied when different SKUs are bundled and sold as a single unit.A 3-item kit counts as 1 billed unit at the bundle rate.

These ensure clients are charged fairly — recognizing the additional work of creating or managing multipacks or bundles.


Summary

The Billing System in PrepFlow is layered, customizable, and designed for complete pricing flexibility.

Key Highlights

  • Four-level override system for per-unit pricing
  • Categories for fine-grained control over product-specific billing
  • Box and service fees configurable globally or per client
  • Multipack, bundle, and storage pricing for complex workflows
  • Two storage billing modes — per-unit daily and hybrid pallet/bin monthly, with a tenant-wide default and per-client overrides
  • Client overrides let you manage unique pricing agreements without changing your defaults

💡 Pro Tip: Always review client-specific overrides before billing cycles.
This ensures your contracts, service agreements, and actual billing align — helping you maintain consistency and maximize margin.

Previous
Shipments