Skip to main content
Back to AI Commerce Lab
Operations·August 2025·9 min read

Technological Innovations in Curbside Pickup for E-Commerce Retailers

Curbside pickup is an order-state machine wearing a parking lot. The engineering problem isn't the notification — it's keeping "ready for pickup" synchronized across inventory, staff workflow, and the customer's phone without double-booking a parking spot or a SKU.

Curbside became a permanent fulfillment channel rather than a pandemic-era stopgap, and the retailers who kept it running well are the ones who built it into their existing order infrastructure instead of standing up a parallel system for it.

The order-state machine underneath curbside

Every curbside order moves through the same states regardless of what the customer-facing app looks like: placed, accepted, picking, ready for pickup, customer arrived, handed off (or no-show), and closed. The technology that gets marketed — geofencing, license plate cameras, smart lockers — is arrival detection layered on top of this state machine, not a replacement for it.

Retailers who treat curbside as a bolt-on feature, rather than a delivery method inside their existing fulfillment state machine, end up with two order systems that disagree about which state an order is actually in.

Mapping curbside to a platform's fulfillment states

Shopify models curbside through the FulfillmentOrder object, where pickup is a delivery method on the same fulfillment order type used for shipping, not a separate order type. That single-model approach means the same status fields, webhooks, and cancellation logic that handle a shipped order also handle a pickup order.

Building curbside as a genuinely separate flow means reimplementing cancellation, partial fulfillment, and inventory-reservation logic a platform's core fulfillment model already provides. That's real engineering cost paid for no functional benefit.

Real-time inventory sync across channels

A curbside order promises a specific unit at a specific store location, which means the store's inventory count needs to reflect in-store sales, other online orders, and transfers in near real time. A retailer syncing inventory on a nightly batch job will cancel curbside orders for items that sold in-store hours earlier, and that cancellation reads to the customer as the retailer failing to honor a confirmed order, not as a sync-timing issue.

Centralized inventory platforms with webhook or API-based push updates, rather than scheduled batch syncs, are what separates chains with a low curbside cancellation rate from ones that treat it as an occasional inconvenience customers should expect.

Where the platform APIs already do the plumbing

Local pickup as a delivery method, not a bolt-on

Shopify's Local Pickup Option Generator Function API lets a merchant define which products are eligible for pickup, at which locations, and during which days and times — evaluated at checkout the same way shipping rates are. A product restricted to in-store pickup only, or unavailable for pickup outside store hours, is a rule this function enforces before the order is even placed.

This is the right layer to build eligibility logic into. Encoding "this SKU requires in-store pickup" as an application-level check after checkout, instead of as a checkout-time rule, is how orders end up promised for pickup that the fulfillment side can't actually honor.

Headless: Storefront API local pickup support

For a headless storefront, the Storefront API's local pickup support exposes the same delivery-method data through GraphQL, so a custom frontend can show pickup availability and let a customer choose it without recreating Shopify's own eligibility logic client-side.

Arrival detection: geofencing and its limits

iOS region monitoring limits

Apple's Core Location region monitoring caps a single app at 20 monitored regions at once. A retail chain with hundreds of store locations cannot geofence every store client-side within one app — it has to monitor only the regions near a customer's current location and refresh that set as they move.

The framework also requires a device to remain on one side of a boundary for roughly 20 seconds before it registers a crossing, and it won't fire an event for a region the device was already inside when monitoring started. A "customer is here" signal built purely on this API has real latency and a real cold-start gap.

Android geofencing transitions

Android's Geofencing API works on a similar model — a circular region with enter, exit, and dwell transition types — through the GeofencingClient interface, and it requires both fine and background location permissions in the app manifest. A customer who declines background location permission won't trigger automatic arrival detection at all, regardless of how well the geofence itself is configured.

Geofencing tells you a phone crossed a boundary. It doesn't tell you the customer parked in a pickup spot, or that the phone in the car is the one that placed the order. Treat it as a hint that triggers staff prep, not as proof of arrival that triggers handoff.

Beyond GPS: check-in buttons and staff-visual fallback

The most reliable arrival signal in production is still the one a customer actively provides — an "I'm here" button in the order-status page or app, which works regardless of location-permission settings or a chain's regional store count. Geofencing is a convenience layer that pre-warms staff prep before that explicit check-in arrives, not a replacement for it.

License plate recognition removes the need for a customer to open an app at all, matching a camera-read plate against order data at arrival. It's a genuine convenience gain, and it also introduces its own privacy and camera-infrastructure cost that a check-in button doesn't.

Notifications: the layer that gets over-engineered

Push notifications, SMS, and voice-assistant integrations all solve the same problem — tell the customer their order is ready and tell staff the customer has arrived — and teams sometimes build all three before validating that customers reliably see any of them. Start with SMS, which requires no app install and reaches a phone the customer is already holding at the curb.

Layer push notifications and app-based check-in on top once SMS delivery and open rates prove the channel matters for a specific customer base, rather than building every channel in parallel from day one.

Failure modes specific to curbside

The inventory race condition

An item marked "ready for pickup" needs to be reserved, not just decremented from available stock, the moment picking starts. Without an explicit reservation, the same unit can be sold to an in-store shopper or added to a different online order while it's sitting on a shelf waiting for a curbside customer.

Geofence false triggers

A customer driving past a store on their commute, with no intention of stopping, can trigger a geofence enter event and fire a staff notification to prepare an order that isn't actually arriving. Repeated often enough, staff start ignoring the notification entirely — the same alert-fatigue failure mode as any noisy monitoring system.

The undefined no-show timeout

An order sitting in "ready for pickup" indefinitely, because nobody defined what happens after a customer doesn't show, blocks the reserved inventory from being reallocated. Every curbside implementation needs an explicit timeout state — hold for a set window, then release the reservation and notify the customer.

Measuring curbside performance

The metrics that matter for curbside are operational, not marketing metrics, and most of them come straight out of the state machine itself.

  • Time in "ready for pickup" before handoff — a rising average signals a staffing or notification problem, not a technology one
  • Cancellation rate tied to inventory-sync failures, tracked separately from customer-initiated cancellations
  • No-show rate and how long orders sit before timing out and releasing the reservation
  • Geofence-triggered staff notifications that never resulted in a check-in, as a proxy for false-trigger rate

Team and ops ownership

Store operations owns staffing against expected pickup volume and the physical parking-lot layout. Engineering owns the state machine, the inventory-reservation logic, and the arrival-detection integration. Whoever owns the notification channel — SMS provider, push service — owns monitoring its delivery rate, since a silent delivery failure looks identical to a customer simply not showing up.

Comparing arrival-detection methods

MethodAccuracyPrivacy exposureInfrastructure costFailure mode
GPS geofenceModerate — depends on permission grant and dwell timeModerate — requires background locationLow — built into mobile OS APIsFalse triggers from drive-bys; 20-region cap per app on iOS
Manual check-in buttonHigh — customer confirms intentionallyLow — no background tracking neededVery low — a UI element and an API callDepends on the customer remembering to tap it
License plate recognitionHigh — direct match at arrivalHigh — camera capture of vehicle and plate dataHigh — cameras and recognition infrastructure per locationPrivacy and retention policy exposure; misreads in poor conditions
Staff radio + visualDepends entirely on staffing levelsLowLow — no new technologyDoesn't scale past low-volume locations

Build checklist

  1. Model curbside as a delivery method on the existing fulfillment order, not as a parallel order type.
  2. Enforce pickup eligibility — product, location, hours — at checkout time, not after the order is placed.
  3. Reserve inventory the moment picking starts, not just at the point of handoff.
  4. Treat geofence events as a staff-prep signal, and require an explicit customer check-in before marking an order handed off.
  5. Define an explicit no-show timeout that releases reserved inventory and notifies the customer.
  6. Keep a manual staff override available at every state, for when the automated signal is wrong.

FAQ

Can Shopify handle curbside pickup out of the box?

Yes, through the Local Pickup Option Generator Function and the Fulfillment Orders model — pickup is a delivery method on the same order object used for shipping, not a separate system.

Is geofencing reliable enough to trigger automatic handoff?

Not on its own. Use it to pre-warm staff preparation, and require an explicit customer check-in or staff visual confirmation before treating an order as ready for handoff.

How many store locations can one app geofence on iOS?

Apple's Core Location framework caps a single app at 20 monitored regions at a time. A multi-location chain needs server-side logic to determine which regions to monitor based on the customer's current location.

What happens if a customer never shows up?

That needs an explicit timeout state in the fulfillment flow — hold the reservation for a defined window, then release the inventory and notify the customer, rather than leaving the order in limbo indefinitely.

Is license plate recognition worth the investment?

It removes friction for the customer but adds camera infrastructure, misread handling, and privacy and data-retention obligations per location. Weigh it against a manual check-in button, which solves the same core problem with far less infrastructure.

Why do curbside orders get canceled after the customer already arrived?

Almost always an inventory-sync gap — the item sold in-store or through another channel after the order was placed but before it was picked. Real-time inventory sync, not a better arrival-detection method, is the fix.

References

From the Destm engineering archive. For current work on this topic, start at Solutions or the blog.