RevExOS
RevExOS: Automation Playbook

A Complete Guide on Automating the
Order-to-Cash Cycle

Step-by-step workflows using n8n, Make.com, and Zapier with real canvas diagrams for each stage.

Save 15–30 hrs/month in finance ops
n8n
Make.com
Zapier
HubSpot
DocuSign / PandaDoc
QuickBooks / Xero
Slack
The O2C Pipeline: 4 Stages Automated
Order Intake
CRM + Forms
→
Contract + Sign
DocuSign / PandaDoc
→
Invoice Generation
QBO / Xero
→
Payment + AR
Stripe / Bank
47 days
Avg DSO in professional services
1 in 4
B2B invoices rejected due to errors
3–7%
Revenue lost to O2C leakage annually
80%
Of those errors are preventable
1

Order Intake + CRM Update

Trigger: New form submission, email order, or inbound PO

Every O2C cycle starts when a customer places an order. Without automation, someone manually copies data from an email or form into a CRM -- that's where the first errors enter the pipeline. Automating this step captures the PO number, billing entity, and deal value in the right place from the very first second.

n8n Workflow Canvas
Webhook
POST /new-order
TRIGGER
Code Node
Extract PO, amount, company
TRANSFORM
IF Node
Customer exists in CRM?
LOGIC
HubSpot
Create / Update Deal
ACTION
QuickBooks
Upsert Customer record
ACTION
Slack
Post to #new-orders
NOTIFY
Make.com Scenario
Webhooks
Receive form POST
Text Parser
Regex: PO + amount
Router
New vs existing
HubSpot
Create Contact + Deal
QuickBooks
Create Customer
Slack
Alert #new-orders
Common failure point: "Acme Ltd" vs "Acme Limited" creates duplicate customers in QBO. Normalize company names before lookup using a Code node (n8n) or Text Parser module (Make) -- strip "Ltd", "Inc", "Corp", lowercase, trim spaces.
2

Contract Generation + E-Signature

Trigger: CRM deal moves to "Closed Won"

The gap between a verbal yes and a signed contract costs days -- sometimes weeks. Automated contract generation pulls deal data (billing entity, payment terms, PO number) directly into the document template and fires it to the signer. A second workflow watches for the completion webhook and updates every downstream system.

n8n Workflow Canvas: Part 1 - Send Contract
HubSpot Trigger
Deal stage to "Closed Won"
TRIGGER
HubSpot
Get deal + contact props
ACTION
PandaDoc
Create doc from template
ACTION
PandaDoc
Send to signer email
ACTION
Slack
Notify #contracts sent
NOTIFY
n8n Workflow Canvas: Part 2 - On Signed
Webhook
PandaDoc "doc.completed"
TRIGGER
HubSpot
Update deal: signed_date, contract_url
ACTION
Google Sheets
Log to revenue tracker
LOG
Slack
Alert finance: ready to invoice
NOTIFY
Make.com Scenario: Contract + DocuSign
HubSpot
Watch Deal Stage Changes
Filter
Stage = closedwon
DocuSign
Create Envelope
DocuSign
Send Envelope
Sheets
Log to tracker
Slack
Notify #contracts
Store these on the CRM deal before contract fires: PO number, payment terms (Net 30/45), billing entity name, AP contact email. These merge into the contract and later into the invoice from one source of truth. This prevents the PO mismatch that causes 1 in 4 invoice rejections.
3

Invoice Generation + Delivery

Trigger: Contract signed, milestone hit, or billing date (scheduled)

Invoicing is where most revenue leaks silently -- wrong amounts, wrong billing entity, missing PO number, sent to the wrong contact. Automated invoice generation pulls directly from your signed contract data in the CRM, removes the copy-paste step entirely, and sets the due date from the payment terms field.

n8n Workflow Canvas
Webhook
Contract signed event
TRIGGER
HubSpot
Get deal: amount, PO#, net terms
ACTION
Code Node
Calc due_date = today + net_days
LOGIC
QuickBooks
Create Invoice + set PO in Memo
ACTION
QuickBooks
Send Invoice to AP contact
ACTION
Sheets
Log inv#, amount, due date
LOG
Make.com Scenario
DocuSign
Watch Completed
HubSpot
Get Deal by ID
Router
Fixed / Recurring / Milestone
QuickBooks
Create Invoice
QuickBooks
Send Invoice
Airtable
Log to revenue tracker
PO mismatch = 10–20 extra days on DSO: Always map the PO number into the QBO invoice Memo/Reference field. The customer's AP team processes payment by PO number. If it's missing, the invoice routes to exceptions -- guaranteed delay.
Recurring billing: Use n8n's Schedule trigger (cron: 0 8 1 * *) or Make.com's Scheduling to fire on the 1st of each month. Pull active client list from a filtered HubSpot view. Each invoice inherits payment terms from the original contract record.
4

Payment Follow-up + AR Automation

Trigger: Daily schedule -- checks all open invoices in QBO/Xero

AR follow-up is the most time-consuming and most avoided task in finance ops. Automated reminders sent at the right intervals reduce DSO by 8–15 days on average without a single manual email. The second half of this workflow catches payment received events and stops the reminder sequence automatically.

n8n Workflow Canvas: AR Reminder Engine
Schedule
Daily at 8:00 AM
TRIGGER
QuickBooks
List unpaid invoices
ACTION
Code Node
Calc days_overdue per invoice
LOGIC
Switch Node
T-3 / T+0 / +7 / +30 days
ROUTE
Gmail / SMTP
Send reminder email (templated)
NOTIFY
HubSpot
Log reminder on deal timeline
ACTION
Slack
Escalate 30+ days to controller
ESCALATE
Make.com Scenario: AR Follow-up
Scheduling
Daily 8AM
QuickBooks
Search Invoices (Balance > 0)
Iterator
Loop each invoice
Router
4 overdue brackets
Gmail
Send reminder email
HubSpot
Create Note on deal
Slack
Escalate 30+ days
WhenToneSubject LineIf No Response
T - 3 daysFriendly reminder"Invoice #1042 due in 3 days"Log sent, no escalation
T + 0Polite, clear"Invoice #1042 is due today"Log sent in CRM
T + 7 daysDirect, ask for update"Following up: Invoice #1042 past due"CC account owner
T + 14 daysFirm, reference terms"Action required: 14 days overdue"Slack alert to controller
T + 30 daysEscalation"Urgent: Invoice #1042 requires attention"Flag for manual intervention
Payment received handler: Build a second scenario that watches QBO for payments received. When a payment matches an open invoice, it stops the reminder loop, updates the CRM deal to "Collected", and posts to Slack. Prevents reminders firing after payment is already made.

n8n vs Make.com vs Zapier: Which for O2C?

Factorn8nMake.comZapier
Self-hostingYes -- free on your serverCloud onlyCloud only
Ease of useModerate -- steeper curveVisual, fast to startEasiest for non-technical
Custom code / logicFull JS/Python Code nodeBasic functions onlyCode step (limited)
QBO + HubSpotBoth nativeBoth nativeBoth native
Cost at scaleNear zero (self-hosted)Scales by operationsMost expensive at scale
Best O2C use caseInvoice + AR (date logic, dedup)Contract + CRM triggersQuick wins, simple triggers
Hybrid approach: Run Make.com for event-driven flows (contract sent, deal updated) and n8n self-hosted for the daily scheduled jobs (AR aging, invoice generation). They work together via webhook handoffs.

Dive into a specific stage

AR AutomationInvoice AutomationQuote Automation

Find Out Where Your O2C Cycle Is Leaking

Pick the tools you use and the free Q2C Stack Checker maps the integration gaps between them, then shows which guides and tools fix each one.

Run the free Stack Checker
Free. Takes about two minutes.