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. Set Settings → Shipping and delivery → Delivery estimates to Off, 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 order says Pickup tomorrow at 9:57 am (or similar) but the customer chose a different day | That is Shopify’s own pickup estimate, worked out from your location’s Order ready for pickup setting, not the customer’s choice. Ignore it and go by Ready by and Time on the order. To make it less confusing, set Order ready for pickup to Usually ready in 5+ days under Settings → Shipping and delivery → Local pickup (setting 2 above). |
| 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. |
The home page shows a status line. A green pulsing dot and Online mean the date picker has loaded on your store in the last two weeks, with when it last did. Red means it has shown before but not lately, so check the Readyby block is still in your theme. Grey means scheduling is switched off.
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 (so are shipping dates): 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*). For US stores you don’t have to type them: under each zone, Fill in ZIP codes for me adds every ZIP within a distance of a ZIP you choose (for example everything within 10 miles of your shop), or every ZIP in a city and state. They are added to the list for you to check, edit and save. 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 the methods under Storefront text (pickup, delivery and shipping labels) (e.g. “Curbside pickup,” “Local drop-off”), which also lets you translate the picker for non-English stores. You often don’t need to: on a Spanish, French, German, Italian or Portuguese store, any wording you leave blank (and the pickup, delivery and shipping names if you kept them as they came) shows in that language automatically.
For orders you post or courier. Shipping dates is a Starter feature, off until you tick Offer shipping dates under Settings → Shipping dates. Shoppers then see a third choice next to pickup and delivery (named Shipping; rename it under Storefront text → Shipping label), and the date list switches to your ship days. If you show the next available date, it switches too, to your first ship day (or arrival day).
The ship day is saved on the order as Ready by, like any other date, so it shows in Upcoming orders (with a Shipping filter), the calendar feed and order tags (shipping). With arrival dates the order also gets Estimated arrival (orders placed before 21 October 2026 show it as Arrives by). Readyby doesn’t book carriers or change shipping rates; those stay in Shopify. There are no time windows for shipped orders.
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 a Daily limit under Capacity to protect your production, and choose what it counts. Orders (the default) counts each order once, whatever is in it. Items counts quantities, so an order of 12 cupcakes uses 12 of the day’s limit; a day stops being offered once it can’t fit the quantity the shopper is ordering (the quantity on the product page, or the items still needing a date in the cart). Items are counted from orders placed since 19 October 2026. When a day is full, it drops out of the picker automatically. Set it to 0 for no limit.
A limit for one product. Under Product rules, give a product a Max per day, for example 10 custom cakes, and that product stops being offered on a day once 10 are booked, while everything else carries on. It counts items of that product only, from orders placed since 19 October 2026, and works alongside the daily limit above. If a shopper asks for more than any day can take, the picker says so: “We can’t make that many for one day. Try a smaller quantity.” You can reword that under Wording and translations. The picker also counts what is already in the cart, so once the cart holds a day’s limit of that product, the date greys out for the next add. With the Readyby cart guard app embed on, the same check runs again at checkout on the whole cart.
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. Press Prep list to add a line under each day showing how many of each item those orders need, so you can see at a glance what to bake or pack; it stays on in that browser until you press it again. Fulfilled orders are greyed out and left out of the prep list. Anything past its date that is not fulfilled yet sits folded at the top under Past due, not fulfilled with a count; click the bar to open it. Coming up folds the same way, also with a count. Each section stays open or closed the way you left it, in that browser. Mark orders fulfilled in Shopify and they drop off. Click an order number to open it in Shopify. With two or more pickup locations, each order shows its location, and a location menu next to the search shows one store’s orders (and prep list) at a time. An order with items at two shops shows once, with one checkbox and a line for each shop; pick a shop in the menu to see only its part.
Use All, Pickup or Delivery (and Shipping, once you have a shipped order) at the start of the toolbar to show just one kind of order; the prep lists update to match. Print list gives you a clean copy for the kitchen (with the prep list if it is on), and Download CSV saves the same list as a spreadsheet, one row per item.
Search by order number or item, and sort by Soonest first (date, then time window), Latest first or Order number. Each list scrolls inside its box, so a busy week doesn't make the page endless. Tick orders, or Select all for every order shown, then press Print slips on receipt printer, which sends a kitchen slip for each to your connected printer (Starter, see Receipt printer). Print list uses your browser’s print box, so it works with any printer or Save as PDF; no receipt printer needed. Once orders are ticked, the Print list and Download CSV buttons at the top act on just those orders (the count under Select all says so); with nothing ticked they cover everything shown. Select all leaves out past due orders unless that section is open.
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. Create, Reset link and Turn off show the result on the page straight away, but nothing changes until you click Save in the bar at the top, so Discard undoes a click. A new link can be copied once it is saved.
The page reads your orders each time you open it, going back as far as your booking window plus a week (between 45 and 60 days, the most Shopify allows, up to your newest 1,000 orders), and nothing from them is stored by Readyby.
A Starter feature. Readyby can print a slip for every new order with a date on a Star receipt printer, by itself, with no computer or app open. Each slip says PICKUP, LOCAL DELIVERY or SHIPPING across the top to match the order, then shows the order number, ready date, the time window, the pickup location and the items with quantities. No customer details are printed. What a slip looks like on the Receipt printer page shows a sample pickup, local delivery and shipping slip.
Any Star Micronics printer that supports CloudPRNT and is on your network by cable or Wi-Fi. From Shopify's list of POS receipt printers, that is the Star TSP143IV (any version) and the Star mC-Print3. Star's mC-Print2 and some older Star models with a network card also work; Star keeps the full CloudPRNT list.
Not supported: the older Star TSP143III models, Star mPOP, Bluetooth-only printers and Epson printers. They can't fetch slips over the internet on their own. If you're buying a printer for this, check the model name says TSP143IV or mC-Print3.
Open Receipt printer in the app menu. Menus differ a little between printer models and firmware versions, so your printer's manual has the exact screens; these are the steps on most Star printers:
If the printer is off or out of paper, slips wait and print when it is back, so after a closed weekend it prints the backlog. Before you sell or return a printer, press Replace link or Turn off so it can no longer receive your slips. Keep the printer's firmware up to date with Star Quick Setup Utility.
At the bottom of the Receipt printer page, Slips history lists every slip waiting to print, any that failed, and everything printed in the last 7 days, with the order number, ready date, location and items. If the printer reports a problem with a slip, or never confirms it printed, Readyby tries again; after 3 tries the slip is marked Failed and stops retrying so it can't hold up the slips behind it. Use All, Waiting, Failed or Printed to filter the list (each shows its count), sort by Newest first, Oldest first, Ready date (soonest due first, then time window) or Order number, or search by order number or item. The list scrolls inside its box and shows up to 200 slips at a time. Press Print on a slip to print it again, for example after a paper jam. To do several at once, tick slips (or Select all for every slip shown) and press Print selected or Delete selected. Delete asks you to confirm first, and deleted slips won't print. Printed and failed slips are deleted after 7 days.
| What you see | What to do |
|---|---|
| There is no CloudPRNT setting on the printer | Update its firmware with Star Quick Setup Utility and look again. If it still isn't there, that model doesn't support CloudPRNT; see Which printers work above. |
| Paper comes out blank, even on the printer's own settings sheet | The roll is in upside down, or it isn't thermal paper. Thermal paper only prints on one side: scratch it with a fingernail, and the side that marks must face up as it comes out. Use the paper width your printer takes (most are 80mm, 3-1/8"); some second-hand printers arrive with plain paper. |
| Readyby still says Not connected after you pasted the link | The change was probably submitted but not saved. Save the settings and restart the printer (on many Star printers Save → Restart device, then Execute), then give it up to 5 minutes; a restarted printer can take that long to rejoin your network and check in. Also check the link was pasted whole, with nothing missing at either end. |
| Still Not connected after a save and restart | The printer needs its own internet access. Check, in order: CloudPRNT is turned on and shows your link starting https://print.dropfeed.io/; the settings sheet shows a real IP address; the printer isn't on a guest Wi-Fi network or behind a firewall that blocks it; the firmware is up to date. You do not need to connect Star Micronics Cloud, and leave any TLS or certificate setting on its default. |
| Connects, then drops again | Usually your router's DNS. In the printer's network settings set the DNS servers to 1.1.1.1 and 1.0.0.1, save and restart. Some printers only show those fields when the IP address is set to fixed (static); if so, use the address from its settings sheet. |
| Connected, but the first test slip takes a while | After a restart the first slip can take up to half a minute while the printer settles in. After that, slips print within a few seconds. |
| A pile of slips printed at once | The printer was off, offline or out of paper. Slips wait in line and print when it is back, oldest first. To skip them, tick them under Slips history on the Receipt printer page and press Delete selected. |
| A slip shows Failed | The printer reported a problem with it three times, or never confirmed it printed. Check the paper and that the cover is closed, then press Print on that slip under Slips history. |
| A slip came out jammed or unreadable | Press Print on it under Slips history. Printed slips stay in the list for 7 days. |
| You're selling, returning or replacing the printer | Press Turn off or Replace link in Readyby first so the old printer can't receive your slips, then reset the printer to factory settings (on many Star printers, Set Default on its settings page). |
Still stuck? Email support@dropfeed.io with your printer's model and a photo of its settings sheet.
With two or more pickup locations, the Receipt printer page has a card called A printer at each location (optional). Create a link for a location and paste it into the printer at that shop (the same steps as above). Slips for orders picked up at that location then print there, and a cart with pickups at two shops prints each shop’s slip at its own printer. Orders for other locations, delivery and shipping print on your main printer. Print a test slip on each location checks its printer. Removing a location’s printer sends its waiting slips to the main printer.
A Star printer holds one link. If you use more than one of our apps on the same printer (for example Readyby slips and Printby tickets), open the printer section in one app, choose Using this printer for another Dropfeed app too? and paste the other app’s printer link. You get one combined link: paste that into the printer as its CloudPRNT Server URL and restart it. Every app keeps printing to it and shows the printer as connected. If you replace a link in any of the apps later, make the combined link again. Epson printers keep one app each. Each app still prints its own slips, so if Readyby (or Rentby) and Printby both print new orders automatically, each order comes out twice: the app’s kitchen or pick slip and Printby’s order ticket. For one per order, turn off automatic printing in one of them; the combined-link box offers a button to stop the app you’re in from printing new orders.
Two optional extras under Settings → Order tags and pickup locations. Both are off until you tick them. They use two permissions Readyby asks for: to add tags to your orders and to see your store locations. New installs approve them when installing; if you installed before 19 October 2026, Shopify asks you once to approve the update the next time you open Readyby. Approving changes nothing on your store by itself.
readyby, ready-2026-10-30 and pickup, delivery or shipping (plus pickup-main-st for a pickup location). In Shopify’s Orders list, search or filter by a tag to see everything due on a day. Readyby only adds its own tags; it never removes yours. Orders placed before you turned it on aren’t tagged.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.
Two pickup times on one order? Shopify also prints its own estimate in the order’s fulfillment box, such as “Pickup in store, tomorrow at 9:57 am”. That comes from your location’s Order ready for pickup setting, not from the customer. Always go by the Readyby Ready by date and Time, which are what the customer chose and what Upcoming orders, your slips and your tags use.
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.
The Settings page shows a preview of your date picker to the right of your settings (on a narrow screen, at the top). Your heading, pickup and delivery choices, the date and time dropdowns, the postal code box and every message update as you type, before you save. The dates listed are the ones your saved schedule offers, so save to see a schedule change there. If a product has its own lead time or ready days under Product rules, choose it from Preview as above the preview to see the dates that product’s page offers. The preview shows wording and layout, not your exact look: on your store the picker also takes your theme’s fonts and form styles and the look you set on each block in the theme editor, and wording typed into a block’s own settings replaces the app’s wording on that page.
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. The quickest way to change it is in the app: Settings → Storefront text has the picker style (dropdown, month calendar, or a calendar that opens on click) and Use my own colors for the accent, text, background, border and calendar days, with a preview. For anything else, 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. A color set on the block wins over the one set in the app.
.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, in your store’s own time zone. 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 click Save in the bar at the top to receive updates, or leave it empty and Readyby never emails you. Once saved, the address is locked; to change it, click Unsubscribe and add the new one. Replies to our emails reach support@dropfeed.io. 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, at most once a month, a short note listing any major updates (none in a month with nothing major). Every email has an unsubscribe link, and Unsubscribe under the box removes your address straight away.
Nothing on your store changes. Your date picker, the date on orders and your bookings keep working as before. Shopify will show the same request each time you open Readyby, and you can approve it whenever you like; Settings stays unavailable until you do. Approving doesn’t switch anything on by itself: order tags and pickup locations only start when you tick them in Settings. The two new permissions are to add Readyby’s own tags to orders and to see your store locations, and the privacy policy explains exactly how each is used.
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. After each add to cart the picker empties, so every item gets a date chosen for it, and an item removed and added back is asked again. 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.
Rather not set it up yourself? Open Done-for-you setup in the app menu. For $149 one time, charged on your Shopify bill, we set your schedule, lead times per product, pickup and delivery options and daily limits, place the date picker on your product and cart pages, and email you a summary of what we set. You approve a collaborator request from Dropfeed under Settings, Users, and you can remove our access any time. We never place orders on your store, and if we can’t get it working, we refund you.
Email support@dropfeed.io. We typically reply within 1–2 business days.
← Back to Dropfeed