WooCommerce to Power BI, done for you

A WooCommerce Power BI Dashboard Built on Your Real Order Tables

Every result for this search sells you a pipe. We deliver the report at the end of it — a senior US-based engineer reads your WordPress order data, maps the statuses, refunds, coupons and variations correctly, and hands over a model you own. Prepaid hours, no contracts, most builds in 3–5 business days.

  • Senior-led (20+ yrs)
  • Hours never expire
  • 3–5 day turnaround
  • No project minimums
  • Full refund — first 4 hrs
Revenue Overview Revenue$4.2M Margin38% Orders12.4k Churn2.1% Monthly performance By segment 64%

Representative dashboard — sample data

The connector is the easy part

Getting the rows out is not the same as getting the numbers right

A WooCommerce Power BI dashboard lives or dies on how the store's order data is read. WooCommerce keeps an order across several WordPress tables — a header row, a pile of key-value meta, separate line-item rows for products, tax, shipping and coupons, and refunds as their own records. Extract that naively and revenue comes out wrong in a way nobody notices until finance checks it.

That is the part drivers and sync plugins leave to you. They move rows; the modeling, the status mapping and the definitions stay your problem. We do the other half: a senior US-based engineer reads your store, agrees what counts as a sale, builds the semantic model and the DAX, and hands you the finished report and the credentials.

Views we build from WooCommerce

  • Net sales after refunds
  • Order-status funnel
  • Variation-level SKU margin
  • Coupon & discount impact
  • Tax & shipping split
  • Repeat purchase rate

Try us risk-free for 4 hours

Buy a block of prepaid Flex hours and, if you're unhappy within the first 4 hours, we refund you in full — no questions asked. Hours are deducted only for work you've reviewed and approved, there's no project minimum, and your banked hours never expire.

Why store owners call us

What a done-for-you WooCommerce build gives you

You send the request; a senior engineer reads your store schema, models it, and gives you numbers your accountant will accept.

The key-value schema, flattened properly

Legacy stores hold order fields as rows in the post-meta table, one key per row. We pivot only the keys that matter, type them correctly, and keep the raw values available — instead of a query that silently drops an order when a meta key is missing.

HPOS or legacy, checked before we quote

High-Performance Order Storage moved orders out of the posts tables into dedicated order tables. Which one your store reads from changes the whole extraction, so we confirm it — including compatibility mode, where both exist and only one should be trusted.

Order statuses mapped on purpose

Processing, on-hold, completed, cancelled, failed, refunded — plus whatever statuses your plugins added. We enumerate what your store actually uses and agree which ones are revenue, which are pipeline, and which are noise.

Margin down to the variation

Variable products report at the parent unless you model the variation. We resolve variation IDs and their SKUs, fall back to the parent where a variation SKU is blank, and attach cost so size-and-colour level margin is a measure rather than an export.

Prepaid hours that never expire

Buy a block of Flex hours, get a scope and hours estimate before any work, and hours deduct only for approved builds. No project minimum, no retainer, full refund inside the first 4 hours if you're unhappy.

Where does a WooCommerce store keep its orders?

In more places than one query can reach. A legacy store keeps the order header in the WordPress posts table and everything else — totals, customer details, payment fields — as key-value rows in the post-meta table. Line items sit in their own WooCommerce tables, and refunds are separate order records attached to the original.

Stores on High-Performance Order Storage (HPOS) work differently: orders live in dedicated order tables with real columns, addresses in their own table, and operational fields separated out. HPOS is the default for new stores, existing stores can be migrated, and many run compatibility mode with both sets of tables kept in sync. That is three possible layouts behind the same admin screen, which is exactly why a generic connector cannot promise you a correct revenue number.

Where each part of a WooCommerce order lives, by storage mode
Part of the order Legacy post storage HPOS storage
Order header & status wp_posts row, type shop_order, status in post_status wp_wc_orders row with status, currency and totals as columns
Totals, tax & payment fields wp_postmeta keys such as _order_total and _order_tax Columns on wp_wc_orders plus wp_wc_order_operational_data
Billing & shipping address Further wp_postmeta keys, one row per field wp_wc_order_addresses, one row per address type
Line items (product, tax, shipping, coupon, fee) wp_woocommerce_order_items, split by order_item_type Unchanged — same order-items tables
Quantity, product & variation IDs, line totals wp_woocommerce_order_itemmeta, key-value again Unchanged — same item-meta table
Refunds Child shop_order_refund post linked to the parent order Child row in wp_wc_orders carrying the parent order ID
Custom plugin data wp_postmeta, mixed in with core keys wp_wc_orders_meta

Table prefixes are not always wp_, and multisite installs repeat the whole set per site. We read the prefix and the storage mode from your install rather than assuming, which is the first thing we check on a scoping call.

Why does a naive extract report the wrong revenue?

Because most of the traps are invisible in a row count. Four cause nearly every wrong number we are asked to fix: unmapped statuses, refunds counted twice or not at all, non-product line items added into product sales, and variable products collapsed to their parent. None of them throw an error; they just quietly change the total.

The line-item table is the sharpest edge. Product rows, tax rows, shipping rows, fee rows and coupon rows all live in the same table, distinguished only by a type column. Sum the amounts without filtering and shipping income and tax become product revenue. Ignore the coupon rows and your discounts vanish from the margin story. Add the fact that amounts are stored as text and need explicit typing, and you have a report that is close enough to look right and wrong enough to be dangerous.

Which order statuses count as a sale?

Your call, made once and written down. Most stores treat completed and processing orders as revenue, exclude pending, cancelled and failed, and handle refunds through the refund records rather than by removing the original order. Draft checkouts never count. We agree the mapping with you before building the measures.

WooCommerce prefixes its statuses with wc-, and plugins for subscriptions, wholesale, pre-orders or shipping add their own. If nobody enumerates them, a custom status simply falls outside your filter and the orders disappear from the dashboard. We list every status present in your data, show you the order and value counts behind each, and make the mapping a documented table in the model — so when the number is questioned, there is an answer rather than an argument.

How do you connect WooCommerce to Power BI?

There is no first-party WooCommerce connector in Power BI. Three routes work, and the right one depends on your hosting, your order volume, and whether your host will grant database access. We test the route during scoping and write the choice into your estimate before spending an hour of your block.

Three ways to get WooCommerce data into Power BI
Route How it works Best fit Watch out for
Read-only database account Power BI's MySQL connector against a scoped user, usually through the on-premises data gateway Stores with database access and real order history Host restrictions, gateway setup, and queries that must stay off the production load
WooCommerce REST API v3 Consumer key and secret against the store's wc/v3 endpoints, paged through Power Query Managed hosting where no database access is offered Page-size caps mean thousands of requests on a large store, so refreshes get slow
Staged copy Orders landed into a small SQL database or warehouse first, then modeled from there High-volume stores, multisite, or several stores reporting together One more moving part to maintain — worth it once API paging becomes the bottleneck

Microsoft documents both entry points we use. WordPress runs on MySQL, so the MySQL database connector (opens in new tab) is the cleanest path when your host allows a read-only account, and because the store is self-hosted it normally reaches Power BI through the on-premises data gateway (opens in new tab). Where no database access exists, the REST API is reached with the Web connector (opens in new tab), authenticated with a consumer key and secret over HTTPS. We are not affiliated with WooCommerce, Automattic or Microsoft; we use documented interfaces only. If a staged copy is the right answer, our SQL Server Power BI dashboard work covers that side, and the measure layer is described on our Power BI data modeling and DAX page.

What does a WooCommerce dashboard cost?

You buy prepaid Flex hours that never expire: Starter 20h at $125/hr ($2,500), Growth 40h at $115/hr ($4,600), or Power 80h at $100/hr ($8,000), with hourly work from $100/hr. A first orders-and-margin build typically fits inside one block. No project minimum, no retainer — refill only when you're ready.

Traditional Power BI firms charge $175–250/hr, set project minimums, want $10K+ to start, let unused hours expire, and don't begin for 4–6 weeks. Flex Support flips that: $100–125/hr, no minimums, banked hours that never expire, and a start this week. You buy a block, send your request, and we reply with a scope and hours estimate before any work — hours deduct only for approved builds. See how prepaid Flex hours work or our affordable Power BI consulting page for the full pricing comparison. Compared with a per-store monthly connector subscription, a one-off build you own has a fixed cost and no renewal.

How fast is delivery, and how does refresh work?

Most builds ship in 3–5 business days after you approve the scope estimate. We publish to your workspace, set scheduled refresh, and configure incremental refresh where the order history is long — so the dashboard updates itself instead of waiting on someone to rerun an export.

Microsoft's published data refresh limits (opens in new tab) allow up to eight scheduled refreshes per day on Power BI Pro, with more on higher capacities. Most stores settle on a morning refresh and one in the afternoon. We monitor it, fix the breakage when a plugin update or a host migration changes something underneath, and do that from your banked hours — the maintenance a driver licence leaves entirely to you.

Who is this build for?

Stores running WooCommerce on their own hosting, where reporting has outgrown the built-in analytics screens and a spreadsheet is doing the reconciliation. It also fits WordPress agencies whose clients keep asking for reporting the agency does not want to build, and finance leads who need store numbers that tie to the ledger.

If your storefront is hosted rather than self-hosted, the equivalent build is our Shopify Power BI sales dashboard — same delivery model, different data path. Selling on marketplaces too? Power BI for Amazon sellers covers per-ASIN profit and FBA inventory, and Power BI dashboards for ecommerce brands is the multi-channel version that blends store, marketplace and ad data into CAC, MER and contribution margin per SKU. Brands that also trade through physical stores should start with Power BI for retail, and if those stores ring sales on Square, our Square Power BI dashboard page sets out the API split, the gross-to-net sales unstacking and the payout-to-bank reconciliation for that side. To put traffic and conversion next to orders, see our GA4 Power BI marketing dashboard page; to tie net sales back to the books, QuickBooks Power BI dashboards. Contact is form-only — send your request and we'll reply with a scope estimate within one business day.

In a first WooCommerce build

  • Storage mode and table prefix confirmed
  • Order-status mapping, agreed with you
  • Net sales after refunds, coupons and tax
  • Variation-level SKU and margin reporting
  • Scheduled refresh, documented and monitored
3–5

business days, typical

Prepaid

hours, never expire

You

own everything

A first store build usually fits inside one Flex block, and hours deduct only for work you approve. See Flex pricing →

How it works

From WordPress tables to a number finance accepts

  1. 1

    Send your request

    Tell us your WooCommerce version, whether you can grant a read-only database user, and how you define net sales. We reply with a scope and hours estimate before any work begins — hours deduct only for builds you approve.

  2. 2

    We read & model

    A senior US-based engineer confirms your storage mode, extracts orders, items and refunds, maps every status, resolves variations and SKUs, and reconciles net sales against your books — most focused builds in 3–5 business days.

  3. 3

    Publish & maintain

    We publish to your workspace, set scheduled or incremental refresh through the gateway where needed, and hand over the report and credentials. You own everything, and we keep the refresh healthy from your banked hours.

Representative perspective

Our old report counted shipping as product revenue and never subtracted refunds. Nobody caught it for two quarters because the trend still looked plausible.
Finance lead, self-hosted ecommerce retailer

Representative perspective

We had paid for a sync tool for a year. The data was arriving fine; we still had nobody to turn it into a dashboard our client would actually open.
Account director, WordPress agency

Get the report, not another data pipe

Tell us how your store is hosted and how you define a sale. We'll scope the build and tell you the hours before any work begins — drawn from prepaid Flex hours that never expire, with no project minimums and no obligation.

FAQ

WooCommerce reporting questions, answered

No. Power BI ships no first-party WooCommerce connector, which is why the search results are full of paid drivers and sync plugins. We read your store through a read-only MySQL account, the WooCommerce REST API v3, or a small staged copy, then model the order data and hand you the finished report.

Yes, and we check which storage your store uses before quoting. High-Performance Order Storage keeps orders in the wc_orders tables instead of wp_posts and wp_postmeta, so the extraction is different. Stores running compatibility mode hold both, and we pick one as the source of truth rather than joining them.

That is your decision, and we write it down. Most stores count wc-completed and wc-processing as sales, exclude wc-pending, wc-cancelled and wc-failed, and treat wc-refunded through the refund records rather than by deleting the order. Plugins add custom statuses, so we enumerate what your store actually uses.

Yes. We model each source to a shared order, product, and date grain so net sales and units agree across channels, then attach ad spend at campaign or channel level. Net sales can be reconciled against your ledger so the dashboard and the books do not tell two different stories.

We configure scheduled refresh within Microsoft's documented Power BI limits, which allow up to eight refreshes per day on Pro. Self-hosted stores usually need the on-premises data gateway for database access. Incremental refresh keeps long order histories fast, and we maintain the schedule from your banked hours.

Book a free demo

Get senior Power BI help, on demand

Tell us the task. We scope it, you approve, and a senior consultant delivers — typically in 3–5 business days. Prepaid hours that never expire.

  • Prepaid hours from $100/hour — and they never expire
  • Senior-led delivery — 20+ years on the Microsoft platform
  • Typical 3–5 business day turnaround
  • Full refund if you’re unhappy in your first 4 hours

The fastest way to reach us is the form — tell us the task and we'll reply within one business day.

All fields are required.

We reply within one business day. No newsletters, no drip campaigns.

Book a Free Demo