Store hours, pickup and delivery capabilities, exact addresses and which door of a chain has the item. None of it is exciting, and every same-day promise depends on it.
When people picture what makes delivery work, they picture routing and couriers. Those matter. But the promise gets made earlier, by store location data for delivery that most people never think about.
In stock at 9pm doesn't help if the store closed at 8
An item can be on the shelf and still be impossible to get. If the store closed at 8, a courier can't buy it at 9.
So a stock reading alone isn't enough to promise anything. The system also needs to know when the store is open, and whether it's open for the thing you're asking it to do.
That's why we treat hours as part of the data, not a footnote. And it's why of all our rules, one is simple and strict: same day is promised only when the quote says "Get it today," and never when store hours are unknown.
If we don't know the hours, we don't make the promise. A slower, honest answer beats a fast one that falls apart.
One catalog, hundreds of doors
A chain looks like one store. It has one name, one website and one catalog. In reality it's many separate doors, each with its own shelves.
Stock differs by door. The chain "carries" a product, but the door nearest you may not have it. Another door across town might have six.
If you treat a chain as a single place, you'll promise things a particular door can't deliver. The catalog says yes, the shelf says no, and the shopper finds out too late.
So the unit we care about is the individual door. Each one is its own store in the graph, with its own address and its own hours.
Store location data for delivery needs more than a ZIP
ZIP codes are handy and rough. A ZIP can cover a few blocks or a wide stretch of land. Two addresses in the same ZIP can sit on opposite sides of a store's reach.
That matters because local delivery depends on distance. We offer local delivery when a store with the item is within about 30 miles. The exact address, and the exact location of the store, decide whether that's true.
We use a ZIP to start the conversation. It's how search_catalog and get_buying_options take a request. But a delivery promise needs to hold up against the real place, and that takes real addresses on both ends.
Shipping is the fallback and the wider net. JENNi ships anywhere in the US. Local delivery comes first when it's possible, and ship-to-home fills in after.
What a store record needs to hold
Putting this together, a store record that can support a promise carries more than a pin on a map:
- The exact address, not just a ZIP.
- Hours, so we know when it can be served.
- Capabilities, such as whether it supports pickup or delivery.
- Its own offers, with price, stock, source and when we last saw it.
- Its place in a chain, so we know which doors share a catalog.
None of it is glamorous. All of it is the difference between a promise and a hope.
How a promise holds up
When an agent calls get_buying_options, it passes a product_id, a zip, a quantity and a fulfillment_mode, either local_delivery or ship_to_home. It gets back availability, price, delivery fee, delivery promise and total before tax. Tax is added at checkout.
An order can arrive the same day. We only say so when the delivery promise reads "Get it today." If the data can't support that sentence, it doesn't appear.
Then the buyer sees a hosted checkout page that re-verifies current price and availability. Nothing is charged until the shopper approves the final total.
Each layer is there because one piece of boring data can be wrong. The checks catch what slipped.
And the system learns. Delivered orders and failed orders both feed back into the graph. A store whose hours were wrong, or whose door didn't have the item, shows up in the evidence.
For retailers
If you run stores, the unglamorous information you already keep, like hours, addresses and what each location can do, is the part that lets your shelves be trusted by digital demand. Keeping it right is worth the effort.
Want your shelves visible to AI agents? Get in touch at jennipro.com.