=== Vantage Dashboard for WooCommerce ===
Contributors: thewagenleitergroup
Tags: woocommerce, analytics, dashboard, profit, reports
Requires at least: 6.9
Tested up to: 7.1
Requires PHP: 8.1
Stable tag: 1.1.0
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html
WC requires at least: 10.9
WC tested up to: 11.1

Revenue, orders, pacing and conversion rate for your WooCommerce store, in one fast dashboard.

== Description ==

Vantage puts the numbers that matter for your store on one screen: revenue, orders, average order value, refunds and conversion rate, for today, this month and this year. It reads your WooCommerce orders directly, keeps a compact daily summary so the dashboard stays fast, and never needs an external service for the basics.

**What the free version includes**

* **Today's Pulse, Monthly Pacing and Annual Trajectory.** Each period shows where you are, where you are heading at the current pace, and how that compares with the same stretch of the previous period.
* **Historical Trends.** Revenue and orders over any range you choose, day by day or month by month.
* **Top Products and Top Categories**, with each one's share of revenue.
* **Payment Channels.** Which gateways your customers pay with, and what each brings in.
* **Top Coupons.** Which codes are used, and how much discount each one has given away.
* **Refund History.** What went back and what it cost you, day by day, month by month or year by year, with the average refund beside the total.
* **Conversion rate**, when you connect a visitor source: Google Analytics 4, Plausible or Jetpack Stats — whichever you already use. None is required; orders and revenue always come from WooCommerce itself.
* **PDF export** of the dashboard for any date range.
* The same widgets on the WordPress dashboard, if you prefer them there.

**Built for real stores**

Vantage keeps a compact daily summary table rather than querying your orders on every page load, so the dashboard stays fast on stores with hundreds of thousands of orders. It supports WooCommerce High-Performance Order Storage and legacy post storage, works with or without a persistent object cache, and lets you choose which order statuses count as revenue.

Available in English, German, Spanish and French.

== Vantage Dashboard Ultimate ==

A paid version with more reports is available at [vantageplugins.net](https://www.vantageplugins.net/vantagedashboard). It is not required — the free version works on its own, and nothing in it expires.

Ultimate adds:

* **True net profit.** Record a cost per product and variation; the cost is captured on each order as it is placed, so changing a price later does not rewrite past margins. Payment fees are taken from the order where your gateway records them. Long-Term Profitability and Profitability by Product build on this.
* **Advertising.** Daily spend from Google Ads, Meta Ads and TikTok Ads next to the revenue for the same day, with ROAS and profit after advertising.
* **Where your customers come from.** Traffic Sources, the Device Performance Matrix, High-Intent Search Terms, Top Performing Content, and Organic SEO Keywords from Google Search Console.
* **Customers and history.** Top Customers, Geographical Statistics, Long-Term History, and Refund Rate by Product — which product keeps coming back, measured against the store's own rate.
* **AI, with your own API key** (Anthropic, OpenAI, Google Gemini or DeepSeek): a written Daily Briefing, revenue projections, product bundle suggestions and a chat assistant that answers questions about your store.
* **The report that comes to you.** Yesterday's figures by email every morning, or last week's on a weekday you pick, with each number set against the period before.
* **Agency reports.** Share links for clients, optionally password-protected and set to expire.
* **Your own branding** on the dashboard, the PDF and shared reports, and default ranges and sizes for every widget.

== Installation ==

1. Install and activate WooCommerce.
2. Upload the plugin folder to `/wp-content/plugins/`, or install the zip via Plugins &rarr; Add New &rarr; Upload Plugin.
3. Activate Vantage Dashboard. The onboarding wizard opens automatically.
4. Go to Vantage &rarr; Settings &rarr; Data &amp; Sync and build the initial data cache.

The first sync reads your existing orders. You choose how far back to go — a shorter history syncs much faster, and you can widen it later.

== Screenshots ==

1. The dashboard: today, this month and this year, each with a pacing projection.
2. Sales and catalogue — top products and categories, with share of revenue.
3. Payment channels, and Ultimate's refund history.
4. Settings: data sources, order statuses, ad networks and the sync.
5. Ultimate: true net profit per product, after cost of goods.
6. Ultimate: traffic sources and conversion rate per channel.
7. Ultimate: ad spend against revenue, with ROAS.
8. Ultimate: the AI daily briefing and chat assistant.

== External services ==

Vantage connects to third-party services only for features you enable. No store data is sent anywhere unless you connect the corresponding service, and none of these connections is required: the dashboard's revenue, orders, pacing and profit figures are read from your own WooCommerce data. Services marked (Ultimate) are used only by Vantage Dashboard Ultimate; the free version does not contact them.

= Vantage Plugins OAuth bridge (vantageplugins.net) =
Used to connect Google Analytics (and, in Ultimate, Search Console, Google Ads, Meta Ads and TikTok Ads) without storing the OAuth app secrets in the plugin.

What is sent, and when: clicking a Connect button sends you to the bridge, which forwards you to the provider's sign-in page; the bridge then receives the one-time authorisation code from the provider and exchanges it for tokens, which it returns to your site. Afterwards, whenever the plugin needs a new access token (during a sync, or when loading your list of properties or ad accounts), it sends the stored refresh token to the bridge and receives a short-lived access token in return. No store, order or customer data is ever sent to the bridge.

Terms of service: https://www.vantageplugins.net/terms-of-service/ - Privacy policy: https://www.vantageplugins.net/privacy-policy/

= Google Analytics Data API =
Used when Google Analytics 4 is selected as the analytics engine. The plugin requests aggregated visitor and add-to-cart statistics for your property and chosen date ranges; Ultimate also requests traffic channel, device, search term and page view statistics.
Terms: https://policies.google.com/terms – Privacy: https://policies.google.com/privacy

= Google Search Console API (Ultimate) =
Used when a Search Console property is selected. The plugin requests the search queries, clicks and impressions for your site.
Terms: https://policies.google.com/terms – Privacy: https://policies.google.com/privacy

= Google Ads API (Ultimate) =
Used when Google Ads is connected. The plugin requests daily ad spend for your customer ID.
Terms: https://policies.google.com/terms – Privacy: https://policies.google.com/privacy

= Meta Marketing API (graph.facebook.com) (Ultimate) =
Used when Meta Ads is connected. The plugin requests daily ad spend for your ad account.
Terms: https://www.facebook.com/terms – Privacy: https://www.facebook.com/privacy/policy

= TikTok for Business API (Ultimate) =
Used when TikTok Ads is connected. The plugin requests daily ad spend for your advertiser account.
Terms: https://ads.tiktok.com/i18n/official/policy/terms – Privacy: https://www.tiktok.com/legal/privacy-policy

= Plausible Analytics =
Used when Plausible is selected as the analytics engine. The plugin requests aggregated visitor statistics for your domain; Ultimate also requests traffic source, search term and page statistics.
Terms: https://plausible.io/terms – Privacy: https://plausible.io/privacy

= Jetpack Stats (WordPress.com) =
Used when Jetpack Stats is selected as the analytics engine, through your existing Jetpack connection. The plugin requests visitor, referrer, search term and top post statistics.
Terms: https://wordpress.com/tos/ – Privacy: https://automattic.com/privacy/

= AI providers: Anthropic, OpenAI, Google Gemini, DeepSeek (Ultimate) =
Used only for AI features, and only with the provider you select and your own API key. Requests contain aggregated store metrics (for example revenue totals, order counts, conversion rate, top product and traffic source names), product names, prices and short descriptions for bundle suggestions, the customer name, order count, total spend and last order date for generated emails, and the question you type into the chat assistant together with the database query results needed to answer it. The plugin also lists the models your key can use.
Anthropic terms: https://www.anthropic.com/legal/commercial-terms – Privacy: https://www.anthropic.com/legal/privacy
OpenAI terms: https://openai.com/policies/terms-of-use – Privacy: https://openai.com/policies/privacy-policy
Google terms: https://ai.google.dev/gemini-api/terms – Privacy: https://policies.google.com/privacy
DeepSeek terms: https://cdn.deepseek.com/policies/en-US/deepseek-open-platform-terms-of-service.html – Privacy: https://cdn.deepseek.com/policies/en-US/deepseek-privacy-policy.html

= Vantage Plugins AI model list (vantageplugins.net) (Ultimate) =
When an AI provider is connected, the plugin downloads a small public list of recommended AI models from https://www.vantageplugins.net/bridges/ai-models.json about twice a day, so new models can be recommended without a plugin update. The request contains no store data.
Terms of service: https://www.vantageplugins.net/terms-of-service/ - Privacy policy: https://www.vantageplugins.net/privacy-policy/

= Freemius =
Freemius provides the opt-in shown after activation, and the licensing and updates for Vantage Dashboard Ultimate.

What is sent, and when: nothing until you agree. If you accept the opt-in, Freemius receives your site's address, the WordPress, PHP and plugin versions, and the email address of the account that accepted it, so that product and security notices can reach you; you can skip the opt-in, and the plugin works exactly the same. Deactivating the plugin offers an optional feedback form, which sends only what you type. In Ultimate, activating a licence sends the licence key and the site address, which is what makes updates for the paid version possible.
Terms: https://freemius.com/terms/ - Privacy policy: https://freemius.com/privacy/

== Frequently Asked Questions ==

= Do I need Google Analytics? =

No. Orders and revenue come from WooCommerce itself. Connecting an analytics source adds the visitor side, which is what makes conversion rate possible.

= Do I need an AI provider? =

No. The AI features are part of Ultimate, and even there they are off until you add your own API key. Requests are billed to your own provider account — Vantage does not resell AI usage.

= Does it work on a large store? =

Yes. Vantage keeps a compact daily summary table and reads that, rather than querying your orders on every page load. It has been tested against stores in the tens of thousands of orders on both High-Performance Order Storage and legacy post storage.

= Why don't the numbers match WooCommerce Analytics exactly? =

Vantage counts only the order statuses selected under Settings → Data & Sync → Included Order Statuses.

= What happens to my data when I delete the plugin? =

Settings, connections and the reporting cache are removed. Product costs recorded with Ultimate, and the cost snapshots stored on past orders, are kept unless you tick "Also remove cost of goods data when the plugin is deleted" under Settings → Tools & Status before deleting.

= Is any of the code minified or generated? =

Everything in `assets/js/` is written by hand and ships exactly as written; those files are the source. Four files are built: the Chart.js and jsPDF bundles in `assets/vendor/`, and the two compiled Tailwind stylesheets in `assets/css/`. Their sources ship with the plugin in `build-src/`, alongside `build-src/BUILD.md`, which names every library and version, the command that builds each file, and how to rebuild them with esbuild and the Tailwind CLI.

== Changelog ==

= 1.1.0 =

**New**

* **Customer Mix.** How much of a period's revenue came from people buying for the first time, how much from people who had bought before, and what share of the customers who ordered were returning. It reads WooCommerce's own record of whether an order was a customer's first, so the split agrees with WooCommerce Analytics. On the WordPress dashboard and the Vantage dashboard.
* **Refund History is now part of the free version**, on both dashboards. It reads nothing but WooCommerce's own figures, and deciding whether returns are a problem should not need a licence.
* **A CSV button on every table**, on both dashboards. It downloads exactly what is on screen — the range, the sort and the number of rows you chose.
* **Ultimate: Refund Rate by Product.** Of the units sold in a period, how many have come back since, with the store's own rate marked on every bar. Sort by rate to find the worst-behaving product, or by revenue lost to find the most expensive one; they are rarely the same item.
* **Ultimate: an emailed report.** Yesterday's figures every morning, or last week's on a weekday you pick, each number set against the period before. It is a WooCommerce email like any other: its wording is edited alongside your order emails, and its template can be copied into your theme.
* **Ultimate: Customer Mix** also shows how long repeat customers leave between orders, and charts the split period by period.
* **Ultimate: each ad network's own ROAS.** MER — all revenue over all ad spend — keeps the headline column; under each network's spend sits that network's own return, counting only revenue WooCommerce attributed to its paid traffic. A campaign that sells nothing can no longer hide behind a healthy blended figure.

**Improved**

* A widget or panel with nothing to show now says so in one line, instead of holding open an empty chart, an empty table and an insight still reading "Analyzing…". On a store where a service is not connected yet that was several hundred pixels of furniture around a single sentence, on card after card.
* A message telling you to connect something now carries the link that does it.
* Charts and tables work together: hovering a row swings its slice out of the ring, hovering a slice marks its row, the middle of each chart shows the period's total, and every row carries a bar in its slice's colour.
* Every widget says which dates it is showing when you pick a custom range.
* The plans and pricing screen is readable — all three plans fit side by side, each with its name in a coloured band and its price in the brand colour.
* Reactivating the plugin on a store that is already set up opens the dashboard instead of the setup wizard.
* Sync diagnostics now say what the settings screen is asking to be re-synced, and why.
* The dashboard is called "Vantage Dashboard" rather than "Vantage Command Center".

**Fixed**

* Saving the settings could wipe your API keys, ad network connections and branding. WordPress writes every registered setting on save, emptying any whose field was not on the page — and the paid panels are not drawn until a licence is confirmed, so a save in the minutes after an update cleared them silently. They are now left alone when the form does not carry them.
* Re-connecting Google Analytics could disconnect it an hour later. Google sends a refresh token the first time you give consent and not on later ones, and the empty value was being saved over the good one, leaving an access token that expired with nothing able to renew it.
* After an update that adds columns to the reporting table, the dashboard now says a rebuild is due. Before this the new figures showed as "—" indefinitely with nothing to explain why.
* Charts no longer fail in a browser that cached an older copy of the chart library.
* A chart could spill out of its box and sit invisibly over the text beside it.

= 1.0.3 =
* Sync diagnostics now name the service that failed to answer, when it failed and what it said, instead of only reporting that something could not be fetched.
* Ultimate: a failed call to Google, Meta or TikTok Ads records the reason it failed, so it can still be read after the fact.
* Ultimate: ad spend is no longer requested for days the networks will not answer for — Meta keeps 37 months and TikTok about two years. On a store with a longer history every sync ended by asking for "a quick update" that could never be satisfied.

= 1.0.2 =
* A fresh install now goes to the Freemius screen first and straight into the setup wizard afterwards, instead of leaving you on the plugins page with a notice.
* Other plugins' and themes' admin notices no longer print inside the setup wizard.
* Upgrading opens the pricing and checkout screen inside WordPress rather than a tab on our website.
* The pricing screen is styled to match the rest of the plugin.

= 1.0.1 =
* Housekeeping only; no change to how the plugin works.
* The answer about which files are built, and from what, now sits in the FAQ where it belongs.
* Fixed a comment in the main plugin file that was cut in half when the free version is generated.

= 1.0.0 =
* Initial release.

== Upgrade Notice ==

= 1.1.0 =
Adds Customer Mix and CSV download to every table, moves Refund History into the free version, and adds a refund rate per product and emailed reports in Ultimate. The reporting table gains three columns on first load, which happens automatically — the dashboard may take a moment the first time you open it afterwards.

= 1.0.3 =
Fixes a sync that kept asking to be re-run on stores with more than three years of history. Recommended for anyone using the ad spend features.

= 1.0.2 =
A smoother first run, and upgrading now happens inside WordPress. No change to your data or settings.

= 1.0.1 =
Housekeeping only. Nothing about the plugin's behaviour changes.

= 1.0.0 =
First release.
