Skip to main content

How to Track Package Shipments in Google Sheets (2026 Guide)

· 10 min read
The team behind Your Package Tracker

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

  1. Open any Google Sheet.
  2. Go to Extensions → Add‑ons → Get add‑ons.
  3. Search for Your Package Tracker.
  4. 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:

ColumnHeaderExample
ATracking Number1Z999AA10123456784
BCarrierUPS
CStatus(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:

  • UPS
  • ups
  • UPS 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.

FormulaWhat it returnsWhen to use it
PKG_STATUS_LIVEAuto-updating current statusDashboards, conditional formatting
PKG_SUMMARY_LIVEAuto-updating status + last location + timestampCustomer‑facing sheets
PKG_LAST_EVENT_LIVEAuto-updating most recent scanDebugging stuck shipments
PKG_EVENTS_LIVEAuto-updating full event historyAudit logs, delay analysis
PKG_STATUS / PKG_SUMMARY / etc.Same outputs, manual refresh onlyWhen you don't want auto-updates
PKG_REFRESHForces a fresh pull (clears cache)Manual cache bust for PKG_STATUS
PKG_QUOTAShows your remaining monthly lookupsOps 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:

  1. Insert one new column called Status.
  2. In the first data row, enter =PKG_STATUS_LIVE(<tracking cell>, <carrier cell>, TODAY()) — for example =PKG_STATUS_LIVE(F2, E2, TODAY()).
  3. Run Bulk Track Packages over the full range every morning.
  4. Add conditional formatting: green background for Delivered, yellow for Out for Delivery, red for anything containing Exception or Return.
  5. 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.