Google Sheets + Gmail: filing deadlines you never miss
Deadline tracking sounds simple until you’re juggling 10 to 50 Companies House filings and one missed date turns into an expensive, avoidable problem.
Practice owners feel it when penalties land. Accounts managers feel it at 4:55 PM. And ops folks cleaning up “who confirmed what” live in the spreadsheet forever. This Sheets Gmail deadlines automation keeps the dates current and pushes a daily summary you can actually act on.
You’ll see how the workflow pulls live due dates, sends a color-coded Gmail report, and records one-click Yes/No confirmations back into Google Sheets with timestamps.
How This Automation Works
The full n8n workflow, from trigger to final output:
n8n Workflow Template: Google Sheets + Gmail: filing deadlines you never miss
flowchart LR
subgraph sg0["Schedule Flow"]
direction LR
n1@{ icon: "mdi:database", form: "rounded", label: "Read Company Database", pos: "b", h: 48 }
n2["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Build Interactive Email"]
n6@{ icon: "mdi:play-circle", form: "rounded", label: "Schedule Trigger1", pos: "b", h: 48 }
n7@{ icon: "mdi:message-outline", form: "rounded", label: "Send via Gmail1", pos: "b", h: 48 }
n8["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Get Company Data"]
n9@{ icon: "mdi:database", form: "rounded", label: "Update Due Dates in Sheet", pos: "b", h: 48 }
n8 --> n9
n6 --> n1
n1 --> n8
n2 --> n7
n9 --> n2
end
subgraph sg1["Flow 2"]
direction LR
n0["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/webhook.dark.svg' width='40' height='40' /></div><br/>Webhook - Receive Confirmati.."]
n3["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Process Webhook Data"]
n4@{ icon: "mdi:database", form: "rounded", label: "Update Google Sheet Database", pos: "b", h: 48 }
n5["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/webhook.dark.svg' width='40' height='40' /></div><br/>Send Confirmation Page"]
n3 --> n4
n4 --> n5
n0 --> n3
end
%% Styling
classDef trigger fill:#e8f5e9,stroke:#388e3c,stroke-width:2px
classDef ai fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
classDef aiModel fill:#e8eaf6,stroke:#3f51b5,stroke-width:2px
classDef decision fill:#fff8e1,stroke:#f9a825,stroke-width:2px
classDef database fill:#fce4ec,stroke:#c2185b,stroke-width:2px
classDef api fill:#fff3e0,stroke:#e65100,stroke-width:2px
classDef code fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
classDef disabled stroke-dasharray: 5 5,opacity: 0.5
class n6 trigger
class n1,n9,n4 database
class n8,n0,n5 api
class n2,n3 code
classDef customIcon fill:none,stroke:none
class n2,n8,n0,n3,n5 customIcon
The Problem: Companies House deadlines slip in the gaps
If you’re checking Companies House deadlines manually, the process is basically “small risk, repeated a lot.” Someone opens a spreadsheet, looks up a company, searches for the right due date, updates a cell, then tries to tell the team what’s urgent. Do that across 20 companies and you’ve burned the best part of an hour, and you still have to chase confirmations. Worse, the spreadsheet becomes a vague memory of what happened, not an audit trail of who did what and when.
The friction compounds. Here’s where it breaks down in real life.
- Each company needs its own check, which means you repeat the same steps all week.
- Due dates change or get interpreted inconsistently, so the sheet slowly drifts away from the truth.
- Confirmations get buried in replies and chat messages, so you end up chasing people instead of doing actual work.
- Miss one filing and you’re looking at roughly £150 to £1,500 in penalties, plus the awkward client conversation.
The Solution: daily deadline checks with one-click confirmations
This n8n workflow turns your Google Sheet into a living deadline tracker and turns Gmail into the daily “what needs attention” briefing. Every weekday at 5 PM, it reads your company list from Google Sheets, pulls fresh filing and confirmation deadlines from the Companies House API, then writes the latest due dates back into the same sheet. After that, it generates an HTML email that’s easy to scan: a sortable table, clear urgency colors (green to red), and Yes/No buttons next to each company. When someone clicks a button, a webhook receives the response and the workflow stamps the sheet with the confirmation and timestamp. That’s your audit trail, automatically.
The workflow starts on a weekday schedule. It refreshes deadlines from Companies House, builds a prioritized Gmail summary, then listens for Yes/No clicks to update Google Sheets in seconds. No extra tracker. No messy follow-ups.
What You Get: Automation vs. Results
| What This Workflow Automates | Results You’ll Get |
|---|---|
|
|
Example: What This Looks Like
Say your firm tracks 30 companies. Manually, you might spend about 5 minutes per company to look up deadlines, update the sheet, and message the team, which is roughly 2.5 hours for a single full sweep (and it tends to happen more than once a week). With this workflow, you spend maybe 5 minutes maintaining the company list in Google Sheets, then the 5 PM Gmail summary arrives automatically and takes about 10 minutes to review. Confirmations are one click, and the timestamp lands in the sheet without anyone copying anything.
What You’ll Need
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Google Sheets for the company database and audit trail.
- Gmail to send the daily deadline summary email.
- Companies House API key (get it from api.company-information.service.gov.uk).
Skill level: Beginner. You’ll connect accounts, paste an API key, and confirm your webhook URL once.
Don’t want to set this up yourself? Talk to an automation expert (free 15-minute consultation).
How It Works
A weekday schedule triggers the run at 5 PM. That timing is intentional: you get a clean end-of-day snapshot before tomorrow’s work starts.
Your Google Sheet provides the company list. n8n reads the rows (company_number and company_name), so the sheet stays the source of truth for what’s being monitored.
Companies House due dates get refreshed automatically. For each company, the workflow calls the Companies House API, then syncs accounts_due and confirmation_due back into Google Sheets along with a last_updated timestamp.
Gmail delivers the summary and captures confirmations. The email is generated as HTML with urgency colors and Yes/No buttons; clicks go to an n8n webhook which writes confirmation_submitted (and the time) back to the same sheet.
You can easily modify the 5 PM schedule to a morning run, or change the email recipients and formatting, based on your needs. See the full implementation guide below for customization options.
Step-by-Step Implementation Guide
Step 1: Configure the Webhook Trigger
This workflow listens for confirmation updates from interactive email links and responds with a confirmation page.
- Add and open Incoming Confirmation Webhook.
- Set Path to
confirmation-updates. - Set Response Mode to
responseNodeso Return Confirmation Page can handle responses.
⚠️ Common Pitfall: The email links in Compose Interactive Email depend on your public webhook URL. Replace https://[YOUR_WEBHOOK_DOMAIN]/webhook/confirmation-updates with your live n8n domain.
Step 2: Configure the Schedule Trigger
This workflow runs on weekdays to fetch and update company due dates.
- Add and open Scheduled Weekday Trigger.
- Set the cron rule to
0 17 * * 1-5to run at 17:00 on weekdays.
Adjust the cron expression if you need a different timezone or send time.
Step 3: Connect Google Sheets
These nodes read the tracking database and update due dates and confirmation status.
- Open Retrieve Company Sheet and select the Document with
[YOUR_ID]and Sheet with[YOUR_ID]. - Credential Required: Connect your
googleSheetsOAuth2Apicredentials. - Open Sync Due Dates to Sheet and confirm Operation is
appendOrUpdate. - Map columns in Sync Due Dates to Sheet using expressions like
{{$json.accounts.next_due}},{{$json.company_name}},{{$json.company_number}},{{$json.confirmation_statement.next_due}}, and{{$json.confirmation_statement.last_made_up_to}}. - Credential Required: Connect your
googleSheetsOAuth2Apicredentials for Sync Due Dates to Sheet. - Open Modify Sheet Records and confirm Operation is
updatewith Matching Columns set tocompany_number. - Set column expressions in Modify Sheet Records to
{{$json.query.company_name}},{{$json.query.company_number}}, and{{$json.query.confirmation_submitted}}. - Credential Required: Connect your
googleSheetsOAuth2Apicredentials for Modify Sheet Records.
Step 4: Set Up API Enrichment and Email Composition
This step enriches companies with Companies House data and builds the HTML email.
- Open Fetch Company Profile and set URL to
=https://api.company-information.service.gov.uk/company/{{ $json.company_number }}. - Credential Required: Connect your
httpBasicAuthcredentials for Fetch Company Profile. - Open Compose Interactive Email and review the JavaScript. Ensure the webhook base URL is set to your public domain:
https://[YOUR_WEBHOOK_DOMAIN]/webhook/confirmation-updates. - Keep the output fields from Compose Interactive Email as
emailBodyandsubjectfor downstream email sending.
Step 5: Configure Output and Confirmation Response
Emails are sent via Gmail and the webhook responds with a confirmation page after updates.
- Open Dispatch Email via Gmail and set Send To to
[YOUR_EMAIL]. - Set Message to
{{$json.emailBody}}and Subject to{{$json.subject}}. - Credential Required: Connect your
gmailOAuth2credentials. - Open Return Confirmation Page and keep Respond With set to
text. - Set Response Body to the HTML expression shown, beginning with
=<!DOCTYPE html>and including{{ $json.company_name }}and{{ $json.confirmation_submitted }}.
Step 6: Test & Activate Your Workflow
Verify both scheduled and webhook-driven paths before activating.
- Click Execute Workflow on Scheduled Weekday Trigger to run the scheduled path manually.
- Confirm data flows in order: Scheduled Weekday Trigger → Retrieve Company Sheet → Fetch Company Profile → Sync Due Dates to Sheet → Compose Interactive Email → Dispatch Email via Gmail.
- Trigger Incoming Confirmation Webhook by opening a generated confirmation link and verify the flow: Incoming Confirmation Webhook → Transform Webhook Payload → Modify Sheet Records → Return Confirmation Page.
- A successful test updates the Google Sheet record and displays the confirmation HTML page.
- Turn on the workflow using the Active toggle to enable weekday automation.
Common Gotchas
- Google Sheets credentials can expire or need specific permissions. If things break, check the n8n credentials screen and the sheet’s sharing access first.
- If you’re using Wait nodes or external rendering, processing times vary. Bump up the wait duration if downstream nodes fail on empty responses.
- Default prompts in AI nodes are generic. Add your brand voice early or you’ll be editing outputs forever.
Frequently Asked Questions
About 15 minutes once your credentials are ready.
No. You’ll connect Google Sheets, Gmail, and paste your Companies House API key.
Yes. n8n has a free self-hosted option and a free trial on n8n Cloud. Cloud plans start at $20/month for higher volume. You’ll also need to factor in Companies House API usage (the key is free).
Two options: n8n Cloud (managed, easiest setup) or self-hosting on a VPS. For self-hosting, Hostinger VPS is affordable and handles n8n well. Self-hosting gives you unlimited executions but requires basic server management.
Yes, and it’s straightforward. Change the Scheduled Weekday Trigger if you want morning runs, and update the Dispatch Email via Gmail node to add partners, managers, or a shared mailbox. You can also tweak the Compose Interactive Email code to sort by a different column, add a “client manager” field from Google Sheets, or adjust the red/orange/yellow/green thresholds so “urgent” matches how your firm actually operates.
Usually it’s expired Google OAuth permissions or the connected Google account no longer has access to the spreadsheet. Reconnect the Google Sheets credential in n8n, then open the sheet and confirm it’s shared with the same account. If you duplicated the workflow, double-check you also updated the spreadsheet ID in the Google Sheets nodes.
Dozens is normal, and many teams run 50+ without issues. On n8n Cloud Starter, you’re limited by monthly executions, so you’ll want to keep an eye on how many rows you process each day. If you self-host, there’s no execution cap; capacity depends on your server and the speed of the Companies House API responses.
Often, yes, because this workflow mixes scheduled batching, HTML email generation, and a webhook “response handler” that writes back to the sheet. Zapier and Make can do parts of it, but the logic tends to sprawl into multiple scenarios, which gets pricey and harder to audit. n8n also lets you self-host for unlimited runs, which matters if you’re checking lots of companies daily. If you only need a simple reminder email from a static sheet, Zapier can be fine. Talk to an automation expert if you want help choosing.
Once this is running, the spreadsheet stays accurate and the team gets a daily prompt that’s hard to ignore. Honestly, that’s a calmer week for everyone.
Need Help Setting This Up?
Our automation experts can build and customize this workflow for your specific needs. Free 15-minute consultation—no commitment required.