Readyby help and guide

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 →

What Readyby does

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.

Before you start: three Shopify settings Readyby depends on

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.

  1. Your location must be able to fulfill online orders, by some method. Go to Settings → Locations, open your location, and look at Fulfillment. The main toggle (“Use inventory at this location to fulfill online orders”) must be on, and so must at least one of Shipping, Local delivery or Pickup in store. On a brand-new store all three are frequently off.
  2. Offering store pickup? Turn on Shopify’s Local pickup. Settings → Shipping and delivery → Local pickup, enabled for your location. Readyby records the customer’s choice; this is what makes checkout offer pickup instead of asking for a shipping address.
  3. Offering local delivery? Set it up in Shopify too, with matching prices. Settings → Shipping and delivery → Local delivery, enabled for your location, with a delivery zone (ZIP codes or a radius) and a rate. Turning local delivery “on” without defining a zone covers nowhere. Readyby cannot charge a delivery fee, the fee in Readyby is shown to the shopper, and Shopify collects the real one. Set them to the same number.

    While you are in that zone, fill in Delivery information with something like “Delivered on the date you chose at checkout.” That message appears under the delivery option at checkout and again in the order confirmation email. Without it, Shopify invents its own estimate (usually “Ships next business day”) which sits inches from the date your customer actually picked and contradicts it.

    For the same reason, turn off Settings → Shipping and delivery → Estimated delivery dates (or give your rates real transit times). Automated dates are guesses, and guesses beside a chosen date read as a mistake.
  4. Enable local delivery on the location Shopify actually routes to, which may not be the one holding your stock. Shopify picks a fulfillment location from your inventory and order-routing rules, and only then checks whether that location has a delivery zone covering the customer. If you have more than one location, the safest move is to enable local delivery on all of them, or reduce yourself to one. Nothing in the admin tells you which location a given order will use, so this is otherwise invisible.
  5. Check your location’s address is in the right country. Local delivery zones are scoped to the delivering location’s country, so a location whose address is in one country can never deliver to another. New development stores are seeded with a placeholder address (often 123 Main St, Toronto, Canada) and it will silently defeat every delivery zone you set up until you change it.

If something looks wrong, check here first

What you seeWhat it actually is
Every product shows as sold out, but the admin shows stockYour 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 productA 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 addressShopify’s Local pickup is not enabled for that location. Setting 2 above.
A customer chose local delivery but checkout charges a shipping rateShopify 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 handShopify 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 anotherEnable 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 optionLocal 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 optionThat 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 pageThe two are set separately and have drifted. Readyby displays; Shopify charges. Make them match.
Nothing appears on the storefront at allThe theme block hasn’t been added. Readyby never places it for you, see Getting started below.
Why can’t Readyby just do this for me? Shopify provides no API for local delivery or pickup configuration, zones, postal codes, radius and pricing are all Admin-only. The only way for an app to control delivery pricing is the Carrier-Calculated Shipping API, which requires a Shopify plan costing several hundred dollars a month. Readyby deliberately doesn’t use it, so it works on every plan.

Getting started

  1. Install Readyby and open it from Apps in your Shopify admin.
  2. Set your schedule. Go to Schedule and set your lead time, same-day cutoff, open days, capacity, and which methods you offer (pickup, local delivery, or both). Turn on “Show the date picker on my storefront.”
  3. Add per-product lead times (optional). Under Product rules, give specific products their own notice. A custom cake might need 72 hours while cookies need 24.
  4. Add closed days. Under Blackout dates, add holidays, vacations, or fully-booked days. Closed for a stretch? Set a last day closed and the whole range is blocked as a single entry. Tick Every year for holidays that fall on the same date each year.
  5. Add the picker to your product pages. Use the “Open my theme editor” button on the home screen or on the Schedule page. Readyby does not place the block for you. You choose where it goes. Open your product template, then in the product section click Add block → Apps → Readyby date picker. Shopify adds new blocks at the bottom of the section, under your description, so drag it up so it sits directly beneath Add to cart and Buy it now, then Save. Left at the bottom it gets lost below the description and most shoppers never scroll that far.
  6. Add the picker to your cart page too. In the theme editor switch the template to Cart, then Add block → Apps → Readyby cart picker and place it above the Checkout button. This catches shoppers who never saw a product page: quick add, a cart drawer, or a direct link.
Readyby is a theme block, not a site-wide “app embed,” so you won’t find it in the App embeds panel. You add it to the page itself, where shoppers pick their date. Add it once to your default product template and it appears on every product. To show it on only some products, choose Only the products I list under Which products can be scheduled on the Schedule page, then add those products under Product rules. You never need a second template for this.
Seeing two date pickers on one page? The block has been added twice. Open the theme editor, click the duplicate block in the left-hand list, and remove it. Add one date picker to your product template and one cart picker to your cart template.

If your theme has no place to add the block

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&hellip;</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.

Two differences from the block version. The look is the default one, since the colour and spacing settings live on the block, so use your theme's own CSS if you want to restyle it. And if you have Require a date before add to cart switched on, the buy buttons are held a fraction of a second later than with the block, because the block can tell the picker that setting before any JavaScript runs. Nothing can be bought without a date either way.

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.

How available dates are decided

For any product, Readyby starts from “now” in your store's time zone and removes any date it can't safely offer:

All timing is calculated in the time zone you set: not the shopper's, so “same-day before 2pm” always means your 2pm.

Pickup & local delivery

Set this once in Shopify, or pickup orders get charged shipping. Readyby records when an order is collected and how; Shopify decides what checkout actually offers. Go to Settings → Shipping and delivery → Local pickup and turn pickup on for your location. Without it, a shopper who chose “store pickup” in Readyby still gets asked for a shipping address and charged a shipping rate. The same applies to Local delivery: Readyby shows your fee, but the actual charge comes from a matching Shopify local delivery rate.

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.

Why you choose pickup or delivery twice

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.

The note under the options (“You’ll confirm this again at checkout”) is editable in the theme editor like every other word in the picker. Type a single space in that field to hide it.

Requiring a date

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.

The requirement covers the dynamic checkout button (“Buy it now” / Shop Pay) as well as Add to cart, so a shopper can’t skip the date by jumping straight to checkout. Add the Readyby cart picker block to your cart page too, and the same requirement applies to shoppers who arrive there from a quick-add or a cart drawer.

Capacity caps

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.

Upcoming orders and your prep list

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.

See your orders in your calendar

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.

What lands on the order

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.

Printing on packing slips: Shopify's packing slip prints neither line item properties nor order attributes out of the box. That's a platform default, not a Readyby limitation, and it can be changed. Which route you take depends on where your date lands.

Customize the look

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.

Plans & usage

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.

Email updates (optional)

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.

Frequently asked questions

Does this change my checkout?

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.

What if different products need different notice?

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.

Can I stop taking orders for a specific day?

Yes, add it under Blackout dates (for a one-off closure) or lower that day's capacity. Closed days disappear from the picker.

How do I close for a whole week?

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.

Do I have to add Christmas again every year?

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.

Can I change a closed date after adding it?

Yes, click Edit on the entry to change either date, the reason, or whether it repeats every year, without deleting and re-adding it.

Can a shopper get past a required date?

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.

Do customers see times in their own time zone?

No, everything uses the store time zone you set, so your cutoffs and dates always mean what you intend.

What counts toward the Free monthly limit?

Only completed scheduled orders (up to 25/month on Free). Changing settings or rules never counts.

Need more help?

Email support@dropfeed.io. We typically reply within 1–2 business days.

← Back to Dropfeed