17TRACK Package Tracking Scraper avatar

17TRACK Package Tracking Scraper

Pricing

from $31.20 / 1,000 tracked packages

Go to Apify Store
17TRACK Package Tracking Scraper

17TRACK Package Tracking Scraper

Track up to 10 packages per run on 17TRACK: status, carriers, route, ETA and checkpoint history for postal and cross-border parcels. USD 39 per 1,000.

Pricing

from $31.20 / 1,000 tracked packages

Rating

0.0

(0)

Developer

Muhammad Afzal

Muhammad Afzal

Maintained by Community

Actor stats

0

Bookmarked

46

Total users

31

Monthly active users

18 hours ago

Last modified

Features

Limited permissions

Share

17TRACK Package Tracking Scraper looks up as many as 10 package numbers per run on 17TRACK's public tracker and returns one JSON record per package: current status, a stable status category, the carriers involved (including handoffs between them), origin and destination countries, delivery estimate, days in transit, latest checkpoint and the full event history. It is built for ecommerce, marketplace and customer-support teams tracking postal and cross-border parcels, and costs USD 39 per 1,000 tracked packages on the FREE tier, charged only for records delivered.

You don't need a 17TRACK account, an API key, or your own proxy or browser. The Actor handles data access and reads only public tracking pages.

How do I track packages on 17TRACK in bulk?

Paste up to 10 package numbers into trackingNumbers and start the run. 17TRACK detects the carrier for most numbers; spaces and duplicates are removed, and values must be 4–80 letters, digits or hyphens. When 17TRACK lists several possible carriers, the Actor retries that number with up to two likely carrier codes after the other numbers are done. If none returns tracking, the number is reported in OUTPUT with the reason and not charged: set carrier to the 17TRACK carrier code (FedEx 100003) and run it again. For longer lists, start several runs from the API or a schedule.

{
"trackingNumbers": ["YOUR_TRACKING_NUMBER", "ANOTHER_TRACKING_NUMBER"],
"language": "en",
"carrier": 0,
"includeRaw": false,
"requestTimeoutSecs": 45
}
InputDefaultNotes
trackingNumbers (required)["7777777770"]1–10 package numbers
carrier00 = automatic detection; when 17TRACK reports several possible carriers, up to two likely ones are tried. Set a 17TRACK carrier code (FedEx 100003, DHL Paket 7041) to skip detection; it applies to every number in the run
languageenResult language: en, de, es, fr, it, nl, pl, pt or tr
includeRawfalseAttach 17TRACK's original shipment object in raw
requestTimeoutSecs4520–90 seconds per package, not the whole run

The prefill is 17TRACK's public test number 7777777770. It returns a sample shipment saved as one record labelled isDemoData: true and charged like any record, so replace it with your own numbers.

What data does it return?

Each package 17TRACK has data for becomes one record. Fields 17TRACK doesn't show are null or empty, never guessed.

FieldWhat it means
trackingNumber / displayTrackingNumberThe number you entered, and the number 17TRACK displays
carriers / carrierIdsCarrier names 17TRACK detected (origin, destination, last mile) and their 17TRACK IDs
status / subStatusLatest status as 17TRACK shows it
statusCategoryStable category: info_received, in_transit, pickup, out_for_delivery, undelivered, delivered, alert, expired, not_found or unknown
statusDescriptionLatest checkpoint text
originCountry / destinationCountryRoute countries when shown
estimatedDelivery / daysInTransitDelivery date or window, and days since the first scan
latestEventMost recent checkpoint: timestamp, description, location, carrier
eventsCheckpoint history from every carrier feed 17TRACK shows
sourceUrl / retrievedAtPublic result page and UTC time of the lookup
isDemoData / rawDemo flag, and the optional original object

Run diagnostics go to the OUTPUT record in the key-value store, with an outcome of DATA, DEMO, EMPTY, BLOCKED, REJECTED, FAILED or LIMIT_REACHED, counts, the stop reason and a masked warning for each number without a record.

When should you use 17TRACK Package Tracking Scraper, and when not?

Use it for postal and cross-border parcels: numbers from China Post and other national posts, marketplace orders that change carrier mid-route, or any number where you don't know the carrier. One input covers them all, and carriers shows each handoff.

Pick a different tool when:

  • Your numbers are FedEx. FedEx Tracking Scraper takes 30 numbers per run, adds FedEx status codes and scan history, and costs USD 20 per 1,000.
  • Your numbers are UPS. UPS Tracking Scraper takes 25 per run, including InfoNotice numbers.
  • Your numbers are DHL. DHL Tracking Scraper returns DHL checkpoint history for USD 20 per 1,000.
  • Your list mixes UPS and FedEx International Connect numbers. Multi-Carrier Package Tracking returns one status vocabulary for both.
  • You need labels, rates, delivery changes, proof-of-delivery documents or push notifications. Those need the carriers' authenticated APIs. This Actor is not the official 17TRACK API.

How do I run it from code or on a schedule?

Save your input and attach an Apify schedule (hourly, daily or any cron), or call it with apify-client.

JavaScript:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('muhammadafzal/17track-package-tracking-scraper').call({
trackingNumbers: ['YOUR_TRACKING_NUMBER'],
language: 'en',
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.map((i) => [i.trackingNumber, i.statusCategory, i.carriers.join(' > '), i.estimatedDelivery]));

Python (apify-client 3.x):

import os
from apify_client import ApifyClient
client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("muhammadafzal/17track-package-tracking-scraper").call(
run_input={"trackingNumbers": ["YOUR_TRACKING_NUMBER"], "language": "en"}
)
for item in client.dataset(run.default_dataset_id).iterate_items():
print(item["trackingNumber"], item["statusCategory"], item["latestEvent"])

Keep the Apify token in an environment variable or secret store, and keep real tracking numbers out of public logs.

Use it from an AI assistant

17TRACK Package Tracking Scraper works from Claude, ChatGPT, Cursor or any MCP client through Apify's MCP server. Add https://mcp.apify.com/?tools=muhammadafzal/17track-package-tracking-scraper as a server, then ask, for example: "Track these eight international parcels and tell me which ones are stuck in customs or haven't moved in a week." The agent can read the input schema and the price per package before it runs.

What does the output look like?

The demonstration record for 7777777770 (real records have the same shape with isDemoData: false):

{
"trackingNumber": "7777777770",
"displayTrackingNumber": "TestNumber00017",
"carrierIds": [],
"carriers": ["USPS(International Parcels)", "China Post"],
"status": "In transit",
"subStatus": null,
"statusDescription": "CHINA,WUHAN, Processed Through Facility",
"statusCategory": "in_transit",
"daysInTransit": 5,
"originCountry": "China",
"destinationCountry": "United States",
"estimatedDelivery": "2022-04-05 - 2022-04-06",
"latestEvent": {
"timestamp": "2022-03-25 19:57",
"description": "CHINA,WUHAN, Processed Through Facility",
"location": "CHINA",
"carrier": null
},
"events": [],
"sourceUrl": "https://t.17track.net/en#nums=7777777770",
"retrievedAt": "2026-09-09T00:00:00.000Z",
"isDemoData": true,
"raw": null
}

How much does 17TRACK tracking cost? Pricing

You pay per delivered package record plus a start fee. Apify platform usage is included. Numbers that are not found, invalid, blocked or failed are not charged.

Event (USD)FREEBRONZESILVERGOLD, PLATINUM, DIAMOND
Tracked package0.0390.0380250.037050.0312
Actor start, per started GB of allocated memory0.0050.0050.0050.005

At the default 512 MB a run has one start event.

Worked totals:

  • 10 packages, FREE tier: USD 0.005 + 10 × 0.039 = USD 0.395.
  • 100 packages a day in 10 runs, GOLD tier: 10 × (USD 0.005 + 10 × 0.0312) = USD 3.17 per day.

The run charge cap you set is checked before every lookup, and the run stops cleanly when it is reached.

What happens when 17TRACK blocks a lookup or has no data?

Only real 17TRACK shipment responses become records. A number 17TRACK has no data for is reported as EMPTY, a malformed one as REJECTED, a verification page as BLOCKED, and a timeout or page error as FAILED. If 17TRACK challenges the first connection, the Actor retries once on a fallback connection. After a blocked or failed lookup the run stops instead of retrying every remaining number, keeps the records already found and writes OUTPUT. Runs that deliver nothing because of a block or failure end with FAILED status. The Actor never solves CAPTCHAs or logs in.

Lookups run one at a time in one browser session. Each run has a 120-second work budget that ends lookups before the 150-second default run timeout; numbers left when it runs out are counted as skipped in OUTPUT and not charged. Newly created labels can take 24–48 hours to show events, and carriers can hide details by service or destination.

FAQ

Is this the official 17TRACK API?

No. It reads 17TRACK's public result page, so you don't need a 17TRACK account or API key. If you need contract-backed volume or push notifications, use 17TRACK's own business products.

Which carriers does it support?

Whatever 17TRACK's public tracker returns for the number, including national posts and international carriers. When a package changes hands, carriers lists each one.

How many packages can one run track?

Up to 10. Start several runs from the API or a schedule for longer lists; there is no daily limit from the Actor.

Am I charged for packages that are not found or blocked?

No. Only package records written to the dataset are charged. Empty, invalid, blocked and failed lookups appear in OUTPUT; the start fee still applies to the run.

Why does the default input return a demonstration shipment?

7777777770 is 17TRACK's public test number. Its record is labelled isDemoData: true and charged like any record. Replace it with your own numbers.

Can I export the results to Excel or Google Sheets?

Yes. Export the dataset as Excel, CSV or JSON from Apify Console, or send it to Google Sheets with Make, Zapier or n8n.

Track only shipments you send, receive or are authorized to monitor. Tracking history can reveal approximate locations and shipping relationships, so keep datasets private and retain them only as long as needed. Use of this Actor must comply with 17TRACK's terms, carrier terms and privacy law. It is unofficial and not affiliated with or endorsed by 17TRACK or any carrier; their names identify the public sources. When reporting a problem, share the run ID and a masked tracking number.

Last verified: 2026-11-10