> ## Documentation Index
> Fetch the complete documentation index at: https://docs.tryoto.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Shipping Invoices Reconciliation

> Record your carrier contracts, see the expected cost of each shipment, check carrier invoices against it, and reconcile cash on delivery across currencies.

> [!NOTE]
>
> **Where to find it:** Settings → Advanced → Shipping Prices — [Open in OTO ↗](https://app.tryoto.com/shipping-prices)

Every other function in this module decides what a shipment *should* cost. This one checks what the carrier actually charged, and tells you where the two disagree. On a few thousand shipments a month, the difference is a line item nobody would otherwise find.

## What this function covers

Three tabs, in the order you use them:

| Step | Tab | What it does |
| - | - | - |
| **1. Record the contract** | **Shipping Prices** | Tell OTO what each carrier agreed to charge, so an expected cost exists at all. |
| **2. Watch the expected cost** | **Shipping Price Transactions** | Every shipment's cost as OTO calculates it from the contract. |
| **3. Check the bill** | **Invoice Checker History** | Upload the carrier's invoice; get back a line-by-line comparison against what OTO expected. |

![The Shipping Prices tab](https://mintcdn.com/oto/YkJay8Y-1RDv8ciw/images/recon-1-shipping-prices.png?fit=max\&auto=format\&n=YkJay8Y-1RDv8ciw\&q=85\&s=8cf148c8acd62b2186df5790136c8d8e)

Fig. 1 — At Settings → Advanced → Shipping Prices. Every scoping column filters, and a Total row sits under the list.

> [!WARNING]
>
> **Step 1 is not optional**
>
> None of this works without contract prices on file. A carrier with no price rows produces no expected cost, so its invoice has nothing to be checked against — and [Least Cost Selection](https://docs.tryoto.com/modules/shipping-management/shipping-automation.md) cannot rank it either. Loading the contracts is the unglamorous prerequisite for both.

## Recording a contract

A contract is entered as a set of price rows. Each row says *under these circumstances, this carrier charges this much*, and a real contract usually needs several. The form is explicit about why: *“Please select the conditions in accordance with the terms of your contract for the specified delivery price being added.”*

![The Add Price form](https://mintcdn.com/oto/ft-bRlLvOnJkbVoC/images/recon-2-add-price.png?fit=max\&auto=format\&n=ft-bRlLvOnJkbVoC\&q=85\&s=f73b32a6474196512af8b02183e857a8)

Fig. 2 — Note that Is Same City and Between cities are toggles rather than values — a row either applies to that case or it does not.

### Scoping a row

Seven dimensions are available, and they are what makes the model fit however a particular carrier chose to write their rate card:

| Dimension | Fields | Typical of |
| - | - | - |
| **City pair** | Origin City → Destination City | Domestic carriers with an explicit city matrix |
| **Country pair** | Origin Country → Destination Country | International |
| **Tier pair** | Origin Tier → Destination Tier | Carriers that group cities into their own zones |
| **Same city** | Is Same City (toggle) | Intra-city rates, usually the cheapest band |
| **Between cities** | Between cities (toggle) | The inter-city counterpart |
| **Distance band** | Greater Than (KM) · Less Than or Equal (KM) | On-demand and own-fleet pricing |
| **Weight band** | Greater Than Weight (Per Kg) · Less Than or Equal Weight (Per Kg) | Rate cards that step by weight bracket |

### What the row charges

| Field | What it does |
| - | - |
| **Delivery Price** | Required. The base charge for a shipment matching this row. |
| **Maximum Free Weight (kg)** + **Extra Fee (Per Kg)** | The allowance included in the base price, and what each kilo beyond it costs. This pair is where most invoice surprises come from. |
| **Maximum Free KM** + **Extra Fee Per Km** | The same idea for distance. |
| **COD Fixed Fee** | A flat charge for collecting cash. |
| **COD Percentage Fee** + **Apply COD Rate After** | A percentage of the collected amount, charged only above a threshold — which is how most carriers write it: a flat fee on small orders, a percentage on large ones. |
| **Return Order Fee** | What the carrier charges to bring an undelivered parcel back. Easy to forget when comparing carriers on outbound price alone, and material if your return rate is high. |

**Upload Shipping Prices** imports the rows in bulk from a spreadsheet, which is the only sensible way to load a national carrier's city matrix.

## Expected cost per shipment

The **Shipping Price Transactions** tab is the running record — in the product's own words, it exists to *“track shipments made using your shipping contracts and review their costs automatically.”*

One line per shipment: **Order ID**, **Delivery Company**, **Shipment Number**, **Transaction Date**, **Transaction Type**, **Transaction Status**, **Amount**, **Description** and **Order Status**. Every column filters, so a month on one carrier is a couple of clicks, and the list exports.

![Shipping Price Transactions](https://mintcdn.com/oto/ft-bRlLvOnJkbVoC/images/recon-3-transactions.png?fit=max\&auto=format\&n=ft-bRlLvOnJkbVoC\&q=85\&s=76e946a855a7a81953e89bf35f074017)

Fig. 3 — This is the expected cost derived from your contract rows — not the carrier's bill. The two meeting is the point of the next section.

> [!TIP]
>
> **Before the shipment exists**
>
> For a quote rather than a record, **Main → Shipping → Price Calculator** prices a hypothetical shipment, or an existing order, across every connected carrier at once.

### Chargeable weight

Carriers bill on chargeable weight — the greater of actual weight and volumetric weight, where volumetric is the parcel's dimensions divided by the carrier's own divisor (configured per connection under [Advanced Settings](https://docs.tryoto.com/modules/shipping-management/carrier-integration.md)). A light, bulky parcel is billed as though it were heavy.

Both figures are shown side by side at [shipment creation](https://docs.tryoto.com/modules/shipping-management/shipping-and-tracking.md), so the choice is informed before anything is booked. OTO then keeps the weight you recorded and the carrier's final billable weight as separate values rather than overwriting one with the other — which is what makes a weight dispute answerable: you can see what you declared, what they billed, and the gap.

## Checking the carrier's invoice

**Invoice Checker** takes the invoice the carrier sent you and compares it, line by line, against what OTO expected.

1. **Download Template** — a spreadsheet with the columns the checker expects.
2. Fill it with the carrier's invoice lines.
3. Upload it, with an optional **Description** — the placeholder says *“Add a note for your team”*, which is the right use for it: which carrier, which month, who is chasing it.
4. OTO produces a **comparison file**, available from the Data Import page and listed under **Invoice Checker History**.

Limits are the same as every bulk upload in OTO: **XLSX or XLS, one file, up to 100 MB**.

![The Invoice Upload dialog](https://mintcdn.com/oto/YkJay8Y-1RDv8ciw/images/recon-4-invoice-upload.png?fit=max\&auto=format\&n=YkJay8Y-1RDv8ciw\&q=85\&s=4a7cd7807695b06d76de26de5d37b750)

Fig. 4 — The second banner states the flow plainly: the checker responds with a comparison file, collected from the Data Import page.

**Invoice Checker History** records each run — **Description**, **Request Date**, **Complete Date**, **Result File**, **Viewed** and **Status** — and exists, again in the product's words, to *“compare billed amounts against your shipping rates and transaction records.”*

![Invoice Checker History](https://mintcdn.com/oto/ft-bRlLvOnJkbVoC/images/recon-5-checker-history.png?fit=max\&auto=format\&n=ft-bRlLvOnJkbVoC\&q=85\&s=8a8add0de9d87bb1ff1ebd218f5df58a)

Fig. 5 — Request Date and Complete Date are separate columns because the check runs in the background — upload, carry on, collect the result.

> [!TIP]
>
> **The Viewed column is the one to watch**
>
> A comparison nobody opened is a comparison that changed nothing. If invoices are being uploaded and the **Viewed** column stays empty, the process is running but the money is not being recovered.

### Reading the comparison

The gaps worth looking for, in rough order of how often they appear:

| Discrepancy | Usually means |
| - | - |
| Billed weight above declared weight | Volumetric weight applied, or the parcel was re-weighed at the depot |
| A surcharge with no matching contract line | Fuel, remote-area or oversize surcharges that were never entered as price rows |
| Wrong band applied | The carrier put the shipment in a different zone or tier than the contract implies |
| A charge for a shipment that was cancelled | Cancellation after pickup, or a billing error |
| Return fees that were not anticipated | The return leg priced separately from the outbound |

> [!TIP]
>
> **The first run is a contract audit**
>
> On a first upload most discrepancies are usually missing price rows rather than carrier errors — the contract was entered in outline and the surcharges were left out. Fix the rows, re-run, and the second comparison is the one that tells you something about the carrier.

## Cash on delivery

COD runs on the same principle: money the carrier collected on your behalf has to be matched against money they actually remitted.

**Settings → Payments → COD Wallet** holds the balance, summarised in three figures: **Upcoming Transfer** with its **Expected Transfer** date, **Current Balance**, and **Amount Withdrawn**. As the product puts it: *“Your COD Wallet represents the cash collected from customers for cash-on-delivery shipments, which will be transferred to your bank account at company settings.”*

![COD Wallet](https://mintcdn.com/oto/ft-bRlLvOnJkbVoC/images/recon-6-cod-wallet.png?fit=max\&auto=format\&n=ft-bRlLvOnJkbVoC\&q=85\&s=f7e598d6606946a685b7a04b00634c56)

Fig. 6 — The Expected Transfer date under Upcoming Transfer is the settlement schedule made concrete — useful for a cash-flow forecast, not just a reconciliation.

Each line carries a **COD Report ID** with a **Report Start Date** and **Report End Date**, plus **Transferred Amount**, **Remaining Amount** and **Requested Amount**. The report ID and its date range are the reconciliation handle: a remittance from the carrier covers a period, and that period is what you match against the COD collected on shipments delivered in it. **Withdraw** requests a transfer to the bank account held in company settings.

> [!NOTE]
>
> **Where the rest of this lives**
>
> COD fees, wallet mechanics, payment methods and settlement schedules are covered in Billing, Payments & COD. This page covers only the reconciliation question: did the money that arrived match the money that should have.

## Multiple currencies

A merchant shipping across Saudi Arabia, the UAE and Türkiye holds contracts in more than one currency, and the orders themselves may be priced in another again. Amounts are held in the currency they occurred in rather than converted on entry, so a comparison is made like for like — the COD condition in [shipping automation](https://docs.tryoto.com/modules/shipping-management/shipping-automation.md) is even labelled *COD Value (Currency Type of Order)* for exactly this reason.

## Related

* [Carrier integration](https://docs.tryoto.com/modules/shipping-management/carrier-integration.md) — where the volumetric divisor and the connection itself are configured.
* [Shipping automation](https://docs.tryoto.com/modules/shipping-management/shipping-automation.md) — Least Cost Selection reads the prices entered here, so the two are only as good as each other.
* Billing, Payments & COD — wallet, settlement and payment methods.
* [Return Management](https://docs.tryoto.com/modules/return-management/overview.md) — where the return fees on your price rows get incurred.


## Related topics

- [Shipping Management](https://docs.tryoto.com/modules/shipping-management/overview.md)
- [Shipping automation and carrier selection rules](https://docs.tryoto.com/modules/shipping-management/shipping-automation.md)
- [Carrier integration and configuration](https://docs.tryoto.com/modules/shipping-management/carrier-integration.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.