Two shipping directions, one engine
Every business that touches physical goods has two flows that have to work:
- Outbound — products and services going to your customers from your storefront, POS, or invoices.
- Inbound — materials and parts coming from your vendors to your warehouse for the jobs you're about to do.
Most platforms ignore one or the other. Shopify handles outbound for storefronts but knows nothing about your inbound materials. ServiceTitan tracks inbound parts but doesn't run a storefront. You end up running ShipStation for outbound + paper PO tracking for inbound + email follow-ups in between.
BIAB's 0.9.0 shipping engine handles both. One configuration. One label workflow. One source of truth for tracking. The CRM knows about every shipment in both directions, the jobs they're attached to, and the customer or vendor at the other end.
What you get on the outbound side
- Multi-carrier rates at checkout — USPS, UPS, FedEx, DHL, and others surface as service-tier options. The customer sees the cost before paying.
- Pre-checkout rate selection — matches the Amazon experience: customer picks "Standard $8.99 / Express $19.99" before the payment step.
- Multi-parcel + multi-origin — bulky items can ship in their own boxes. If you stock from multiple warehouses or drop-ship partners, BIAB groups items per origin and presents a single combined cost.
- Zone-based pricing — rules like "free Standard over $50 in continental US, flat $8 to Alaska/Hawaii, paid carrier rate elsewhere."
- International customs — automatic declarations with duty handling (DDU/DDP) and AI-suggested HS codes for your products.
- Free-shipping coupons — set a coupon to apply to shipping and the line auto-zeroes at checkout.
- Country allowlist — declare where you ship to; addresses outside return a clean "we don't ship there" response.
- Returns — one-click reverse-address return labels from any outbound shipment.
What you get on the inbound side
- Purchase orders track shipping too — when you place a PO with a vendor, the inbound shipment tracking lives on the same shipments table as outbound. Tracking number, carrier, ETA, status — all visible alongside the job the materials are for.
- Job-chat surfacing — when an inbound shipment ships or is delayed, the update auto-appears in the linked job's internal chat thread (staff-only, not visible to the customer). Office decides what to relay to the end customer.
- Material arrival → schedule the job — workflow trigger: when the inbound shipment marks delivered, advance the job to "Ready to schedule".
How it ties into your CRM
Every shipment — inbound or outbound — is a first-class record:
- Linked to the order (outbound) or the PO (inbound)
- Linked to the job when one applies (so a tech sees the parts they're waiting on)
- Linked to the customer (outbound) or vendor (inbound)
- Reportable in your dashboards (margin per job = customer revenue − cost of goods including inbound shipping)
- Searchable via the AI assistant ("Show me POs whose inbound shipment hasn't arrived in 7 days")
When the customer asks "where is my order?", the answer is one click in your CRM, not three browser tabs.
Printable + batch labels
- Every label is a PDF the moment it's purchased — open, print, slap on the box.
- Batch labels for warehouse workflows — select 50 packed orders, mint one combined PDF with all 50 labels, print to your label printer, done.
- Tracking number flows back automatically — the moment the label prints, the order shows the tracking number on the customer's portal and in their notification.
Labels saved to job + order media gallery
The most-requested operational feature: when a label is purchased, the PDF is automatically saved to the order's media gallery (or the linked job's gallery if attached to a job).
- Reprint at any time without going back to the carrier — the PDF is yours, in your media library.
- The tech opens the job in the field, scrolls to media, taps the shipping label PDF.
- Returns gallery: when a customer initiates a return, the return label saves next to the original outbound label so both are side-by-side.
Same pattern your team already uses for job photos, signed contracts, and invoice PDFs — shipping labels just slot in.
Notifications without configuration
Tracking events fan out across in-app / email / SMS / outbound webhook based on each customer's saved preferences. Your team doesn't write the "your order shipped" email — it ships pre-built with your org's branding (theme color + logo) injected automatically.
Why we built it
Shipping is one of the highest-leverage operational features in any business with physical goods. Most platforms either don't include it (you cobble ShipStation + carrier accounts + tracking emails) or charge separately for carrier access. We think shipping belongs inside the platform, in both directions, with the CRM as the source of truth.
How it's gated
The shipping engine is part of the e-commerce package — included in Growth and Scale plans. Launch plans get the schema and the workflow infrastructure; the live carrier integration unlocks on upgrade.
What changes
If your inbound POs and outbound orders all surfaced their tracking on the same job record, you'd want that, right? If labels printed straight to your warehouse printer in batches of fifty? If every shipping label was archived to the job's media gallery so the tech could reprint from the truck? That's the shipping loop we wanted for ourselves before we built it.

