How do I track multiple Canada Post tracking numbers at once?

Canada Post's Track tool takes several numbers at once, one per line, for reading on screen. Its developer tracking web service looks up one PIN per call (GET /vis/track/pin/{PIN}/summary, or Get Tracking Details for every event) with a Developer Program API key, and a key that goes over its throttle limit is blocked for up to a minute. With lastscanned you send up to 35 Canada Post numbers per GET /v1/track request, or up to 100 mixed with other carriers, with one key. 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: one Canada Post PIN
curl "https://api.lastscanned.com/v1/track/4007854296017911?carrier=canadapost" \
  -H "Authorization: Bearer lsk_live_YOUR_KEY"
Node: a long Canada Post list, 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. 4007854296017911

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(","));
  url.searchParams.set("carrier", "canadapost");
  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 Canada Post numbers in bulk

OptionHow it worksPriceNotes
Canada Post TrackType several numbers, pressing Enter after each.FreeMade for reading on screen.
Canada Post tracking web serviceOne PIN or delivery notice card number per GET call, with Basic auth from a Developer Program API key.Through the Canada Post Developer ProgramCanada Post only. Over the throttle limit, the key is blocked for up to a minute.
lastscannedGET /v1/track?numbers=a,b,c with up to 35 Canada Post 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.Canada Post and 548 other carriers in one response shape.

Carrier limits from Canada Post: how to use Track, Canada Post: Get Tracking Summary, Canada Post: web services fundamentals and Canada Post: errors and codes, read on November 5, 2026. They can change.

Details

What comes back for a Canada Post PIN

4007854296017911 is an Expedited Parcels PIN delivered in Shilo, Manitoba on February 16, 2026. It comes back with status delivered, deliveredAt in UTC, the service name and every scan, newest first.

From one call per PIN to one per 35

A 700-PIN list is 700 calls to Canada Post's tracking web service, paced to stay under the throttle limit. Here it is 20 requests of 35.

Domestic PINs and international items

Domestic parcels carry a 16-digit PIN; international registered and Xpresspost items use the 13-character format ending in CA. When a list is all Canada Post, add carrier=canadapost so every number goes to Canada Post.

Testing without production keys

Canada Post's development environment answers every tracking request with "No Pin History", so testing its API means production keys and real PINs. A free lastscanned key tracks 5 real numbers a day.

FAQ

Can I track several Canada Post numbers at once on the website?
Yes. The Track tool takes several numbers if you press Enter after each one.
Does the Canada Post tracking API take more than one PIN per call?
No. Get Tracking Summary and Get Tracking Details each take one PIN or delivery notice card number in the URL.
How many Canada Post numbers fit in one lastscanned request?
35. A request can hold 100 numbers in all, with no more than 35 for any one carrier.
Do I need a Canada Post Developer Program account?
Not to use lastscanned. Canada Post's own web services need Developer Program API keys.