FreshBooks and ShipBob integration
FreshBooks manages your accounting and invoicing. ShipBob manages fulfillment and storage. Connecting them keeps your invoice records aligned with shipment reality: new invoices in FreshBooks can trigger fulfillment orders in ShipBob, and shipment events coming back from ShipBob update your invoice fulfillment status so your accounting reflects what has actually left the warehouse. ml-connector handles the different token lifetimes and headers each system requires.
What moves between them
The primary flow is FreshBooks to ShipBob: invoices and line items in FreshBooks are mapped to orders and order line items in ShipBob for fulfillment. Client names and contact information are mapped to ShipBob order metadata. ShipBob webhook events flow back into FreshBooks: order.shipped and order.shipment.delivered events update the invoice fulfillment status, and return or damage events are logged in FreshBooks for billing reference. The sync is event-driven from ShipBob and polling-based from FreshBooks for initial order creation.
How ml-connector handles it
FreshBooks tokens have no fixed expiry (they persist until revoked), so ml-connector caches the access token once issued and only refreshes on 401. ShipBob tokens expire in 1 hour, so ml-connector tracks the token issue time and proactively refreshes 5 minutes before expiry to avoid mid-request failures. Every ShipBob API call includes the required shipbob_channel_id header; ml-connector stores the channel ID per customer and validates it matches the credential set. FreshBooks invoice line items are mapped to ShipBob products and variants using UPC, SKU, or internal product ID as the matching key, with fallback to product name if direct ID is not available. ShipBob inventory units are in ounces and inches; ml-connector stores those weight and dimension conversions per variant to avoid unit mismatch. Webhook signatures are verified using HMAC-SHA256 on both platforms with different header names (FreshBooks uses X-FreshBooks-Hmac-SHA256; ShipBob uses webhook-signature). Failed webhook deliveries are retried by each platform and tracked in the audit log so they can be replayed manually if needed.
A real-world example
A small e-commerce business selling handmade goods issues invoices in FreshBooks for each order and ships via ShipBob fulfillment centers. Before the integration, the owner manually created orders in ShipBob from FreshBooks invoices and checked ShipBob daily to update invoice delivery status by hand. With FreshBooks and ShipBob connected, a new invoice in FreshBooks automatically generates a fulfillment order in ShipBob using the line item quantities and client address, ShipBob confirms receipt of goods and marks them in stock, and when ShipBob ships the order, the tracking and delivery status flows back into FreshBooks so the owner and customer see fulfillment progress without re-entry.
What you can do
- Sync FreshBooks invoices and line items into ShipBob as orders and order line items, mapped by product SKU, UPC, or name.
- Keep FreshBooks invoice fulfillment status in sync with ShipBob shipment events, including tracking updates and delivery confirmations.
- Map FreshBooks client information to ShipBob order addresses and metadata so fulfillment centers have correct contact details.
- Handle FreshBooks OAuth2 user-delegated tokens and ShipBob OAuth2 with automatic 1-hour token refresh and shipbob_channel_id header validation.
- Track product weight and dimension unit conversions (ounces to pounds, inches to centimeters) so inventory is accurate across both systems.
Questions
- How does the integration handle different product IDs between FreshBooks and ShipBob?
- ml-connector attempts to match FreshBooks line items to ShipBob products first by UPC, then by SKU, then by exact product name. If no match is found after three attempts, the record is logged in the audit trail for manual review. You can configure custom product mapping rules per item to override the default matching behavior.
- What happens if a FreshBooks invoice is updated or deleted after ShipBob receives the order?
- If an invoice is updated, ml-connector checks for line item quantity changes and either adjusts the ShipBob order if it has not yet shipped, or logs a mismatch in the audit trail for manual resolution. If a FreshBooks invoice is deleted and ShipBob has already picked and packed the order, ml-connector does not delete the ShipBob order (since cancellation at that stage risks loss of goods). Instead, it logs the mismatch and notifies the customer account owner.
- Do ShipBob return and damage events flow back into FreshBooks?
- Yes. ShipBob return.created and return.updated events are logged in FreshBooks as fulfillment exceptions and attached to the original invoice. If a ShipBob warehouse reports damage during receiving, that event is also logged. ml-connector does not automatically adjust invoice amounts or create credit notes, since warehouse damage may or may not incur a cost depending on your vendor agreement.
Related integrations
More FreshBooks integrations
Other systems that connect to ShipBob
Connect FreshBooks and ShipBob
Free to use. Add your credentials, ping your real systems, and see if we fit.
Get started