Deterministic synchronous REST & official remote MCP—built for production code and AI agents.

ParcelsApp is primarily a consumer ad-supported tracking website whose API relies on asynchronous polling tokens when results aren't cached. lastscanned is engineered specifically for software and AI agents: one synchronous GET /v1/track/:number returns a strict TypeScript-ready JSON schema with a 7-state status enum, UTC + local timestamps, and an official remote MCP server (https://mcp.lastscanned.com) for $4.99/month.

lastscanned vs. ParcelsApp at a glance

Side-by-side comparison of architecture, monthly pricing across 31 supported carriers, and AI agent integration.

FeaturelastscannedParcelsApp
Primary audienceDevelopers, SaaS backends, WISMO workflows & AI agentsConsumer ad-supported web lookup with secondary API
Request executionSingle synchronous GET /v1/track/:number (or batch ?numbers=...)Often returns a uuid requiring repeated follow-up polling requests
Response contractStrict JSON schema: 7-state status enum, ISO-8601 UTC timestamp + localTime, structured locationLoosely typed aggregator strings across varying courier formats
Pricing & re-polling$0 Free (5/day) or $4.99/mo Pro (1,000 unique numbers + unlimited free re-polls all month)Tiered request quotas where repeated polling consumes request allowance
Official remote MCP serverhttps://mcp.lastscanned.com (Streamable HTTP + URL-path auth)None
Machine-readable discoveryOpenAPI 3.1 (/openapi.yaml, api.lastscanned.com/openapi.json), /llms.txt, /llms-full.txt, and .md docsBasic documentation page
Keyless HTTP 402 Stripe MPPBuilt-in ($0.50 / 25-pack card or $0.02 USDC on Tempo)None

Single-trip synchronous JSON vs. UUID polling loops

Consumer tracking aggregators frequently return an incomplete response with a job UUID, forcing your backend to sleep and poll in a loop until the lookup finishes.

One request, one complete answer
GET https://api.lastscanned.com/v1/track/:number holds the connection and returns the complete, normalized TrackingResult in a single HTTP response.
Batch up to 100 tracking numbers
Query GET /v1/track?numbers=num1,num2,... to retrieve an ordered results[] array with per-item status and body.

Strict, predictable schema for production code and LLMs

Your application shouldn't need regexes to parse the tracking API's own output.

Normalized 7-state status enum
Every carrier maps cleanly to label_created, in_transit, out_for_delivery, delivered, exception, returned, or unknown.
Dual timestamps & clean handoff messages
Every event provides both UTC timestamp and local wall-clock localTime, and cross-border handoffs populate top-level message ('Handed to <carrier> as <number>').

Agent-native: MCP, llms.txt & HTTP 402 Stripe MPP

lastscanned treats AI agents as first-class API citizens alongside human developers.

Hosted Streamable HTTP MCP
Connect Claude Code, Cursor, Windsurf, or ChatGPT to https://mcp.lastscanned.com in one line.
Unlimited re-polls on $4.99/mo Pro
Track 1,000 unique numbers per month for $4.99 with unlimited free re-polls on every active package, or pay per request over HTTP 402.

Switch in one synchronous request

No SDKs, no tracker registration queues, and no webhook listeners. Query up to 100 tracking numbers at once over REST or connect your AI agent over Streamable HTTP MCP.

REST (Synchronous GET)

curl "https://api.lastscanned.com/v1/track/INTLCM123456789" \
  -H "Authorization: Bearer lsk_live_YOUR_API_KEY"

Remote MCP (Claude Code / Cursor / ChatGPT)

claude mcp add --transport http lastscanned https://mcp.lastscanned.com \
  --header "Authorization: Bearer lsk_live_YOUR_API_KEY"

Then ask your agent

> Track Intelcom Dragonfly package INTLCM123456789 and show its delivery status.

lastscanned vs. ParcelsApp FAQ

Does lastscanned require polling a job UUID after submitting a tracking number?
No. GET /v1/track/:number is synchronous and returns the normalized tracking status and scan events in the initial HTTP response.
How does lastscanned normalize statuses and timestamps across 31 carriers?
Every carrier response is normalized into a single JSON schema with a 7-value status enum (label_created, in_transit, out_for_delivery, delivered, exception, returned, unknown), YYYY-MM-DD estimatedDelivery, and events containing both UTC timestamp and local wall-clock localTime.
Can AI agents use lastscanned without an account?
Yes. Every IP gets 1 free keyless lookup per day on GET /v1/track/:number, and autonomous agents can pay for additional lookups automatically via HTTP 402 Stripe Machine Payments Protocol ($0.50 for a 25-number credit pack or $0.02 USDC on Tempo).

All 31 carriers included