Bulk Package Tracking, CSV Export & Batch Tracking API (25 to 10,000+ Shipments)

Operations managers, 3PL teams, e-commerce fulfillment leads, and freight audit analysts frequently need to check 25, 100, or 10,000+ tracking numbers at once—whether auditing weekly carrier SLAs, resolving a backlog of open orders, or monitoring in-transit shipments across multiple carriers.

With lastscanned, you can run bulk package tracking without writing a single line of code in our Web UI, or automate batch lookups programmatically via GET /v1/track?numbers=... and POST /v1/watches.


4 Ways to Track Shipments in Bulk

WorkflowBest ForMax Numbers per ActionExports & AlertsLink / Endpoint
1. Web UI Dashboard Watches (No Code)Ongoing monitoring of active open orders with automatic background pollingPaste up to 100 tracking numbers per batch (unlimited batches)Live status table (pending, in_transit, out_for_delivery, delivered, exception), carrier/label overrides, optional Webhook pushapp.lastscanned.com/watches
2. Bulk Tracking CSV & SLA Auditor (No Code)One-off spreadsheet audits, carrier SLA checks, and CSV exportsPaste multi-line tracking numbers (tracking_number or carrier,tracking_number)One-click CSV Export (carrier, status, sub_status, origin, destination, transit_days, delivered_at, last_event)/tools/bulk-tracking-auditor
3. Instant 25-Number Credit Pack ($0.50)Ad-hoc batch checks with zero monthly subscription25 live lookups per $0.50 pack (lsk_pack_... token issued immediately after Stripe checkout)Works across Web UI tools, GET /v1/track, and MCP/lookup
4. Synchronous Batch API (GET /v1/track?numbers=...)ERP, WMS, OMS, and scheduled cron jobsUp to 25 comma-separated numbers per HTTP call (parallelizable to 10,000+ numbers)Normalized JSON array with full events[], origin, destination, and subStatusGET https://api.lastscanned.com/v1/track?numbers=...

1. No-Code Ongoing Bulk Monitoring: Web UI Dashboard Watches (app.lastscanned.com/watches)

If your operations or support team wants to paste a list of open tracking numbers and watch them move to delivered or exception without writing code:

  1. Sign in at app.lastscanned.com/watches.
  2. Paste up to 100 tracking numbers into the Add watches box (one per line or comma-separated):
    9400111899223847162534
    1Z9999999999999999
    UUS5CN5366140981990
    LP00592148291048
    817817302
  3. (Optional) Select a specific carrier (for example UniUni, SpeedX, Yanwen, XPO LTL, or Central Transport) or leave it on Auto-detect, and attach an order label (e.g., "May Wholesale Batch #4").
  4. Click Watch. Every tracking number is queried immediately so its current status (in_transit, out_for_delivery, delivered, exception), latest checkpoint description, and location populate right away in your dashboard table.
  5. lastscanned automatically re-checks every active watch on an adaptive schedule (every 15 minutes when out_for_delivery, every 30 minutes on exception, and every 1 hour while in_transit) and stops automatically once delivered.
  6. Need Slack, ERP, or helpdesk alerts? Add a webhook URL in app.lastscanned.com/webhooks to receive HMAC-SHA256 signed tracking.updated events whenever any watched shipment changes status.

2. No-Code Spreadsheet & SLA Auditing: Bulk Tracking CSV Auditor (/tools/bulk-tracking-auditor)

When finance or fulfillment teams need to audit a spreadsheet of tracking numbers and export a clean CSV with transit times and delivery timestamps:

  1. Open the Bulk Tracking CSV & SLA Auditor (lastscanned.com/tools/bulk-tracking-auditor).
  2. Paste your tracking numbers (one per line, or carrier,tracking_number such as saia,77136436530), or click Load Multi-Carrier Audit Sample.
  3. Enter your lsk_live_... API key or a $0.50 credit pack token (lsk_pack_...) for live carrier lookups.
  4. Review the summary KPIs (Delivered on Time, In Transit, Exceptions / Action Required, and Average Transit Days) and click Export CSV to download a spreadsheet ready for Excel, Google Sheets, or chargeback/SLA claims.

3. Programmatic Batch API (GET /v1/track?numbers=...)

For developers and data pipelines, GET /v1/track accepts up to 25 comma-separated tracking numbers in a single request and fans them out in parallel across all 542 carriers:

curl -s "https://api.lastscanned.com/v1/track?numbers=9400111899223847162534,1Z9999999999999999,UUS5CN5366140981990,SPXSG039323029482,4007854296017911" \
  -H "Authorization: Bearer $LASTSCANNED_KEY"

Python Script: Convert a 5,000-Row CSV into Enriched Tracking Results

import csv
import requests

API_KEY = "lsk_live_..."
BATCH_SIZE = 25

def chunked(iterable, size):
    for i in range(0, len(iterable), size):
        yield iterable[i:i + size]

with open("shipments_in.csv", newline="") as f_in, open("shipments_out.csv", "w", newline="") as f_out:
    reader = csv.DictReader(f_in)
    writer = csv.writer(f_out)
    writer.writerow(["tracking_number", "carrier", "status", "sub_status", "delivered_at", "latest_checkpoint", "latest_location"])

    rows = [r["tracking_number"].strip() for r in reader if r.get("tracking_number")]
    for batch in chunked(rows, BATCH_SIZE):
        resp = requests.get(
            "https://api.lastscanned.com/v1/track",
            params={"numbers": ",".join(batch)},
            headers={"Authorization": f"Bearer {API_KEY}"},
            timeout=30,
        )
        resp.raise_for_status()
        data = resp.json()
        results = data if isinstance(data, list) else data.get("results", [data])
        for item in results:
            events = item.get("events") or []
            latest = events[0] if events else {}
            loc = latest.get("location") or {}
            loc_str = ", ".join(filter(None, [loc.get("city"), loc.get("state"), loc.get("country")]))
            writer.writerow([
                item.get("trackingNumber"),
                item.get("carrier"),
                item.get("status"),
                item.get("subStatus"),
                item.get("deliveredAt"),
                latest.get("description"),
                loc_str,
            ])

Transparent Bulk Pricing

TierPriceIncluded Live LookupsOveragesBest For
Sandbox / Preview$0Unlimited zero-cost sample previews (lastscanned.com/lookup)$0Testing UI & schema normalization
Instant Credit Pack$0.50 one-time25 live lookups ($0.02/lookup)Buy another pack anytimeOne-off spreadsheet audits & quick batches
Pro Plan$4.99 / month1,000 live lookups / month ($0.005/lookup)$0.005 / lookup ($5 per 1,000)Daily Web UI Dashboard Watches, webhooks & production APIs
Keyless x402 / Tempo MPP$0.005 / lookupPay-per-request on Base USDCNo account requiredAutonomous AI agents & headless CLI scripts

On this page