How to Track Package Shipments in Google Sheets (2026 Guide)
If you ship even a few packages a week, you have probably lived this scene: fifteen browser tabs open to carrier websites, a spreadsheet on one screen, and you manually copy‑pasting statuses back and forth. It is slow, error‑prone, and it does not scale.
There is a much simpler approach. You can track every shipment — across UPS, FedEx, USPS, DHL, and 3,000+ other carriers — directly inside a single Google Sheet using a tracking formula. This guide walks through exactly how to set it up, copy it to bulk rows, and keep the data fresh.
Why track packages inside Google Sheets?
A dedicated logistics dashboard is great if you are a Fortune 500. For everyone else — Etsy sellers, Shopify stores, small e‑commerce teams, office admins, procurement — the ideal tracking surface is the one you already use: Google Sheets.
- One source of truth. Your order numbers, customer info, costs, and tracking statuses all live in the same file.
- No integration work. No API keys, no webhooks, no Zapier pipelines to maintain.
- Anyone on the team can use it. If they can read a spreadsheet, they can read the tracking column.
- Cheap. A Google Sheets add‑on costs a fraction of a logistics SaaS seat.
The catch has always been that Google Sheets has no built‑in way to query a carrier. This is exactly what a package tracking add‑on solves.
The short answer: one formula per shipment
Once Your Package Tracker is installed from the Google Workspace Marketplace, every cell in your sheet gains access to a small set of tracking formulas. The one you will use 90% of the time is PKG_STATUS_LIVE — our auto-updating tracking formula:
=PKG_STATUS_LIVE("1Z999AA10123456784", "UPS", TODAY())
That single cell returns the current status of the package — In Transit, Out for Delivery, Delivered, and so on — and stays current as the carrier posts new scans. No macros, no API token, no external tools, no manual reruns.
Live auto-updating is unique to Your Package Tracker. Other Google Sheets tracking add-ons return one value and then sit stale until you click refresh. Ours wires up live carrier push notifications, so your sheet always reflects the latest known state. The
TODAY()argument tells Sheets to re-evaluate the formula daily; for instant updates use the menu's Refresh Live Tracking.
The rest of this guide shows how to set it up from scratch, how to apply it to hundreds of shipments at once, and how to avoid the mistakes that trip people up.
Step 1: Install the Google Sheets add‑on
- Open any Google Sheet.
- Go to Extensions → Add‑ons → Get add‑ons.
- Search for Your Package Tracker.
- Click Install and approve the permissions prompt.
The permissions are narrow on purpose: the add‑on needs to read the cell you put a formula in and write the result back. It does not read the rest of your drive.
You get 3 free tracking lookups the moment you install. That is enough to test the full flow before you decide whether to subscribe.
Tip: if you are going to track a lot of packages, install the add‑on on the workspace account that owns the master sheet, not a personal Gmail. Permissions and license keys follow the account, not the file.
Step 2: Set up your tracking columns
The cleanest layout for a tracking sheet has three columns up front:
| Column | Header | Example |
|---|---|---|
| A | Tracking Number | 1Z999AA10123456784 |
| B | Carrier | UPS |
| C | Status | (formula goes here) |
Type a real tracking number into A2, the carrier name into B2, and in C2 enter:
=PKG_STATUS_LIVE(A2, B2, TODAY())
Within a few seconds the cell will display something like Delivered or In Transit — and from then on, it'll keep updating itself as the carrier posts new events. That is the whole core workflow.
Which carrier names work?
You can use the carrier name (case‑insensitive) or the numeric carrier code. All of these work for UPS, for example:
UPSupsUPS Express- the carrier code
100002
Supported carriers include the global majors (FedEx, UPS, USPS, DHL, Amazon Logistics, TNT, Aramex), regional postal services (Royal Mail, Canada Post, Australia Post, Deutsche Post, La Poste, PostNL, NZ Post, Japan Post, Korea Post), and the big Asian networks (China Post, SF Express, Yamato, JNE, J&T). The complete list is in the documentation.
Step 3: Go beyond a simple status
The add‑on ships with two families of formulas — _LIVE (auto-updating, recommended) and the classic on-demand variants. Each one is designed for a different spreadsheet use case.
| Formula | What it returns | When to use it |
|---|---|---|
PKG_STATUS_LIVE | Auto-updating current status | Dashboards, conditional formatting |
PKG_SUMMARY_LIVE | Auto-updating status + last location + timestamp | Customer‑facing sheets |
PKG_LAST_EVENT_LIVE | Auto-updating most recent scan | Debugging stuck shipments |
PKG_EVENTS_LIVE | Auto-updating full event history | Audit logs, delay analysis |
PKG_STATUS / PKG_SUMMARY / etc. | Same outputs, manual refresh only | When you don't want auto-updates |
PKG_REFRESH | Forces a fresh pull (clears cache) | Manual cache bust for PKG_STATUS |
PKG_QUOTA | Shows your remaining monthly lookups | Ops visibility |
A practical layout we see a lot:
- Column C:
=PKG_STATUS_LIVE(A2, B2, TODAY())— for at‑a‑glance filtering. - Column D:
=PKG_SUMMARY_LIVE(A2, B2, TODAY())— so an operator can read one sentence without clicking. - Column E:
=PKG_LAST_EVENT_LIVE(A2, B2, TODAY())— only referenced when something looks off.
Because these are native Sheets formulas, you can layer conditional formatting on top (green for Delivered, red for Exception), sort and filter on them, or pipe them into pivot tables and charts.
Step 4: Track many packages at once — just drag-fill
Here is what would be the mistake on day one with a typical tracking add‑on: paste the formula, copy‑paste it down 400 rows, and watch most of them turn into #ERROR! because the carrier rate-limited you.
With _LIVE formulas, that's not an issue. Drag-fill from C2 (or wherever your formula is) all the way down to row 500 — it just works. Our backend batches the registrations server-side, respects every carrier's rate limit, and dedupes duplicate calls. The first time each tracking number is seen you'll briefly see Registering...; within a few seconds it's replaced with real data.
Want a one-time snapshot instead? Your Package Tracker → Bulk Track Packages still works for users who want a one-shot fetch with no auto-updates. Pick the range, click Start, and results write into the next column. For carriers that require a secondary identifier (JNE Express asks for the last 4–5 digits of the phone number, for instance), expand Advanced Options in that dialog.
Step 5: Keep the data fresh — automatically
The whole point of PKG_*_LIVE is that you don't have to think about freshness. The TODAY() argument prompts Google Sheets to re-evaluate daily. Our backend gets push notifications from the carrier whenever a package moves, so the values you see are always current.
For an instant manual refresh — say, you just handed a label to the driver and want to see it scanned — use the menu: Your Package Tracker → Refresh Live Tracking. That re-evaluates every _LIVE cell on the active sheet immediately.
If you're using the older on-demand PKG_STATUS, results are cached for 6 hours; use =PKG_REFRESH(A2, B2) to bypass that cache.
To see how much quota you have left, drop =PKG_QUOTA() into any cell. It is a great thing to park in row 1 of your dashboard.
Common problems and how to fix them
"My tracking number returns an error"
Nine times out of ten it is a carrier mismatch. UPS numbers starting with 1Z will not resolve if you ask FedEx for them. Double‑check the carrier column, or try the carrier code from the docs list.
"I copied the formula to 500 rows and most of them errored"
That is the rate‑limit scenario described above. Clear those cells, then rerun the range through Bulk Track Packages — it will process them politely and write clean results.
"The status is out of date"
Carriers don't always scan in real time. A package can sit for 24 hours between scans without anything being wrong. If you're using _LIVE formulas, hit Your Package Tracker → Refresh Live Tracking for an instant force-refresh; for the on-demand PKG_STATUS, swap to =PKG_REFRESH(A2, B2) for that cell only.
"I hit my monthly quota"
Every plan has a monthly lookup budget — 200 on Starter, 1,000 on Growth, 3,000 on Business. Cached reads are free, so in practice most teams use a fraction of what they paid for. If you are consistently hitting the ceiling, you can upgrade plans from inside the add‑on at any time. See the pricing page for the full breakdown.
A worked example: an Etsy seller's order sheet
Suppose you run an Etsy store that ships 50–100 packages a week. Your master order sheet probably has columns for Order ID, customer name, product, ship date, carrier, and tracking number. To bolt tracking onto it:
- Insert one new column called
Status. - In the first data row, enter
=PKG_STATUS_LIVE(<tracking cell>, <carrier cell>, TODAY())— for example=PKG_STATUS_LIVE(F2, E2, TODAY()). - Run Bulk Track Packages over the full range every morning.
- Add conditional formatting: green background for
Delivered, yellow forOut for Delivery, red for anything containingExceptionorReturn. - Filter the sheet by red rows at the end of each day. That is your proactive customer‑service queue.
Total setup time: about 15 minutes. Ongoing time: about zero.
Frequently asked questions
Do I need to know how to code?
No. Everything in this guide is a spreadsheet formula. If you can use =SUM(), you can use =PKG_STATUS_LIVE().
Does this work on the free Google Workspace tier? Yes. The add‑on works on personal Gmail Sheets, Workspace Essentials, Business Starter, and every tier above.
Is my data private? The add‑on only transmits the tracking number and carrier name to query the carrier, plus a usage counter for quota enforcement. It does not read other cells or other files. See the Privacy Policy for the full breakdown.
How many carriers are really supported? More than 3,000 worldwide — every major postal service and courier we have been able to integrate. If you hit a gap, email us and we will usually add it within a week.
What does it cost? 3 free lookups to try it, then plans from $19/month. See pricing.
The takeaway
Tracking packages in Google Sheets used to mean writing a fragile Apps Script against a carrier's private API and praying nothing broke. It no longer does. Install the add‑on, drop =PKG_STATUS_LIVE(A2, B2, TODAY()) into a cell, drag it down, and the problem is solved for 3,000+ carriers at once — with values that update on their own.
Ready to try it? Install Your Package Tracker from the Google Workspace Marketplace — the first three lookups are on us.