Weekly UK filing deadline tracker for your client book
Every Monday, check each client's accounts and confirmation statement dates on the UK register, open tasks for what is due soon, and post the practice one clear status update.
Integrations
Companies House
Google Sheets
Asana
Slack Bot
Type
Categories
- Finance
- Operations
Every Monday at 8am, run a filing deadline review across my whole client book and tell the practice where it stands.
Start by reading my client list from Google Sheets with Get Values. Each row has the client name, their UK company number, and the partner who owns the relationship. Read the company number column as text so leading zeros are preserved, and zero pad anything shorter than 8 characters before you look it up, because Companies House company numbers are 8 character zero padded strings and 04829911 is not the same as 4829911.
For each client, use Companies House Get Company Profile to pull the next accounts due date and the next confirmation statement due date, along with whether either one is already flagged as overdue. The fields that matter are accounts.next_due, accounts.overdue, confirmation_statement.next_due and confirmation_statement.overdue. If a company number returns nothing, or the company is dissolved, do not fail the run. Set that client aside and mention it at the end of the Slack summary so someone can fix the sheet.
Then use List Filing History for each client to confirm what has actually been filed. Look at the accounts and confirmation statement filings and compare the most recent one against the period the profile says is now due. If the register still shows a due date but the matching return has already been accepted for that period, treat it as filed and leave that client out of the buckets. The point is to avoid chasing partners for work that is already done.
Sort every client and every filing type into four buckets based on the statutory date: already overdue, due within 7 days, due within 30 days, and due within 90 days. A single client can appear in more than one bucket if their accounts and confirmation statement fall in different windows, so treat each filing type as its own line item rather than collapsing them per client.
For anything sitting inside the 30 day window, including everything already overdue, create an Asana task with Create a Task in my practice deadlines project. Name the task for the client and the filing type, for example "Harrow Textiles Ltd, confirmation statement". Set the statutory date as the Asana due date, not the date you are running, and assign the task to the partner who owns the relationship by matching the sheet's partner name to an Asana user by name or email. If no Asana user matches, still create the task so the deadline is not lost, leave it unassigned, and call it out in the Slack summary.
Before you create anything, pull the tasks that already exist in that project with Get Multiple Tasks and use them to dedupe. If a client already has an open task for the same filing type, skip it rather than creating a second one, because this runs every week and the same deadline will stay in range for several runs. Do not use Asana's workspace task search for this, it requires a premium plan. Scope the read to the project instead.
Finish by sending one Slack message with Send a Message to our practice channel. Lead with the overdue clients, since those are the ones with real consequences, then the 7 day bucket, then the 30 day bucket, then a count of the 90 day bucket so people can see what is coming without reading every line. Close with the tasks created this week and note anything skipped as a duplicate. For each line include the client name, company number, filing type, statutory date, and owning partner. Write it so nobody has to open Companies House to know where the practice stands.
Companies House allows 600 requests per rolling 5 minute window per API key, and this workflow makes two calls per client. Work through the client list steadily rather than firing every lookup at once. If you get a 429, honour the Retry-After header and resume where you left off instead of restarting the run or dropping the remaining clients.
What it does
- Reads your client list from a Google Sheet, including each client's company name, registered company number, and the partner who owns the relationship.
- Looks up every client on the UK company register to pull the next accounts deadline, the next confirmation statement deadline, and whether either one is already late.
- Double checks the filing record for each client so anything already submitted for the current period drops out of the list instead of chasing your team.
- Sorts the whole client book into overdue, due within 7 days, due within 30 days, and due within 90 days, then opens an Asana task for every deadline inside 30 days, assigned to the owning partner with the statutory date as the due date.
- Posts one Slack message to your practice channel that leads with the overdue clients, so nobody has to open Companies House to know where things stand.
What you’ll need
- A Google Sheet listing your clients with columns for client name, UK company number, and owning partner.
- A Companies House account so the workflow can read the public register.
- An Asana project where filing tasks should be created, plus partner names or emails that match your Asana members.
- A Slack workspace and the channel where your practice wants the weekly update.
How to customize it
- Change the day and time. Monday at 8am suits most practices, but a Friday afternoon run works if you plan the week ahead.
- Adjust the buckets. The 7, 30, and 90 day thresholds are a common reminder cadence, and you can widen the 90 day view or tighten the 30 day task window.
- Decide what earns a task. By default anything inside 30 days becomes an Asana task, and you can raise that to 60 days for larger client books.
- Swap the destinations. The client list can live in any sheet you already maintain, and the summary can go to a different Slack channel or a partner group.
Use cases
- Notifications & Alerts
- Research & Monitoring
- Daily Digests