WooCommerce orders in a live spreadsheet
Add the Orders table to a sheet as a data source named orders and its 31 columns become names your formulas, pivot tables and charts use. Sheets reads it from your WooCommerce store each time the sheet opens or refreshes.
Formulas on this table
=data.orders.sum(total) Total total. Adds up the Total column over every row of Orders.
=data.orders.sum(total, status, A2) Total per status. With a status in A2, the total for that one. Fill it down next to a list of them.
=list.orders(status) Every status, once. Spills the distinct status values down the column: the row labels for the formula above.
=data.orders.sum(total, date, ">=2026-01-01") Since a date. Only rows whose Date is on or after 1 January 2026. Criteria such as ">=", "<" and "<>" work as in any spreadsheet.
=data.orders.count(date, status, "<>") Rows with a status. Counts the rows whose Status is not empty.
=data.orders.avg(items_subtotal) Average items subtotal. avg, min, max, count, countd (distinct) and first work the same way as sum.
Reports that use it
=data.orders.sum(net_total, counts_as_sale, TRUE) Net sales. Order totals after refunds, for every order that counts as a sale (processing, on hold, completed, refunded).
=data.orders.sum(net_total, month, A2, counts_as_sale, TRUE) Net sales per month. List the months with =list.orders(month) in column A and the net sales beside each one.
=data.orders.avg(total, counts_as_sale, TRUE) Average order. Average order total over the orders that count as sales.
=data.orders.sum(net_total, country, A2, counts_as_sale, TRUE) Sales by country. Net sales per billing country in column A.
=data.orders.count(id, status, A2) Orders per status. How many orders are pending payment, processing, on hold, completed and so on. Put a status in A2.
=data.orders.sum(discount, counts_as_sale, TRUE) Discounts given. What coupons and discounts cost on orders that count as sales.
Columns
| Column | In formulas | Type |
|---|---|---|
| Date | date | Date |
| Month | month | Text |
| Order number | order_number | Text |
| Status | status | Text |
| Counts as sale | counts_as_sale | Yes / no |
| Total | total | Number |
| Items subtotal | items_subtotal | Number |
| Discount | discount | Number |
| Shipping | shipping | Number |
| Tax | tax | Number |
| Refunded | refunded | Number |
| Net total | net_total | Number |
| Items | items | Whole number |
| Currency | currency | Text |
| Customer | customer | Text |
e_mail | Text | |
| Company | company | Text |
| Country | country | Text |
| State | state | Text |
| City | city | Text |
| Postcode | postcode | Text |
| Shipping country | shipping_country | Text |
| Guest | guest | Yes / no |
| Customer ID | customer_id | Text |
| Payment method | payment_method | Text |
| Shipping method | shipping_method | Text |
| Coupons | coupons | Text |
| Created via | created_via | Text |
| Paid on | paid_on | Date |
| Completed on | completed_on | Date |
| ID | id | Text |
Other sales tables
Your orders, live
Orders, refunds, products, customers and coupons become live tables inside your WordPress admin. Sales reports and dashboards stay current without exporting a CSV.