Skip to content

Boxes Sold Report Documentation

Menu Location: Reports > Billing Reports > How Many Boxes Sold

Access Level: Manager / Administrator

Last Updated: 2026-03-01


Overview

The Boxes Sold Report shows how many subscription boxes of each type were sold during a specified date range. It provides either totals or month-by-month breakdowns to track box type popularity and trends over time.

Primary Functions:

  • Count boxes sold by box type/size
  • View totals or monthly breakdowns
  • Track box type popularity trends
  • Calculate average orders per customer for a year
  • Analyze subscription product performance

Page Layout

Header Section

  • Page Title: Billing Reports / How Many Boxes Sold by Type/Date Range
  • Statistics Panel: Shows 2019-specific metrics (orders and distinct customers)

Filter Controls

  • From/To Date Pickers: Define the analysis period
  • Breakdown Dropdown: Choose "Totals" or "By Month" view
  • Search Button: Generates report with current settings

Main Content Area

  • Summary Statistics: Annual order counts and customer averages
  • Results Table: Box types with counts (totals or monthly columns)
  • Start/End Date Display: Shows exact timestamps used for query

Report Data & Columns

Totals View

Column Description Source
Box Box type/size name From boxes table
Boxes Count of orders for this box type COUNT of cust_order records with this order_box_size

By Month View

Column Description Source
Box Box type/size name From boxes table
[Month Year] Count for that specific month One column per month in date range

Example: "Jan 2026", "Feb 2026", "Mar 2026" columns each showing box counts for that month


Breakdown Options

Totals View

What It Shows:

  • Single number per box type
  • Sum of all boxes sold in entire date range
  • Simple, easy-to-read format

When to Use:

  • Quick overview of box type distribution
  • Comparing total sales across products
  • Simple reporting needs
  • Year-end summaries

Table Format:

Box Name         | Boxes
Small Box        | 450
Medium Box       | 1,200
Large Box        | 850

By Month View

What It Shows:

  • Separate column for each month in date range
  • Monthly progression visible across row
  • Trends and seasonality patterns

When to Use:

  • Identifying seasonal trends
  • Tracking product launch performance
  • Spotting growth or decline patterns
  • Monthly performance comparisons

Table Format:

Box Name    | Jan 2026 | Feb 2026 | Mar 2026
Small Box   | 120      | 150      | 180
Medium Box  | 380      | 410      | 410
Large Box   | 270      | 280      | 300

Breakdown Logic:

  • Automatically splits date range into calendar months
  • Each cell shows count for orders delivered in that month
  • Handles partial months (e.g., if range starts mid-month)

Filters & Search Options

Date Range Selection

From Date:

  • Calendar picker with manual entry
  • Defaults to 3 weeks ago if not specified
  • Sets start of analysis period

To Date:

  • Calendar picker with manual entry
  • Defaults to current time if not specified
  • Automatically sets to 11:59:59pm of selected date
  • Sets end of analysis period

Date Handling:

  • Filters by deliver_on field (when order was/will be delivered)
  • Excludes cancelled orders (status != 5)
  • Inclusive of both start and end dates

Breakdown Selection

Totals:

  • Default option
  • Shows single aggregate count per box type
  • Simplest view

By Month:

  • Creates column for each calendar month in range
  • Automatically determines month boundaries
  • Handles date ranges spanning multiple months

Important Note:

  • Monthly breakdown uses full calendar months
  • If you select Jan 15 to Mar 20, you'll still see full Jan, Feb, Mar columns
  • Each month column sums orders from 1st to last day of that month

Archive Database Integration

Feature: Searches both current and archived databases

How It Works:

  • First pass: Queries current database
  • Second pass: Queries archive database (if USEARCHIVE enabled and not on app.kvl.pw)
  • Combines counts from both sources
  • Provides complete historical data

Benefit:

  • Can report on data from years ago
  • No need to worry about data archiving affecting reports
  • Seamless experience for users

Common Use Cases

Use Case 1: Year-End Box Type Analysis

Goal: Understand which box types were most popular last year

Steps:

  1. Set From date to January 1 of previous year
  2. Set To date to December 31 of previous year
  3. Select "Totals" breakdown
  4. Click "Search"
  5. Compare box counts in table
  6. Identify best and worst performing products

Example: If "Family Box" sold 5,000 units but "Single Box" sold 800 units, focus marketing and inventory on Family Box.

Tips:

  • Use full calendar year for clean comparison
  • Compare to prior year to identify trends
  • Consider profit margin, not just volume

Use Case 2: Track New Box Launch Performance

Goal: Monitor month-over-month growth of recently launched box type

Steps:

  1. Set From date to month before launch
  2. Set To date to current date
  3. Select "By Month" breakdown
  4. Click "Search"
  5. Find new box type in table
  6. Review progression across months
  7. Compare to expected adoption curve

Example: New "Keto Box" launched in January with 50 sales, grew to 200 in February, 350 in March - showing healthy 75%+ monthly growth.

Tips:

  • Look for consistent month-over-month growth
  • Compare to other new launches
  • Adjust marketing if growth stalls

Use Case 3: Seasonal Pattern Identification

Goal: Identify which box types have seasonal demand

Steps:

  1. Set From date to 2+ years ago
  2. Set To date to today
  3. Select "By Month" breakdown
  4. Click "Search"
  5. Look for repeating patterns in specific months
  6. Note which products spike in summer vs winter

Example: "Grilling Box" peaks every June-August, "Comfort Food Box" peaks November-February - plan inventory accordingly.

Tips:

  • Use multi-year data for reliable patterns
  • Account for marketing campaigns that might skew data
  • Plan promotions around seasonal low periods

Use Case 4: Monthly Performance Targets

Goal: Set realistic monthly sales targets per box type

Steps:

  1. Set From date to 12 months ago
  2. Set To date to current month
  3. Select "By Month" breakdown
  4. Click "Search"
  5. Calculate average monthly sales per box type
  6. Add growth percentage for target
  7. Use for next month's goals

Example: "Medium Box" averaged 400/month last year. Target 10% growth = 440 boxes for next month.

Tips:

  • Account for growth trends when setting targets
  • Adjust for known seasonal patterns
  • Review targets quarterly

Use Case 5: Product Discontinuation Decision

Goal: Determine if underperforming box type should be discontinued

Steps:

  1. Set date range to last 6 months
  2. Select "By Month" breakdown
  3. Click "Search"
  4. Identify box types with declining or low counts
  5. Calculate profitability per box type
  6. Review customer feedback for low performers
  7. Make data-driven decision

Example: "Trial Box" showing 10, 8, 5, 4, 3, 2 sales across 6 months with negative profit - consider discontinuation.

Tips:

  • Don't decide on volume alone - check profit margins
  • Consider strategic value (customer acquisition)
  • Review customer retention rates per box type
  • Survey customers before discontinuing

Troubleshooting

Counts Don't Match Order System

Symptoms: Box counts in report don't align with other reports or manual counts

Check:

  1. Verify date range matches other report exactly
  2. Confirm both reports filter cancelled orders consistently
  3. Check if other report uses different date field (created vs delivered)
  4. Verify box type names match between systems

Solutions:

  1. Use deliver_on date range to match this report
  2. Exclude cancelled orders (status 5) in comparison reports
  3. Check order_box_size field directly in database
  4. Run report with wider date range to test

Common Causes:

  • Different date field filtering (created, updated, delivered)
  • Including vs excluding cancelled orders
  • Archive data not included in other reports

Monthly Columns Show Unexpected Months

Symptoms: Table has months outside your selected date range

Check:

  1. Review "start:" and "end:" timestamps below filter form
  2. Note that monthly breakdown uses full calendar months
  3. Verify date range selection was saved

Solutions:

  1. This is expected behavior for monthly breakdown
  2. Selecting Jan 15 to Mar 20 will show full Jan, Feb, Mar
  3. Use "Totals" view if you need exact date range

If Problem Persists: Contact support if months outside even full calendar month range appear.

Box Type Missing From Report

Symptoms: Known box type doesn't appear in table

Check:

  1. Verify box type exists in boxes table
  2. Check if any orders exist for this box type in date range
  3. Confirm orders aren't all cancelled (status 5)
  4. Check order_box_size field in order records

Solutions:

  1. Expand date range to when box was active
  2. Verify box exists in Settings > Boxes configuration
  3. Check if box was renamed or discontinued
  4. Query database directly to verify orders exist

  • Boxes Settings (settings-boxes.php) - Configure box types and sizes
  • Average Spend Report (average-spend-per-box-per-box-type-report.php) - Analyze add-on spending by box type
  • Order Reports (order-reports.php) - General order analysis and trends
  • Customer Orders (customer-orders.php) - Individual customer order lists

Typical Workflow:

  1. Boxes Sold Report → Identify popular box → Average Spend Report → Analyze profitability
  2. Boxes Sold Report → Spot declining box → Customer feedback → Consider discontinuation
  3. Monthly performance review → Boxes Sold Report → Set next month targets

Permissions & Access

Required Access Level: View access (implied from code - no explicit permission check)

Access Level Capabilities:

  • Customer Service: View box sales data
  • Manager: Analyze product performance and trends
  • Administrator: Full access to all date ranges and data
  • Kiva Admin: All features plus database access

Best Practices

Regular Reporting

  1. Run monthly reports first week of each month
  2. Compare to same month prior year
  3. Track year-over-year growth per box type
  4. Document seasonal patterns

Data Analysis

  1. Use "By Month" for trend analysis
  2. Use "Totals" for quick summaries
  3. Compare to revenue reports for profitability
  4. Cross-reference with customer retention by box type

Product Planning

  1. Discontinue boxes with sustained <50/month
  2. Promote boxes showing growth trends
  3. Launch new boxes in historically strong months
  4. Test seasonal boxes before full rollout

Things to Avoid

  • ❌ Don't make decisions on single month's data
  • ❌ Don't ignore small boxes that have high profit margins
  • ❌ Don't compare without accounting for seasonal patterns
  • ❌ Don't forget to check both current and archived data

Quick Reference Card

Task Action/Location
View last year totals Set full year dates, Totals breakdown
Track monthly trends Select "By Month" breakdown
Compare box types Use Totals view, note counts
Check seasonal patterns Multi-year range, By Month view
Find best seller Totals view, highest count
Track new product launch Set launch date forward, By Month
Calculate monthly average By Month view, manual averaging
See exact query dates Check "start:" and "end:" display
Analyze discontinuation 6 month range, By Month, look for decline
Set monthly targets Prior 12 months, calculate averages

FAQs

Why does the report show 2019 statistics at the top?

These are hardcoded examples showing how to calculate orders per customer metrics. They specifically query 2019 data as a demonstration. They don't affect your actual report results.

Can I export this data to Excel?

The page doesn't have a built-in export button. Use your browser's copy function to select the table and paste into Excel, or print to PDF.

Why do monthly breakdown columns start from first of month even if my date range starts mid-month?

The monthly breakdown feature uses full calendar months to ensure clean month-over-month comparisons. This is intentional behavior for better trend analysis.

What if a box type was renamed - will it show separate entries?

Yes, the report groups by the current box name in the boxes table. If the box was renamed in database, it will show under the new name. Historical orders link by box ID, not name.

How does the archive database search work?

If enabled, the system automatically queries both the current database and the archive database, then combines the counts. This is transparent to you - just run the report normally.


Change Log

2026-03-01

  • Initial documentation created
  • All sections completed based on how-many-boxes.php code review
  • Documented Totals vs By Month breakdown
  • Added archive database integration details
  • Included hardcoded 2019 statistics explanation

End of Documentation

For additional help, contact your system administrator or Kiva Logic support.