How to show an estimated delivery date on Shopify product pages (2026 guide)

Shoppers ask one question right before they press "Add to cart": when will I actually get this? If the product page does not answer it, they open a new tab, check Amazon, and often do not come back. An estimated delivery date is one of the few product-page elements with a measurable effect on conversion, and Shopify does not show one by default.
This guide covers the three ways to add one, the mistakes that make delivery promises wrong, and how to set it up in a few minutes.
What a good estimated delivery date needs
A convincing date is not "3–5 business days". It is a concrete range: Order today, get it Sep 16 – Sep 18. To calculate that correctly you need five inputs:
- Order cutoff time. Orders placed after 14:00 ship the next working day, not today.
- Dispatch days. Most stores do not ship on weekends; some do not ship on Mondays either.
- Processing time. Handmade or made-to-order products need 1–3 days before they leave.
- Transit time per destination. Domestic is 1–2 days, EU 3–6, overseas longer.
- Public holidays, both where you ship from and where the parcel is going.
Skip any one of these and the date on the page will be wrong on some days, which is worse than no date at all. A customer who was promised Friday and gets the parcel on Tuesday remembers it.
Option 1: Static text in the theme
The quickest fix is a line of text in the product template: "Ships within 24 hours". It is honest, it costs nothing, and it works for stores with one shipping zone and no cutoff logic.
The downside is obvious: it never changes. It says the same thing on Friday at 23:00 and on a public holiday. It also cannot show a date, only a duration, so the shopper still has to do the maths.
Option 2: Liquid code with date math
Shopify's Liquid can do arithmetic on dates, and there are snippets floating around that add N days to "now" and print the result. It looks like this in principle:
{% assign eta = 'now' | date: '%s' | plus: 259200 | date: '%b %-d' %}
Estimated delivery: {{ eta }}
Three problems:
- Caching. Shopify caches rendered pages. The "now" in your snippet is the moment the page was cached, not the moment the shopper is looking at it. On a busy store that can be hours off.
- No calendar. Weekends and holidays require loops and lookup tables in Liquid, which quickly becomes unreadable and breaks when the theme is updated.
- Timezone.
"now"in Liquid is the store timezone; cutoff logic for shoppers in other timezones needs JavaScript on top.
It is doable for a developer, but it is not a two-minute job, and every theme update puts it at risk.
Option 3: A delivery date app
An app keeps the calendar, cutoff and holiday logic outside the theme and injects the date into the product page. The things to check before installing one:
- Does it render on the server or with JavaScript after load? JavaScript-injected dates appear late and shift the layout, which hurts Core Web Vitals. Server-rendered dates are in the first HTML.
- Per-country dates. If you ship to several countries, the date should follow the shopper's country (Shopify Markets or geolocation), not show one global range.
- Holiday calendars. Built-in national holidays for the countries you ship to, not a blank list you must fill in by hand every year.
- Languages. Month names must be localised. "Sep 16" is fine in English; a German store needs "16. Sept.".
- Free plan. You should be able to run one shipping profile without paying, and pay only when you need per-country logic or countdowns.
How Arrivio does it
We built Arrivio after getting this wrong ourselves in Liquid. It runs as a Shopify theme app extension, so nothing is written into your theme files, and the date is rendered on the server so it is present in the first HTML with no flicker.
Setup is three steps:
- Install from the Shopify App Store and open the app. Arrivio reads your shipping zones and proposes a delivery profile for each one.
- Set your cutoff time, dispatch days and processing time. Holidays for 25 countries are already loaded.
- Turn on the app embed in the theme editor. The date appears under the Buy buttons on every product page, in the shopper's language (30 languages included).
The free plan covers one delivery profile with no usage limits. Pro adds per-country dates, collection-specific rules, a cutoff countdown ("order in the next 2 h 14 min to ship today") and a delivery timeline graphic. There are 45 design templates so it matches the theme without CSS.
Full setup notes are in the Arrivio documentation.
Frequently asked questions
Does an estimated delivery date really increase conversion? In our merchants' data, product pages with a concrete date range convert measurably better than pages with "3–5 days" text, especially for stores competing with marketplaces. The effect is strongest on mobile, where opening another tab to check is more friction.
What if the carrier is late? Show a range, not a single day, and base the range on your real transit statistics. A promise of "Sep 16 – Sep 18" absorbs a one-day carrier delay. Arrivio lets you set minimum and maximum transit days per country for exactly this reason.
Can I show the date only for some products? Yes. Made-to-order items can have their own profile with longer processing time, or no date at all, by targeting collections.
Does it work with Shopify Markets? Yes. The shopper's market or country selects the delivery profile, and the date is localised into the market's language.
Will it slow the page down? Not if the date is server-rendered. Arrivio adds a few hundred bytes of HTML and a small script for the countdown; there is no external request on page load.
Arrivio is built by MB „Liūto media", a small studio in Lithuania. It is one of seven Shopify apps we publish; the full list is at liutoapps.com.

How to get customers to make TikTok videos of your products (and use them legally)
Seven Shopify apps from Liūto media: which one do you actually need?
How to calculate the reorder interval for consumable products (with real examples)