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 "https://api.lastscanned.com/v1/track?numbers=1Z000Y770414233027,1ZG2242W6822298280,1Z54V8630394427740" \
-H "Authorization: Bearer lsk_live_YOUR_KEY"// 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
| Option | How it works | Price | Notes |
|---|---|---|---|
| ups.com tracking | Type up to 25 numbers per request. | Free | Made for reading on screen. |
| UPS Tracking API | One inquiry number per GET call, with an OAuth 2.0 token from a UPS developer app. | Through your UPS developer account | UPS only. UPS staff confirm multiple packages mean one call each. |
| lastscanned | GET /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.