Universal parcel tracker for iPhone and the web. Open source.
Paste a tracking number, a carrier link or a whole shipping email.
Peek finds the carrier, draws the journey, notifies you when the parcel moves.
The carriers are read by our engine, Universal Parcel Scraper.
Try it: peektracker.com · Run it locally · iPhone app · Host your own
Where's my parcel?
Paste what you have. Peek works out which of 3,500+ carriers has the parcel and gives it a
page of its own: the journey on a map, every scan, the day it should arrive. No account
needed.
Will I know when it moves?
Yes. Choose every scan, the important steps or delivery day only, on your iPhone or in
your browser. Quiet hours keep the night quiet, and an email can tell you it arrived.
Following more than one?
Sign in and they share one list, on the web and on the iPhone. Each delivery stamps your
passport, which you can compare with friends while your parcels stay private.
Someone else waiting for it?
Share the parcel's page with them. Wrap it as a gift, and what's inside stays a surprise
until it arrives.
A parcel's page · its journey · shared as a gift · the passport. Every parcel in these pictures is made up.
Also in the box: light and dark themes, seven languages (English, German, French, Italian, Spanish, Portuguese and Polish), a web app you can install, and on iPhone a barcode scanner, a Share extension and widgets.
Peek shows no ads and sells no data. A parcel followed without an account is forgotten 30 days after it arrives. The privacy notice has the rest.
Stuck? Help says what to check and where to write.
Reading carriers is a job of its own, so it has a repository of its own: Universal Parcel Scraper. It works out which carrier a number belongs to, reads that carrier's own site, falls back on universal trackers such as ParcelsApp, Ship24 and 17TRACK, and turns everyone's wording into the same delivery stages.
Peek installs it from npm and builds the rest around it: accounts, checks in the background, notifications and the two apps.
- A carrier is missing, or tracks wrongly? Tell the scraper.
- Want tracking without Peek? The scraper runs on its own, as a command-line tool, a Node library or a small HTTP server.
- Curious how the two fit together? See the scraper package.
You need Node.js 26. No account, no database, no .env file.
git clone https://github.com/plhery/peek-delivery-tracker.git
cd peek-delivery-tracker
nvm use
npm ci
npm run devOpen localhost:3000 and paste anything: with no server behind it, Peek answers in the browser with made-up parcels.
- Tap Pip, the parcel with a face, to open a sample parcel.
- localhost:3000/demo is a whole list of sample deliveries. Refresh moves them along, and Reset demo data in settings starts over.
- localhost:3000/design/map is a study of three ways to draw a journey, from the globe to a close-up.
For real accounts and real tracking, copy .env.example to .env.local,
fill in your Supabase project and set NEXT_PUBLIC_USE_API=true.
Authentication has the steps.
A native SwiftUI app for iOS 18 and later. It isn't on the App Store yet, so for now you
build it yourself: open ios/PeekDeliveryTracker.xcodeproj
in Xcode 27 or newer, pick the PeekDeliveryTracker scheme and an iPhone simulator, and
press Run. It starts with sample parcels, so it needs no account, no server and no Apple
team.
The iPhone guide covers connecting it to a server, signing it for a real phone, notifications and widgets.
Peek is one long-running container (the web app, the API and the worker that keeps checking carriers) next to Supabase for sign-in and Postgres, behind HTTPS. Deployment takes you through the database, sign-in, the build, upgrades and backups.
Next.js, React and TypeScript for the web and the API, SwiftUI for the iPhone. Supabase Auth and Postgres row-level security keep accounts apart, and a queue in the database runs the carrier checks and the notifications.
- Architecture: how the pieces fit, and who can see what
- Scraper package: what Peek takes from the scraper, and how it updates
- Routing: where a refresh looks for a parcel's history
- Deployment: hosting, upgrades, operations
- Authentication: Google, Apple and email sign-in
- Observability: logs, audit tables, Sentry, metrics
- Friends: how passports are shared, and what never is
- Analytics: optional usage analytics with Umami
- Localization: which language carrier text shows up in
- iPhone: the native app
Fixes and ideas are welcome. Contributing has the setup and the checks to run before a pull request. Carrier fixes go to the scraper. Found a security problem? Report it privately.
Made by @plhery. Licensed under Apache 2.0.