Best Sellers (Reports for Craft Commerce) icon

Best Sellers (Reports for Craft Commerce)

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

Essential sales insights and top-performing product data for Craft Commerce stores.

Commerce has no reports of its own. Best Sellers adds the reports merchants expect.

Reports

  • Dashboard: revenue, orders, AOV, repeat rate, discounts, customers, and abandoned carts for any date range, with a written summary comparing it to the previous period, the same period last year, and a 12-month average.
  • Orders: every completed order, filterable by payment status, shipping method, discount, and your own order fields, with a Date Shipped column.
  • Transactions: captured, refunded, and net amounts per gateway, filtered by transaction date and order date.
  • Products: units sold, item subtotal, and item sales net of discounts, by product or by variant, with a drill-down to the orders behind each row.
  • Customers: order count, total spent, AOV, and last purchase, for credentialed and guest customers.
  • Locations: where your orders ship, by country, state, and city, with the top products for each country or state.
  • Operations: store emails by order status, coupon usage, and backfill logs on one page.

Unit costs and profit

Optionally record what each item cost you in your own Money field on your variants and the plugin will use that to report cost, gross profit, and gross margin by product or variant. The dashboard adds gross profit and margin cards. Each cost is recorded on the order, and Fill Unit Costs adds costs to past orders.

Custom field filters

Optionally filter the Products and Orders reports by your own custom fields. Each order field you choose also shows as a column on the Orders report and in its CSV export.

Templating

Use your sales data in Twig to build best-seller listings, "most popular" sorting, and buy-again pages.

{# The 10 best-selling products of the last 30 days #}
{% set bestSellers = craft.products()
    .bestSellers('30 days ago')
    .orderBy('totalQtySold DESC')
    .limit(10)
    .all() %}

{% for product in bestSellers|filter(product => product.totalQtySold) %}
    {{ product.title }}: {{ product.totalQtySold }} sold
{% endfor %}

{# Units sold and net item sales for one variant #}
{{ craft.bestsellers.variantTotalSales(variant.id, '30 days ago') }}
{{ craft.bestsellers.variantTotalItemSalesNet(variant.id)|commerceCurrency }}

{# A logged-in customer's previous purchase #}
{% if currentUser %}
    {% set previousOrder = craft.bestsellers.previousPurchaseByUser(variant.id, currentUser) %}
    {% if previousOrder %}
        You bought this on {{ previousOrder.dateOrdered|date('M j, Y') }}
    {% endif %}
{% endif %}

Operational tools

  • Cart restore: share a link from the dashboard that puts a customer's abandoned cart back in their browser.
  • Bulk order PDFs: download invoices for many orders at once.
  • Backfill: processing existing order history from the console or the Utilities page.

Documentation

Full documentation is at fostercommerce.com.

Custom field filters

Filter the Products report by your variant fields and the Orders report by your order fields: relation fields, dropdowns, radio buttons, checkboxes, multi-selects, and lightswitches. Order fields also appear as columns and in the CSV export.

Templating

Build best-seller listings and buy-again pages in Twig.

{# The 10 best-selling products of the last 30 days #}
{% set bestSellers = craft.products()
    .bestSellers('30 days ago')
    .orderBy('totalQtySold DESC')
    .limit(10)
    .all() %}

{% for product in bestSellers|filter(product => product.totalQtySold) %}
    {{ product.title }}: {{ product.totalQtySold }} sold
{% endfor %}

{# Units sold and net item sales for one variant #}
{{ craft.bestsellers.variantTotalSales(variant.id, '30 days ago') }}
{{ craft.bestsellers.variantTotalItemSalesNet(variant.id)|commerceCurrency }}

{# A logged-in customer's previous purchase #}
{% if currentUser %}
    {% set previousOrder = craft.bestsellers.previousPurchaseByUser(variant.id, currentUser) %}
    {% if previousOrder %}
        You bought this on {{ previousOrder.dateOrdered|date('M j, Y') }}
    {% endif %}
{% endif %}

Operational tools

  • Cart restore: copy a link from the dashboard that restores a customer's abandoned cart on your storefront. A registered customer's cart restores only for that customer.
  • Bulk order PDFs: download invoices or packing slips for the orders you select, as a ZIP or one combined PDF.
  • Backfill: add your existing orders from the console or the Utilities page, with date ranges and a queue-based rebuild.

Documentation

Full documentation is at fostercommerce.com.

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.4.0
License
Craft
Compatibility
Craft 5
Last release
September 29, 2026
Activity (30 days)
0
Closed Issues
0
Open Issues
0
Merged PRs
0
Open PRs