Sales reporting

How to find your busiest days and hours in WooCommerce

WooCommerce Analytics doesn't have a sales-by-day-of-week or sales-by-hour report. To find your busiest weekdays, export Analytics › Revenue by day for the last 8–12 weeks and average each weekday in a spreadsheet. For hours, set the date range to a single day and group the chart by hour, or query the Analytics tables with SQL.

Below: each method step by step, how to read the result honestly, and what the timing is useful for.

Busiest days of the week: the export method

The Revenue report can list sales one day per row. That's all you need.

  1. Go to Analytics › Revenue in WordPress admin.
  2. Set a custom date range covering the last 8–12 full weeks. Start on the first day of a week so each weekday appears the same number of times.
  3. Set the interval to day.
  4. Click Download to export the table as a CSV. Each row has the date, orders, net sales and the other Revenue columns.
  5. In your spreadsheet, add a column with the weekday for each date (in Google Sheets or Excel, =TEXT(A2,"dddd") returns the weekday name).
  6. Make a pivot table: weekday as rows, average of orders and net sales as values.

Use averages, not totals. If your range has nine Mondays and eight Sundays, totals will flatter Monday.

An example

Say you exported 12 weeks and got these averages:

Weekday Avg orders Avg net sales
Monday 9.2 $368
Tuesday 8.1 $331
Wednesday 7.6 $310
Thursday 7.9 $322
Friday 6.4 $259
Saturday 5.1 $214
Sunday 8.8 $371

This store's best days are Sunday and Monday, and Saturday is quietest. Sunday's orders are slightly fewer than Monday's but larger, so its net sales are higher. That's the kind of pattern worth acting on.

Sales by hour: one day at a time

When your date range is a single day (for example Yesterday), the Revenue and Orders reports let you set the interval to hour. The chart then shows orders or net sales for each hour of that day.

That's useful for checking one specific day, such as the day an email went out or a flash sale ran. It doesn't tell you your typical busy hours, because one day is too small a sample and Analytics can't add up hours across many days.

Sales by hour across weeks: SQL

To see your typical hourly pattern, you need the database. The Analytics table wp_wc_order_stats has one row per order with date_created in your store's local time, and works the same on HPOS and posts storage.

Orders and net sales by hour of day over 12 weeks:

SELECT HOUR(date_created) AS hour_of_day,
       COUNT(*) AS orders,
       ROUND(SUM(net_total), 2) AS net_sales
FROM wp_wc_order_stats
WHERE parent_id = 0
  AND date_created >= '2026-08-10' AND date_created < '2026-11-02'
  AND status NOT IN ('wc-pending', 'wc-failed', 'wc-cancelled')
GROUP BY hour_of_day
ORDER BY hour_of_day;

And by weekday and hour together, for a heat map:

SELECT DAYNAME(date_created) AS weekday,
       HOUR(date_created) AS hour_of_day,
       COUNT(*) AS orders
FROM wp_wc_order_stats
WHERE parent_id = 0
  AND date_created >= '2026-08-10' AND date_created < '2026-11-02'
  AND status NOT IN ('wc-pending', 'wc-failed', 'wc-cancelled')
GROUP BY WEEKDAY(date_created), weekday, hour_of_day
ORDER BY WEEKDAY(date_created), hour_of_day;

parent_id = 0 keeps orders and leaves out refunds. The status list is a stand-in for your Excluded statuses setting under Analytics › Settings, which these queries don't read, so edit it to match. Change wp_ if your table prefix differs. Paste the second result into a spreadsheet with weekdays as rows and hours as columns, and add color scaling.

Reading the results honestly

  • Check the time zone first. Analytics and date_created use the time zone in WordPress Settings › General. If it's set to UTC for a store in another time zone, every hour is shifted.
  • Order time is checkout time. It shows when people pay, not when they browse. Many shoppers look in the evening and buy the next morning.
  • Customers in other time zones. If you sell abroad, your busy hours blend several local evenings. The sales by country guide shows how to see where orders come from.
  • Exclude unusual weeks. A sale, a holiday or a mention in the press can dominate a small store's data. Leave those weeks out, or look at them separately.
  • Small numbers wobble. If you get five orders a day, the difference between 2pm and 3pm is noise. Look at broad blocks (morning, afternoon, evening) rather than single hours.

What to do with your busy times

  • Send emails just before your busy window, so they land when people are ready to buy. Then check the result: set the date range to the send day and group by hour.
  • Schedule promotions to start on your strongest day, not your weakest.
  • Plan maintenance, plugin updates and price changes for your quietest hours.
  • Staff customer service for the hours after your peak, when questions come in.

To measure whether a timed campaign worked, see how to measure a sale or campaign in WooCommerce, and to compare one week with another, how to compare two date ranges.

What Askshelf can and can't tell you

Askshelf can break orders and net sales down by weekday or by hour of the day for any date range, and compare with an earlier period. Weekday and hour figures count orders before refunds, so they can run slightly above the net sales in Analytics. It also gives a daily trend for any range, which is useful for checking a specific day or week, such as the day after an email.

Askshelfexample answer

Which weekdays and hours are busiest, based on the last 90 days?

Tuesday is your busiest weekday with 214 orders ($9,420), and Sunday the quietest with 118. By hour, orders peak at 8–9pm (96 orders) with a smaller bump at lunchtime.Sales breakdown by weekday, last 90 days · Sales breakdown by hour of day, last 90 days
An example on a demo store. In your store, the numbers come from your own orders.

For a single week, the sales summary shows the daily trend:

Askshelfexample answer

How did sales last week, when the newsletter went out on Tuesday, compare with the week before?

Net sales for 2–8 November were $2,690 from 64 orders, up 21% on the week before ($2,223 from 55 orders). The daily trend shows the jump on Tuesday and Wednesday, with $612 and $540, before settling back to a normal level.Sales summary, 2–8 November, compared with the previous period
An example on a demo store. In your store, the numbers come from your own orders.

The weekday and hour breakdowns do the averaging across every Tuesday or every evening for you. Times use your store's time zone.

Askshelf adds Analytics › Askshelf to WordPress admin and reads the same Analytics data. See AI sales reports for WooCommerce, and the WooCommerce sales reports guide for everything WooCommerce reports on sales.

Common questions

Does WooCommerce show sales by hour?

Only for one day at a time. When the date range is a single day, the Revenue and Orders reports can group the chart by hour. There's no report that adds up each hour across a week or a month.

What time zone are WooCommerce order times in?

Analytics uses the time zone set in WordPress under Settings › General. If it's set to UTC or the wrong city, every hour and day boundary will be off, so check it before analyzing busy times.

How many days of data do I need to find my busiest day?

Enough for each weekday to appear several times. Eight to twelve weeks is a sensible minimum for most small stores, and avoid ranges with a big sale or holiday in them, which can swamp a normal week.

See how Askshelf handles this: AI sales reports for WooCommerce