Skip to Content
Customer success story

How a US Marine and Powersports Parts Retailer Ships at the Cheapest On-Time Rate with Odoo EasyPost

A US marine and powersports parts retailer ships orders from its online stores through the Odoo EasyPost integration TeqStars built on its EasyPost Connector. Orders keep the service chosen at checkout or by the team, and for any order without one, staff pick the cheapest carrier rate that still meets the delivery date. Batch labels are bought in one action, each on a draft vendor bill, and every tracking scan reaches the delivery order.

US marine and powersports parts retailer

eCommerce North America Published

Line drawing of labeled parts boxes and a boat propeller: EasyPost shipping labels created in Odoo

The resultBatch labels, cheapest on-time rates, carrier bills and tracking emails all run from Odoo with EasyPost.

EasyPost services available in Odoo
562
carrier names in the service list
59
label formats: PDF, PNG, ZPL and EPL2
4

What challenge was the customer facing?

Every order the retailer sold online had to be rated, labeled and tracked through EasyPost, and in the standard setup each of those steps took several clicks per delivery order. The company sells marine and powersports parts through its online stores and ships them from its own warehouse, with carriers such as FedEx and UPS, and some parcels leave the United States.

To ship one order, a team member opened the delivery order, went to Additional Info, followed the link to get rates and picked one. The same clicks were repeated by hand for every order of the day, one delivery order at a time.

The shipping methods customers chose from, such as Standard, Two Day and Next Day, had no link to EasyPost's carrier services, such as FedEx Ground or UPS Ground. Rate lists showed whatever EasyPost returned instead of the services that matched the method the customer had paid for, on the quote, on the delivery order and in the cart.

Smaller gaps added more manual work. An order with a single product that had no weight could not get a shipping price at all. A method open to every country except the United States meant adding about 250 countries one by one. A cancelled label could not simply be requoted with another carrier or service level, and a parcel that fit no predefined box needed its own size without filling the list of package types with one-off entries.

Addresses and tracking sat outside Odoo too. Addresses were not checked against EasyPost before a label was bought, carrier scans stayed in EasyPost instead of on the order that produced the label, and checkout sent a separate rate request to EasyPost for each delivery method in the cart. Accounting also wanted label costs to arrive as vendor bills, so each carrier invoice could be matched against the labels actually bought.

What did the business need to achieve?

The retailer wanted shipping handled in batches inside Odoo, with its team stepping in only for the orders that needed attention. In practice that meant:

  • Labels bought for many ready delivery orders in one action
  • The service chosen at checkout or on the order carried through to the label
  • Only the carrier services linked to each Odoo shipping method, on quotes, deliveries and in the cart
  • Bad addresses caught on contacts and at checkout, before a label is bought
  • Every tracking scan kept on the delivery order, with customer updates at key milestones
  • Every purchased label on a draft vendor bill, ready to check against the carrier invoice
  • Fewer EasyPost requests from checkout

How did TeqStars help?

TeqStars started from its EasyPost Connector for Odoo and extended it, request by request, around the way the retailer quotes, packs and ships. The connector comes with 562 EasyPost services from 59 carrier names, including USPS, UPS, FedEx, DHL Express, Canada Post, Purolator and Royal Mail, and imports the company's own EasyPost carrier accounts in one click.

  • Shipping methods linked to carrier services. Each Odoo method, such as Standard or Next Day, lists the EasyPost services it may use, so the service a shopper picks at checkout is the one on the label.
  • Rate shopping on the quote. Sales staff see carrier, service, estimated days, delivery date and price for each option and add the chosen service to the sales order in one click.
  • Rates for packed orders. An order with no service yet is packed first; Get Rates on the delivery order prices the real parcels, and the team picks the cheapest rate that meets the customer's expected delivery date.
  • Shipments for many orders at once. Create Shipments on the delivery order list buys the label for every selected ready order with its service; one that fails is marked Shipping Exception while the batch carries on.
  • Parcels built from real data. Orders above a box's maximum weight split into several parcels, oversized products use their own dimensions, and a product without a weight counts as 1 lb with a cost warning.
  • A vendor bill for every label. Each EasyPost carrier account can add every purchased label, one line per tracking number at the label's rate, to that carrier's open draft vendor bill in Odoo.
  • FedEx invoices straight from FedEx. A daily job pulls FedEx's EDI invoice files over SFTP and builds one draft bill per FedEx invoice, with a line per tracking number and its charge breakdown.
  • Labels the printers understand. Labels come as PDF, PNG, ZPL or EPL2 in 4x6, are saved on the delivery order the moment they are bought, and can be cancelled and requoted with another carrier.
  • Customs on international parcels. Customs lines come from the products' HS codes, the incoterm comes from the shipping method (DAP by default), and the commercial invoice is attached.
  • Tracking on the order. An EasyPost webhook stores every scan, with status, message, city, state and estimated delivery, and Odoo passes each tracking event to Dittofeed, which sends the customer's shipping emails.
  • Addresses checked in two places. Contacts carry a Verified or Not Verified ribbon with EasyPost's suggested fix, and shoppers with a bad address see the wrong fields at checkout and can correct or confirm them.

The work followed the retailer's own list of requests. Its team wrote each one as a numbered issue describing the exact behavior it wanted, and TeqStars built each change, passed it through a staging copy and then deployed it. The first round covered daily shipping basics: requoting after a cancelled label, saving labels on the delivery order, clearer error messages and the tracking webhook. Address validation came next, first on contacts and then in the shopping cart.

Later requests grew out of daily use. Shipping methods gained country exclusions, so a method for every country except the United States no longer meant listing about 250 countries. A method can also charge the customer a flat or rule-based price while staff still buy the label at the carrier's real rate. Rate requests were cut to one per cart, a duplicate request on quotes was removed and rates with package dimensions were corrected. Vendor bills for purchased labels, the bulk Create Shipments action, one-time box sizes in Put in Pack, incoterms on EasyPost shipments and screens to manage carriers and services followed as the team asked for them.

Key capabilities delivered

  • eCommerce Integration
  • Warehouse Operations
  • Shipping Automation
  • Custom Development
  • API Integration

Challenges we solved

  • Getting rates and buying labels one order at a time
  • Odoo shipping methods not tied to carrier services
  • Orders with weightless products blocked from shipping
  • Cancelled labels that could not be requoted
  • Addresses not checked before labels were bought
  • A separate rate request per delivery method at checkout
  • Tracking scans kept outside Odoo
  • Label costs with no vendor bill to match

What business processes improved?

Before

For each order, a team member opened the delivery order, went to Additional Info, followed the link to get rates and picked one, one order at a time. Rate lists showed every EasyPost service rather than those matching the customer's shipping method. Addresses were not checked before the label, and carrier scans stayed in EasyPost.

After

Orders that already carry a service, chosen by the shopper at checkout or by the team, ship together through Create Shipments. An order without one is packed, rated with Get Rates on the delivery order and given the cheapest rate that meets the customer's expected delivery date. Every label lands on the carrier's draft vendor bill, and failed orders wait in the Shipping Exception filter.

Which integrations were involved?

What results did the project achieve?

EasyPost services available in Odoo
562
carrier names in the service list
59
label formats: PDF, PNG, ZPL and EPL2
4
EasyPost rate request per cart at checkout
1

Shipping has become a batch task for the warehouse instead of an order-by-order routine. Orders that already carry their service go out together through Create Shipments. Only orders without one need a closer look, and that look happens on the packed delivery order, with real parcel rates and delivery dates side by side, so the cheapest rate that still arrives on time is the one that gets bought. Orders that fail wait in the Shipping Exception filter, where EasyPost's own error message says what to fix.

Other teams feel it too. Sales and support set the service on a quote while the customer is still deciding, because carrier rates sit on the quotation itself. Accounting sees the cost of every label in the Shipments register and finds the same labels, line by line, on the carrier's draft vendor bill. FedEx's own invoices land beside them as draft bills keyed by the same tracking numbers, so accounting can set what each label cost against what FedEx finally charged for that parcel. At checkout, one EasyPost request per cart prices every delivery method, and an address EasyPost cannot verify is flagged while the shopper is still on the page.

Several things now run without anyone watching. Tracking scans arrive from EasyPost, attach to the right delivery order and reach Dittofeed, which emails the customer. Labels are stored the moment they are bought, and a product missing its weight no longer stops an order from shipping. TeqStars keeps working through the retailer's numbered requests, and the packing-station printing it built for the retailer runs alongside the same EasyPost connector.

Planning a similar Odoo project?

Tell us what you are trying to improve and our team can discuss the right implementation approach.