Case Study · Business Process Automation

Automating Weekly Finance Forecasting

Turning a recurring manual estimate into a rules-based business system

Business Process Automation · Systems Integration · Forecasting Logic · Operational Reporting

At a Glance

Organization
Sustainable Staffing Inc.
Role
Senior Business Technology Analyst
Business problem
Weekly client billing forecasts depended on repetitive manual reporting, estimation, spreadsheet calculations, and institutional knowledge.
Solution
An automated reporting pipeline, normalized database, rules-based forecasting engine, and internal web application.
Result
Reduced a recurring 60–90 minute multi-person forecasting process to approximately 10–15 minutes of exception review by one person, while ultimately eliminating the need for the recurring forecast meeting itself.

Start With the Process, Not the Application

At Sustainable Staffing, every Thursday we needed to forecast what the following week's client billing would look like.

The process sounded simple enough. We maintained a spreadsheet listing our clients and their Account Managers. Each Account Manager was expected to estimate the following week's billing for their accounts. Those estimates would then be reviewed against current payroll and billing information to understand what we expected from one week to the next.

In practice, producing those numbers required considerably more work than entering an estimate into a spreadsheet.

Someone had to determine who was currently working at each client, how many hours each employee was expected to work, whether their schedule differed from the standard shift, whether the client would be closed for a holiday or other reason, and whether an employee had reported time off that would reduce the expected hours.

The advance preparation frequently didn't happen. What was intended to be a quick 15-minute review became a 60- to 90-minute working meeting involving Branch Managers, our Director of Finance, and me while we assembled and calculated the forecast in real time.

There had to be a better way.

I didn't begin by building a web application.

The first step was understanding what people were actually doing to arrive at the forecast.

Zenople contained much of the information we needed, but producing a forecast still meant pulling reports, moving data into spreadsheets, comparing assignments and hours, and applying a collection of business rules that existed largely in the knowledge of the people doing the work.

I expanded the existing forecasting spreadsheet with additional worksheets and formulas that could take the Zenople reports and generate more of the numbers we needed automatically.

That spreadsheet became an important intermediate step. It allowed the calculation logic to become explicit before the process moved into a database-backed application.

Representative reconstruction · Synthetic data

Synthetic reconstruction of a multi-column weekly finance forecasting spreadsheet
Recreated from the surviving 2026 Finance Forecast workbook structure. The production workbook used weekly sheets, client mappings, Bill-by-Client source data, selection cells, and thousands of formulas to support the forecasting process.

Integrating a System Without an API

The obvious next step would normally have been an API integration.

That wasn't available to us.

Our Zenople environment was provided through another organization that supported multiple clients within the same system. A direct API connection could potentially expose data outside the Sustainable Staffing information we owned, making a conventional integration inappropriate.

But Zenople could deliver subscribed reports by email.

That became the integration boundary.

I configured the required reports to be delivered to a dedicated Google mailbox, used mailbox rules to identify and organize them, and used Google Apps Script to process the incoming files and hand them off for database import.

The important point is that the reporting/email mechanism became a deliberate systems-integration boundary when a conventional API path was not appropriate.

System architecture · Generalized workflow

Two data paths, one operational report

Forecast input path

Zenople scheduled reports
Gmail subscription / filter
Google Apps Script
Authenticated server handoff
Report importers
Structured operational data
Forecast Rules Engine
  • Active Assignments
  • Job Schedules
  • Shift Overrides
  • Client Closures
  • Unpaid Breaks
  • Bill Rates
  • Shift Differentials
  • Attendance Review
Generated Forecast

Actuals path

Bill By Client report
Automated ingestion
Invoice / actual billing data
Actual Billing

Final report layer

Generated Forecast
Manual Adjustment / Attendance Review
Actual Billing
Finance Forecast Report
The archived implementation confirms the forecast engine and actual-billing pipeline as separate data paths brought together in the final report.

Turning Business Knowledge Into Rules

Getting the data into a database was only part of the problem.

A useful forecast needed to understand what that data meant.

An active assignment didn't necessarily mean 40 billable hours next week. Employees worked different schedules. Some shifts included unpaid breaks. Assignments could begin or end during the forecast period. Clients could be closed for holidays or other reasons. Shift differentials could change billing rates. Hours beyond 40 needed to be calculated differently.

I progressively moved those rules out of people's heads and spreadsheets and into structured data and application logic.

The archived implementation directly confirms that the forecast calculation handled:

  • Assignment start/end date bounds
  • Sunday–Saturday forecast weeks
  • Scheduled workdays
  • Per-day shift overrides and inclusion modes
  • Full-day, early-close, and late-open client closures
  • Configured unpaid breaks
  • A default 30-minute break when no break configuration existed
  • Regular hours through 40
  • Overtime above 40 at 1.5×
  • Base bill rates
  • Positive shift-differential billing

This was no longer a spreadsheet with formulas. It was becoming a model of how the business actually operated.

Representative reconstruction · Synthetic data

Synthetic reconstruction of the client closure management interface
A focused operational tool allowed known client closures, early closes, and late openings to become structured forecast inputs rather than meeting-time exceptions someone had to remember.

Actuals and Forecasts From the Same Operational Picture

The application brought two related views together.

Actual billing could be derived from invoice data and associated with the appropriate client and billing department.

Forecast billing could be calculated from the employees actively assigned to those clients and the hours and rates they were expected to work.

That gave Finance a consistent way to compare what had happened with what we expected to happen next.

More importantly, the system could do the repetitive work before anyone sat down to review it.

The original process depended on people preparing estimates ahead of a meeting.

The new process generated the baseline forecast from the operational data itself.

Automating the Work That Can Be Automated

One piece remained manual.

Employee absence comments were already being ingested and parsed into structured information. The archived implementation confirms that recent absence-related comments could be associated with active assignments and surfaced as a client-level attendance-review indicator.

What the system did not yet do automatically was convert that absence information into the resulting hours and billing reduction applied to the client's forecast.

By the final implementation, I spent approximately 10–15 minutes on Fridays reviewing those attendance exceptions, calculating the missed hours against the applicable billing rate, and adjusting the affected client forecast.

Because the comments were largely structured, I had identified the remaining step: use the parsed attendance information to calculate the forecast adjustment automatically.

The manual exception had been isolated.

Instead of people manually constructing the entire forecast, one remaining category of information still required human interpretation.

The Timing Changed. So Did the Process.

There was another discovery during implementation.

The ATS information we had originally been working with on Thursday became more complete on Friday.

Under the old process, waiting until Friday wouldn't have helped much because there was still too much manual work required to assemble the forecast.

Automation changed that equation.

With ingestion, assignment processing, schedule calculations, closure handling, and forecast generation already being performed by the system, waiting for the more complete Friday data no longer created a significant workload.

Our Director of Finance could open the application on Friday and have the forecast information available directly.

The recurring meeting that had once consumed 60–90 minutes of several people's time was no longer necessary simply to produce the numbers.

Representative reconstruction · Synthetic data

Synthetic reconstruction of the Finance Forecast report
Reconstructed from the surviving Finance Forecast application logic using fictional clients, assignments, billing values, and attendance adjustments. No Sustainable Staffing production data is shown.

Beyond the Weekly Forecast

Once assignment, billing, and profitability information existed in a structured system, it became useful for more than the original weekly forecast.

The same underlying information could help expose accounts where existing contract economics deserved attention.

Rather than discovering a profitability problem after continuing under unfavorable terms, the broader finance modernization work could surface situations where a rate increase or renegotiation should be considered before proceeding.

That is one of the reasons I tend to approach automation as a systems problem rather than simply asking how to make an individual task faster.

The immediate request was to improve weekly forecasting.

The larger opportunity was to create a reliable operational picture of how assignments, schedules, billing, and profitability related to one another.

Before and After

Before

Account Managers manually estimated billing by client. Zenople reports had to be pulled and interpreted. Schedules, holidays, closures, and employee absences required manual consideration. When the advance work wasn't completed, Branch Managers inherited it. A meeting intended to validate the forecast became the place where the forecast was actually created, consuming 60–90 minutes of several people's time.

After

Subscribed reports were automatically ingested into structured data. Active assignments and schedules drove expected hours. Client closures, assignment dates, unpaid breaks, bill rates, shift differentials, and overtime rules were applied programmatically. Actual billing and forecast information were presented through an internal application. The remaining attendance review took approximately 10–15 minutes on Friday, and Finance could retrieve the resulting forecast without holding the recurring preparation meeting.

What This Work Demonstrates

Business Process Analysis

Understanding what people were actually doing rather than simply reproducing the existing spreadsheet.

Incremental Modernization

Using spreadsheet automation to establish and validate the business logic before moving the process into a database-backed application.

Systems Integration Under Constraints

Building a reliable ingestion workflow around subscribed reports when direct API access wasn't appropriate.

Data Modeling

Turning assignments, schedules, closures, billing relationships, and other operational concepts into structured information that could be reused.

Rules-Based Automation

Translating business knowledge about hours, rates, shifts, closures, and overtime into repeatable calculations.

Full-Stack Development

Designing the ingestion workflow, database logic, business rules, and web interface needed to turn disparate operational information into a usable business tool.

Operational Improvement

Reducing repetitive preparation and ultimately removing a recurring meeting whose primary purpose had been assembling information the system could provide automatically.

The Outcome

The goal wasn't to make the forecast meeting faster. It was to understand why the meeting took so long in the first place, automate the work that didn't require human judgment, and eventually remove the need for the meeting altogether.

Scroll to Top