Back to ChroniclesGuide

    UPS FedEx 2025 Rate Increase: Automate Freight Audit Now

    UPS and FedEx raised rates about 5.9%. Spreadsheet freight audits overpay. How to automate audit and carrier selection in ops software, deployed in parallel.

    ACT
    Athena Content Team
    Athena
    November 7, 202612 min read
    UPS FedEx 2025 Rate Increase: Automate Freight Audit Now

    TL;DR

    • Your real rate increase likely exceeds 5.9% due to package mix, surcharges, and list-based discounts.
    • Manual freight audits sample invoices and miss repeating errors that only aggregation reveals.
    • Build freight audit first as deterministic rules; it pays back on invoices you already have.
    • Buy label printing and rate APIs; build your contract model, selection rules, and customer exceptions.
    • Run automation beside your spreadsheet, replay past invoices, and expand narrowly with circuit breakers.

    UPS and FedEx both announced general rate increases averaging about 5.9% for 2025. If you audit carrier invoices by hand or pick carriers from a rate sheet someone updated last spring, you will pay more than 5.9%. The headline number is an average across list rates. Your actual increase depends on your package mix, your surcharges, and how your contract discounts are written. A spreadsheet can't see any of that at the volume you ship.

    Our position is direct. Move freight audit and carrier selection into your operations software now, before the new rates have a full quarter of invoices behind them. Buy the commodity parts, which are rate APIs and label printing. Build the layer that holds your logic: which order needs which service level, which customer has its own routing rules, and which billed line doesn't match what you contracted. Deploy it beside your current process, not in place of it.

    The rest of this piece explains why, and how to do it without betting the shipping dock on a cutover.

    The UPS FedEx 2025 rate increase: why shipping costs move more than 5.9%

    A general rate increase is a change to published list rates, averaged across the carrier's whole rate structure. Your share of that average depends on where your volume sits in it. Four mechanisms decide what you actually pay.

    Your mix is not the carrier's average. The 5.9% blends every zone, weight break, and service. If your volume leans toward the weights and zones that rose fastest, your increase runs above the average. If it leans the other way, it runs below. You can't know which without running your own shipment history against the new tables.

    Discounts usually come off list. Contracted discounts are typically written as a percentage off published rates. When list rises, your net rises with it unless you renegotiate. Your discount percentage stays the same and your invoice still goes up.

    Surcharges are priced separately. Residential delivery, delivery area, additional handling, large package, and fuel are separate line items with their own tables. A rate announcement can move these independently of the base rate. Fuel surcharges reset on published schedules throughout the year. A shipper that budgets off the headline number and ignores accessorials is budgeting off part of the bill.

    Minimums and dimensional weight change the math on light, bulky freight. Carriers bill on the greater of actual weight and dimensional weight. If your cartons are oversized for their contents, you're paying for air, and a rate increase raises the price of that air.

    None of this is hidden. It is spread across hundreds of rate cells and surcharge rules, and it changes on invoices you receive weekly. That's the volume problem a spreadsheet loses to.

    Why manual freight audit overpays

    A manual freight audit fails in three specific ways. The auditors aren't the cause of any of them.

    It samples. Nobody hand-checks every line on every weekly invoice. They spot-check the big charges and the ones that look odd. Overcharges that look normal, such as a residential surcharge on a commercial address or a delivery-area fee on a ZIP that doesn't carry one, pass straight through because they don't look odd.

    It checks one invoice at a time. This is the failure we take most seriously, because we've watched it happen inside our own systems. In our own extraction system, a learned rule mapped a generic charge line onto a valid product code that did not belong on those records. The code was real. The mapping was wrong. It survived about ten months and touched 201 distinct records and 247 charge lines. Of the affected records that went through human review, an audit found that 0 of 67 still carried the bad line. The reviewers caught it every time, one record at a time. They fixed it at approve time, so the edit log showed zero hand-edits for that code, and nobody aggregated across records. The other roughly two-thirds were never reviewed by a person at all.

    The thing that flagged the problem for the whole ten months was a deterministic downstream check asking one question: is this line actually on the source document?

    Freight audit has the same shape. An analyst who fixes a misapplied surcharge on Tuesday's invoice and another on Thursday's has fixed two invoices. They haven't found the rule that keeps producing the error. Pattern detection needs a system that compares every line and counts across all of them.

    It runs after the money is gone. Spreadsheet audits typically run after payment, on whatever the team has time for that month. Every carrier has a window for disputing charges. An audit that runs late, or only on a sample, recovers what it happens to catch inside that window and forfeits the rest.

    Freight spend analysis splits into two jobs

    Treat these as separate modules. They have different inputs, different failure modes, and different owners.

    JobQuestion it answersWhen it runsPrimary input
    Freight auditDid we get billed what we contracted?After invoice, before paymentCarrier invoice data, contract terms, shipment records
    Carrier selectionWhich carrier and service should this shipment use?Before the label printsOrder data, service-level requirements, current rates

    Freight audit is backward-looking and deterministic. Carrier selection is forward-looking and depends on order data your ERP often holds badly. Build the audit first. It pays back on invoices you already have, and it tests your rate model against real bills before you let that model choose carriers.

    Freight audit is a deterministic comparison

    We prefer code determinism wherever a decision can be written as a rule. Freight audit is almost entirely rules:

    • Recompute each shipment's expected charge from your contract: base rate for the zone and billed weight, your discount, and each applicable surcharge.
    • Compare it to the billed amount, line by line.
    • Check each surcharge against its trigger. A residential fee needs a residential address. A delivery-area fee needs a ZIP on the carrier's list. Additional handling needs a package that meets the handling criteria.
    • Check billed dimensional weight against the carton dimensions you recorded at pack-out.
    • Check for duplicate tracking numbers billed twice.
    • Flag every mismatch with the invoice line, the expected value, the billed value, and the rule that failed.

    Every one of those is an if-statement. That's the point. A rule-based audit runs on every line, costs nothing per check, gives the same answer every time, and can be tested against last quarter's invoices before it touches this quarter's.

    Where AI belongs here is narrow. Carrier invoice data arrives in structured files most of the time. When it doesn't, such as a scanned invoice from a regional LTL carrier, a dispute response in email, or a contract amendment in a PDF, a model can read the document into a typed record. Then deterministic code validates the record. We use that pattern across our document work: the parser reads what it can, a model reads only what the parser can't settle, and code decides. An exact match in your own data always outranks a model's inference. A model never writes a disputed charge into your accounting system on its own judgment.

    The second layer is aggregation, the step the manual process never gets to. Count mismatches by rule, by carrier, by origin, by surcharge type, by week. One misapplied delivery-area fee is a dispute. Four hundred on the same ZIP range is a carrier table error, and you take that to your rep as one conversation.

    Carrier selection runs on order data your ERP gets wrong

    Rate shopping looks simple: query both carriers, pick the cheaper option that meets the deadline. The hard part is "meets the deadline." That requires knowing the real deadline, and that's where order data falls apart.

    We learned this on order-to-release automation for an operations-heavy client. Three findings from that work apply directly to carrier selection.

    The ERP ship date is a schedule. The estimated ship date gets re-baselined as production slips. In that work it almost never matched the customer's requested date, and the misses ran in both directions with no consistent bias. A carrier-selection rule that reads the ERP ship date and picks a service to hit it is aiming at a moving target. We wrote that up in ERP Ship Date Is a Schedule, Not a Fact.

    The in-hands date is often missing. The date the customer needs the goods was absent on a large share of open orders. Without it, the selection logic can't tell a shipment that can ride ground from one that needs two-day. Teams default to the faster service "to be safe," and after a 5.9% increase that safety margin costs more.

    Order type was present on essentially every order, and it encoded the service level. The field staff filled in reliably carried the information the missing date fields didn't. Good selection logic reads the fields that are actually populated, not the ones that should be.

    There's one more lesson from the same work. Staff routed one large reseller's orders differently from the fleet-wide default because that customer's situation called for it. When an automatic release applied the fleet default, it misrouted a run of that customer's orders within days. An account-level default fixed it, and a replay confirmed no change for any other customer. Carrier selection has the same trap. A customer that has its own carrier account, requires a specific carrier, or always pays for expedited service will be handled wrong by a global "cheapest compliant option" rule. Your shipping team already knows these exceptions. We covered how to capture them in Your Team's Routing Habits Are the Spec.

    So the selection module needs three things in this order:

    1. A deadline derived from the most reliable fields you have, with a documented fallback when the in-hands date is missing.
    2. Account-level carrier and service rules for the customers who need them, with the default reserved for everyone else.
    3. Live rate comparison against your contracted rates, including surcharges, for the shipment as it will actually be billed.

    Clean the address before the label prints

    Address quality hits shipping costs twice. Wrong addresses draw carrier address-correction charges. Commercial addresses misclassified as residential draw residential surcharges. Both get fixed far more cheaply before the label prints than after the invoice arrives.

    Here's what address matching can do when it's measured. In QC-Check, our downstream checking system, we predicted before shipping an address-matching fix that it would flip about 86% of a known failure class. In production the address mismatch rate went from 34.4% to 2.9%. We bring this up for the method more than the result. We wrote the prediction down first, shipped the fix, and compared. That's the discipline a freight module needs. Predict what a rule change will do to next month's bill, ship it, then check the invoices against the prediction.

    The order-entry work showed something else. Nearly all the address edits staff made re-typed information already present on the source document. The data existed. It was captured in the wrong shape. A shape fix in code removes that rework before it reaches the label.

    Build or buy: draw the line at your logic

    Here's the split we'd recommend for a manufacturer or distributor shipping meaningful parcel volume on both UPS and FedEx.

    Buy:

    • Label generation and carrier API connectivity. Multi-carrier shipping tools handle this well, and rebuilding it gets you nothing.
    • Raw rate quotes. The carriers publish APIs. Use them.

    Build:

    • The contract model. Your discounts, tiers, minimums, and negotiated surcharge waivers are specific to your agreement. Generic audit tools that apply standard rules miss the terms that make your contract yours.
    • The audit comparison and aggregation, wired to your shipment records and your carton data.
    • Selection rules that read your order data, including the fields that are unreliable and the fallbacks for them.
    • Account-level exceptions for the customers who don't fit the default.

    Outsourced parcel audit services exist and recover refunds. If your volume is low and your contract is close to standard, buy one and move on. Once your contract has negotiated terms, your customers have routing exceptions, and your team needs to see why a carrier was chosen, the logic belongs in software you control. That logic is your operation. Renting it means asking a vendor to learn your exceptions every time they change.

    Deploy it beside the spreadsheet, not instead of it

    A freight module doesn't need a go-live date. It needs a parallel run.

    Weeks one through four: audit in shadow. Run the automated audit against every invoice while the team keeps auditing the way it does today. Compare the two. Every place the system flags something the team missed is recovered money. Every place the team flags something the system missed is a rule you haven't written yet.

    Replay before you trust it. Before any rule change goes live, run it against stored invoices and shipments from prior months. Replay the whole pipeline, not just the function you changed. We once watched an impact estimate overstate its effect because a later gate in the pipeline reversed some of the outcomes it counted. A selection rule tested in isolation can look like it saves money that a downstream exception gives right back. We wrote about it in Replay the Pipeline, Not the Function.

    Include negative controls. Your replay set needs shipments that should not change. A rule that passes every check and still reroutes shipments it shouldn't touch is a rule whose test set had nothing to catch it. We learned that from a cleanup rule that passed all its checks and then archived orders it had no business touching. We had to turn it off with a kill switch.

    Turn on selection narrowly, with a circuit breaker. Start automatic carrier selection on one shipping lane or one order type. Measure what happens at the next station: service failures, customer complaints, reships. Don't judge it by how clean it looks at the gate. Set a threshold that pauses automation when exceptions climb past a set rate over a minimum sample. We paused an auto-release once because the floor sent most of its releases back. It looked clean at the gate, and its warnings had no one reading them. It came back on narrowly, with a breaker, after we fixed the inputs.

    Don't trust a confidence score you haven't measured. If your rate-shopping or audit tool reports a confidence number, check it against outcomes before you gate on it. We measured our own QC-Check confidence score and found it anti-calibrated. The top confidence buckets needed fixes on 77 to 79% of approvals, against 53 to 59% in the bottom buckets. A score that runs backward routes your riskiest shipments past review.

    Each step is reversible, each runs beside the current process, and the spreadsheet stays in use until the system has beaten it on real invoices.

    Where this answer changes

    We could be wrong about the timing for one profile of shipper. If you ship low parcel volume on a near-standard contract with no customer-specific routing, the build case is weak. Buy a multi-carrier tool and an audit service, and revisit when volume or contract complexity grows. Two things should make you build: a contract with negotiated terms, and customers whose shipping rules your team carries in their heads. If either applies, the 5.9% increase makes every month of manual audit more expensive than the month before.

    Start with last quarter's invoices

    The first useful step needs no software decision. Pull last quarter's carrier invoices and shipment records. Recompute expected charges against your contract for one carrier on one lane. Count the mismatches by surcharge type. That count tells you what manual audit has been missing, and it's the business case.

    If you want to see how we connect audit, selection, and order data into one operational view, start with our ops center. If you'd rather walk through your contract and your shipping exceptions with us, book a discovery call. We'll tell you which parts to buy and which parts are worth building.

    Book a discovery call.


    Ready to Explore Custom Software?

    Schedule a discovery call to discuss how modular implementation can transform your operations with proven 90-day ROI cycles.