Send the invoice PDF over WhatsApp when a row is marked Paid
Watches an invoice ledger for rows marked Paid, pulls the invoice PDF from Google Drive and sends it to the customer as a WhatsApp document, then marks the row as receipted — after the send, never bef.
A 15-minute schedule reads the invoice ledger from Google Sheets. A Filter selects rows that are paid, not yet receipted and carry a usable phone number — three conditions doing the work of a state machine, with the receiptSent column as the state. Remove Duplicates keyed on the invoice number sits behind it as a second guard in case the column is cleared by hand. Google Drive downloads the PDF as binary using the file id on the row, so the document sent is exactly the one finance produced, and the WhatsApp node sends it as a document message with a caption rather than as a link. Only after a successful send does an appendOrUpdate write `receiptSent` and a timestamp back to the ledger, so a failure leaves the row unsent and the next run retries it naturally. Failures route to an error rail that tells finance on Slack.
Key benefits
- ✓The customer gets the actual PDF on WhatsApp, not a link they have to log in to open
- ✓Finance triggers it by doing what they already do — marking a row paid
- ✓The ledger is only marked sent after the send succeeds, so it never claims a receipt that never went
- ✓Two independent guards against sending the same receipt twice
- ✓Failed sends stay queued and retry on the next run instead of needing a human to notice
Use cases
- →Small businesses issuing receipts by hand after each payment
- →Finance teams whose customers ask for invoice copies over WhatsApp anyway
- →Agencies billing retainer clients monthly from a shared sheet
- →Anyone who has been chased for a receipt they thought was already sent
Integrations
Workflow preview (9 nodes)
The template's actual node layout and connections. Node parameters and credential slots unlock with the download.
What's inside (9 nodes)
A look at the node types this workflow uses. No purchase required — full parameters and credentials are yours after you buy.
From download to running in 3 steps
- 1Import. In n8n, open Workflows → menu → “Import from File” and pick the downloaded JSON.
- 2Connect. Add your own credentials on the app nodes - n8n highlights exactly which ones need them.
- 3Activate. Run it once to test, then toggle Active. The automation is live.
What you'll learn
Production levelProduction-grade: idempotency, dead-letter handling, and reconciliation included.
- •Moving data between Google Sheets, Google Drive and Slack in a single run
- •Adding retries and an explicit error path to external calls
- •Testing against pinned sample data before connecting anything real
Every node carries its own documentation on the canvas, plus notes explaining why the architecture was built this way, a credential setup guide, troubleshooting, and three practice exercises. Sample data comes pinned to the trigger, so you can hit Execute and watch data flow before connecting a single account.
Common questions
What exactly do I get?
The complete, ready-to-import n8n workflow as a JSON file, delivered instantly after payment. Import it into your own n8n (cloud or self-hosted), add your credentials, and it runs.
How do I import it into n8n?
In n8n, open Workflows, click the three-dot menu, choose “Import from File”, and select the downloaded JSON. Then connect your own app credentials on the highlighted nodes.
Do I need anything else for it to work?
You need your own n8n instance and accounts/credentials for the apps this workflow connects to (Google Sheets, Google Drive, WhatsApp, Slack). No coding is required.
What if it doesn't work for me?
If the file is faulty, won't import, or isn't as described, contact us within 7 days and we'll fix it or refund you - see our refund policy.
Can I modify or resell it?
You can freely adapt and use it in your own or your clients' projects. Reselling or redistributing the template file itself is not permitted.
Related templates
Route expenses for expenses
Expenses on n8n: runs when a form is submitted across Slack, Google Sheets, Google Drive and Gmail, starting at "Normalize Invoice Payload". 23 documented nodes.
Generate quotes for approvals
Approvals on n8n: runs when a webhook arrives across Google Sheets, Google Drive, Slack and Microsoft Teams, starting at "Download from Google Drive". 21 documented nodes.
Create quotes for approvals
Approvals on n8n: runs when a webhook arrives across Google Sheets, Google Drive, Slack and Discord, starting at "Download from Google Drive". Parses the incoming file into rows. 21 documented nodes.
Distill documents with Notion & Outlook
Multi-tool agent on n8n: runs when a webhook arrives across Notion, Outlook, Slack, Google Sheets and Google Drive, starting at "Keep Valid Requests". 31 documented nodes.