Project 05 / Demonstration build
Client document intake inside Google Workspace
Emailed client documents are filed in the right Drive folder, logged in a tracking sheet, and announced in Google Chat. A live report replaces the Friday status email.
Category: Google Workspace · Designed outcomes, not measured client results.
Who this is for
Tax and bookkeeping offices, small consultancies, and teams of 5 to 15 people that already run on Gmail, Drive, and Sheets.
The problem
Example client brief
“We are a small tax office. Client documents come in by email. Someone saves them to the right Drive folder, updates our tracking sheet, and at the end of the week writes a status email by hand. We already pay for Google Workspace. We do not want another subscription.”
- Client emails documents to the intake address
- Files land in the client's Drive folder, one tracker row each
- Team notified in Chat, weekly report built on its own
Designed outcome
Intake, filing, and the weekly report run on the Google Workspace the office already pays for.
What the workflow does
- A Gmail filter labels everything sent to the intake address. An Apps Script job checks that label every minute.
- The sender is matched to a client, first by exact address and then by business domain. Free-mail domains such as gmail.com never match by domain, so one Gmail client does not claim every Gmail sender.
- Each attachment is saved to that client's Drive folder and gets one row in the tracking sheet with its document type (W-2, 1099, bank statement, receipt, and so on). Signature logos are skipped. Each email is recorded by its message ID, so it is never filed twice.
- The client gets one reply listing what arrived. The team gets a Google Chat post.
- Setting a row to Assigned stamps the time and how long the document waited, and Chat tells the assignee.
- A Looker Studio report reads the same sheet: documents by week, days to assign, and what is waiting. A Friday summary email replaces the one written by hand.
Failure handling
By default, Apps Script emails a daily digest of failed runs. For an intake desk that is a day of documents going nowhere. Every entry point runs inside one error wrapper that sends an alert email and a Chat post, mutes repeats of the same error for an hour, and still marks the run as failed. Mail that could not be filed keeps its label, so nothing is lost while the problem is fixed.
Tests
The matching, classification, locked-PDF check, and summary math sit in a plain JavaScript file with no Google services, so they run under Node. The repo has 22 tests, including the real sample documents used in the recording.
Failure handling
When it breaks
An email arrives from an unknown sender.
The file goes to a holding folder and Chat asks someone to pick the client. Picking the client in the tracker moves the file to that client's folder.
An attachment is a password-protected PDF.
The file is saved and the row is marked needs attention. The client's acknowledgement asks for an unlocked copy, and the other attachments carry on.
Someone renames the tracker tab.
The run fails with a clear message. An alert email and a Chat post go out within a minute, and the waiting email is filed on the first run after the tab is fixed.