Let customers choose when their order is ready, for store pickup or local delivery, with real lead times, so every order is one you can actually make on time.
Forty seconds: a lead time set per product, a mixed cart keeping a date on each line, and the date landing on the order. Watch on YouTube →
Readyby adds a date picker to your product pages. A shopper chooses pickup or local delivery and a ready-by date (and an optional time slot). Readyby offers only the dates your schedule allows. It enforces your lead time, a same-day cutoff, your open days, any closed days, and a daily capacity cap, so a day that has reached its limit stops being offered. The chosen date and method are saved to the order, so your team knows exactly what's due and when.
Read this first. Readyby records when an order is collected and how. Shopify decides what your checkout actually offers and charges. They are separate systems, and Shopify does not let any app read or change your delivery configuration, so if these are not set, Readyby will look broken when the problem is one toggle in Shopify.
| What you see | What it actually is |
|---|---|
| Every product shows as sold out, but the admin shows stock | Your location has no delivery methods enabled. Shopify has inventory it may sell and no way to deliver it. Turn on Shipping and/or Pickup in store. |
| The date picker doesn’t appear on a product | A sold-out product hides the picker on purpose. Fix the sold-out cause above. Also check the product isn’t excluded under Product rules, or, if Schedule is set to Only the products I list, that it is listed there with Schedulable ticked. |
| A customer chose pickup but checkout asks for a shipping address | Shopify’s Local pickup is not enabled for that location. Setting 2 above. |
| A customer chose local delivery but checkout charges a shipping rate | Shopify has no local delivery zone matching that address, so checkout falls back to the only method it has. Check, in order: the zone exists and contains their postal code; your location’s address is in the same country as the customer; and you’re testing in a fresh browser session, because checkout caches delivery options hard. |
| You typed the address by hand | Shopify requires the delivery address to be verified by Google, picked from the dropdown as you type, not typed out in full. An invented street silently disables local delivery no matter how the zones are set. |
| Local delivery works on one location but not another | Enable it on every location that could fulfill the order. Shopify chooses the location first and checks the zone second. |
| Checkout shows Ship and Pickup but no delivery option | Local delivery is enabled but its zone doesn’t cover the address entered. A quick tell: when local delivery is available, Shopify makes the phone field required, if it still says “optional”, the address isn’t matching a zone. |
| Checkout says something like “Ships next business day” next to your delivery option | That is Shopify’s own estimate, not Readyby’s date, and it will contradict the date your customer picked. Turn off Settings → Shipping and delivery → Estimated delivery dates (or set a real transit time), and fill in the Delivery information field on your delivery zone with something like “Delivered on the date you chose at checkout.” That field shows at checkout and in the order confirmation email. |
| The delivery fee at checkout doesn’t match the one on the product page | The two are set separately and have drifted. Readyby displays; Shopify charges. Make them match. |
| Nothing appears on the storefront at all | The theme block hasn’t been added. Readyby never places it for you, see Getting started below. |
Most current themes let you add an app block inside a section, but not all of them do, and themes do not agree on what to call it. Some say Add block, others say Add feature or Add element. Before assuming your theme cannot do it, click into the product section itself rather than the page, and look for an Apps group in whatever add list appears. App blocks only live inside a section, so looking at the page level shows nothing.
If there is genuinely no Apps group in any section on your product template, you can place the picker by hand. Open Online Store → Themes → … → Edit code, find the template or section that renders your product page, and paste this where you want the picker to appear, usually just after the Add to cart button:
<div class="readyby"
data-proxy="/apps/readyby"
data-context="product"
data-product="{{ product.id }}"
data-currency="{{ shop.currency }}"
data-available="{{ product.available }}"
data-variants="{% for v in product.variants %}{{ v.id }}:{% if v.available %}1{% else %}0{% endif %}{% unless forloop.last %},{% endunless %}{% endfor %}">
<p class="rb-loading">Loading available dates…</p>
</div>
<link rel="stylesheet" href="/apps/readyby/asset/readyby.css">
<script src="/apps/readyby/asset/readyby.js" defer></script>
That is the whole install. Everything you set in the app still applies: lead times, blackout dates, capacity, pickup and delivery labels, and your wording. The picker keeps updating with the app, because those two files are served by Readyby rather than copied into your theme.
Paste it once into the template every product uses. Which products then show it comes from Which products can be scheduled on the Schedule page and from Product rules, exactly as with the theme block, so keep the snippet in your main product template where it sits next to the buy button. Moving it to another file to limit where it appears is not needed and usually puts it in the wrong place on the page. For the cart picker, use the same snippet with data-context="cart", no data-available or data-variants lines, and this data-product line instead, so the picker knows what is in the cart. Paste it into your cart template above the checkout button.
data-product="{%- assign sep = '' -%}{%- for item in cart.items -%}{%- if item.properties['Ready by'] == blank -%}{{ sep }}{{ item.product_id }}{%- assign sep = ',' -%}{%- endif -%}{%- endfor -%}"
That line lists the cart items that do not already have a date from the product page. With it in place the cart picker follows the same rules as the theme block: it appears only when one of those items can be scheduled, and uses the longest lead time among them.
For any product, Readyby starts from “now” in your store's time zone and removes any date it can't safely offer:
Store pickup is on every plan. Local delivery is a Starter feature: you can configure it on Free, but shoppers only see it once you subscribe. For local delivery you can limit it to specific postal codes (one per line, or a wildcard like 902*). A shopper outside your zones is told so and can only continue with pickup. Leave the list empty to accept anywhere. You can also enter a delivery fee, which Readyby displays on the product page so shoppers know what to expect; Readyby can’t add money to a Shopify cart, so set the actual charge under Settings → Shipping and delivery → Local delivery and it applies at checkout. You can rename both methods under Storefront text (e.g. “Curbside pickup,” “Local drop-off”), which also lets you translate the picker for non-English stores.
Readyby asks how you want the order on the product page, and Shopify asks again at checkout. That is not a bug, and no app can remove it, Shopify does not let apps preselect or read the checkout delivery method.
Asking early is still worth it: it’s how a shopper outside your delivery area finds out before filling a cart and typing an address, instead of after. Your choice in Readyby is recorded on the order as Requested, next to what Shopify actually charged for, so if the two ever differ, you can see it.
Turn on “Require a date before add-to-cart” to make the picker mandatory. While no date is chosen, Add to cart and Buy it now are both dimmed, and hovering either one shows “Choose a date first.” Clicking anyway scrolls the shopper back to the picker with a short message rather than doing nothing. Leave the setting off to keep the picker optional.
Set Max orders per day to protect your production. Each scheduled order counts against that day's cap; when it's full, the date drops out of the picker automatically. Set it to 0 for unlimited.
If you use time slots, each slot can carry its own capacity. A slot that fills up is grayed out for that date while your other windows stay open, and if every slot on a date is full, the date itself stops being offered. A window that has already started is dropped the same way. Readyby offers only windows that begin at least your lead time from now, so if you need an hour’s notice, a shopper standing in front of the picker at 3pm is not offered your 8am window. Once the last window of the day has gone by, so does the day.
Open Upcoming orders in the app menu. Every order with a Readyby date is listed under the day it is due, soonest first, with the time window and pickup or delivery beside it. Each day starts with a prep list: how many of each item those orders need, so you can see at a glance what to bake or pack. Fulfilled orders are greyed out and left out of the prep list. Anything past its date that is not fulfilled yet is shown at the top under Past due. Click an order number to open it in Shopify.
Use All, Pickup or Delivery at the top to show just one kind of order; the prep lists update to match. Print gives you a clean copy for the kitchen, and Download CSV saves the same list as a spreadsheet, one row per item.
At the bottom of Upcoming orders, click Create calendar link. You get a private link that shows each dated order as an all-day entry on its day, with the order number, pickup or delivery, the time window and the items. In Google Calendar choose Other calendars, then From URL, and paste the link. Apple Calendar and Outlook both have a subscribe-by-URL option too. Calendar apps refresh the link on their own schedule, usually every few hours, so check Upcoming orders for up-to-the-minute numbers. No customer names or contact details are in the calendar. Anyone with the link can see it, so if it is ever shared by mistake, click Reset link: the old link stops working at once, and you add the new one to your calendar again. Turn off removes the link completely.
The page reads your orders from the last 45 days each time you open it, and nothing from them is stored by Readyby.
When a shopper checks out, their choice is saved to the order as Ready by (the date), Requested (pickup or local delivery), Time (if you use slots), and Delivery postal code (for local delivery). Where they appear depends on which picker the shopper used.
A date chosen on a product page is attached to the item itself, so it appears in two places: on the line item, directly beneath the product, and under Additional details in the order's right-hand column. A date chosen on the cart page can only be saved at the cart level, because the cart page has no add-to-cart form to attach it to, so it appears under Additional details and nowhere else. If you have added the cart picker but not the product picker, every order will be the second kind.
Requested, not Fulfillment: Shopify's checkout has its own pickup and shipping selector, and that choice is the one that actually happens. Readyby records what the shopper asked for, which is worth knowing even when the two disagree.
By default the picker matches your store theme: it inherits your theme's fonts, text color, and background automatically, so it looks right the moment you add it. To adjust anything, open the Readyby date picker block in your theme editor; settings are grouped into Text, Colors, Layout, and Advanced. Leave any color blank to keep the theme default.
.readyby, .rb-box, .rb-h, .rb-m, and select for full control.Time slots are on the free plan, not held back. Setup, settings, product rules and blackout dates are never metered. Every plan meters one thing only: the number of orders that carry a date, per calendar month. An order with no date on it never counts, whatever plan you are on. The home screen shows a usage count so you always know where you stand, and the monthly count resets on the 1st. Billing runs through Shopify and you can cancel anytime.
At the bottom of Readyby’s home screen there is an Email updates box. It is optional: add an email and press Save to receive updates, or leave it empty and Readyby never emails you. Emails greet you by your store’s name.
If you add one, you get a note when your store has used 80% of its plan’s monthly dated orders, another if it reaches the limit and the picker steps aside until the 1st, and an occasional note when there is a major update. Every email has an unsubscribe link, and Unsubscribe under the box removes your address straight away.
No. Readyby adds the picker to your product page and writes the choice onto the order. It doesn't replace or slow down Shopify checkout.
Set a lead time per product under Product rules. With the product page picker, each item keeps its own date, so a cake needing 3 days and a pastry needing 1 can be bought together. If you use the cart picker instead, one date covers the whole cart and Readyby uses the longest lead time in it.
You can place both pickers. The cart picker hides itself when every item in the cart already has a date from the product page, and appears when something arrived without one, such as by quick add or Buy it now.
Yes, add it under Blackout dates (for a one-off closure) or lower that day's capacity. Closed days disappear from the picker.
Add one blackout entry with a first day closed and a last day closed. The entire stretch is blocked as a single row you can edit or remove in one click. You don't add a row per day. Ranges can cross month and year boundaries.
No. Tick Every year when you add it and that date, or range, is blocked every year from then on. It works across New Year too, for example Dec 24 to Jan 2. Holidays that move, such as Thanksgiving or Easter, fall on a different date each year, so add those as normal one-time entries.
Yes, click Edit on the entry to change either date, the reason, or whether it repeats every year, without deleting and re-adding it.
No. When “Require a date before add-to-cart” is on, Readyby blocks Add to cart and the “Buy it now” / Shop Pay button. Add the cart-page block as well and the same requirement applies at checkout for anyone who skipped the product page.
No, everything uses the store time zone you set, so your cutoffs and dates always mean what you intend.
Only completed scheduled orders (up to 25/month on Free). Changing settings or rules never counts.
Email support@dropfeed.io. We typically reply within 1–2 business days.
← Back to Dropfeed