Skip to content

Delivery Scheduling

The delivery module transforms Gro from billing-centric to delivery-date-centric. Customers choose their delivery date and time slot, and Gro calculates the billing date automatically.

Concept Description
Delivery Configuration Geographic zone settings (country, state, postcode) with timing parameters
Delivery Day A day of the week when deliveries occur
Delivery Slot A time window within a delivery day (e.g. 9am–12pm)
Packing Day The day items are packed before courier handoff
Billing Day When the customer is charged — calculated backwards from delivery
  1. You define delivery configurations for your geographic zones
  2. Each configuration specifies which days of the week you deliver, available time slots, and courier lead times
  3. When a customer subscribes, they choose a delivery date and slot based on their location
  4. Gro calculates the billing date by working backwards from the delivery date through packing and courier timelines
Delivery Date
← Courier Lead Time (days)
← Packing Day
← Billing Day

Navigate to Subscriptions → Delivery in the Gro dashboard:

  • Country — which country this configuration applies to (e.g. AU, US, GB)
  • State — optionally narrow to a specific state or province
  • Postcode pattern — optionally narrow further (exact match, range like 2000-2100, or prefix like SW*)
  • Courier lead time — how many days from courier handoff to delivery

For each configuration, specify which days of the week you deliver and set optional packing day overrides.

Within each delivery day, define time windows customers can choose from (e.g. “Morning 9am–12pm”, “Afternoon 1pm–5pm”).

Add the days you don’t deliver under Subscriptions → Delivery → Holidays. A holiday can be a single day or a range, like Christmas through New Year.

  • All zones: closes every delivery zone, for national public holidays
  • One zone: closes only that zone, for regional holidays
  • All day or mornings: close every slot, or only the slots that end by 12pm, for a courier with no morning runs on Boxing Day. Slots that run past midday stay open.

Closed slots are hidden from the checkout date picker, the customer portal and the dashboard reschedule picker, including Ship Now, and can’t be chosen through the API.

Gro moves repeat orders off a holiday by itself, so you don’t have to.

  1. Same time, a day earlier, then two days earlier. A Friday 6pm to 9pm delivery on Christmas Day moves to Thursday 6pm to 9pm.
  2. Otherwise the closest open slot, either side of the holiday. The nearest date wins, earlier wins a tie, then the time closest to the original.

The charge date and the packing date move with the delivery, and only dates that can still be charged and packed in time are used.

The move is a one off. The next order goes back to the customer’s usual day and time, so a holiday never shifts their schedule.

If the customer or your team reschedules the moved order, the new date they choose becomes the schedule.

Orders that land on a holiday when the schedule rolls forward after each charge are moved then. Add a holiday later and Gro moves the subscriptions already booked into it straight away. Orders already being charged, and subscriptions retrying a failed payment, are left alone.

  • On the Holidays list, each holiday shows how many active subscriptions it affects. Click the number to open them.
  • On the Subscriptions list, the Holiday filter shows the subscriptions affected by one holiday, or pick Temporary date move to see every subscription currently moved for any holiday.

Every move sends a Subscription Delivery Moved For Holiday event to Klaviyo and Gro. Nothing is sent to customers unless you build a flow on it, so moves are silent until you do.

1. Build a flow on the event. Trigger it on Subscription Delivery Moved For Holiday and send it straight away.

2. Say what changed. The event carries the holiday’s name and the dates before and after the move:

Because of {{ event.holiday_name }}, your next delivery is now {{ event.next_delivery_label }}.
It was due {{ event.holiday_moved_from_date|format_date_string|date:"l j F" }}.

3. Or mention it in emails you already send. Every subscription event, like the payment reminder, carries delivery_moved_for_holiday and holiday_moved_from_date, so you can add a line instead of a new flow:

{% if event.delivery_moved_for_holiday %}
Heads up: because of the holiday, this delivery comes {{ event.next_delivery_label }}
instead of {{ event.holiday_moved_from_date|format_date_string|date:"l j F" }}.
{% endif %}

In the Customer Portal, customers see their upcoming delivery date and can reschedule to a different available date and slot.

Gro automatically determines when to charge the customer based on the delivery date and your configuration. This means:

  • Customers think in terms of when they receive their delivery
  • Billing happens at the right time to ensure orders are packed and shipped on schedule
  • Changes to delivery dates automatically adjust billing dates