Case Study · RPA · Invoice Processing
RPA Bot for Invoice & Utility Bill Processing
Two unattended Robomotion bots that turn PDF utility bills into a clean, queryable PostgreSQL database — no human in the loop, from portal login to cloud archive.
- 100%
- of bill data entry automated
- 2
- utility providers, one pipeline
- 0
- manual touches per billing cycle
Client context
A US-based operations team managed a large portfolio of utility accounts with two providers — PG&E (Pacific Gas & Electric) and SFWater (San Francisco Water). Every billing cycle, each account produced a PDF bill locked behind a login portal, and the business needed the numbers inside those PDFs — usage, charges, dates — in a database where they could actually be analyzed.
I delivered this engagement as a remote automation engineer working with the client's US agency, owning the solution end to end: process analysis, bot development, infrastructure, and monitoring.
The problem
The workflow was pure manual data entry. Staff logged in to each portal, navigated to every account, downloaded the PDF bills one by one, re-typed the key values into a database, and filed the documents away. Two portals with different layouts meant two teams doing the same tedious routine.
Beyond the wasted hours, the process had three structural failures: transcription errors crept into the data silently; nobody noticed a missed bill until weeks later; and the approach simply could not scale — every new batch of accounts meant proportionally more manual work.
The automation I built
I built two unattended RPA bots on Robomotion — one per provider — sharing a common architecture so the pattern is reusable for any additional utility. The workflow logic runs like this:
- Excel-driven configuration: the account list and credentials live in a spreadsheet the client already maintained, so onboarding a new account means adding a row — not editing the bot.
- Portal login and account iteration: the bot authenticates, handles session quirks, and walks every account in sequence.
- PDF download and OCR: each bill is downloaded and passed through Tesseract OCR, with layout-aware parsing tuned to each provider's bill format.
- Validation and database insert: extracted fields are type-checked and validated before being inserted into PostgreSQL — both providers feed one shared schema, so reporting queries see a single clean dataset.
- Dual cloud archival: every source PDF is uploaded to Google Drive and DigitalOcean Spaces, giving the client a redundant, searchable document archive.
- Observability: Discord notifications fire on every start, resume, and error. If a portal changes or a download fails, the team knows within seconds — and the bot resumes from where it stopped rather than restarting the batch.
Quantified outcome
The result: bill retrieval and invoice data entry are now 100% hands-off across both providers. The bots run on schedule, every billing cycle, without a human touching a portal, a PDF, or a database form.
- Manual data entry eliminated entirely — the hours previously spent downloading and re-typing bills every cycle went to zero.
- Transcription errors eliminated at the source: values go from OCR through validation into PostgreSQL without a keyboard in between.
- Error discovery went from weeks to seconds, thanks to real-time Discord alerting.
- Every bill is archived redundantly in two cloud locations, automatically.
- The architecture scales linearly: adding accounts is a config change, and adding a third utility provider reuses the same pipeline pattern.