How to Track Packages from Multiple Couriers in One Place
Here's the situation most shipping teams eventually land in. Monday's outbound: 40 packages via UPS Ground, 20 via USPS Priority, 8 via FedEx Express, 3 international via DHL, one oversized item via Estafeta, and two inbound supplier shipments via SF Express. That's six carriers, six tracking portals, and exactly zero good ways to see all of them in one place.
You don't actually need six tools. You need one column. This guide shows how to track packages from every carrier you use — side by side, in a single Google Sheet, with one formula that doesn't care who the carrier is.
The core idea: carrier is a column, not a tool
The way most teams fail at multi-carrier tracking is by splitting their data: one tab for UPS, one tab for USPS, a separate tool for DHL. That's copying the carriers' fragmentation into your own system.
The cleaner pattern is the exact opposite: one master list, every shipment in it, the carrier is just a value in a column. The tracking formula reads whichever carrier the row specifies and returns the right status, whether that's UPS, FedEx, DHL, Royal Mail, or J&T Express.
Concretely:
=PKG_STATUS(tracking_cell, carrier_cell)
That single formula — with Your Package Tracker installed — handles every one of the 1,700+ supported carriers. UPS rows query UPS. USPS rows query USPS. DHL rows query DHL. All in the same column.
Step 1: The canonical multi-carrier sheet layout
Here's the column structure most multi-carrier ops teams converge on. Adapt to taste — the essential columns are tracking number and carrier, side by side.
| Col | Header | Example | Notes |
|---|---|---|---|
| A | Date shipped | 2026-04-20 | Useful for sorting and SLA checks |
| B | Order / reference | SO-8821 | Whatever ties back to your system |
| C | Recipient | Jane Doe | For customer-service lookups |
| D | Tracking # | 1Z999AA10123456784 | Required |
| E | Carrier | UPS | Required — one carrier per row |
| F | Status | (formula) | =PKG_STATUS(D2, E2) |
| G | Summary | (formula) | =PKG_SUMMARY(D2, E2) |
| H | Last event | (formula, optional) | =PKG_LAST_EVENT(D2, E2) — for exceptions |
The essential thing: columns D and E are the inputs the formula reads from. Everything else is context for you.
Step 2: The one formula that handles everyone
In cell F2:
=PKG_STATUS(D2, E2)
In cell G2:
=PKG_SUMMARY(D2, E2)
Do not copy these down 500 rows manually — we'll get to the right way in a moment.
These two formulas work identically whether E2 contains UPS, USPS, FedEx, DHL, Australia Post, China Post, SF Express, Yamato, or any other supported carrier name. The add-on recognizes the carrier string and routes the lookup to the right network under the hood.
Which carrier values work?
You can use any of the following in column E:
- Full English name (case-insensitive):
UPS,FedEx,USPS,DHL,Royal Mail,Australia Post,Japan Post,SF Express - Common abbreviations:
UPS,DHL,USPS,FedEx,RM(Royal Mail),AusPost - Local/native names:
中国邮政(China Post),Deutsche Post,La Poste - Numeric carrier codes — if you're importing from a platform that uses codes, those work too
This matters because most teams are ingesting tracking numbers from a mix of sources — your shipping platform, a supplier's CSV, a marketplace export — and the carrier name is spelled differently each time. Our normalization is forgiving.
Step 3: Bulk-track the whole list in one pass
This is the step people most often get wrong.
Wrong: Select F2:G2, grab the fill handle, drag down to row 500. What happens next: every one of those 500 rows fires a live carrier lookup in the same second. Carriers rate-limit, the add-on surfaces errors, and half your cells show #ERROR!.
Right: Use Bulk Track Packages. It's the dedicated tool for exactly this situation, and it handles a mixed-carrier batch in a single run.
- In the Sheets menu bar, open Your Package Tracker → Bulk Track Packages.
- Tracking range:
D2:D500. - Carrier range:
E2:E500. - Output type: Status (one word per row) or Summary (status + last location + timestamp).
- Click Start Bulk Tracking.
The add-on walks the rows, reads the carrier from column E for each, routes the lookup to the right carrier network, paces requests to respect each carrier's rate limits independently, caches duplicates, skips already-delivered rows, and writes the results into the column right after your carrier column.
You can close the dialog. It keeps running in the background. Come back in a few minutes, the status column is filled in.
This is the whole "unified multi-carrier view" you came here for — it's literally one button press.
Step 4: Make the sheet scannable
Once the status column is populated, the readability win comes from conditional formatting. Three rules cover 95% of the use case:
- Delivered → green background. Dismiss these visually.
- Status contains "Out for Delivery" → yellow. Today's arrivals.
- Status contains "Exception", "Alert", "Return", or "Held" → red. Your callback queue.
How to add it:
- Select the Status column (e.g.
F2:F500). - Format → Conditional formatting.
- Condition: "Text contains" →
Delivered→ background green. - Add another rule for
Out for Delivery→ yellow. - Add another for
Exception,Alert, etc. → red.
Now a 300-row sheet with mixed carriers becomes instantly legible: green rows are done, yellow are today, red is the customer service list.
Real-world multi-carrier scenarios
Dropshipper sourcing from multiple suppliers
Supplier A ships via China Post. Supplier B via Yanwen. Supplier C via SF Express. End customers are in the US, EU, Australia.
Sheet structure: one row per order, tracking number in column D, carrier in column E. Conditional formatting on Status. Weekly pivot by carrier: which supplier delivers fastest? Which has the highest exception rate? You've built, for $19/month, a supplier performance dashboard that would take a week to build in a BI tool.
3PL handling mixed domestic + international
The 3PL receives goods from clients, bundles, and ships via whichever carrier is cheapest per destination. A typical week: 50% UPS Ground, 25% USPS Priority, 15% FedEx, 10% DHL for international.
Sheet structure: one row per outbound, columns for client, tracking, carrier, recipient, ship date, Status, Summary. Daily Bulk Track Packages over the open range. Each client sees a filtered view of their shipments only. One sheet, every carrier, no per-client dashboard to build.
Office admin tracking inbound
You order supplies from twelve vendors. They ship via whatever carrier they prefer — UPS, FedEx, USPS, DHL, one vendor uses OnTrac, another uses a regional LTL freight carrier.
Sheet structure: vendor, PO number, expected arrival, tracking, carrier, Status. Quick Bulk Track when you want to see what's outstanding. Filter on Exception for the "something's stuck" list you need to chase.
Personal — tracking everything you buy
Online shopping means a tracking number per purchase, and every retailer uses a different carrier. A single personal sheet with 50–100 rows, carrier in column E, Bulk Track once a week, and the whole "where are my things" question is answered without logging into a dozen tracker apps.
Handling the edge cases
"I don't know the carrier"
Occasionally a marketplace gives you a tracking number without saying who the carrier is. In that case, leave column E blank or type auto. Some carriers have tracking number patterns distinctive enough that auto-detection works (e.g. 1Z-prefix is always UPS). For ambiguous numbers, you'll need to ask the shipper — no tracking engine can detect the carrier from a bare number 100% of the time.
Tracking numbers crossing two carriers
FedEx SmartPost, UPS Mail Innovations, and DHL eCommerce's US arm all hand the final-mile delivery to USPS. You can put FedEx or USPS (or UPS / USPS) in column E — the formula will resolve either way, and the event timeline is continuous across the handoff. We explain this in more detail in our FedEx and USPS guides.
Mixing domestic and international in the same sheet
No special handling needed. International shipments just surface additional events (customs holds, export scans) in PKG_LAST_EVENT. A useful pattern: pin column H (Last Event) only for rows whose destination isn't your home country, so customs status is always visible for the shipments that actually care about it.
Frequently asked questions
Can I have different carriers in different rows? Yes — that's the whole point of this setup. One row, one carrier. Mix as many as you want in the same sheet.
Will my quota be split per carrier? No. Your monthly lookup budget is pooled across all carriers. 500 lookups on Growth means 500 lookups total, whether they're all UPS or split across 20 carriers.
What if my carrier column is in a different position than column E?
Doesn't matter. PKG_STATUS(tracking_cell, carrier_cell) takes any two cells as input. Put the columns wherever fits your layout.
Is it fine to have the same tracking number appear twice? Yes. Cached reads are free, so the second lookup of the same number doesn't count against quota.
Does Bulk Track Packages really handle mixed carriers? Yes — it reads the carrier per row and routes each lookup appropriately. You don't need to run it once per carrier.
What does it cost? 3 free lookups to try. Paid plans from $19/month. Full pricing.
The takeaway
Multi-carrier tracking is a data-modeling problem, not a tooling problem. The moment you model carrier as a column in one sheet instead of carrier as a separate tool, the whole thing collapses into a single view, a single formula, and a single monthly bill.
Install Your Package Tracker free from the Google Workspace Marketplace →
More carrier-specific guides: UPS, FedEx, USPS, DHL. Comparing tools? Read our overview of multi-carrier tracking platforms.