Plugin screenshot thumbnail 1/6
Plugin screenshot thumbnail 2/6
Plugin screenshot thumbnail 3/6
Plugin screenshot thumbnail 4/6
Plugin screenshot thumbnail 5/6
Plugin screenshot thumbnail 6/6

Best Sellers for Craft Commerce

Sales analytics and reporting built for Craft Commerce. Track revenue, orders, products, customers, discounts, and carts, all from your control panel.

Best Sellers gives you a clear picture of what's selling, who's buying, and how your store is performing over any date range.

Features

Dashboard

The dashboard provides a full overview of store performance for any date range, organized into focused sections with narrative summaries that explain what the numbers mean.

Overview

  • Revenue, Orders, AOV, and Repeat Rate KPI cards
  • Revenue/Orders/AOV toggle chart with previous period comparison
  • Narrative summary comparing against previous period, same period last year, and trailing 12-month average

Discounts & Order Composition

  • Total Discounts, Items Sold, and Avg Items/Order KPI cards
  • Discounted vs. Full-Price Orders breakdown (order count, revenue, AOV)
  • Most Used Discounts ranked table with order counts linking to filtered orders
  • Items Per Order histogram with clickable bars linking to filtered orders
  • Shipping Methods ranked table with order counts linking to filtered orders

Customers & Retention

  • Customers, New Customers, and Avg Customer LTV KPI cards
  • Top Customers by Revenue ranked table
  • Credentialed vs Guest comparison (customer count, LTV, avg orders, total revenue)
  • New vs Returning Customers trend chart

Product Performance

  • Unique Products Sold and Product Revenue KPI cards
  • Best Sellers top 10 ranked table with links to product edit pages

Carts

  • Cart abandonment rate, abandoned value, and age breakdown (4-24h, 1-7d, 7+d)
  • Highest-Value Abandoned Carts table with customer email, value, age, and cart restore links
  • Anonymous cart toggle for filtering

Global Controls

  • Date range picker with presets (Today, This Week, This Month, This Year, Past 7/30/90 Days, Past Year, All Time, custom)
  • Order Status filter that persists across all report pages via session
  • Past date ranges exclude today (complete days only)
  • Partial period comparisons are prorated for fair comparison

Orders

Browse and search every completed order with filtering.

  • Filters: Order Status, Payment Status, Shipping Method, Discount (discounted/full-price and specific discounts by ID), Items Per Order bucket
  • Sortable columns: order number, date, status, merchandise total, tax, discount, shipping, total paid, items sold, payment status
  • Page totals for all currency columns
  • Dashboard widgets link to pre-filtered views
  • CSV export with all applied filters

Products

See which products or variants are generating the most revenue, with breakdowns by product type.

  • Toggle between viewing products or variants
  • Filter by product type
  • Search by title, SKU, or product type
  • Drill down to every order containing a specific product
  • Sortable by units sold, order count, revenue, or average price
  • CSV export with all applied filters

Customers

Understand who your customers are, how much they spend, and how often they come back.

  • Filter by customer type (credentialed or guest)
  • Search by email
  • Sortable by email, status, order count, total spent, AOV, or last purchase date
  • Links to customer profiles in the control panel
  • CSV export with all applied filters

Operations

Operational overview to help you understand store configuration, email notifications, and coupon usage across all time.

  • Commerce Settings quick links (General Settings, Store Settings)
  • Order Status Emails table showing which emails fire on each status transition, with enabled/disabled indicators and recipient types
  • All Configured Emails table with name, subject, recipient, template path, and enabled status
  • Coupon Usage (All Time) ranked table with usage counts and total discount per code

Cart Restore

Built-in cart restoration for abandoned cart recovery.

  • Shareable restore URL
  • Restores the cart to the visitor's session and redirects to Commerce's loadCartRedirectUrl
  • Credentialed customer carts require the account owner to be logged in
  • Logged-in users cannot claim another user's cart
  • Logged-out users can restore inactive/guest carts
  • Styled login-required page when authentication is needed
  • Cart purge expiry info shown in the dashboard based on Commerce's purgeInactiveCartsDuration

Templating

Best Sellers provides Twig variables for displaying sales data on your front end.

Units Sold & Revenue

{# Units sold for a variant #}
{{ craft.bestsellers.variantTotalSales(variant.id) }}
{{ craft.bestsellers.variantTotalSales(variant.id, '30 days ago') }}
{{ craft.bestsellers.variantTotalSales(variant.id, '2024-01-01', '2024-12-31') }}

{# Revenue for a variant #}
{{ craft.bestsellers.variantTotalRevenue(variant.id)|commerceCurrency }}

{# Units sold for a product (all variants combined) #}
{{ craft.bestsellers.productTotalSales(product.id) }}

{# Revenue for a product #}
{{ craft.bestsellers.productTotalRevenue(product.id)|commerceCurrency }}

Previous Purchases

{# Check if the current user previously purchased a specific product #}
{% set previousOrder = craft.bestsellers.previousPurchaseByUser(variant.id, currentUser) %}
{% if previousOrder %}
    You purchased this on {{ previousOrder.dateOrdered|date('M j, Y') }}
    <a href="{{ previousOrder.cpEditUrl }}">Order #{{ previousOrder.reference }}</a>
{% endif %}

{# Get all variants previously purchased by a user #}
{% set purchasedVariants = craft.bestsellers.previouslyPurchasedProducts(currentUser) %}
{% if purchasedVariants %}
    <h3>Your Previously Purchased Products</h3>
    {% for variant in purchasedVariants.all() %}
        {{ variant.title }}
    {% endfor %}
{% endif %}

Best Sellers Queries

Best Sellers extends Craft's element queries so you can fetch products or variants sorted by sales:

{# Top 10 best-selling products in the last 30 days #}
{% set bestSellers = craft.commerce.products
    .bestSellers('30 days ago')
    .limit(10)
    .all() %}
use craft\commerce\elements\Product;

$bestSellers = Product::find()
    ->bestSellers('2024-01-01', '2024-12-31')
    ->limit(10)
    ->all();

foreach ($bestSellers as $product) {
    echo $product->title . ': ' . $product->totalQtySold;
}

Standard

Plus $97/year after one year.

Installation Instructions

To install this plugin, copy the command above to your terminal.

Reviews

This plugin doesn't have any reviews.

Active Installs
5
Version
1.1.2
License
Craft
Compatibility
Craft 5
Last release
March 23, 2026
Activity (30 days)
0
Closed Issues
0
Open Issues
10
Merged PRs
0
Open PRs