How do I track multiple UPS tracking numbers at once?

ups.com lets you type up to 25 UPS numbers per request. UPS's Tracking API takes one inquiry number per call (GET /api/track/v1/details/{inquiryNumber}) with an OAuth token, and UPS says that to track several packages you call it once for each. With lastscanned you send up to 35 UPS numbers in one GET /v1/track request, or up to 100 when the list mixes carriers, and loop for longer lists. Pro is $4.99/mo for 1,000 unique numbers, then $0.015 each, with no daily limit. A free key tracks 5 numbers a day. With no key you get 1 lookup a day, then pay per request over MPP: $0.50 by card for a 25-number pack, or $0.02 a number in USDC on Tempo.

Try it

curl: three UPS numbers in one request
curl "https://api.lastscanned.com/v1/track?numbers=1Z000Y770414233027,1ZG2242W6822298280,1Z54V8630394427740" \
  -H "Authorization: Bearer lsk_live_YOUR_KEY"
Node: thousands of UPS numbers, 35 per request, written out as CSV
// node track-list.mjs < numbers.txt > results.csv   (one number per line)
import { stdin } from "node:process";

let text = "";
for await (const chunk of stdin) text += chunk;
const numbers = [...new Set(text.split(/[\s,]+/).map((n) => n.trim().toUpperCase()).filter(Boolean))];
// e.g. 1Z000Y770414233027, 1ZG2242W6822298280, 1Z54V8630394427740

console.log("tracking_number,carrier,status,last_scan_utc,last_scan,location,error");
for (let i = 0; i < numbers.length; i += 35) {
  const batch = numbers.slice(i, i + 35);
  const url = new URL("https://api.lastscanned.com/v1/track");
  url.searchParams.set("numbers", batch.join(","));
  const res = await fetch(url, { headers: { Authorization: `Bearer ${process.env.LASTSCANNED_KEY}` } });
  if (!res.ok) throw new Error(`${res.status} ${await res.text()}`);
  for (const { trackingNumber, result, error } of (await res.json()).results) {
    const last = result?.events?.[0]; // events are newest first
    const row = [trackingNumber, result?.carrier, result?.status, last?.timestamp, last?.description, last?.location, error?.code];
    console.log(row.map((v) => JSON.stringify(v ?? "")).join(","));
  }
}

Ways to track UPS numbers in bulk

OptionHow it worksPriceNotes
ups.com trackingType up to 25 numbers per request.FreeMade for reading on screen.
UPS Tracking APIOne inquiry number per GET call, with an OAuth 2.0 token from a UPS developer app.Through your UPS developer accountUPS only. UPS staff confirm multiple packages mean one call each.
lastscannedGET /v1/track?numbers=a,b,c with up to 35 UPS numbers (100 in all), one Bearer key.Free: 5 numbers a day. Pro: $4.99/mo for 1,000 unique numbers, then $0.015 each, no daily limit.UPS and 542 other carriers in one response shape.

Carrier limits from UPS: track multiple shipments, UPS Tracking API spec and UPS API docs: one call per package, read on November 3, 2026. They can change.

Details

From one call per number to one per 35

A 2,000-number UPS list is 2,000 calls to the UPS Tracking API. Here it is 58 requests of 35, each answered when every number in it has a result.

UPS mixed with everything else

1Z numbers detect as UPS from the format, so a list that mixes UPS with FedEx, USPS or DHL can go out together, up to 100 per request with no more than 35 for any one carrier.

Re-checks are free on Pro

A number counts once a month on Pro, however many times you poll it. 3,000 different UPS numbers in a month is $4.99 + 2,000 × $0.015 = $34.99.

History UPS keeps

UPS's Tracking API notes that data rolls off after a 120-day retention period, so audit old shipments before then.

FAQ

How many UPS numbers can I track at once on ups.com?
Up to 25 per request.
Can the UPS Tracking API track multiple numbers in one call?
No. GET /api/track/v1/details/{inquiryNumber} takes one inquiry number, and UPS's own answer for several packages is to call it once per package.
How many UPS numbers fit in one lastscanned request?
35. A request can hold 100 numbers in all, with no more than 35 for any one carrier, so a UPS-only list goes out 35 at a time.
Do I need a UPS developer account?
Not to use lastscanned. UPS's own API needs a UPS developer app and an OAuth token.