# Credit control and order release desk for your finance team

> See every customer over their credit limit, what they owe and how old it is, then raise the limit or release the held order in one place.

- Workflow type: app
- Services: ERPNext, HubSpot, Slack Bot
- Categories: Finance, Operations
- Published: 2026-08-21

## What it does

- Lists every customer who owes you money, with the balance split by how overdue it is and anyone over their credit limit pushed to the top.
- Shows each customer's open sales pipeline next to their debt, so you can see the revenue at stake before you put an account on stop.
- Lets you raise or lower a credit limit, release a held order, record a payment that has landed, and message the account owner without leaving the screen.
- A Review this account button sends an assistant to read the customer's payment history and write a hold or release recommendation onto their record.

## What you'll need

- An ERPNext login with permission to view customers, sales orders, invoices and payments, and to change credit limits
- A HubSpot account, if you want each customer's open pipeline shown beside their balance
- A Slack workspace, if you want to message account owners from the desk

## Prompt

Build me an internal app my finance team opens before we ship anything on account: a credit control and order release desk built on ERPNext, with HubSpot pipeline context beside each balance and Slack for pinging account owners. It is a decision surface for whether to release an order, not a collections chasing tool.

The main view is a table of every ERPNext customer with money outstanding. Build it with List Documents on Sales Invoice, filtered to submitted invoices where the outstanding amount is greater than zero (status Unpaid, Overdue or Partly Paid), pulling customer, posting date, due date, grand total, outstanding amount and currency, then group the rows by customer. For each customer with a balance, call Get Document on Customer to read their credit limit, which lives in the Customer Credit Limit child table on the customer record with one row per company, plus their payment terms and credit days. Show each customer's total outstanding split into aging buckets off the due date (not yet due, 1 to 30 days, 31 to 60, 61 to 90, over 90), the credit limit, and how much of the limit is used, with a clear over limit badge. Sort customers over their limit to the top, then by size of balance. Let me filter by aging bucket and search by customer name.

Beside each customer, show what is in play in HubSpot. Use Search Companies to match the ERPNext customer by name or domain, then Search Deals for that company's deals excluding closed won and closed lost, and show the number of open deals, their total value and the nearest close date. Name matching is fuzzy, so show what was matched and let me correct or clear it, and remember the mapping so the desk does not rematch from scratch every time. If HubSpot is not connected the desk still works and the column is simply empty.

Selecting a customer opens a detail view with two lists. First, their unreleased sales orders: List Documents on Sales Order for that customer where the document is still a draft or on hold, showing order date, expected delivery date, total and item summary. Second, their unpaid invoices with age and outstanding amount. Above both, repeat the balance, limit and aging summary, show the customer's payment terms, and show the most recent hold or release recommendation from the review agent, read off the customer's activity timeline with Get Document with Metadata.

From the detail view I want to act on the account. Raise or lower the credit limit with Update Document on the Customer: the limit is a child table row, so update the Customer Credit Limit row for the right company rather than a top level field, and show me the old and new value before I confirm.

Release a held order with Submit a Document, moving that draft or on hold sales order to submitted.

Record a payment that has already landed: call Get Payment Entry against the chosen invoice to build the draft payment entry, let me adjust the amount, reference date and mode of payment, then Insert a Document to save it and Submit a Document to post it. The payment entry that comes back from the mapping method is unsaved, so it has to be inserted before it can be submitted.

Log what was agreed with Add a Comment on the customer, and on the specific order or invoice when the note is about that document.

Ping the account owner with Slack Bot Send a Message, resolving the person with Look Up User by Email from the owner's email address and falling back to a finance channel I configure if no Slack user matches. Let me pick from a couple of short internal templates and edit the message before it goes.

Add a Review this account button on the customer detail that kicks off a background agent. The agent reads that customer's payment history with List Documents over their past Sales Invoices (submitted, last 12 to 24 months, including ones already paid) and their Payment Entries, works out how late they typically pay against their agreed terms (average and worst days beyond due date, whether it is improving or getting worse, the largest balance they have carried, how often they have gone over their limit), and writes a hold or release recommendation with its reasoning and the numbers behind it back onto the customer record with Add a Comment. The app should show the latest recommendation next to the balance on both the list and the detail view, along with when it ran and who asked for it, and show a running state while the agent works so the desk stays usable.

Rules to bake in. No customer email goes out from this app at all: no customer email fields, no send buttons, no reminder templates, because this is a decision surface for the finance team and the chasing happens elsewhere. Every credit limit change and every order release must be logged as a comment naming the person in the app who did it, with the old and new limit or the order reference, so the audit trail lives on the ERPNext record rather than in the app's own storage. Show amounts in the invoice currency and never add different currencies into one total. Keep the write actions visually separate from the browsing view and put a confirm step in front of each one so nothing gets released by accident.

## How to customize

- Change the aging buckets from 30, 60 and 90 days to whatever your finance team reports on
- Decide who can change credit limits and release orders, and who can only look
- Choose whether messages go straight to the account owner or into a shared finance channel

## FAQ

### Does this email customers about their overdue invoices?

No. This is a decision desk for your finance team, not a chasing tool. There are no customer email fields and no send buttons anywhere in it. The only outbound message it can send is an internal Slack note to the account owner.

### Where does the credit limit come from, and does changing it here change ERPNext?

The limit is read from the customer record in ERPNext, and any change you make in the desk is written straight back to that same record. Nothing is stored in a separate copy that can drift out of date.

### What actually happens when I release a held order?

The order moves from held or draft to submitted in ERPNext, exactly as if someone had released it inside the ERP, and a comment is written on the record naming who released it and when.

### Do I need HubSpot for this to work?

No. Without it you still get the full balances, aging and order release desk. HubSpot just adds the pipeline column so you can see what revenue is at risk before you block an account.

### Is there a record of who changed a credit limit?

Yes. Every limit change and every order release is logged as a comment on the customer record naming the person who did it and the old and new values, so your audit trail lives in ERPNext rather than inside the app.

Use this prompt in General Input: https://www.generalinput.com/prompts/credit-control-and-order-release-desk-for-your-finance-team