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 1,700+ 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 six new formulas. The one you will use 90% of the time is PKG_STATUS:
=PKG_STATUS("1Z999AA10123456784", "UPS")
That single cell returns the current status of the package — In Transit, Out for Delivery, Delivered, and so on — refreshed automatically. No macros, no API token, no external tools.
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(A2, B2)
Within a few seconds the cell will display something like Delivered or In Transit. 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
PKG_STATUS is the headline formula, but the add‑on ships with five more. Each one is designed for a different spreadsheet use case.
| Formula | What it returns | When to use it |
|---|---|---|
PKG_STATUS | Current status (one phrase) | Dashboards, conditional formatting |
PKG_SUMMARY | Status + last location + timestamp | Customer‑facing sheets, quick context |
PKG_LAST_EVENT | Most recent scan with location | Debugging stuck shipments |
PKG_EVENTS | Full event history, one row per scan | Audit logs, delay analysis |
PKG_REFRESH | Forces a fresh pull from the carrier | When you just updated a label |
PKG_QUOTA | Shows your remaining monthly lookups | Ops visibility |
A practical layout we see a lot:
- Column C:
=PKG_STATUS(A2, B2)— for at‑a‑glance filtering. - Column D:
=PKG_SUMMARY(A2, B2)— so an operator can read one sentence without clicking. - Column E:
=PKG_LAST_EVENT(A2, B2)— 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 (the safe way)
Here is the mistake almost everyone makes on day one: they paste the formula once, see it work, then copy‑paste it down 400 rows all at once.
Don't do that.
Every one of those formulas fires a carrier lookup in the same second. Carriers rate‑limit, the add‑on surfaces that as an error, and you end up with #ERROR! cells everywhere. The fix is built in — Bulk Track Packages — and it is the right tool whenever you have more than about 20 rows.
To use it:
- In the Sheets menu bar, open Your Package Tracker → Bulk Track Packages.
- Enter the range of your tracking numbers (for example
A2:A200). - Enter the range of your carriers (for example
B2:B200). - Choose what to write out: Status, Summary, Last Event, or All Events.
- Click Start Bulk Tracking.
The add‑on paces the lookups, respects carrier rate limits, caches duplicates, and writes the results into the column immediately after your carrier column. You can close the dialog and come back later — it keeps running.
For carriers that require a secondary identifier (JNE Express asks for the last 4–5 digits of the recipient's phone number, for instance), expand Advanced Options and drop that value in once. It will be applied to every row in the batch.
Step 5: Keep the data fresh
By default, PKG_STATUS and friends cache each result so you are not burning quota every time your sheet recalculates. That is what you want 99% of the time — your Delivered packages are not going to change status.
When you do want a fresh pull — say, you just handed a label to the driver and want to see it scanned — wrap the call in PKG_REFRESH:
=PKG_REFRESH(A2, B2)
This bypasses the cache and pulls directly from the carrier. Use it sparingly, since it counts against your monthly quota.
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 need the freshest view, swap the formula 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(<tracking cell>, <carrier cell>)— for example=PKG_STATUS(F2, E2). - 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().
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 1,700 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(A2, B2) into a cell, and the problem is solved for 1,700+ carriers at once.
Ready to try it? Install Your Package Tracker from the Google Workspace Marketplace — the first three lookups are on us.