Which Order-Tracking Apps Can an AI Agent Use to Answer 'Where Is My Order?' 17TRACK, ParcelPanel, AfterShip and More (2026)
Of the nine Shopify order-tracking apps we checked on 28 September 2026, six publish an API an AI agent can call with a static key, and the four with the most App Store reviews (17TRACK, CWILL, Track123 and AfterShip) are all in that six. The difference that matters for support is the lookup key: customers quote an order number, and four of the six APIs accept some form of order reference, while 17TRACK and TrackingMore start from the tracking number. Two of the four most-reviewed apps put the API behind a paid plan, both at $59 a month. We also ran a tracking agent on a test ticket, and the most useful thing it taught us was about a customer who quoted a tracking number Shopify didn't know.
Key takeaways
- Six of nine Shopify order-tracking apps checked on 28 September 2026 publish an API an AI agent can call with a static key; we found no public API reference for Synctrack, Narvar or Track by Loop.
- CWILL, formerly ParcelPanel, looks up tracking by order number through GET /api/v2/tracking/order, but its Developer APIs come with the Professional plan at $59 a month.
- 17TRACK's API accepts only tracking numbers, returns an error for any number not registered first, and allows 3 requests per second with up to 40 numbers per call.
- Malomo's API can fetch an order by order number and customer email together, and Track123's query endpoint accepts an order number list alongside tracking numbers.
- In our test on ticket #1119, the agent trusted Shopify's unfulfilled status over the tracking number the customer quoted and never called the tracking tool, so the agent's instructions need a rule for that mismatch.
Which tracking apps can an AI agent query, and with what key?
The App Store columns come from each app's Shopify listing on 28 September 2026. The API columns come from each vendor's API reference the same day. "Custom API tool" means Macha's team builds the call during onboarding; none of these apps has a built-in Macha connector.
| App (App Store rating, reviews) | API and auth header | Lookup key the API accepts | Plan with API access | What an AI agent can read | Route |
|---|---|---|---|---|---|
| 17TRACK (4.9, 4,401) | v2.4, 17token | Tracking number only, registered first | Pay per tracked number; 200 free once | Status, substatus, carrier events | Custom API tool |
| CWILL, formerly ParcelPanel (5.0, 3,162) | v2, x-parcelpanel-api-key | Order number or Shopify order id | Professional, $59/mo | Status, substatus, checkpoints, estimated delivery and its source | Custom API tool |
| Track123 (4.9, 1,729) | v2.1 query, Track123-Api-Secret | Tracking numbers or an orderNos list | Not stated in the API guide | Status, events | Custom API tool |
| AfterShip Tracking (4.6, 1,505) | 2026-07, as-api-key | Tracking number; order_id filter on GET /trackings | Premium, $59/mo | Status, checkpoints, AfterShip and carrier delivery estimates | Custom API tool |
| TrackingMore (4.4, 381) | v4, Tracking-Api-Key | Tracking number | Paid plans | Status, events | Custom API tool |
| Malomo (5.0, 6) | v2, Authorization: Bearer sk_... plus a version Accept header | Order number with customer email; Malomo id, alternate id or tracking code | Not stated | Order, shipments and scan events | Custom API tool |
| Synctrack AI Order Tracking (4.9, 92) | None found in our 28 Sept search | none | none | none | Not feasible today |
| Narvar Track (enterprise) | Docs behind a customer login | Order, per contract | Enterprise contract | Unverified | Needs Narvar's docs first |
| Track by Loop, formerly Wonderment | Token API exists, reference not public | Customer email (per Gladly's integration) | Unverified | Orders and shipments | Needs Loop's docs first |
| Baseline: Shopify | Macha's built-in Shopify connector | Order number or email | Every Shopify plan | Fulfillment status, carrier, tracking number and URL | Built-in |
Three naming traps showed up in the research. ParcelPanel now trades as CWILL; its App Store listing reads "CWILL Order Tracking - Parcel Panel," its API still uses the x-parcelpanel-api-key header, and TrackingMore's developer docs now carry a "TrackingMore by CWILL" logo, so two rows in this table appear to come from the same company. Synctrack has two Shopify apps: the one with 437 reviews and a 5.0 rating is "Synctrack PayPal Tracking Sync," which pushes tracking numbers to PayPal, while the order-tracking app has 92 reviews. Lists that quote the bigger number for "Synctrack order tracking" are counting the wrong app. And Track by Loop isn't API-less: Gladly's Loop Order Tracking toolkit says it sends the customer's email, gets orders back from "Loop API," and puts an API token in the request headers. Loop just doesn't publish that reference, so an agent build starts with asking Loop for it.
What do customers ask when they write "where is my order"?
The question arrives as one of five situations, and each needs different data:
- Not shipped yet. No fulfillment exists. Shopify answers this alone: the order is unfulfilled, and the agent quotes your processing time.
- Shipped, moving. A fulfillment exists with a tracking number. The customer wants a date. The carrier's status says "in transit"; an estimated delivery date is what closes the ticket.
- Stuck or exception. No scan for days, a failed delivery attempt, a customs hold. The agent needs the substatus and the last checkpoint to say anything useful.
- Marked delivered, not received. The tracking says delivered and the customer says it isn't there.
- The records disagree. The customer quotes a tracking number, and your store says the order hasn't shipped. It sounds rare, and it was the case our test agent got wrong.
Narvar's surveys give a sense of how common the bad cases are: 74% of 3,461 US shoppers said they had a late delivery in the past year and 86% had at least one delivery issue (Narvar, State of Post-Purchase 2025), and 23% of 1,348 US consumers said they had been told a package was delivered when they never received it (Narvar, 2026 Holiday Shopping Report). We haven't found a vendor that publishes a sampled share of support tickets that are WISMO, so we don't quote one. The figures that circulate are either vendor data without a sample size or secondhand citations of each other.
Cases 1 and 2 are where an AI agent finishes the job alone. Case 3 is where a tracking app earns its API fee, because the carrier substatus is what turns "it's in transit" into "the carrier tried to deliver on Tuesday and left a notice." CWILL, for example, documents substatus codes down to "Held at customs," "Recipient not available" and "Weather delay," and tells you where its delivery estimate came from.
An estimate marked CUSTOM is one the merchant configured, and one marked CARRIER came from the carrier, so an agent quoting a date should say whose date it is. Case 4 is a claims question, and it belongs to a person or a package-protection process. Case 5 is a routing question, and it needs an instruction.
Why does the lookup key matter more than the carrier count?
Tracking apps sell on carrier coverage: 1,600+ carriers on CWILL's free plan, 3,400+ on 17TRACK's API page. For an AI support agent the more important question is what the API wants as input, because the customer writes "order #1042," not a 22-digit USPS number.
- Order-first APIs. CWILL's
GET /api/v2/tracking/ordertakesorder_number(for example#1034) ororder_idand returns every shipment on that order withstatus,substatus,checkpointsandestimated_delivery_date. Malomo has a dedicated call for the WISMO shape:GET /orders/?number=...&customer_email=...retrieves an order by its number and the customer's email. - Order-filter APIs. Track123's
POST /tk/v2.1/track/querytakes atrackNoInfoslist and anorderNoslist, up to 100 per request. AfterShip'sGET /trackingsacceptstracking_numbers, akeywordand anorder_idfilter, according to the query model in AfterShip's official Node SDK. Both only match trackings that carry the order reference, so check what your store's sync writes into that field before you rely on it. - Tracking-number-first APIs. 17TRACK accepts only tracking numbers, 5 to 50 characters, and each one must be registered with
/registerbefore/gettrackinforeturns anything; an unregistered number comes back as error -18019902, "not registered yet." TrackingMore creates a tracking, then gets it bytracking_numbers.
Malomo's two-parameter lookup is the one we'd copy if we designed a tracking API for support. An order number alone is guessable; order numbers run in sequence, so anyone who knows theirs can try the next one. Pairing it with the requester's email means the agent only gets an answer for the person who placed the order. With the other APIs, the ownership check is on you: look the order up in Shopify by the requester's email first, then ask the tracking app.
With a tracking-number-first app, the agent's first call is to Shopify: get the order, read the fulfillment's tracking number, then ask the tracking app. That's fine, and it's how we'd build it, but it means the tracking app adds only the carrier events, not the order lookup. Shopify's own FulfillmentTrackingInfo object already carries company, number and url, so for case 2 a link to the carrier page may be all the customer needs.
There's also an incentive worth naming. 17TRACK charges per tracked number, and its free allowance changed on 7 January 2026 from 100 free numbers a month to a one-time 200 for new accounts. A registration-first API that bills per number rewards the vendor for every shipment you register, so register at fulfillment time through the app's own Shopify sync, not from the agent on demand, or a busy week of WISMO tickets turns into a busy week of billable registrations. 17TRACK also stops tracking a number 30 days after the last carrier update, or 15 days after delivery, and a stopped number can be re-tracked only once. A customer writing in three weeks after a delivery scan may be asking about a number 17TRACK has already stopped.
What happened when we ran a tracking agent on a test ticket?
On 28 September 2026 we built an agent called "Order tracking via AfterShip" in our Macha Demo org with two tools: the built-in Shopify Get Order and a custom AfterShip tracking tool. We ran it on our d3v-macha sandbox Zendesk with Macha's agent Test feature, which creates a real ticket and dispatches the agent the way a ticket-created trigger would. The requester was made up, and the Shopify store is our development store, where both orders are paid and unfulfilled. One artifact of the test feature: the customer's message shows as an internal comment and the ticket says "Via API." The agent's reply is public.
Ticket #1119, "Tracking for #1096 not updating," quoted a tracking number, 9400111899223344556677, and said it hadn't moved in days. Nine seconds after the ticket was created, the agent replied that order #1096 hadn't shipped yet, that no live tracking update existed, and that a tracking email would follow once it shipped. It tagged the ticket wismo_ai.
The reply is true to Shopify: #1096 is unfulfilled. What the agent didn't do is notice that the customer was holding a tracking number for an order that, as far as the store knows, has no shipment. It never called the AfterShip tool, and it didn't leave a note for a person. In a real store that mismatch means something: the order shipped outside Shopify (a 3PL or a manual label that never synced back), the customer has the number from a different order, or someone sent them a number that isn't yours. Each one needs a human to look, and none of them is fixed by "you'll get a tracking email."
We didn't tell the agent what to do when the two sources disagree, so it picked the one it could see. That's a gap in our instructions, and we'd close it in any tracking agent with a rule like this:
When the customer quotes a tracking number, look up the order in Shopify first. If the order is unfulfilled, or its fulfillment carries a different tracking number, don't tell the customer the order hasn't shipped. Call the tracking tool with the number they gave you. If it returns a shipment, answer from that shipment and add an internal note: "Tracking number not on the Shopify order; check for a shipment made outside Shopify." If it returns nothing or an error, reply that a teammate is checking the shipment and will follow up today, add an internal note with the quoted number, the Shopify status and the tool result, and tag tracking_mismatch.
We then set up the tracking call the way it would look for 17TRACK and ran it with the same number. It's a POST with the tracking number in a JSON body template, [{"number":"{{tracking_number}}"}], and the key in a 17token header. Our key is a placeholder, so 17TRACK's live API refused it with a 401 and error code -18010002, "Access token is invalid." That's the expected result: 17TRACK's live API read the header and answered in its documented error format. With a real key, the same call on a number nobody registered would still fail, with -18019902, which is why the registration belongs in the app's Shopify sync.
We haven't made a successful call to any tracking app; we don't hold real keys for them. Everything about what a successful response contains comes from the vendors' docs.
Which tracking apps put the API behind a paid plan?
Two of the four most-reviewed apps do, and both at the same price point:
- CWILL: "Developer APIs & webhooks" is listed from the Professional plan, $59 a month with 2,000 credits. The Free (20 credits) and Essential ($11, 200 credits) plans don't list it.
- AfterShip: "API & webhooks" is listed from the Premium plan, $59 a month for 6,000 shipments a year. Essentials at $29 doesn't list it.
An API costs a tracking vendor little to serve, and the merchants who want one are the ones automating support at volume, so vendors park it a tier up where those merchants will pay for it. Rate limits differ enough to matter in a Black Friday backlog:
| App | Documented limit | What happens over it |
|---|---|---|
| 17TRACK | 3 requests a second; 40 numbers per request | 429 |
| CWILL | 120 requests a minute per API key | 429 |
| Track123 | 5 requests a second per endpoint; 100 numbers per query | Error A0706 |
| AfterShip | Per endpoint: 6/s for GET /trackings, 5/s for a single tracking, 20/s for creating trackings | 429 with X-RateLimit headers |
| TrackingMore | 10/s for GET /trackings/get, 3/s for creating a tracking | 429 |
At one tracking call per ticket, every one of these handles a support queue comfortably. CWILL's 120 a minute is the tightest, and it's still two tickets a second. The limit bites only if the agent loops, for example re-querying every shipment on a 12-parcel order, which is a reason to write "call tracking once per order" into the agent's instructions. It's also why TrackingMore's 3-a-second create limit belongs to the store's sync, not the agent. Our BFCM peak WISMO page does the volume math for peak.
What do the help desks' own tracking integrations already do?
On Gorgias, AfterShip and Gorgias announced on 18 August 2025 that Gorgias's AI Agent reads AfterShip tracking data to answer WISMO questions. CWILL's Gorgias app shows order status inside the Gorgias ticket, and CWILL lists the Gorgias integration on its Professional plan. Gladly's Loop Order Tracking app pulls orders by customer email and is read-only. If you run Gorgias with AfterShip, the native path already covers cases 1 and 2; our guide to auto-resolving WISMO in Gorgias walks through it.
Outside Gorgias, the tracking apps mostly stop at a sidebar: a human agent sees the status, and a person still writes the reply. That's the gap an AI agent fills on other help desks, covered per desk in WISMO on Zendesk and WISMO on Freshdesk with Shopify.
What should stay with a person?
- Delivered but not received. The agent can quote the delivery scan and the photo link if the carrier provides one. Reshipping or refunding is a policy and fraud decision.
- Tracking that doesn't match the order. The #1119 case above. The agent should gather the facts into a note, not pick a side.
- Carrier claims and investigations. None of the tracking APIs above files a carrier claim. Package-protection apps are a separate category with their own claim rules.
- Address changes after fulfillment. Once a label exists, the change goes through the carrier or the 3PL, not the tracking app.
- Anything the tracking data contradicts. If the customer says the box arrived crushed, the scan history doesn't help; that's a returns or damage case.
Where Macha fits
Macha's built-in Shopify connector is the first stop for every WISMO ticket: Get Order and Search Orders look up an order by number or by the customer's email and return its fulfillment and payment status, which answers "not shipped yet" and gives the tracking number for "shipped." A tracking app adds the carrier detail, and it connects through a custom API tool that Macha's team sets up during onboarding, with the app's key in its own header (x-parcelpanel-api-key, as-api-key, 17token and so on). Custom tools can also send fixed headers on every request, which covers Malomo's version header. We'd build one read tool per app, run it against a real order with the tool's Run Test button, and write the Shopify-first and mismatch rules into the agent's instructions. Custom tools and that setup work are included on every plan.
Macha starts at $299/month for 750 tickets, charged per ticket, so a WISMO ticket that takes a Shopify lookup, a tracking call and two replies is one charge; the full ladder is $299 a month for 750 tickets, $599 for 1,500, $1,199 for 3,000, $1,999 for 5,000, $2,999 for 7,500 and $3,999 for 10,000, with custom pricing above that. It fits teams running Zendesk, Freshdesk, Gorgias, Front, HubSpot or Intercom who already pay for a tracking app and want its data in the reply, not only in a sidebar. You can test it on $50 of free usage (about 125 tickets), no credit card, no time limit.
The rest of the Shopify app map, category by category, is on which Shopify apps an AI support agent can work with, and the AfterShip deep dive is on what an AI support agent can do with AfterShip.
FAQ
Which Shopify order-tracking apps have an API an AI agent can use?
As of 28 September 2026, 17TRACK, CWILL (formerly ParcelPanel), Track123, AfterShip, TrackingMore and Malomo publish API references with a static key an agent can send in a header. We found nothing public for Synctrack's order-tracking app, Narvar's docs sit behind a customer login, and Track by Loop has a token API that Loop doesn't document publicly.
Can an AI agent look up tracking by order number instead of tracking number?
With four of the six. CWILL's API v2 takes an order number or Shopify order id, Malomo takes an order number together with the customer's email, Track123's query takes an orderNos list, and AfterShip's GET /trackings has an order_id filter. 17TRACK and TrackingMore start from the tracking number, so the agent reads it from the Shopify fulfillment first.
What should an AI agent do when a customer quotes a tracking number Shopify doesn't have?
Not tell them the order hasn't shipped. In our test the agent did exactly that on ticket #1119. The instruction we'd add: call the tracking app with the quoted number, answer from the shipment if one exists, and otherwise reply that a teammate is checking and leave an internal note with the number, the Shopify status and the tool result.
Does the AfterShip API need a paid plan?
Yes. AfterShip's pricing page lists "API & webhooks" from the Premium plan, $59 a month for 6,000 shipments a year, and not on Essentials at $29. Requests authenticate with an as-api-key header, and GET /trackings is limited to 6 requests per second.
Is ParcelPanel the same as CWILL?
Yes. ParcelPanel now operates as CWILL, and its Shopify listing is "CWILL Order Tracking - Parcel Panel." The API keeps the old header name, x-parcelpanel-api-key, and moved its host to open.parcelwill.com on 11 February 2026. Developer APIs come with the Professional plan, $59 a month.
Can an AI agent answer WISMO without a tracking app at all?
Often, yes. Shopify fulfillments carry the carrier name, tracking number and tracking URL, so an agent with Shopify access can tell a customer whether the order has shipped and link the carrier page. A tracking app adds normalized status, substatus, checkpoints and delivery estimates for stuck or delayed parcels.
How we researched this
- App Store figures come from each app's Shopify App Store listing, fetched 28 September 2026: 17TRACK 4.9 from 4,401 reviews, CWILL 5.0 from 3,162, Track123 4.9 from 1,729, AfterShip 4.6 from 1,505, TrackingMore 4.4 from 381, Synctrack AI Order Tracking 4.9 from 92, Synctrack PayPal Tracking Sync 5.0 from 437, Malomo 5.0 from 6. We couldn't find Track by Loop's listing on 28 September.
- API facts come from each vendor's reference, fetched 28 September 2026: 17TRACK API v2.4, CWILL Tracking API v2, Track123 Get trackings and rate limit, AfterShip Tracking API 2026-07 and its rate limits (read in a headless browser; the GET /trackings filters come from the
GetTrackingsQuerymodel in AfterShip's officialtracking-sdk-nodejs), TrackingMore API v4 and rate limits, and Malomo's authentication, versioning and order pages. Plan gates come from CWILL's pricing and AfterShip's pricing pages the same day, monthly billing. - "Six of nine" counts apps with a public API reference and a static key: 17TRACK, CWILL, Track123, AfterShip, TrackingMore and Malomo. The three without are Synctrack AI Order Tracking, Track by Loop and Narvar. "None found" is what we found on 28 September, not a statement that no API exists; Track by Loop's API is known only from Gladly's integration page.
- Live test: one ticket (#1119) on our d3v-macha sandbox Zendesk, run with Macha's agent Test feature on 28 September 2026, with a made-up requester and our Shopify development store; plus one 17TRACK custom-tool test with a placeholder key, which returned a 401 from 17TRACK's live API. No tracking app returned real data, because we hold no real keys.
- Arithmetic: CWILL's 120 requests a minute ÷ 60 = 2 requests a second.
- Vendor self-reports: carrier counts (CWILL 1,600+, 17TRACK 3,400+) are the vendors' own claims. Narvar's figures are surveys by a company that sells tracking and notifications.
- Macha facts come from our integrations page, custom tools docs and pricing.
Resolve tickets automatically with AI agents
Macha's AI agents work on top of the help desk you already use — no code.
Intercom
Shopify
Stripe
Slack
Notion
Google Workspace
Confluence

