Time Windows

The time window feature is currently available for Premium customers only.

Time windows are a way to specify the time constraints for a delivery stop. For example, a delivery or pickup may need to be made between 9:00 am and 12:00 pm, or between 2:00 pm and 5:00 pm. Time windows can also be open-ended such as 10:00 am or earlier, or 1:00 pm or later.

Click either link below for further details specific to the EasyRoutes product you're using:


EasyRoutes for Shopify

EasyRoutes can optimize delivery routes with time windows as long as the route has a scheduled start time and date and one or more stops have a time window associated with them. Ensure you have set a scheduled start date and time.

Where possible, time windows are automatically parsed from Shopify orders or imported CSV orders. To automatically create a route with time windows from orders:

  1. Turn on the Time window column in your EasyRoutes Settings under General > Orders page options to see which orders have time windows. EasyRoutes supports multiple third-party date picker apps. If the time window is not showing up in EasyRoutes please contact support.
  2. Set a scheduled start time and date using the Route scheduling option. This is required so we can calculate ETAs to ensure a stop is delivered within its delivery window.
  3. Select and add any orders that have time windows.
  4. Set any other necessary route options and click Create route. The route should be created to minimize overall driving time while meeting the time windows. If EasyRoutes is unable to meet the demands of the particular route (e.g., whether due to route duration or delivery windows) the stops will be rejected.

If your orders do not have time windows, you can manually add time windows to a route:

  1. Set a scheduled start time and date on the route. This is required so we can calculate ETAs to ensure a stop is delivered within its delivery window.
  2. Edit or add a stop and set a time window. To properly handle delivery routes that cross time zone boundaries (e.g., Chicago travelling towards Indianapolis), the time zone of the time window is based on the address of the stop.
  3. Save changes. You should now see a column of time windows in your local time zone. Stops that are in different time zones will be annotated as such.
  4. Re-optimize the route. The route should now minimize overall driving time while meeting the time windows. If EasyRoutes is unable to meet the demands of the particular route (e.g., whether due to route duration or delivery windows) the stops will be rejected.

Since ETAs are an estimate based on historical traffic patterns, EasyRoutes uses a bit of "slack" when optimizing routes with time windows so you may occasionally see ETAs that fall outside of the delivery window. If there is too much "slack" you can adjust the time window and re-optimize to get the desired result.


Handling Rejected Stops

Stops that cannot be delivered within the specified time window will be shown in the rejected stops tab instead. For example, if you have a stop that is set for 3-4pm, but you start a route at 2pm and all the planned stops are made before 3pm, then this stop will not be included in the route.

Potential resolutions if you are looking to plan for these stops:

  • Adjust the time window of the stop by either widening it or changing it so that the start and end time of the time window fall within the scheduled start and end time of the route.
  • Adjust the start time of the route so that it can better accommodate
  • Adjust and add longer stop durations to stops on routes that are too short if you are looking to coordinate stops for a certain time.

Once you do any of the above, add it to the route again, and re-optimize the route to find an optimized route that better includes this stop.

Alternatively, you can manually add back any rejected stop into a route and move it to a desired stop order without re-optimizing as well.


Supported Time Window Formats

EasyRoutes automatically detects time windows on Shopify orders with the following order attributes (case insensitive):

  • Delivery Time
  • Delivery-Time
  • Order Due Time
  • Selected Time
  • Supertime Timeslot

Generally, you can review our latest list of supported apps here. But any app that writes information in these formats will also show up in EasyRoutes.


Here is a Shopify app that you can use for adding attributes to draft or existing orders. This app also allows you to save attribute names as presets for future use. You can also consider using a workflow automation app like Mesa for automatically adding time windows into order attributes.


The following time formats are supported:

Format Examples
12-hour time with minutes

"8:15 AM - 2:45 PM"

"8:15 am - 2:45 pm"

"8:15 AM -"

"8:15 am -"

"- 2:45 PM"

"- 2:45 pm"

12-hour time without minutes

"8 AM - 2 PM"

"8 am - 2 pm"

"8 AM -"

"8 am -"

"- 2 PM"

"- 2 pm"

24-hour time

"8:15 - 14:45"

"8:15 -"

"- 14:45"


For Developers

For Shopify developers using the REST API, the Order should look like the following:

curl -X GET \
  https://your-development-store.myshopify.com/admin/api/2023-10/orders.json \
  -H 'Content-Type: application/json' \
  -H 'X-Shopify-Access-Token: {access_token}'
{
  "orders": [
    {
      "id": 1234567890,
      ...
      "note_attributes": [
        {
          "name": "Delivery Time",
          "value": "11:00 AM - 2:00 PM"
        }
      ],
      ...
    }
  ]
}

For Shopify developers using the GraphQL API, the Order should look like the following:

curl -X POST \
  https://your-development-store.myshopify.com/admin/api/2023-10/graphql.json \
  -H 'Content-Type: application/json' \
  -H 'X-Shopify-Access-Token: {access_token}' \
  -d '{"query": "query { orders(first: 10) { edges { node { id customAttributes { key value } } } } }"}'
{
  "data": {
    "orders": {
      "edges": [
        {
          "node": {
            "id": "gid://shopify/Order/1234567890",
            "customAttributes": [
              {
                "key": "Delivery Time",
                "value": "11:00 AM - 2:00 PM"
              }
            ]
          }
        }
      ]
    }
  }
}

EasyRoutes for Web

EasyRoutes can optimize delivery routes with time windows as long as the route has a scheduled start time and date and one or more stops have a time window associated with them.

Where possible, time windows are automatically parsed from imported CSV orders. To automatically create a route with time windows from orders:

  1. Set a scheduled start time and date using the Route scheduling option. This is required so we can calculate ETAs to ensure a stop is delivered within its delivery window.
  2. Select and add any orders that have time windows.
  3. Set any other necessary route options and click Create route. The route should be created to minimize overall driving time while meeting the time windows. If EasyRoutes is unable to meet the demands of the particular route (e.g., whether due to route duration or delivery windows) the stops will be rejected.

If your orders do not have time windows, you can manually add time windows to a route:

  1. Set a scheduled start time and date on the route. This is required so we can calculate ETAs to ensure a stop is delivered within its delivery window.
  2. Edit or add a stop and set a time window from the Additional options panel:

    To properly handle delivery routes that cross time zone boundaries (e.g., Chicago travelling towards Indianapolis), the time zone of the time window is based on the address of the stop.

  3. Save changes. You should now see a column of time windows in your local time zone. Stops that are in different time zones will be annotated as such.
  4. Re-optimize the route. The route should now minimize overall driving time while meeting the time windows. If EasyRoutes is unable to meet the demands of the particular route (e.g., whether due to route duration or delivery windows) the stops will be rejected.

Since ETAs are an estimate based on historical traffic patterns, EasyRoutes uses a bit of "slack" when optimizing routes with time windows so you may occasionally see ETAs that fall outside of the delivery window. If there is too much "slack" you can adjust the time window and re-optimize to get the desired result.


Handling Rejected Stops

Stops that cannot be delivered within the specified time window will be shown in the rejected stops tab instead. For example, if you have a stop that is set for 3-4pm, but you start a route at 2pm and all the planned stops are made before 3pm, then this stop will not be included in the route.

Potential resolutions if you are looking to plan for these stops:

  • Adjust the time window of the stop by either widening it or changing it so that the start and end time of the time window fall within the scheduled start and end time of the route.
  • Adjust the start time of the route so that it can better accommodate
  • Adjust and add longer stop durations to stops on routes that are too short if you are looking to coordinate stops for a certain time.

Once you do any of the above, add it to the route again, and re-optimize the route to find an optimized route that better includes this stop.

Alternatively, you can manually add back any rejected stop into a route and move it to a desired stop order without re-optimizing as well.

Did this answer your question? Thanks for the feedback There was a problem submitting your feedback. Please try again later.