Shopify Tracking: Demystifying 'Ready for Pickup' for Carrier Collection Points
Hey fellow store owners! Let's talk about something that's come up quite a bit in the community, especially for those of us shipping internationally or operating in regions where carrier pickup points are super common. You know, those moments when your customer's package isn't coming straight to their door but is waiting for them at a local shop or locker? It's a fantastic delivery option, but mapping that specific status into Shopify's tracking can sometimes feel like trying to fit a square peg in a round hole.
Recently, a thread popped up in the Shopify community that really dug into this, and I wanted to share some insights gleaned from the discussion. It started with a store owner, Teppyk, running a business in Italy and integrating GLS Italy webhooks. They were getting a 'parcel delivered to a GLS Shop' status and realized there wasn't an obvious FulfillmentEventStatus to match it. Sound familiar?
The 'Carrier Pickup Point' Conundrum
Teppyk's challenge highlighted a common issue: how do you accurately represent a parcel sitting at a third-party collection point within Shopify's tracking? Their carrier, GLS Italy, would mark a package as 'delivered to a GLS Shop' when it was waiting for the customer to collect it. This is a crucial milestone for customer communication, but the existing statuses didn't seem quite right.
Teppyk initially looked at READY_FOR_PICKUP but felt it was designed more for local, in-store pickups directly from the merchant. They also noted that if a parcel had already been marked OUT_FOR_DELIVERY, sending READY_FOR_PICKUP afterwards felt like a step backward in the tracking progression. In the end, they resorted to mapping their pickup point event to OUT_FOR_DELIVERY with a custom message, which, as they rightly pointed out, wasn't ideal and could confuse customers.
They proposed a new, dedicated status like AT_PICKUP_POINT, explicitly for carrier collection points, and also suggested that READY_FOR_PICKUP should behave more like a shipping milestone (like DELIVERED) rather than a base status.
Unpacking READY_FOR_PICKUP: Shopify's Intended Use
This is where another community member, Lumine, jumped in with a really helpful clarification. According to Lumine, the FulfillmentEventStatus READY_FOR_PICKUP actually does cover this scenario, even if its name isn't immediately intuitive for carrier collection points. It's defined as the fulfillment being ready to be picked up, which perfectly aligns with a parcel waiting for the customer at a GLS Shop or any other carrier collection point.
The key here is understanding the customer-facing meaning. Whether it's at your own store or a local post office, the core message to the customer is the same: "Your package is here, come get it!"
How to Implement READY_FOR_PICKUP for Carrier Pickups
So, if you're facing a similar situation, here's the cleaner workaround, as suggested by Lumine:
- Identify Your Carrier's Equivalent Status: Look for the webhook status from your carrier (like 'parcel delivered to a GLS Shop') that signifies the package is at a collection point and awaiting customer pickup.
- Map It to
READY_FOR_PICKUP: When you receive this status from your carrier via webhook, use thefulfillmentEventCreatemutation in Shopify's GraphQL Admin API to update the order's fulfillment status toREADY_FOR_PICKUP.
Here's a conceptual example of what that API call would look like (remembering to replace placeholders with your actual data):
mutation fulfillmentEventCreate($fulfillmentId: ID!, $event: FulfillmentEventInput!) {
fulfillmentEventCreate(fulfillmentId: $fulfillmentId, event: $event) {
fulfillmentEvent {
id
status
message
happenedAt
}
userErrors {
field
message
}
}
}
// Variables (example)
{
"fulfillmentId": "gid://shopify/Fulfillment/1234567890",
"event": {
"status": "READY_FOR_PICKUP",
"message": "Your parcel is now available for collection at the GLS Shop. Please pick it up within X days.",
"happenedAt": "2023-10-27T10:00:00Z"
}
}
By doing this, you're using the intended status, and Shopify will correctly display this on the order timeline and the customer-facing tracking page. It's designed to drive the right state for the customer without needing a new status.
Important Distinctions and Nuances
READY_FOR_PICKUPvs.CARRIER_PICKED_UP: Don't mix these up!CARRIER_PICKED_UPmeans the carrier has collected the package from you (the merchant), whileREADY_FOR_PICKUPmeans it's waiting for the customer to collect it. They're opposite ends of the journey.- Collapsing Pickup Types: Lumine rightly points out that Shopify currently collapses both carrier parcel shop pickups and in-store merchant pickups into the same
READY_FOR_PICKUPstatus. For the customer, the message is clear, but for internal reporting, this might mean a loss of granularity. - The "Going Backwards" Concern: Teppyk's concern about
READY_FOR_PICKUPfeeling like a step backward afterOUT_FOR_DELIVERYis valid from a strict linear tracking perspective. However, Shopify's design intendsREADY_FOR_PICKUPto represent a distinct 'milestone' where the package is awaiting the customer, regardless of previous transit steps. It's not necessarily a 'backward' step but a 'different type of delivery completion' step.
When Granularity Matters (and When It Doesn't)
This brings us to Lumine's excellent question: "Are you feeding these events to trigger customer emails, or mainly for internal tracking? That decides whether the lost granularity actually costs you anything."
If your primary goal is to send accurate, timely customer notifications (e.g., "Your package is ready for pickup!"), then mapping to READY_FOR_PICKUP works perfectly. The customer gets the right message, and their experience is smooth.
However, if your real need is to distinguish between an in-store pickup and a carrier pickup point for detailed reporting, analytics, or specific internal workflows, then the current system's collapsing of these two scenarios does represent a limitation. In that case, Teppyk's original thought about a dedicated status like AT_PICKUP_POINT or enhanced behavior for READY_FOR_PICKUP as a true shipment milestone becomes a very valid feature request to file with Shopify.
For now, the consensus from the community discussion is clear: for customer-facing communication about a parcel awaiting collection at a carrier point, READY_FOR_PICKUP is your go-to. While it might not offer the ultra-fine-grained reporting some desire, it's the correct and supported way to communicate this crucial delivery status to your customers today. It's always great to see these discussions in the community, helping us all navigate the nuances of running our stores!