Skip to content

Sales Reports & Analytics

Comprehensive sales analytics and reporting endpoints covering revenue analysis, customer insights, product performance, aging, and conversion funnels.

API Endpoints

MethodEndpointDescription
GET/api/sales/reports/summaryOverall sales summary
GET/api/sales/reports/by-productRevenue & profit per product
GET/api/sales/reports/by-customerRevenue & outstanding per customer
GET/api/sales/reports/by-salespersonRevenue per salesperson
GET/api/sales/reports/by-categoryRevenue per product category
GET/api/sales/reports/trendsTime-series invoice & return data
GET/api/sales/reports/overdue-invoicesOverdue invoices with aging buckets
GET/api/sales/reports/payment-collectionPayments by period & method
GET/api/sales/reports/conversion-funnelQuotation→Order→Invoice rates
GET/api/sales/reports/profit-by-productGross profit & margin per product

Common Query Parameters

Most report endpoints accept these filters:

ParameterTypeDescription
date_fromdateStart date filter (YYYY-MM-DD)
date_todateEnd date filter (must be ≥ date_from)
branch_idintegerFilter by branch

Summary Report

Returns aggregated totals for quotations, orders, invoices (posted), and returns (posted).

bash
curl -s -X GET "$API/sales/reports/summary?date_from=2026-01-01&date_to=2026-12-31" \
  -H "Authorization: Bearer $TOKEN"
dart
final res = await http.get(
  Uri.parse('$api/sales/reports/summary?date_from=2026-01-01&date_to=2026-12-31'),
  headers: {'Authorization': 'Bearer $token'},
);

Response:

json
{
  "data": {
    "quotations": { "count": 25, "value": 12500.000 },
    "orders": { "count": 18, "value": 9800.000 },
    "invoices": { "count": 15, "value": 8500.000 },
    "returns": { "count": 2, "value": 500.000 },
    "net_sales": 8000.000,
    "amount_collected": 6000.000,
    "amount_outstanding": 2500.000,
    "average_invoice_value": 566.667
  }
}

Sales by Product

Revenue, quantity sold, discounts, COGS, and gross profit per product from posted invoices.

ParameterTypeDescription
category_idintegerFilter by product category
sort_bystringgross_revenue, quantity_sold, gross_profit, net_revenue
limitintegerMax results (default 50, max 200)

Sales by Customer

Invoice count, gross revenue, outstanding balance, and last invoice date per customer.

ParameterTypeDescription
salesperson_idintegerFilter by salesperson
limitintegerMax results (default 50, max 200)

Time-series data grouped by day, week, or month. Returns invoice count, revenue, returns, and net per period.

ParameterTypeDescription
group_bystringday, week, month (default: month)

Overdue Invoices & Aging

Lists posted invoices with balance_due > 0 past their due date, with aging buckets.

ParameterTypeDescription
partner_idintegerFilter by customer
as_of_datedateCalculate aging as of date (default: today)

Aging Buckets: current, 1_30, 31_60, 61_90, 90_plus

Payment Collection

Payments received grouped by period, broken down by payment method.

ParameterTypeDescription
payment_methodstringcash, bank_transfer, check, credit_card
group_bystringday, month (default: month)

Conversion Funnel

Tracks quotation→order→invoice conversion rates.

ParameterTypeDescription
salesperson_idintegerFilter by salesperson

Response includes: quotations_created, converted_to_orders, conversion_rate_to_order, converted_to_invoices, conversion_rate_to_invoice

Profit by Product

Gross profit and margin percentage per product.

ParameterTypeDescription
category_idintegerFilter by product category
warehouse_idintegerFilter by warehouse
limitintegerMax results (default 50, max 200)

Permissions

PermissionDescription
sales.reports.viewAccess all report endpoints

All report endpoints require the sales.reports.view permission. Granted to owner and manager roles by default.

Moon ERP API Documentation