How to Build an Approval Workflow in Google Sheets with Sheet Automation

Every organization has things that need approval before they move forward. Purchase orders. Time-off requests. Expense reports. Content drafts. Vendor registrations. New hire offers.

And in most organizations, those approvals happen over email. Someone sends a request. The approver sees it eventually. They reply “approved” — or forget entirely. The requester follows up. The approver digs through their inbox. Three days pass. The $200 purchase that could have been made Monday morning finally gets a green light on Thursday afternoon.

The data is usually already in a Google Sheet. The statuses are already tracked in columns. The problem isn’t the spreadsheet — it’s the gap between “request submitted” and “approver notified” and “requester informed of the outcome.”

Sheet Automation closes that gap. It watches your approval columns for changes and triggers the right email to the right person at the right time — no code, no external workflow platform, no enterprise software budget required.

This guide walks through how to build a complete approval workflow in Google Sheets, from simple single-approver setups to multi-tier approval chains with escalations and audit trails.


Why Google Sheets works for approvals (and where it falls short)

Google Sheets is an underrated approval tool. It already has most of what you need:

Shared access. Everyone on the team can view and edit. No login to a separate platform.

Data validation. You can restrict the Status column to a dropdown — “Pending,” “Approved,” “Rejected” — so approvers can only enter valid values.

Conditional formatting. Color-code rows by status: yellow for Pending, green for Approved, red for Rejected. Instant visual dashboard.

Version history. Every change is logged. You can always see who approved what and when.

Familiar interface. No training needed. Everyone already knows how to use a spreadsheet.

Where it falls short is the automation layer. Google Sheets doesn’t natively notify anyone when a status changes. It doesn’t email the approver when a new request arrives. It doesn’t tell the requester when their request is approved. It doesn’t escalate to a manager when a request sits untouched for three days.

Dedicated approval platforms like Zenphi and AppSheet solve this, but they come with learning curves, separate interfaces, and pricing models that are overkill for most teams. Apps Script can bridge the gap, but it requires coding, manual trigger setup, and ongoing maintenance.

Sheet Automation sits in the middle — powerful enough to handle real approval workflows, simple enough that anyone can set one up in 15 minutes, and affordable enough that it doesn’t require a budget approval of its own.


The building blocks of a sheet-based approval workflow

Every approval workflow in Sheet Automation is built from the same three components:

1. A trigger — What starts the process. Usually a new row (form submission), a column update (status change), or a due date (escalation timer).

2. A condition — What filters the action. “Only fire when Status equals Pending.” “Only fire when Amount is greater than $1,000.”

3. An action — What happens. Send an email, update a column, move a row, send a Slack message, call a webhook.

By combining multiple rules with different triggers and conditions, you can model workflows that would typically require dedicated BPM software — right inside your spreadsheet.


Workflow 1: Simple single-approver workflow

Use case: Purchase requests, supply orders, or any request that needs one person’s sign-off.

Set up your sheet

Create a sheet with these columns:

Request ID Requester Requester Email Item Amount Justification Status Approver Approver Email Decision Date

Set the Status column to a data validation dropdown: Pending, Approved, Rejected.

Requests can be entered manually or flow in from a Google Form.

Create the rules

Rule 1 — Notify the approver when a request is submitted:

  • Trigger: New row added (or Google Forms response)
  • Action 1: Update “Status” column to “Pending”
  • Action 2: Send email to “Approver Email”

Subject: Approval needed: {{Item}} — ${{Amount}}

Hi {{Approver}},

{{Requester}} has submitted a purchase request:

Item: {{Item}} Amount: ${{Amount}} Justification: {{Justification}}

To approve or reject, open the sheet and update the Status column for row {{Request ID}}.

Rule 2 — Notify the requester when approved:

  • Trigger: Column update on “Status”
  • Condition: “Status” equals “Approved”
  • Action 1: Send email to “Requester Email”
  • Action 2: Update “Decision Date” with today’s date

Subject: Your request has been approved: {{Item}}

Hi {{Requester}},

Your purchase request for {{Item}} (${{Amount}}) has been approved by {{Approver}}.

Proceed with the purchase.

Rule 3 — Notify the requester when rejected:

  • Trigger: Column update on “Status”
  • Condition: “Status” equals “Rejected”
  • Action 1: Send email to “Requester Email”
  • Action 2: Update “Decision Date” with today’s date

Subject: Your request was not approved: {{Item}}

Hi {{Requester}},

Unfortunately, your purchase request for {{Item}} (${{Amount}}) was not approved at this time.

If you have questions, please reach out to {{Approver}}.

That’s the complete workflow. Three rules, about 10 minutes to set up. The moment a request arrives, the approver gets an email. The moment they change the status, the requester gets notified. No one has to check the sheet manually. No one has to forward emails.


Workflow 2: Conditional routing by amount

Use case: Small purchases get auto-approved or go to a team lead. Large purchases go to a department head or finance.

Additional rules

Rule 4 — Route high-value requests to finance:

  • Trigger: New row added
  • Condition: “Amount” is greater than 5000
  • Action: Send email to finance-approvals@company.com (instead of the team lead)
  • Action 2: Update “Approver” column to “Finance Team”

Rule 5 — Auto-approve small purchases:

  • Trigger: New row added
  • Condition: “Amount” is less than 100
  • Action 1: Update “Status” to “Approved”
  • Action 2: Update “Decision Date” with today’s date
  • Action 3: Send email to requester confirming auto-approval

Subject: Auto-approved: {{Item}} — ${{Amount}}

Hi {{Requester}},

Your purchase request for {{Item}} (${{Amount}}) has been automatically approved as it falls within the pre-approved spending limit.

Why this matters: With Apps Script or external tools, conditional routing requires if/else logic and multiple code paths. With Sheet Automation, each rule is independent. You simply create separate rules with different conditions. Adding a new threshold or routing path means adding a new rule — no code to modify, no existing logic to break.


Workflow 3: Multi-tier approval chain

Use case: Requests that need sequential approvals — first from a manager, then from a director, then from finance.

Set up your sheet

Add columns for each approval stage:

Manager Status Manager Manager Email Director Status Director Director Email Final Status

Create the rules

Rule 1 — Notify manager on submission:

  • Trigger: New row added
  • Action: Set “Manager Status” to “Pending” + send email to “Manager Email”

Rule 2 — When manager approves, notify director:

  • Trigger: Column update on “Manager Status”
  • Condition: “Manager Status” equals “Approved”
  • Action: Set “Director Status” to “Pending” + send email to “Director Email”

Rule 3 — When manager rejects, notify requester:

  • Trigger: Column update on “Manager Status”
  • Condition: “Manager Status” equals “Rejected”
  • Action: Set “Final Status” to “Rejected” + email requester

Rule 4 — When director approves, finalize:

  • Trigger: Column update on “Director Status”
  • Condition: “Director Status” equals “Approved”
  • Action: Set “Final Status” to “Approved” + email requester + email finance for processing

Rule 5 — When director rejects, notify requester:

  • Trigger: Column update on “Director Status”
  • Condition: “Director Status” equals “Rejected”
  • Action: Set “Final Status” to “Rejected” + email requester

The chain can extend as far as you need — add VP approval, legal review, or any other stage. Each stage is a pair of rules (approved → advance to next stage; rejected → stop and notify). The pattern is always the same: watch a column for a status change, then trigger the next step.


Workflow 4: Escalation for stale approvals

Use case: Requests that sit in “Pending” for too long. The approver forgot, the email got buried, the request is stuck.

Add a date column

When a request arrives, use Sheet Automation to stamp a “Submitted Date” column with today’s date.

Create the escalation rules

Rule — Gentle reminder (2 days):

  • Trigger: Due date — 2 days after “Submitted Date”
  • Condition: “Status” equals “Pending”
  • Action: Send reminder email to approver

Subject: Reminder: Pending approval for {{Item}} — submitted 2 days ago

Hi {{Approver}},

The purchase request from {{Requester}} for {{Item}} (${{Amount}}) is still pending your review. It was submitted on {{Submitted Date}}.

Rule — Escalation to manager (5 days):

  • Trigger: Due date — 5 days after “Submitted Date”
  • Condition: “Status” equals “Pending”
  • Action: Send email to approver’s manager (CC the approver)

Subject: Escalation: Approval pending 5 days — {{Item}} from {{Requester}}

Hi {{Manager}},

The following request has been pending approval for 5 days and may need your attention:

Requester: {{Requester}} Item: {{Item}} Amount: ${{Amount}} Assigned approver: {{Approver}} Submitted: {{Submitted Date}}

Why this matters: Escalation is where most spreadsheet-based approval systems break down. Without automation, stale requests just sit there until someone notices. With Sheet Automation’s due date trigger, you can build a graduated escalation chain — 2-day reminder, 5-day escalation, 7-day alert to department head — that keeps the process moving even when people get busy.


Workflow 5: Leave request approval

Use case: Employees submit time-off requests. Their manager approves or rejects. HR is notified of all approved leave.

Sheet structure

Employee Employee Email Manager Manager Email Leave Type Start Date End Date Days Status Notes

Rules

Rule 1 — Notify manager:

  • Trigger: New row (or form response)
  • Action: Set Status to “Pending” + email manager

Rule 2 — On approval, notify employee + HR:

  • Trigger: Column update on “Status”
  • Condition: Status equals “Approved”
  • Action 1: Email employee with approval confirmation
  • Action 2: Email hr@company.com with the leave details
  • Action 3: (Optional) Call webhook to update the team calendar

Rule 3 — On rejection, notify employee:

  • Trigger: Column update on “Status”
  • Condition: Status equals “Rejected”
  • Action: Email employee with the reason (from “Notes” column)

Rule 4 — Conflict check reminder:

  • Trigger: New row
  • Condition: (Optional) Leave Type equals “Vacation” AND Days is greater than 5
  • Action: Send Slack message to #team-capacity for visibility before the manager decides

Workflow 6: Content approval

Use case: A marketing team drafts blog posts, social media content, or campaign copy. Each piece goes through an editor and a final sign-off before publishing.

Sheet structure

Content ID Title Author Author Email Draft Link Editor Editor Email Editor Status Final Approver Final Approver Email Final Status Publish Date

Rules

Rule 1 — Notify editor when draft is submitted:

  • Trigger: New row added
  • Action: Set “Editor Status” to “In Review” + email editor with the Draft Link

Rule 2 — When editor approves, send to final approver:

  • Trigger: Column update on “Editor Status”
  • Condition: Editor Status equals “Approved”
  • Action: Set “Final Status” to “Awaiting Sign-off” + email final approver

Rule 3 — When editor requests changes, notify author:

  • Trigger: Column update on “Editor Status”
  • Condition: Editor Status equals “Changes Requested”
  • Action: Email author with feedback from the “Notes” column

Rule 4 — When final approver signs off, notify author and schedule:

  • Trigger: Column update on “Final Status”
  • Condition: Final Status equals “Approved”
  • Action 1: Email author confirming publication
  • Action 2: Update “Publish Date” with the scheduled date

Building an audit trail

Every approval workflow needs accountability. Who approved what, and when? Sheet Automation makes this easy with two techniques:

Auto-stamp dates. Add an “Update column” action to every approval/rejection rule that writes today’s date into a “Decision Date” column. Now every decision has a timestamp.

Log changes to a separate sheet. Add a “Copy row” action that copies the entire row to a “Decisions Log” sheet whenever a status changes. This creates an append-only audit trail that can’t be altered by editing the main sheet.

Protect the Status column. Use Google Sheets’ built-in protection to limit who can edit the Status column. Only designated approvers should be able to change a request’s status. This prevents unauthorized approvals.


Approval workflows vs. dedicated platforms

You might be wondering: should I use Sheet Automation for this, or should I use a dedicated approval platform like Zenphi, AppSheet, or Kissflow?

Here’s a framework for deciding:

Use Sheet Automation when:

  • Your team already tracks requests in Google Sheets
  • The approval logic is straightforward (1–3 tiers, clear conditions)
  • You need it running in 15 minutes, not 15 days
  • Your budget is limited or you need to prove the concept before investing in a platform
  • The approvers are comfortable working in a spreadsheet

Use a dedicated platform when:

  • You need complex branching with dozens of possible paths
  • Compliance requirements demand formal audit trails with role-based access
  • You have hundreds of approvals per day across multiple departments
  • You need a dedicated mobile app for approvers
  • You’re integrating with ERP, HRIS, or finance systems at the enterprise level

For most small-to-mid-size teams, Sheet Automation covers the ground. It won’t replace an enterprise BPM suite, but it handles the approval workflows that 90% of teams actually need — purchase approvals, leave requests, content sign-offs, vendor onboarding — without the cost or complexity of a platform you’ll spend weeks configuring.


Get started

Pick the approval workflow that’s closest to your current process and build it:

  1. Install Sheet Automation from the Google Workspace Marketplace — free to start
  2. Set up your request sheet with Status columns and data validation dropdowns
  3. Create rules for each stage: submission → notification → approval/rejection → outcome notification
  4. Add escalation rules for requests that sit too long
  5. Test the full cycle with a sample request

Your spreadsheet already tracks the requests. Now let it run the approvals too.


Sheet Automation is a Google Sheets add-on trusted by 300,000+ users. It automates emails, row moves, data processing, reminders, and more — all without code. Learn more →

Comments

Add a Comment