Blog · Finance metrics and formulas · Accounting
Build an accounting firm cost analysis from engagement time, approved labor rates and billing exports. Calculate direct labor, allocate overhead and reconcile client contribution to the practice totals.
Accounting firm cost analysis assigns labor, direct expenses and overhead to engagements, then compares those costs with fees for the same work. Start with approved time records and cost rates rather than standard billing rates. Keep a direct-cost subtotal and an allocated-overhead subtotal so the partner reviewing a client can see what each result includes.
The aim is an engagement contribution view that reconciles to the practice's costs. It supports pricing and staffing discussions, while the practice KPI guide for tax and accounting firms covers realization, utilization and scope creep in more depth.
Use an engagement ID that connects the time export, expense records and billing export. Add a client ID and service-line code so you can group several engagements without changing the underlying rows.
| File | Fields needed | Check before combining |
|---|---|---|
| Approved time | Engagement ID, employee or role, date, hours | Duplicate entries, unapproved time and missing engagement IDs |
| Cost-rate register | Employee or role, effective dates, hourly cost | Every time record matches one valid rate |
| Direct expenses | Engagement ID, date, amount, expense ID | Expense is not also in overhead |
| Fee register | Engagement ID, period, net earned fees, credits | Revenue matches the work and reporting period |
| Overhead detail | Ledger account, period, amount, allocation pool | Pool exclusions and ledger tie-out |
Use the billing export to build the fee register, then reconcile any difference between invoicing and earned fees. An advance invoice or work completed but not yet billed needs an explicit timing adjustment. Cash receipts are a collection measure and do not replace fees for the work being costed.
This is job-level costing. OpenStax's job-order costing explanation describes tracing costs to individual jobs or services and specifically identifies accounting firms as users of that approach.
The example is one month at a US firm, with USD amounts. Approved hourly labor costs are $60 for staff and $100 for managers, including the employment costs specified in the firm's rate policy. Document the rate denominator and any paid nonchargeable time absorbed by it. Payroll taxes, benefits and nonchargeable time already absorbed in these rates must stay out of overhead.
Put this summary on a sheet named Labor, starting in row two. The detailed working file should retain the employee-level records and rate effective dates behind it.
| A: Engagement | B: Service | C: Staff hours | D: Staff cost/hour (USD) | E: Manager hours | F: Manager cost/hour (USD) | G: Total hours | H: Labor cost (USD) |
|---|---|---|---|---|---|---|---|
| Alpha | Tax | 30 | 60 | 10 | 100 | 40 | 2,800 |
| Beta | Bookkeeping | 50 | 60 | 5 | 100 | 55 | 3,500 |
| Gamma | Advisory | 20 | 60 | 20 | 100 | 40 | 3,200 |
| Total | 100 | 35 | 135 | 9,500 |
Enter these formulas in G2 and H2, respectively, and fill down:
=C2+E2
=C2*D2+E2*F2
The labor check is 100 staff hours × $60 plus 35 manager hours × $100 = $9,500. Reconcile the underlying cost-rate schedule to payroll costs or explain the bridge if the rates are budgeted, normalized or include imputed costs.
For a larger time export, calculate cost on each approved time row first. If Time has engagement IDs in A and calculated labor costs in E, summarize an engagement named in A2 with:
=SUMIFS(Time!$E$2:$E$1000,Time!$A$2:$A$1000,$A2)
Microsoft documents SUMIFS for summing entries that meet criteria. Match engagement IDs exactly and extend the ranges to the entire export. Covirage is not affiliated with Microsoft.
The month's allocable overhead excludes labor and direct expenses already assigned to engagements:
| Overhead pool component | Monthly cost (USD) |
|---|---|
| Administration | 1,800 |
| Shared software | 900 |
| Occupancy | 1,350 |
| Total allocable overhead | 4,050 |
For this example, the firm allocates that pool by recorded engagement hours. The rate is:
Overhead per engagement hour = 4,050 / 135 = 30.00 USD
This is a stated management allocation policy, not a claim that every hour causes the same cost. If tax processing and advisory work consume very different resources, separate pools may be more useful. OpenStax describes activity-based allocation as calculating a rate for each pool and applying it to the activities used.
Store the $30.00 rate in B2 of a sheet named Rates. Keep administration costs visible in that pool; do not add the same administration salary through both a loaded labor rate and overhead. If idle capacity is excluded from engagement allocations, show it separately in the practice reconciliation.
Create Results with these columns. The example's net earned fees and direct expenses are shown alongside the costs calculated above.
| A: Engagement | B: Net fees (USD) | C: Labor (USD) | D: Direct expenses (USD) | E: Hours | F: Overhead (USD) | G: Full cost (USD) | H: Contribution (USD) | I: Margin |
|---|---|---|---|---|---|---|---|---|
| Alpha | 6,500 | 2,800 | 400 | 40 | 1,200 | 4,400 | 2,100 | 32.3% |
| Beta | 6,000 | 3,500 | 200 | 55 | 1,650 | 5,350 | 650 | 10.8% |
| Gamma | 7,000 | 3,200 | 500 | 40 | 1,200 | 4,900 | 2,100 | 30.0% |
| Total | 19,500 | 9,500 | 1,100 | 135 | 4,050 | 14,650 | 4,850 | 24.9% |
Enter these formulas in F2, G2, H2 and I2, respectively, and fill down:
=E2*Rates!$B$2
=SUM(C2:D2)+F2
=B2-G2
=IF(B2<>0,H2/B2,NA())
Margins are rounded to one decimal place. Here, contribution means fees remaining after the defined direct costs and allocated overhead. It is not variable-cost contribution margin, and it is not net income if other practice costs remain outside the calculation.
Beta deserves review: its $6,000 of fees leave $650 after the specified costs. Check time coding, review effort and the engagement scope before changing its fee. Fee per client against the norm for its size provides a related pricing comparison; it does not replace this cost analysis.
Allocated overhead must equal the pool: $1,200 + $1,650 + $1,200 = $4,050. The full-cost bridge is $9,500 labor + $1,100 direct expenses + $4,050 overhead = $14,650. Fees less that cost give $19,500 − $14,650 = $4,850.
The total margin is $4,850 / $19,500 = 24.9%, rounded, rather than an average of engagement percentages. When grouping by client or service, sum fees and costs first and recalculate the ratio. Use accounting firm revenue analysis for revenue mix, and variance analysis when explaining changes from the prior period or budget.
Bring your time, approved cost-rate, fee and expense workbook. Covirage maps the columns, its tools compute and check engagement costs and contribution, and the external AI model explains the results with every figure traced to its rows. Create a free Covirage account, which takes about a minute, and bring a sample of your own data.
See Covirage for tax and accounting firms for the practice questions these files can answer.
Use approved labor cost rates to calculate engagement cost. Billing rates describe the fees the firm seeks to charge and belong in a separate revenue or realization analysis. Applying a billing rate to time and calling it labor cost confuses pricing with resource consumption.
Record partner time against the engagement and apply the firm's approved management cost rate. State whether that rate represents compensation expense or an imputed economic cost. Keep any imputed amount separate in the reconciliation because it may not exist in the general ledger.
The allocation alone cannot answer that. Check the accuracy of the engagement records, the costs that would actually disappear, capacity constraints and the wider client relationship. A fully allocated cost view helps identify a review, while a separate decision analysis assesses a change in service.