A revenue and receivables dashboard for GoHighLevel

By General Input

Pick any date range and see what you collected, what is still owed and how late it is, then chase it without leaving the page.

Integrations

  • LeadConnector
  • GoHighLevel

Type

App

Categories

  • Finance
  • Operations

Build me a revenue and receivables dashboard for a single GoHighLevel sub-account. The built-in invoice reporting will not let me look at money over an arbitrary date range, and that is the whole point of this app. The main screen answers one question: where is my money. Scope everything to one sub-account (one location), not an agency-wide rollup across clients.

The top of the main screen is a date range picker plus the money summary for that range. Show three headline totals: collected, outstanding and overdue. Under them show a simple trend of payments received across the selected period, bucketed by day or week depending on how long the range is. Next to the trend show aging buckets for what is currently owed, split into 0-30 days, 31-60 days and 60 plus days past due. Calculate days overdue and the aging buckets in the app from each invoice's due date against today, since the API does not hand you aging.

Below the summary is a sortable invoice table with columns for customer name, amount, issue date, due date, days overdue and status. Every column sorts. Add a filter to show all invoices, unpaid only, or overdue only. Beside the invoice table put a second tab listing recent payment transactions, with amount, date, customer and payment method, so I can reconcile what actually landed against what the invoices claim.

Clicking an invoice opens a detail view showing its line items and full breakdown on one side, and that customer's recent message history on the other, so I can immediately see whether anyone has already chased them. From this detail view I can record a manual payment against the invoice, for when someone pays by bank transfer or cheque, void an invoice that should never have gone out, or send the customer a message in their existing conversation thread. Confirm before voiding, since that is destructive.

Add a Draft collections outreach button. I select one or more overdue invoices in the table, hit the button, and it kicks off a background agent. For each selected invoice the agent reads that customer's conversation history and payment record, then writes a nudge whose tone escalates with how late the invoice is: gentle and assumed-oversight at around two weeks, noticeably firmer by sixty days. Each draft must reference the actual invoice amount and what it was for, and must take into account whether the customer has already been chased or has already replied. Drafts land in a review queue inside the app where I read, edit and then send them. Nothing sends automatically. Every message is reviewed by a human first, and the review queue should make it obvious which drafts are still pending, which were sent and which I dismissed.

Data sources. Totals, the aging buckets and the invoice table read through LeadConnector using List Invoices with its status and date filters, with Get Invoice for the detail view line items, and List Transactions for the payments tab. Actions use LeadConnector Record Invoice Payment and Void Invoice. Customer context and outreach use GoHighLevel Contacts: Get Contact for customer details, Conversations: Search Conversations to find the customer's thread, Conversations: Get messages by conversation id for the message history shown on the invoice detail, and Conversations: Send a new message to send an approved message. There is no text-to-pay operation available in the catalog, so do not promise one: sending the customer a payment nudge means sending them a message on their existing conversation thread.

API notes. Invoice and payment endpoints use the Version header 2021-07-28, while conversations endpoints use 2021-04-15. Invoice endpoints take altId set to the location id and altType set to location. List endpoints page with limit plus offset, so page through them rather than assuming the first page is everything, and be careful that the totals reflect all pages in the selected range. Persist the outreach drafts and their status in the app so the review queue survives a refresh.

Related prompts

Explore more prompts
Win back no-show and cancelled appointments every morningA client health board for your GoHighLevel sub-accountsAn appointment show-rate board for your GoHighLevel front deskA morning pipeline board for your GoHighLevel dealsFill tomorrow's empty GoHighLevel slots before they go to wasteAlert your team when GoHighLevel messages go unansweredTurn new GoHighLevel bookings into rep-ready pre-call briefsTriage new GoHighLevel conversations and draft the replyRe-engage dormant GoHighLevel contacts with personal messagesEnrich and score new LeadConnector leads, alert sales on hot ones