Accounts receivable automation that stops chasing the moment a customer pays
Customer invoices raised once from the CRM or job system, sent and chased by the ledger on a schedule that re-reads the balance before every reminder, payments matched back, and credit notes, disputes and write-offs left with a person.
Accounts receivable automation means the work between a job being done and the cash being reconciled runs without anyone re-typing an invoice or remembering to chase it. The invoice is raised once, from the CRM or job system that knows the work is finished. The ledger (Xero, QuickBooks Online or your own) sends it, and reminders go out on a schedule that checks the amount still due before each one. When the payment lands it is matched back, and the CRM learns the invoice is paid from the ledger, not from a person. Our position is that the CRM decides when to bill, the ledger decides what is owed, and a person decides anything that changes what a customer owes after the fact: credit notes, disputes, write-offs, account holds.
Where that breaks is just as specific. If a retry can raise a second invoice, if the reminder reads a status copied into the CRM last week, or if the customer pays a lump sum against three invoices, automation makes the mistake faster and more politely. Most of this page is about those cases. If all you want is reminders on invoices you already raise in Xero or QuickBooks, their built-in reminder features may be enough, and the comparison below says when.
Our evidence is mixed in kind, and we keep it apart. Two custom systems handle receivables in their own ledgers: a school group's ERP, where fee invoices, payments and ledger entries post together and fee reminders go out over WhatsApp, and a trading group's ERP, where invoices move through approved, unpaid, partial and paid. Separately, our published Make flows include one that raises Xero invoices from a monday.com billing status and chases them, with its limits written on the page. The mirror of this page, for supplier bills, is accounts payable automation.
Eight stages from a quote to a reconciled payment, and who decides at each
Each stage says what can run on its own and what stays with a person. The split does not move much between businesses; the systems at each stage do.
- 01
Quote
The quote is built from the price list or the job's own lines and sent. A person decides the price, any discount and the terms. Quotes often live in the ledger rather than the CRM, and that has consequences: on a trailer manufacturer's Make flows the quotes are raised in Xero, and because Make offers no watch trigger for Xero quotes, a scheduled API call picks up those that have actually gone to the customer.
- 02
Order or job
Something makes the invoice due: an order is placed, a job is marked complete, a stage is reached, a delivery is signed. The record moves on its own; a person decides that the work is actually done. That is why the trigger should be a deliberate status somebody sets, not a side effect of an edit to another field.
- 03
Invoice raised
The invoice is created in the ledger from the source record's lines, prices, item codes and tax, carrying a key that ties it to that record so a retry cannot raise a second. Nothing routine needs a person. What the checks reject does: a contact that cannot be matched, a line with no tax code, a total that disagrees with the source.
- 04
Sent
The ledger sends it, so the copy the customer receives, the online link and any payment link come from the same place as the balance. A person decides who receives invoices, once, on the customer's contact record, not by typing an address on each invoice.
- 05
Reminders
Friendly before the due date, firmer after, on a schedule, and each one re-reads the amount due in the ledger at the moment of sending. A person decides when reminders stop and the phone call starts, and whether an account goes on hold. Stopping new work, involving a director or passing a debt to collections is never automatic.
- 06
Payment matched
A payment taken through a payment service connected to the ledger is normally recorded against the invoice it was for; check how your ledger and provider handle this. Bank lines that match one invoice on amount and reference can be suggested. A person decides the ones that do not: a lump sum covering three invoices, a short payment, an overpayment, a payment from a parent company.
- 07
Reconciliation
Bank reconciliation stays in the ledger and with whoever keeps your books. What we build feeds it cleanly, with one invoice per obligation and references the bank will carry, and then reads the result: once the ledger says nothing is left to pay, the CRM or job record is updated to paid, never the other way round.
- 08
Credit notes and disputes
A dispute flag on the invoice or the customer pauses reminders on its own. Every credit note, refund and write-off is a person's decision. In Xero a credit note has to be authorised before it can be allocated to an invoice, and the allocation is a separate call, so even the ledger's own API keeps raising a credit and applying it as two deliberate steps.
Raise the invoice from the system that knows the work is done
Most double invoices and missing invoices come from the trigger, not the ledger. Each shape needs its own key, the thing that makes a second run find the first invoice instead of creating another.
| Trigger | The key that prevents a second invoice | The trap |
|---|---|---|
| A billing status set in the CRM (monday.com, HubSpot, your own) | The CRM item and the fee type, stored on the invoice and checked before creating | Setting the status again, or an undo and redo, raises another invoice |
| A job marked complete in a project or job system | The job or stage ID, written onto the invoice reference | Part-complete jobs that need a deposit or stage invoice, not one at the end |
| An online order (WooCommerce, a shop, a booking) | The order number, with every order line carried as its own invoice line | Orders edited or refunded after the invoice exists |
| A recurring fee or subscription | Customer, fee and period, so a month cannot be billed twice | A schedule that fires twice after an outage, or not at all in a month the scenario was off |
| A delivery or handover signed | The delivery or unit reference, matched to an invoice that already exists | Signed paperwork that arrives before the invoice has been raised |
The CRM should be where the decision to bill is made, because that is where the people who know the work is done already are. It should not hold the balance. A CRM column that says Paid is a copy, and copies go stale; the ledger is the record of what is owed, and the CRM reads it.
Lines are where CRM-to-ledger invoicing usually goes wrong. An order with five products, two tax treatments and a delivery charge is five or more invoice lines, each with its own item code, account and tax code, not one line with a total. Collapsing it to a single line is quicker to build and wrong for reporting, sales tax or VAT, and any later credit note against one item.
What our builds show about receivables, including where they stop
The closest published example is a set of Make flows for a vocational training provider. When a student's billing status in monday.com changes to the label for a recurring, enrolment or upfront fee, a scenario finds the contact in Xero, creates an authorised invoice due in seven days with a line built from the CRM's price, item code and description and a revenue tracking category, sends it through Xero's own email, and writes Waiting Payment, the invoice number, the issue date and the online link back onto the CRM item. Three more scenarios were built to chase: a friendly reminder before the due date, a firmer one once overdue and a sales-toned chaser for the upfront fee. Make's counters show 78 runs across the six scenarios with one error, a duplicate contact name.
Its published limits are the reason this page reads the way it does. Creating an invoice is not idempotent, so selecting the trigger label again raises a second one. Nothing writes Paid or Overdue back to the CRM. The recurring-fee scenario matches the contact by name with no fallback, so a contact it does not know is skipped. The reminders have no cool-downs, read lists capped at twenty-five items and are switched off. Those are the failure modes in the next sections, observed rather than imagined.
Two more flows, for a trailer manufacturer, cover the other end and the start. One watches Xero every fifteen minutes in business hours for invoices with nothing left to pay, which catches full payment whether it arrived at once or in several parts, and then raises a release form once, updating it rather than creating a second. Its error history includes thirteen failures from Xero's rate limit on one morning when a backlog was released at once, after which runs were processed one at a time with retries. The other matches quotes and invoices back to the website enquiry that started them, by email alone, so a customer billed through a company accounts mailbox is not linked.
The two custom systems are receivables inside their own books. On the school group's ERP, students, fee invoices, payments, expenses and payslips feed one accounting layer, money functions post an invoice, a payment and its ledger entry together, and fee reminders go out over WhatsApp from templates, so chasing became a scheduled action with a record instead of a notebook. On the trading group's ERP, invoices move from draft through approval to unpaid, partial and paid, and anything not yet approved is kept out of revenue and outstanding totals.
Beyond what is published, we have built accounting workflows and integrations for other clients, including a Zapier build that takes WordPress and WooCommerce orders into monday.com and then into Xero invoices with each order line carried as its own invoice line. That rests on our own account of the work; there is no case study for it. One of our published client reviews, from the director of Divine Kitchens, was left for work across monday.com, Xero, WordPress and Buildxact; the review speaks to attention to detail, not to a receivables result.
A reminder that has not checked the balance is a guess
The receivables failure customers remember is not a late invoice. It is the reminder that arrives the morning after they paid, or the firm one that reaches a customer who rang last week to dispute the bill and was told it was on hold. A reminder schedule driven by a status somebody copied into the CRM will do both, because the copy was true when it was written and nobody updates it.
So every reminder re-reads the invoice in the ledger at the moment of sending: the amount due, whether it is voided, whether a credit note has been allocated against it, and whether the invoice or the customer is flagged as disputed. If anything is left to pay and nothing is paused, the reminder goes; otherwise it does not. Each send is stamped against the invoice and the reminder tier, so a re-run cannot send the same reminder twice, which is how we build escalation on the solar installer's system, where every nudge is stamped so a re-run never chases twice.
One limit belongs here too. The ledger only knows about a payment once it has been recorded, and a bank transfer that arrived this morning may not be reconciled until tomorrow. The built-in reminder features in Xero and QuickBooks have the same gap. Sending reminders early in the day, or a working day after a reconciliation run, and saying in the email that a recent payment can be ignored, costs nothing and prevents most of the complaints.
Five ways receivables automation fails, and the check that stops each
Double invoicing
A status is set twice, a scenario is replayed, or a request times out after the ledger had already created the invoice. The answer has two parts. Store the source key on the invoice and search for it before creating. And use the ledger's own retry protection: Xero accepts an Idempotency-Key header, held for six minutes, and QuickBooks Online a requestid, for which Intuit publishes no retention window, so neither replaces your own check.
The wrong contact
Matching by name finds the wrong Smith or none at all; matching by email misses the customer whose accounts team pays from a different mailbox. Match on a stored ledger contact ID once one exists, create a contact only through a route that checks for near matches first, and send unmatched records to a person. QuickBooks Online also requires display names to be unique across customers, vendors and employees.
Chasing a customer who already paid
Usually because the reminder reads the CRM, not the ledger, or because a part payment leaves a status saying unpaid. The statement above is the fix: read the amount due at send time. A part-paid invoice should be chased for what is left, and the reminder should say so.
Tax worked out on the total
Mixed lines, such as taxable goods, exempt services and a delivery charge, need a tax code on each line. In Xero each invoice also declares whether line amounts include or exclude tax. In QuickBooks Online, US companies on automated sales tax mark each line taxable or not and the tax is calculated for them, while other regions carry a tax code per line. A flow that guesses the basis is out by the tax or a few pence of rounding, so totals are compared with the source before the invoice is authorised.
The connection belongs to someone who left
Ledger connections run on OAuth and lapse, or follow the person who authorised them. In Xero, invoices emailed through the API go out as the user who authorised the connection. Connect with a role account where you can, alert a named person when a write fails, and compare counts between the CRM and the ledger every day. Busy mornings also hit rate limits: process a backlog in order, with retries, rather than all at once.
Xero and QuickBooks Online: when their own reminders are enough, and what the APIs decide
Be fair to the ledgers first. Both have built-in reminders, and for a business that raises invoices in the ledger and sends them from it, those features may be all the automation receivables needs.
| Xero | QuickBooks Online | |
|---|---|---|
| Built-in reminders | Emails customers when an invoice is due or overdue, on a schedule you set. Can be turned off per invoice, per customer or for the whole organisation; a reminder that falls due while they are off is skipped, not sent late | Up to three automatic reminders, each set in days before or after the due date, up to 90 days. Sent only for invoices already emailed from QuickBooks |
| When the built-in feature is enough | Invoices raised and sent in Xero, one tone of reminder per stage, disputes handled by turning reminders off for that invoice or customer | Invoices emailed from QuickBooks, three reminders cover your terms, and nobody needs the CRM to know what was sent |
| Sales invoice by API | An invoice of type ACCREC. Authorised means awaiting payment or part paid, and payments can be applied only once it is authorised | The Invoice entity, with a separate send action on the invoice |
| Sending by API | Needs status submitted, authorised or paid; goes to the contact's primary email and any contact persons flagged to receive it, sent as the user who authorised the connection | A send action that uses the invoice's billing email, or an address you pass |
| A safe retry | Idempotency-Key header on create and update, cached for six minutes | A requestid on the call; no retention window published, so check before retrying |
| Recording a payment | A payment against an authorised invoice through the Payments endpoint | A Payment whose line links to the invoice; test how the link reads back in a sandbox company |
| Credit notes | Authorised first, then allocated to an invoice in a separate call | A separate credit memo entity; test how it is applied to an open invoice in a sandbox company |
| Knowing something changed | Webhooks on invoice create and update, carrying identifiers; the integration fetches the invoice | Webhooks that notify a change, then a fetch by ID; a change-data-capture query can look back up to 30 days |
The QuickBooks condition is the one people miss: its reminders only fire for invoices that QuickBooks itself emailed, so a flow that sends invoices from the CRM or your own mail account gets no reminders from QuickBooks at all. Xero's reminders are for invoices still awaiting payment, which in practice means awaiting payment in Xero: a payment not yet recorded there does not stop them.
The built-in features stop being enough when the reminder has to know something the ledger does not: that the customer has an open dispute logged in the CRM, that a site visit is booked to fix the snag they are withholding payment over, that the account manager wants to call first, or that a reminder should go by SMS or WhatsApp rather than email. They also stop when the invoice should not have been typed into the ledger in the first place, because the CRM or the shop already had every line.
Receivables here; payables, finance workflow and the CRM elsewhere
This page covers the customer side: from the event that makes an invoice due to the cash being applied, with reminders, credit notes and disputes. Three other pages sit next to it, and each links back here.
- Accounts payable automation is the mirror image, for supplier bills: capture, matching to purchase orders, approval limits, bank-detail change controls and the payment run. Its risk is paying the wrong account; ours is chasing the wrong customer.
- Finance workflow automation covers approvals and reconciliation across finance generally, including approvals that gate the totals and an honest note on month-end.
- CRM automation covers the CRM itself: pipelines, stages and the follow-ups that happen before anything is billable.
What moves the estimate for receivables automation
Most of our projects land between $5,000 and $10,000 (US dollars); larger systems cost more. That is a typical range, not a quote, and no case study above states a price, so it is not attributed to one. A flow that raises invoices from one CRM status into one Xero organisation sits at the small end, and it can be smaller still on Make or Zapier if your rules are simple. What moves it up:
- How many invoice types there are (deposits, stages, recurring fees, one-offs) and how each is triggered.
- Mixed tax on lines, more than one currency, or more than one ledger organisation.
- Whether reminders need to read anything outside the ledger, such as disputes, account holds or channels other than email.
- Whether payments have to be written back to the CRM, and how part payments, credit notes and refunds should look there.
- Whether the rules need a database underneath: a guarantee that an invoice is raised only once, and a record of every reminder kept longer than a platform's run history.
When the ledger's own features are the answer, and what we will not automate
If you raise invoices in Xero or QuickBooks, send them from there, and your reminders do not depend on anything the ledger cannot see, turn on the built-in reminders and stop. Building next to them creates a second schedule that can disagree with the first. The same goes for a dedicated credit-control product that already reads your ledger and does what you need. Building is justified when the invoice should be raised from somewhere else (a CRM, a job system, a shop), when chasing has to respect information that lives outside the ledger, or when the payment needs to flow back to the people who do the work.
Some things stay manual on purpose. Credit control is judgement: whether to call, whom to call, when to put an account on hold and when to accept a payment plan. Disputes, write-offs, refunds and anything involving collections or legal action are a person's decision every time. We also do not do the accounting. Revenue recognition, tax treatment and how your books handle bad debt stay with your accountant, and we will not claim compliance work we cannot evidence.
It is also the wrong answer at low volume, where someone raising a dozen invoices a month by hand costs less than maintaining a flow, and wherever nobody will own the exceptions: the unmatched contact, the failed write, the bank line that covers three invoices. A queue of those that nobody reads is worse than no automation, because the invoices stop being raised quietly.
Invoicing and payment work delivered on Upwork
5 invoicing and payment jobs from Saveez Irfan's Upwork history, anonymised by industry and country. These are client engagements, most of them short, not written-up case studies. Each summary is the client's brief unless a review confirms what was built, and reviews are quoted as written, only where the client left five stars and text.
- Top Rated
- 100% Job Success Score
- 114 jobs
- 1,925 hours
- Member since Sep 2022
- Make Advanced certification, Oct 2025
Saveez Irfan’s Upwork profile, as of 21 October 2026. View the profile on Upwork (opens in a new tab)
- 2026 · Australia
monday.com items raising MYOB invoices through Zapier
The brief was a Zap that creates a MYOB invoice when a specific condition is ticked on a monday.com item, so invoicing starts from the board instead of being retyped.
- Zapier
- monday.com
- MYOB
- 2025 · Online courses
Course sign-ups to QuickBooks invoices, and access on payment
The brief was two Zaps: one creates a QuickBooks Online customer and invoice when someone signs up in Kajabi, the other sends a welcome email and grants the Kajabi product once the invoice is paid, with documentation.
- Zapier
- QuickBooks
- Kajabi
- 2026 · E-commerce · Germany
Stripe subscription charges matched to Shopify orders
The brief was a Make automation that fires on every Stripe subscription charge and on the matching Shopify order.
- Make.com
- Stripe
- Shopify
- 2025 · Florida, USA
Payment link sent automatically after a PandaDoc signature
The brief was a Make scenario that sends the client a payment link once they sign a PandaDoc document, and emails the sales rep a payment notification.
- Make.com
- PandaDoc
- 2025 · Tutoring centre · Australia
Draft Xero invoices built from SmartSuite enrolments
The brief was a Make scenario that builds draft Xero invoices from SmartSuite enrolments: one invoice per guardian, with each enrolment as a line item.
- Make.com
- Xero
- SmartSuite
2 of these were for Australian businesses. Our work for Australian businesses
Related projects that were not this job
Here for the argument rather than as evidence of this exact work. Each one bears on a decision above, and the note says which.
The disciplines behind it
Platforms that bear on it
Related reading
Neighbouring solutions
Accounts receivable automation, specifically
Software that takes a customer invoice from the event that makes it due to the payment being applied, without re-typing or remembering: the invoice raised from the CRM, job system or shop, sent by the ledger, chased on a schedule that checks the balance before each reminder, and the payment matched back. Credit notes, disputes, write-offs and account holds stay with a person.
Often, yes. If you raise and send invoices in Xero and your reminders do not need to know anything Xero cannot see, use them. Xero emails customers when an invoice is due or overdue on a schedule you set, and you can turn reminders off for one invoice, one customer or the whole organisation. A custom flow earns its place when invoices start in a CRM or shop, or when chasing must respect disputes or holds recorded elsewhere.
Yes. We have built it on Make: a billing status set in monday.com creates an authorised Xero invoice with lines from the CRM's price, item code and description, sends it through Xero's own email and writes the invoice number and link back onto the CRM item. The parts that need care are a key so that setting the status twice cannot raise two invoices, contact matching, and tax on each line.
Every reminder re-reads the invoice in the ledger at the moment of sending, including the amount due, voids, allocated credit notes and any dispute flag, and goes only if something is still owed and nothing is paused. Each send is stamped, so a re-run cannot repeat it. A payment the ledger has not recorded yet is the remaining gap, which is why reminders are best sent after reconciliation.
Store the source record's key, such as the CRM item and fee type, the order number or the job stage, on the invoice and search for it before creating one. Then use the ledger's retry protection on top: Xero's Idempotency-Key header, held for six minutes, or a requestid in QuickBooks Online. Neither ledger's protection lasts long enough to replace your own check.
Yes, and it should. Each order or job line becomes its own invoice line with its own item code, account and tax code, and totals are compared with the source before the invoice is authorised. In Xero the invoice also states whether line amounts include or exclude tax; in US QuickBooks Online companies on automated sales tax, each line is marked taxable or not.
The pattern is the same and QuickBooks Online has a public API for invoices, sending and payments, and we have built on it through Zapier and Make for Upwork clients (customers and invoices from course sign-ups, approved bills posted to QuickBooks). Our long-form case studies use Xero, so on a new build we still prove the riskiest writes in a sandbox company first. One QuickBooks detail matters for reminders: its automatic reminders go only for invoices QuickBooks itself emailed.
Most of our projects land between $5,000 and $10,000 (US dollars); larger systems cost more. That is a typical range, not a quote. A single CRM-status-to-Xero flow can come in below it. What moves the number is how many invoice types and triggers there are, mixed tax or currencies, whether reminders read anything outside the ledger, and whether payments are written back to the CRM.
Sources
Statements about what a platform, regulator or provider says come from their own pages. Rules and limits change, so check the current page before you rely on one.
- Set up and add invoice reminders · Xero Central
- Turn invoice reminders on or off · Xero Central
- Accounting API Invoices · Xero Developer
- Idempotent requests · Xero Developer
- Accounting API Payments · Xero Developer
- Accounting API Credit Notes · Xero Developer
- Xero API webhooks · Xero Developer
- Send invoice reminders automatically or manually in QuickBooks Online · QuickBooks (Intuit)
- Invoice API reference · Intuit Developer
- Payment API reference · Intuit Developer
- QuickBooks Online API Best Practices · Intuit Developer
- TaxCode API reference · Intuit Developer
- Change data capture operation · Intuit Developer
- 6240 - Duplicate Name Exists Error · Intuit Developer
Page copy drafted with AI assistance. Skofi is accountable for it. Editorial policy
Tell us about the process that keeps costing you.
A 15-minute call is usually enough to say whether this is an automation, an integration, or something that should be built, and whether we are the right people for it.
What happens on the call
- 15 minutes, no deck
- We map the process on the call
- A written scope, or an honest no