
Financial Reporting Dashboard
- 114 installs
- 41 repo stars
- Updated March 13, 2026
- finsilabs/awesome-ecommerce-skills
Build P&L, balance sheet, and cash flow dashboards with drill-down by product, channel, and time period for management and investors.
About
Connects an accounting system to a dashboard layer and structures an ecommerce-specific P&L with drill-down from totals to SKU level. A developer uses it for monthly investor/board reporting or to replace spreadsheet financials.
- Consolidates P&L, balance sheet, and cash flow into one interactive view
- Drill-down from totals to channel, category, or SKU with GL reconciliation
Financial Reporting Dashboard by the numbers
- 114 all-time installs (skills.sh)
- Ranked #515 of 1,106 Finance & Trading skills by installs in the Skillselion catalog
- Data as of Aug 3, 2026 (Skillselion catalog sync)
npx skills add https://github.com/finsilabs/awesome-ecommerce-skills --skill financial-reporting-dashboardAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 114 |
|---|---|
| repo stars | ★ 41 |
| Last updated | March 13, 2026 |
| Repository | finsilabs/awesome-ecommerce-skills ↗ |
What it does
Build P&L, balance sheet, and cash flow dashboards with drill-down by product, channel, and time period for management and investors.
Files
Financial Reporting Dashboard
Overview
A financial reporting dashboard consolidates your three core financial statements — P&L (Income Statement), Balance Sheet, and Cash Flow — into an interactive view that management, investors, and board members can navigate without requesting custom reports from finance.
For ecommerce businesses, the most valuable feature is drill-down: the ability to see total gross margin and then click through to gross margin by product category, channel, or geography. This transforms static financials into an investigation tool.
This skill guides you through connecting your accounting system to a dashboard layer, structuring the ecommerce-specific P&L, and building drill-down reports using your platform data.
When to Use This Skill
- When your CFO or investors request monthly P&L and cash position reports
- When replacing manual spreadsheet-based financials with an automated dashboard
- When you need drill-down from consolidated totals to channel, product category, or SKU level
- When preparing for a board meeting, fundraise, or M&A process
- When your accounting system does not produce ecommerce-specific breakdowns
- When you need to reconcile revenue in your ecommerce platform against your GL
Core Instructions
Step 1: Connect your accounting system to your platform
A financial reporting dashboard must be built on your accounting system (QuickBooks, Xero, NetSuite), not on your ecommerce platform data alone. Platform revenue data diverges from GAAP financials due to recognition timing, payout lags, and adjustments.
Ecommerce platform → accounting system integrations:
| Ecommerce Platform | Accounting System | Recommended Integration |
|---|---|---|
| Shopify | QuickBooks Online | A2X (Shopify App Store) — reconciles Shopify payouts to period-matched QBO journal entries |
| Shopify | Xero | A2X for Xero — same; creates summary journal entries per payout period |
| Shopify | Both | Finaloop (Shopify App Store) — automated bookkeeping designed for Shopify; handles COGS, inventory, and financial statements |
| WooCommerce | QuickBooks Online | WooCommerce QuickBooks plugin (WooCommerce.com, $79/yr) |
| WooCommerce | Xero | WooCommerce Xero extension (WooCommerce.com, $79/yr) |
| BigCommerce | QuickBooks Online | Webgility (BigCommerce App Marketplace) |
| BigCommerce | Xero | Amaka (BigCommerce App Marketplace) |
A2X setup for Shopify (most common workflow): 1. Install A2X from the Shopify App Store 2. Connect A2X to your QuickBooks Online or Xero account 3. Map Shopify transaction types (sales, refunds, shipping, discounts, fees) to your chart of accounts 4. A2X creates one summary journal entry per Shopify payout period — matches what hits your bank account with the accounting entries
Step 2: Structure the ecommerce P&L
The ecommerce P&L has a specific structure that differs from a generic income statement:
INCOME STATEMENT
─────────────────────────────────────────
Gross Revenue (total selling price × units)
- Returns & Refunds
- Discounts & Promotions
= Net Revenue
- Cost of Goods Sold
Product cost (weighted average or FIFO)
Inbound freight & duties
= Gross Profit
Gross Margin % = Gross Profit / Net Revenue × 100
Operating Expenses
- Fulfillment & Shipping (outbound, 3PL)
- Marketing & Advertising (Meta, Google, TikTok, email)
- Technology & Platform fees (Shopify, apps, SaaS)
- Customer Service payroll
- G&A (salaries, rent, legal, accounting)
- Depreciation & Amortization
= Total Operating Expenses
= EBITDA (Net Revenue - COGS - OpEx + D&A)
= EBIT (Net Revenue - COGS - OpEx)
Interest income / expense
FX gains/losses
= EBT
Income tax
= Net IncomeSet up chart of accounts in QuickBooks / Xero with separate accounts for each ecommerce-specific line item. This is what enables channel and category drill-down later.
Step 3: Build the financial reporting dashboard
---
Shopify
Option A: QuickBooks Online Reporting (recommended starting point) 1. Connect Shopify to QuickBooks via A2X (see Step 1) 2. In QuickBooks, go to Reports → Profit and Loss — generate monthly P&L with comparison to prior period or budget 3. Go to Reports → Profit and Loss Detail for transaction-level drill-down 4. For board reporting: use QuickBooks Advanced which provides customizable dashboards and scheduled report emails
Option B: Xero Reporting 1. In Xero, go to Accounting → Reports → Profit and Loss — configure date range, comparison period, and layout 2. Enable Tracking Categories in Xero (Settings → Advanced → Tracking Categories) — create categories for "Channel" (DTC, Amazon, Wholesale) and "Department" to get drill-down in P&L 3. Tag transactions by channel as they are entered; Xero P&L then shows margin by channel automatically
Option C: Google Looker Studio (free, for visual dashboards) 1. Connect QuickBooks or Xero to Google Sheets using Coupler.io or G-Accon (exports accounting data to Google Sheets on a schedule) 2. Build a Looker Studio report on top of the Google Sheet data: add scorecards for Net Revenue, Gross Margin %, and EBITDA; add a time-series chart for monthly P&L trend; add a bar chart for expense category breakdown 3. Share the Looker Studio URL with board members — auto-refreshes when the Google Sheet updates
Option D: Finaloop (fully automated Shopify bookkeeping + reporting) 1. Install Finaloop from the Shopify App Store 2. Finaloop handles all bookkeeping automatically: categorizes Shopify transactions, tracks COGS, and generates GAAP-ready P&L, balance sheet, and cash flow statements 3. Financial statements are available in the Finaloop dashboard and exportable to PDF; integrates with QuickBooks and Xero
---
WooCommerce
1. Connect WooCommerce to your accounting system (QuickBooks via the WooCommerce QuickBooks plugin or Xero via the Xero extension) 2. Use your accounting system's reporting (QuickBooks Reports → P&L or Xero → Profit and Loss) as the primary financial reporting layer 3. For WooCommerce-specific drill-down by product/category, use Metorik alongside your accounting system — Metorik provides product-level and category-level revenue and margin, while your accounting system provides the GAAP-accurate totals 4. For a unified view: export monthly P&L from QuickBooks/Xero to Google Sheets and export Metorik channel/product breakdown to a second sheet; build a Looker Studio dashboard that combines both
---
BigCommerce
1. Connect BigCommerce to accounting via Webgility (QuickBooks) or Amaka (Xero) 2. Use your accounting system for financial statements 3. Glew.io (BigCommerce App Marketplace) provides ecommerce-specific financial analytics including gross margin by product, channel, and customer segment — complement your accounting system's P&L with Glew's operational margin view
---
Step 4: Add drill-down capabilities
The value of a financial reporting dashboard over static statements is drill-down. Set up these dimensions in your reporting:
By channel (DTC vs. Amazon vs. Wholesale):
- In QuickBooks: Use Classes (QuickBooks Advanced) to tag transactions by channel; run P&L by class
- In Xero: Use Tracking Categories as described above
- In Looker Studio: Add a channel filter that refreshes all charts based on the selected channel
By product category:
- Map your product categories to your accounting system's chart of accounts
- Alternatively, use your ecommerce platform's analytics (Shopify Analytics → Sales by product, Metorik → Products) for product-level margin, and your accounting system for company-level totals
By time period:
- All accounting systems support P&L comparison: current month vs. prior month, current month vs. prior year same month, YTD vs. prior YTD
- For trailing-12-month views and rolling period analysis, use Google Looker Studio or a BI tool connected to your data warehouse
Step 5: Automate report distribution
Replace email attachments with shared dashboard links:
Scheduled reports in QuickBooks: 1. Go to Reports → [Report Name] → Save and Schedule 2. Set schedule: monthly, on the 5th business day after month close 3. Add recipients (CFO, CEO, board members) — they receive the report by email with the latest numbers
Scheduled reports in Xero: 1. Xero does not natively schedule report emails, but you can use G-Accon for Xero (Google Sheets add-on) to automatically refresh Xero data in Sheets and trigger email distribution via Apps Script
Board reporting package: For board meetings, produce a standard 1-page financial summary with:
- Net Revenue vs. budget (current month and YTD)
- Gross Margin % vs. prior year
- EBITDA vs. budget
- Cash balance and runway
- Top 3 variance explanations
Most accounting systems can produce this as a PDF report; automate generation with QuickBooks Advanced or Xero's scheduled reporting.
Best Practices
- Build on your accounting system, not platform data — Shopify gross sales and accounting net revenue are not the same number; always report from your GL, not the ecommerce platform API
- Automate period closes — set up a monthly job that locks financial facts as of period close; do not allow historical periods to change; post adjusting entries in the current period
- Show percentage metrics alongside absolute values — gross margin % is more comparable across periods than gross margin dollars; always show both
- Define currency and rounding conventions — document whether numbers are in whole dollars or thousands; handle multi-currency consolidation explicitly
- Build a data freshness indicator — show the last-updated timestamp prominently on dashboards so users know whether they are looking at yesterday's close or real-time data
- Annotate unusual variances — allow the finance team to add text annotations to period variances explaining one-time items (inventory write-down, marketing launch surge)
Common Pitfalls
| Problem | Solution |
|---|---|
| Building on raw platform data instead of accounting system | Shopify/WooCommerce platform data includes pending orders, authorization holds, and pre-recognition amounts; always build financial reports from your GL |
| Mixing cash and accrual basis | If your accounting system is accrual-based, all financial statements must be accrual-based; do not add Stripe payout data (cash-basis) directly into an accrual P&L |
| Returns not handled in the correct period | A return processed in April for a March purchase should be a March adjustment; set up a returns reserve methodology in your accounting system |
| Dashboard loads from raw transaction tables (too slow) | Pre-aggregate monthly financial summaries; serve financial dashboards from aggregated tables, not live transaction queries |
| No variance commentary workflow | A dashboard showing a 30% margin decline is useless without explanation; build a Notion or Slack workflow where the finance team adds commentary on variances before sharing with leadership |
Related Skills
- @financial-analytics-dashboard
- @cash-flow-forecasting
- @ecommerce-budgeting-forecasting
- @revenue-recognition-accounting
- @profit-margin-analysis
{
"context": "Tests whether the agent builds a financial reporting layer that sources data from the GL (not raw platform APIs), avoids mixing cash and accrual basis, handles returns in the correct accounting period, locks closed periods, implements an audit trail, and builds a variance commentary workflow.",
"type": "weighted_checklist",
"checklist": [
{
"name": "GL as source of truth",
"max_score": 9,
"description": "The ETL or data pipeline design specifies reading financial figures from the accounting GL (QuickBooks, Xero, NetSuite, or equivalent), NOT directly from Shopify or platform APIs for final revenue numbers"
},
{
"name": "No cash+accrual mixing",
"max_score": 8,
"description": "The design explicitly separates or excludes cash-basis payment processor payouts (e.g., Stripe payouts) from accrual-basis GL figures — does NOT add them together in the same reporting line"
},
{
"name": "Returns in original period",
"max_score": 9,
"description": "Returns or refunds processed in a later month are attributed back to the original sale period (via an adjusting entry or contra-revenue accrual), not booked in the month the return was processed"
},
{
"name": "Returns reserve methodology",
"max_score": 7,
"description": "The design describes or implements a returns reserve (accrual) or equivalent contra-revenue mechanism, not just reversing the original transaction in the current period"
},
{
"name": "Period close lock",
"max_score": 8,
"description": "Closed/finalized periods are immutable — the implementation prevents or disallows updating historical period amounts once a period is marked as closed"
},
{
"name": "Adjusting entries in current period",
"max_score": 7,
"description": "Any corrections to closed periods are handled by posting adjusting journal entries in the current open period, not by modifying historical records"
},
{
"name": "Audit trail transaction panel",
"max_score": 9,
"description": "A transaction detail or audit trail panel is implemented (or designed) that allows a user to click on a line item amount and see the underlying source transactions"
},
{
"name": "Traceability to source",
"max_score": 8,
"description": "Each aggregated amount in the dashboard can be traced back to its source system and individual transactions (e.g., via source_system and transaction_id linkage)"
},
{
"name": "Commentary workflow",
"max_score": 9,
"description": "A variance commentary feature is implemented: finance team members can attach text notes or annotations to specific period variances or line items"
},
{
"name": "Commentary before sharing",
"max_score": 7,
"description": "The commentary workflow enforces or describes a review step — annotations are added before the dashboard is shared with leadership (e.g., a publish/approve step or status field)"
},
{
"name": "Variance annotation on data points",
"max_score": 7,
"description": "Annotations are associated with specific chart data points or P&L line items (not just a global dashboard comment field)"
},
{
"name": "Intercompany elimination mention",
"max_score": 6,
"description": "The design or documentation addresses intercompany elimination for multi-entity consolidation (even if described as out of scope with an explanation)"
},
{
"name": "Period close automation",
"max_score": 6,
"description": "A scheduled job, script, or trigger is described or implemented to automate the period snapshot/close process (not a purely manual step)"
}
]
}
Financial Data Integrity and Board Reporting Pipeline
Problem/Feature Description
Volta Supply Co. is a consumer goods ecommerce company preparing for a Series B fundraise. Their investors have requested audited-quality monthly financials going back 18 months. The current dashboard was built by a junior engineer who piped Shopify revenue figures and Stripe payout data directly into the reporting tables. Before a recent board meeting, the CFO discovered that the revenue numbers in the dashboard were ~$40,000 higher than the QuickBooks P&L for the same month, and that $18,000 in customer returns processed in April were incorrectly showing as an April expense rather than a Q1 reduction. The board also complained that the February P&L they reviewed last week had been silently updated, making it impossible to know what numbers they had actually approved.
For the upcoming fundraise, the finance team needs a redesigned data pipeline and reporting layer with proper data governance: clean sourcing from the accounting system, correct return attribution, immutable closed periods with an adjusting-entry workflow, a full audit trail so any number can be traced back to a source transaction, and a variance commentary feature so the finance team can annotate month-end variances before the dashboard is shared with the investment committee.
Output Specification
Produce the following:
1. pipeline_design.md — A design document describing:
- The correct data sourcing strategy (which systems should be the authoritative source for each type of financial data and why)
- How returns and refunds will be attributed to the correct accounting period
- The period close workflow (how periods are locked and how corrections are handled afterward)
- How multi-entity intercompany transactions will be handled at the consolidated level
2. schema_updates.sql — SQL statements that implement:
- Any schema changes needed to enforce the data governance rules identified in your design document
- The database structures needed to support the variance annotation feature
- Any linkage or reference tables needed for the audit and traceability requirements
3. etl_notes.py — A Python script or pseudo-code that demonstrates:
- The period close snapshot process (including how it could be automated)
- How adjusting entries for closed periods are handled
- The commentary workflow (creating and associating notes with specific line item variances)
{
"context": "Tests whether the agent correctly implements the KPI card definitions (with correct metrics, query patterns, and benchmarks), builds a dynamic drill-down query function, applies the recommended visualization types for each statement, and shows percentage metrics alongside absolute values with a data freshness indicator.",
"type": "weighted_checklist",
"checklist": [
{
"name": "Four KPI cards defined",
"max_score": 7,
"description": "Code or config defines exactly four headline KPIs: Net Revenue, Gross Margin %, EBITDA, and Cash Balance (all four present)"
},
{
"name": "Gross Margin % benchmark",
"max_score": 8,
"description": "The Gross Margin % KPI includes a benchmark or threshold value of 40.0 (percent) that triggers an alert or highlight when the metric falls below it"
},
{
"name": "Gross Margin % uses NULLIF",
"max_score": 7,
"description": "The Gross Margin % calculation uses NULLIF (or equivalent guard) on the net_revenue denominator to prevent division-by-zero errors"
},
{
"name": "Net Revenue and EBITDA use prior_period comparison",
"max_score": 7,
"description": "Net Revenue and EBITDA KPI definitions specify a prior period comparison (not just current value)"
},
{
"name": "Cash Balance from balance_sheet",
"max_score": 7,
"description": "The Cash Balance KPI query filters on statement_type = 'balance_sheet' (not 'pnl' or 'cash_flow')"
},
{
"name": "Dynamic drill-down function",
"max_score": 9,
"description": "A function or method is implemented that dynamically builds a P&L query based on optional filter parameters (channel, product_category, geography), adding WHERE clauses only when filters are provided"
},
{
"name": "P&L waterfall chart type",
"max_score": 7,
"description": "The P&L (income statement) overview is assigned a waterfall chart type, not a bar or line chart"
},
{
"name": "Revenue trend line chart",
"max_score": 6,
"description": "The revenue trend visualization is specified as a line chart (with prior year or bands), not a bar chart"
},
{
"name": "Expense breakdown donut or treemap",
"max_score": 6,
"description": "The operating expense breakdown uses a donut chart or treemap, not a pie chart or bar chart"
},
{
"name": "YTD vs budget uses bullet or gauge",
"max_score": 6,
"description": "The YTD vs. budget comparison uses a bullet chart or gauge visualization (not a simple bar or number card)"
},
{
"name": "Percentage alongside absolute values",
"max_score": 9,
"description": "Gross margin (and at least one other metric) is displayed with both the absolute dollar amount and the percentage, not just one of them"
},
{
"name": "Data freshness indicator",
"max_score": 8,
"description": "The dashboard output or component includes a last-updated timestamp field or data freshness indicator displayed alongside the metrics"
},
{
"name": "Drill-down dimensions covered",
"max_score": 7,
"description": "The drill-down implementation supports at least three of the five dimensions: channel, product_category, geography, customer_segment, time_period"
},
{
"name": "Cash flow bridge waterfall",
"max_score": 6,
"description": "The cash flow visualization is specified as a waterfall chart (cash flow bridge), not a line or bar chart"
}
]
}
Management Dashboard: Metrics and Drill-Down Module
Problem/Feature Description
Apex Brands operates an ecommerce business across three channels: a direct-to-consumer website, Amazon, and a wholesale B2B portal. Their CFO uses a static Google Sheet to track monthly KPIs and has asked for a real-time dashboard replacing it. The executive team wants a single "scorecard" view at the top of the dashboard showing the most important financial health metrics, with the ability to click through to channel-level or category-level breakdowns.
The engineering team has already built the financial_facts database table (with columns: fact_id, fiscal_period, statement_type, line_item, channel, product_category, geography, amount, version). They now need to build the Python module that defines the KPI queries and the drill-down query builder. The head of FP&A has also asked the team to document which chart type should be used for each financial view, as the frontend team will implement these in a separate sprint. Finally, the CFO noted that she sometimes opens the dashboard and can't tell if the numbers are from this morning or last week, so there should be a clear indication of data currency.
Output Specification
Produce a Python file dashboard_metrics.py that includes:
- A
FINANCIAL_KPISlist/structure defining the headline KPI cards with their SQL queries, formatting, and comparison configuration - A
build_pnl_query(filters: dict) -> strfunction that dynamically constructs a filtered P&L SQL query - A
VISUALIZATION_SPECdictionary or equivalent structure mapping each financial statement view to the recommended chart type and any relevant notes
Also produce a dashboard_spec.md that describes the data freshness strategy (how and where the last-updated timestamp will be displayed) and explains how percentage metrics will be presented alongside absolute values in the UI.
The implementation should work against a PostgreSQL database using the financial_facts schema described above.
{
"context": "Tests whether the agent correctly designs the unified financial data model for an ecommerce P&L dashboard, including the correct table schema, index strategy, P&L line item structure, period-over-period query pattern, and support for actuals vs. budget separation and fiscal calendar.",
"type": "weighted_checklist",
"checklist": [
{
"name": "financial_facts table defined",
"max_score": 4,
"description": "Schema includes a financial_facts (or equivalently-named unified fact) table rather than separate tables per statement type"
},
{
"name": "statement_type constraint",
"max_score": 8,
"description": "The statement_type column has a CHECK constraint restricting values to 'pnl', 'balance_sheet', and 'cash_flow' (or equivalent set)"
},
{
"name": "fiscal_period column format",
"max_score": 4,
"description": "The fiscal_period column stores period in VARCHAR format (e.g., '2026-03'), not as a raw DATE"
},
{
"name": "dimension columns present",
"max_score": 8,
"description": "The fact table includes channel, product_category, and geography as nullable dimension columns"
},
{
"name": "amount precision",
"max_score": 8,
"description": "The amount column uses NUMERIC(14,2) or equivalent fixed-precision type, not FLOAT or DECIMAL without precision"
},
{
"name": "Indexes on query dimensions",
"max_score": 8,
"description": "Indexes are created on at least fiscal_period, line_item, and channel columns"
},
{
"name": "P&L line items",
"max_score": 8,
"description": "The P&L structure includes: Net Revenue, COGS, Gross Profit, Gross Margin %, EBITDA, EBIT, and Net Income as distinct line items (in SQL, documentation, or code)"
},
{
"name": "Ecommerce-specific COGS sub-items",
"max_score": 5,
"description": "COGS breakdown includes product cost, inbound freight or shipping, and duties/tariffs (not just a single COGS line)"
},
{
"name": "Period-over-period query pattern",
"max_score": 8,
"description": "Period comparison query uses two CTEs (or subqueries) joined on line_item, computing both an absolute variance and a percentage variance"
},
{
"name": "NULL-safe variance_pct",
"max_score": 6,
"description": "Variance percentage calculation guards against division by zero (using NULLIF, CASE WHEN, or equivalent) and returns NULL rather than an error when prior period is zero"
},
{
"name": "version column for actuals/budget",
"max_score": 9,
"description": "The data model includes a 'version' column (or equivalent field) that distinguishes 'actuals' from 'budget' or 'forecast' variants"
},
{
"name": "Fiscal calendar dimension table",
"max_score": 9,
"description": "A separate fiscal calendar or dim_date table is defined (or described) rather than deriving fiscal periods from calendar dates inline"
},
{
"name": "Pre-aggregated summary table",
"max_score": 8,
"description": "A monthly or period-level summary/aggregate table is defined alongside the raw fact table to serve dashboard queries efficiently"
},
{
"name": "Chart of accounts mapping",
"max_score": 7,
"description": "A chart of accounts or account mapping table/structure is included to translate platform-specific categories to standard GL account codes"
}
]
}
Financial Reporting Database Design
Problem/Feature Description
Meridian Commerce is a Series A ecommerce company selling across four channels: its own website (Shopify), Amazon, a B2B wholesale portal, and a retail distributor network. The finance team currently produces monthly P&L reports by manually assembling CSV exports from Shopify, Amazon Seller Central, their 3PL (for fulfillment costs), Google/Meta ad platforms, and QuickBooks Online (their accounting GL). The process takes three days each month-end and is error-prone.
The engineering team has been asked to build a database-backed financial reporting layer that will power a management dashboard. The new system must support comparing any month against the prior month (and prior year same month), must allow the CFO to filter the P&L by channel or product category, and must eventually support budget vs. actuals reporting once the FP&A team completes their annual planning model. The company uses a standard calendar year but their largest retail customer recently asked about 4-4-5 fiscal calendar support for a joint business plan.
Output Specification
Produce a SQL schema file (schema.sql) containing:
- The core fact table(s) and any dimension or mapping tables needed for the reporting layer
- All indexes required for efficient dashboard queries
- A query (
pnl_comparison.sql) that returns a period-over-period P&L comparison for two fiscal periods passed as parameters, including both absolute and percentage variance columns - A brief
design_notes.mdexplaining the key design decisions, including how the schema handles budget vs. actuals data and how it accommodates non-standard fiscal calendars
The schema should cover all three financial statements (P&L, balance sheet, cash flow) but the comparison query only needs to cover the P&L.
{
"name": "finsi/financial-reporting-dashboard",
"version": "0.1.0",
"summary": "Build P&L, balance sheet, and cash flow dashboards for ecommerce with drill-down by product, channel, and time period for management and investor reporting",
"skills": {
"financial-reporting-dashboard": {
"path": "SKILL.md"
}
}
}