# Turn agency timesheets into invoices and alerts with Odoo: n8n workflow

> Started by a clock, and works across Gmail and Slack. 26 steps: large, and worth reading before you trust it with anything live.

Source: https://millionrounds.com/workflow/turn-agency-timesheets-into-invoices-and-alerts-with-odoo (Millionrounds; every figure on the page links to its filing or article)

[Automation library](https://millionrounds.com/workflows) · [Money admin](https://millionrounds.com/workflows?category=Money+admin#library)

# Turn agency timesheets into invoices and alerts with Odoo

Started by a clock, and works across Gmail and Slack. 26 steps: large, and worth reading before you trust it with anything live.

Large

[Download free](https://millionrounds.com/login?next=%2Fapp%2Fworkflow%2Fturn-agency-timesheets-into-invoices-and-alerts-with-odoo)

**26 steps** Large: read it before trusting it with anything live

**0** Branches: places the flow splits

**0** Loops or waits

**2** Services it connects to

## The flow

Starts it 3 Logic 11 Service 12

The steps in the order they run, from what starts it.

- 1 **Weekly Trigger, Fri 5pm (Timesheet Review)** Schedule trigger *Starts it*
- 2 **Daily Trigger, Billable Hours Check (6pm)** Schedule trigger *Starts it*
- 3 **Hourly Trigger, Poll Paid Invoices** Schedule trigger *Starts it*
- 4 **Compute This Week Window** Set *Logic*
- 5 **Get Project Timesheet Entries (Last 90 Days)** Odoo *Service*
- 6 **Client Billing Map (Config, Ops-Maintained)** Code *Logic*
- 7 **Search Recently Paid Invoices** Odoo *Service*
- 8 **Get Timesheet Entries This Week** Odoo *Service*
- 9 **Get Active Employees** Odoo *Service*
- 10 **Match to Billing Map & Compute Unbilled Hours** Code *Logic*
- 11 **Alert Ops, Billing Data Fetch Failed** Gmail *Service*
- 12 **Notify PM, Invoice Paid** Slack *Service*
- 13 **Alert Ops, Payment Poll Failed** Gmail *Service*
- 14 **Aggregate Hours by Employee & Flag Gaps** Code *Logic*
- 15 **Aggregate Hours by Project This Week** Code *Logic*
- 16 **Alert Ops, Timesheet/Employee Fetch Failed** Gmail *Service*
- 17 **Projects Crossing 10h Threshold** Filter *Logic*
- 18 **Log Payment Notify Failures** No Op *Logic*
- 19 **Keep Employees Needing Reminder** Filter *Logic*
- 20 **Send Weekly Hours Summary to PM** Gmail *Service*
- 21 **Create Draft Invoice in Odoo** Odoo *Service*
- 22 **Send Timesheet Reminder** Slack *Service*
- 23 **Log Path A Notification Failures** No Op *Logic*
- 24 **Email Draft Invoice to Client** Gmail *Service*
- 25 **Log Invoice Create/Send Failures** No Op *Logic*
- 26 **Mark Project as Invoiced (Update Cursor)** Code *Logic*

## How it's built

- **Starts on:** A clock
- **Steps:** 26
- **Size:** Large: read it before trusting it with anything live
- **Connects to:** Gmail, Slack
- **Model:** None. This is plumbing, not judgement

## Questions

What does it need to run?

An n8n account, plus your own Gmail and Slack accounts. You connect your own accounts after importing it; none are included.

What starts it?

It starts on a clock.

Does it use AI?

No. Every step is fixed logic or a call to a service, so it does the same thing every time.

How long does it take to set up?

Take your time. At 26 steps it is large: read it before trusting it with anything live.

How do I import it?

Copy the workflow, open a new workflow in n8n and paste. The steps appear on the canvas, ready for your own accounts.

**Before you run it**

Nothing here has been tested by us. It is somebody's working automation, read and described from its own steps. Treat the connections it wants as a list of accounts it will touch, and read the 26 steps before you point it at anything that matters.

## Run it in n8n

- **Create your n8n account** Free to start. n8n is where the workflow runs. [Create an n8n account ↗](https://millionrounds.com/n8n)
- **Download the workflow** Free with a Millionrounds account. [Download free](https://millionrounds.com/login?next=%2Fapp%2Fworkflow%2Fturn-agency-timesheets-into-invoices-and-alerts-with-odoo)
- **Paste it into n8n** Open a new workflow in n8n and paste. Then connect your own accounts.

Stored with the author's traces removed: canvas notes, instance identifiers, saved credential names and any live document they had left behind.

## Connects to

Each opens the other workflows that use it.

[Gmail](https://millionrounds.com/workflows?service=Gmail#library)[Slack](https://millionrounds.com/workflows?service=Slack#library)

## Workflows like it

Also money admin, with the same services where possible, closest in size first.

- [**Process e-commerce orders with Gmail and Slack** 26 steps · Gmail, Slack](https://millionrounds.com/workflow/process-e-commerce-orders-with-gmail-and-slack)
- [**Generate service quotes with OpenAI and Telegram** 26 steps · calls a model · Gmail, Telegram](https://millionrounds.com/workflow/generate-service-quotes-with-openai-and-telegram)
- [**Send donor thank-you receipts and weekly digests** 26 steps · calls a model · Gmail, Google Sheets](https://millionrounds.com/workflow/send-donor-thank-you-receipts-and-weekly-digests)
- [**Generate and track invoices with HubSpot and Gmail** 25 steps · Gmail, Google Sheets](https://millionrounds.com/workflow/generate-and-track-invoices-with-hubspot-and-gmail)
- [**Automated template delivery system with Stripe and Gmail** 25 steps · calls a model · Gmail, Google Sheets](https://millionrounds.com/workflow/automated-template-delivery-system-with-stripe-and-gmail)
- [**Create AI proposals from Fireflies transcripts with OpenAI** 25 steps · calls a model · Gmail, Google Docs](https://millionrounds.com/workflow/create-ai-proposals-from-fireflies-transcripts-with-openai)
