Reporting & Analytics
Turn operational data into answers. Revenue trends, project profitability rankings, client margin analysis, pipeline revenue forecasts, and team utilization — all built from the same data you're already logging.
Overview
Reporting in ACOS is not a separate analytics tool you configure. It reads from the data you've already logged — time entries, invoices, deals, projects — and presents it in structured views that answer the questions a service company owner asks every month.
Access Reporting from the sidebar: Finance → Reports. The reports are organized as tabs: Revenue, Profitability, Pipeline, and Utilization.
Reporting is available on Growth and Scale plans. The raw data (time entries, invoices, project profitability) is always accessible in the individual modules — Reporting just aggregates it. Starter plan users can build manual reports by exporting data from each module.
Revenue Report
Shows your monthly revenue, cost, and gross profit as a bar chart. This is the financial health view of your business over time.
What it shows
- Monthly Revenue (green bar) — sum of billed_amount on billable time entries for each month
- Monthly Cost (red overlay) — sum of cost_amount on all time entries
- Gross Profit — revenue minus cost, shown in the tooltip
- Margin % — shown in the tooltip for each month
Using it
- Use the DateRangePicker above the chart to select a time period: This Month, Last Month, Last Quarter, This Year, or a custom range.
- Hover any bar to see the exact revenue, cost, gross profit, and margin % for that month.
- A summary row below the chart shows totals across the selected period.
- Filter by project or by client contact to see revenue from a specific engagement or relationship.
Data source
The Revenue Report reads from monthly ReportSnapshot records (created on the 1st of each month). For the current month, it reads live from the Project computed fields. This means historical data is fast (no recalculation), and current-month data is always up to date.
Profitability Report
Two views in one tab: by Project and by Client. Both answer the same question from different angles: where are you making money, and where are you losing it?
By Project
A sortable table showing all projects with their financial performance:
| Column | Notes |
|---|---|
| Project | Name and link to project detail |
| Client | Contact name |
| Revenue | Total billed amount from billable time entries |
| Cost | Total cost from all time entries |
| Gross Profit | Revenue minus Cost |
| Margin % | Color-coded: green >30%, amber 15–30%, red <15% |
| Hours Logged | Total hours on the project |
| Status | Active, Completed, etc. |
Default sort: Margin % ascending (worst-performing projects first). This is intentional — the problems need your attention more than the successes.
By Client
The same data aggregated at the contact level — all projects for each client combined. Shows which client relationships are profitable and which are not. A client might have one great project and two money-losing ones — the aggregate view reveals the true relationship profitability.
A client with margin below 15% across all their projects is a commercial relationship worth reviewing. It may mean your pricing is too low for that client, or that their projects tend to expand scope without additional billing.
Pipeline Forecast
A forward-looking view of expected revenue from your open CRM deals. Shows you what revenue is potentially coming in over the next 6 months — weighted by deal probability.
How weighted value is calculated
Deal: $20,000 value, 70% probability
Weighted value: $20,000 × 0.70 = $14,000
Deals are grouped by their expected_close_date month. Each bar in the chart shows:
- Dark green — high probability deals (>70%): most likely to close
- Amber — medium probability deals (40–70%): possible but uncertain
- Light gray — low probability deals (<40%): speculative pipeline
Why this matters
The pipeline forecast answers the question: "Do I have enough confirmed work to keep the team busy next quarter?" If your high-probability pipeline for the next 3 months is lower than your current monthly cost, you need to either close more deals or reduce capacity.
Pipeline forecast accuracy depends on keeping deal values, probabilities, and expected close dates up to date in your CRM. Stale deals with outdated close dates inflate the forecast. Review your CRM pipeline monthly and update these fields.
Utilization Report
Shows how your team's time is being spent — billable versus non-billable — and whether each person is being used efficiently.
The utilization chart
One horizontal bar per team member. Each bar has two segments:
- Green — billable hours logged in the selected period
- Amber — non-billable hours logged
Below each bar: hours billed / non-billable / utilization rate. Example: 118h billable / 24h non-billable / 73.8%
Utilization rate formula
Utilization Rate = (billable hours logged ÷ 160) × 100
Where 160 = 40h/week × 4 weeks = standard available hours per month
Default sort: utilization rate descending. Industry benchmarks for healthy service agencies: 65–80% utilization is sustainable long-term. Above 90% risks burnout. Below 50% means you're paying for capacity you're not monetizing.
Month selector
Use the month picker above the chart to view any historical month. The current month shows live data. Historical months read from cached time entry aggregates.
Date Range Picker
A shared component used across the Revenue and Utilization reports. Quick options:
- This Month — current calendar month, live data
- Last Month — previous calendar month
- Last Quarter — previous 3 calendar months
- This Year — January through current month
- Custom — select any start month and end month
For custom ranges, the start month must be before or equal to the end month. The maximum range is 24 months (longer ranges may load slowly as they read from more ReportSnapshot records).
Monthly Snapshots
On the 1st of each month, ACOS runs a background task that creates a ReportSnapshot record for the previous month. This snapshot captures: total revenue, total cost, gross profit, total billable hours, deals won, deals lost, and active project count.
Snapshots are what make historical reporting fast — instead of re-aggregating thousands of time entries every time you load a report, ACOS reads from the pre-calculated snapshot. The snapshot is immutable once created.
Roles & Access
| Report | Who can access |
|---|---|
| Revenue | Admin, Owner |
| Profitability (Projects) | Manager, Admin, Owner |
| Profitability (Clients) | Admin, Owner |
| Pipeline Forecast | Manager, Admin, Owner |
| Utilization | Manager, Admin, Owner |
Best Practices
- Run the Profitability by Project report at the end of each month. Sort by margin ascending. Any project below 15% should trigger an immediate investigation.
- Use the Pipeline Forecast to plan hiring and capacity. If your high-probability pipeline for the next quarter is twice your current capacity, it's time to hire.
- The Utilization report is most useful for identifying underutilized team members — not for policing hours. A person at 40% utilization may be working on valuable internal projects that aren't tracked in ACOS.
- Keep deal probabilities realistic in CRM. A pipeline full of 90% probability deals that are actually 50% probable will make the forecast misleadingly optimistic.
FAQ
The revenue numbers in Reporting don't match what I see in Finance → Invoices.
The Revenue Report counts billed_amount from time entries, not from invoices. If you have invoices with manually added line items that don't come from time entries, those amounts won't appear in the Revenue Report. The Finance → Invoices list shows invoice-level data; Reporting shows time-entry-level data. For paid invoices generated entirely from time entries, the numbers will match.
The current month data seems stale in the Revenue chart.
Current month data reads from Project computed fields, which are updated within seconds of each time entry being saved. If data appears stale, try refreshing the page. There is a 5-minute cache on report queries.
Can I export reports to Excel or PDF?
Export functionality is planned for a future phase. Currently, you can copy data from the tables manually. For the Utilization report specifically, you can see detailed time data in the time tracking module by filtering by user and date range.
Why is my team utilization showing 0% for some members?
Members with 0% utilization either have no time entries logged for that month, or all their entries are on projects where cost_rate = 0. Check the Time Tracking module for those team members to confirm whether hours were logged.