Mango Billing App Overview
Customer-side AR, automated dunning, ASC 606 revenue recognition, and commissions β the finance workflow layer that sits on top of your existing Stripe + Billing data.
What is the Mango Billing App?
Mango Billing is the workflow-aware AR / finance surface for the tenant business β the customer-side of the revenue stack, distinct from Mango Spend (employee reimbursements) and Procurement (vendor-side spend). It builds on the existing Billing::* domain layer (Invoice, Subscription, Customer, Refund, CreditTransaction) and adds the things finance actually owns: AR aging, dunning sequences, ASC 606 revenue recognition with period close + GL export, tiered-accelerator commission plans, and Anrok tax sync β plus an Ask AI agent for finance questions.
Mango Billing replaces the legacy sysadmin BillingInvoicesController / CustomerBillingController surface with a tenant-scoped app finance teams own.
Core Value Proposition:
- π AR Aging at a Glance β 0β30 / 31β60 / 61β90 / 90+ buckets across every open invoice.
- β° Automated Dunning β Configurable cadence (default day 7 / 14 / 30 / 45) with pause / resume mid-negotiation.
- π ASC 606 Revenue Recognition β Per-subscription schedules, monthly entries, period-close workflow, and journal-entry CSV export.
- π° Tiered Commissions β Per-event-type accelerators with quarterly attainment tracking and payout CSV.
At a Glance
| β±οΈ Setup Time | π΅ Payment Rail | π§Ύ Tax Provider | π RevRec Method |
|---|---|---|---|
| ~30 minutes | Stripe (unchanged) | Anrok (optional) | Straight-line, monthly |
Perfect For:
- π§Ύ Finance / Controllers β Run AR aging, advance dunning, and close the books from one app instead of stitching reports together.
- π Sales Operations β Approve quarterly commissions with tier-boundary splits visible per deal.
- π CFOs and audit teams β ASC 606 schedules with period-close stamping and journal CSVs ready for NetSuite / QuickBooks.
How It Works
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β MANGO BILLING β FINANCE WORKFLOW LAYER β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ β
β β STRIPE + βββββββΆβ AR AGING + βββββββΆβ DUNNING β β
β β WEBHOOK β β DASHBOARD β β SEQUENCES β β
β β (existing) β β (buckets) β β (auto+pause) β β
β ββββββββββββββββ ββββββββ¬ββββββββ ββββββββ¬ββββββββ β
β β β β
β βΌ βΌ β
β ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ β
β β GL CSV ββββββββ PERIOD β β WRITE-OFF / β β
β β EXPORT β β CLOSE β β REFUND β β
β β (NetSuite/QB)β β (RevSchedule)β β β β
β ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ β
β β
β COMMISSIONS ββββ auto-fires on Proposal won / Renewal β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Where Mango Billing Sits in the Revenue Stack
ββββββββββββββββββββββββ
β MANGO GTM β β B2B sales funnel
β (prospect β close) β
ββββββββββββ¬ββββββββββββ
β won proposal
βΌ
ββββββββββββββββββββββββ
β MANGO BILLING β β AR / dunning / RevRec /
β (finance workflow) β commissions
ββββββββββββ¬ββββββββββββ
β
βΌ
ββββββββββββββββββββββββ
β MANGO CS β β post-sale customer success
ββββββββββββββββββββββββ
(Mango Spend = employee reimbursements; separate app.)
(Procurement = vendor-side planned spend; separate app.)
Key Features
π§Ύ Invoices & Collections
The day-to-day list view for finance β every invoice tenant-scoped, paid / open / overdue / void filterable.
| Feature | Description |
|---|---|
| Invoice list + detail | Full CRUD on Billing::Invoice rows |
| Mark paid / void / write off / send reminder | Per-invoice quick actions |
| Manual invoice creation | For non-Stripe billing (one-off, contracted, etc.) |
| Stripe webhook sync | Billing::WebhookProcessor keeps local invoice rows current |
| Download PDF | Per-invoice PDF on demand |
| AR aging dashboard | Bucket breakdown across 0β30 / 31β60 / 61β90 / 90+ |
Use Case: Controller opens the AR aging dashboard at month-end, sees that 90+ bucket has grown 18%, drills into the oldest invoices still in active dunning, and pauses two that are mid-negotiation.
π‘ Pro Tip: Manual invoices coexist with Stripe invoices in the same list β use them for one-off services or contracts where Stripe isnβt the rail. Default payment terms are configurable (default Net 30).
β° Dunning Sequences
Per-invoice state machines that advance automatically as days-past-due cross thresholds.
| Feature | Description |
|---|---|
| Per-invoice DunningSequence | One row per invoice in dunning, with state machine |
| Configurable cadence | Default day 7 / 14 / 30 / 45 (set per business) |
| Hourly advance job | Billing::DunningAdvanceJob advances sequences past thresholds |
| Pause / Resume | Stop dunning a customer mid-negotiation, resume when ready |
| DunningEvent audit log | Every transition (advance, pause, resume, complete) recorded |
Use Case: A customer is renegotiating a contract β finance pauses their dunning sequence from the invoice detail page so collections emails stop, then resumes once the new terms are signed.
π‘ Pro Tip: The cadence days are configurable as a comma-separated list. If you want a 5-step cadence (
7,14,30,45,60), set it in Mango Billing β Settings β every new dunning sequence picks it up.
π Revenue Recognition (ASC 606)
Straight-line revenue recognition across the contract term, with period-close workflow.
| Feature | Description |
|---|---|
| RevenueSchedule | One per subscription / contracted invoice |
| Monthly entries | RevenueScheduleEntry rows with period_start / period_end |
| Straight-line allocation | Total revenue spread evenly across the term |
| Period-close workflow | Stamp recognized_at atomically on entries when closing the period |
| Journal-entry CSV export | Drop into NetSuite, QuickBooks, etc. |
Use Case: End of month, finance reviews the current periodβs revenue schedule entries, closes the period (stamps recognized_at), exports the journal-entry CSV, and uploads it into NetSuite.
π° Commissions
Tiered-accelerator commission plans with per-rep attainment tracking. Auto-fires on proposal won and renewal.
| Feature | Description |
|---|---|
| CommissionPlan + Tiers | Plan with nested CommissionPlanTier rows per event type |
| Tiered accelerators | E.g. 8% to $500k, 12% above |
| Per-event-type rates | Different rates for new logo, renewal, expansion |
| Auto-fire on proposal won | Billing::ProposalService#mark_won triggers CommissionEarning creation |
| Auto-fire on renewal | RenewalProposalGenerator triggers earnings the same way |
| Quarterly attainment | CommissionAttainment rolls up per rep |
| Earnings approval + payout CSV | Bulk approve, export for finance / payroll |
Use Case: Sales ops opens the commissions tab at quarter-end, reviews per-rep earnings with attainment-to-date, sees tier-boundary splits on the largest deals (the part that crossed $500k earned the 12% accelerator), bulk-approves, and exports the payout CSV.
π§Ύ Tax (Anrok)
Optional integration β flip on, paste API key, every invoice syncs.
| Feature | Description |
|---|---|
Billing::Anrok::Client |
REST wrapper around the Anrok API |
Billing::AnrokSyncJob |
Fires on invoice creation |
TaxTransaction |
Audit record per synced invoice |
| Jurisdiction liability summary | View totals owed by jurisdiction |
Tax is off by default. Without Anrok, invoices still flow β finance can add tax manually on manual invoices.
π Refunds & Credits
Built on the existing Billing::Refund + Billing::CreditTransaction services β the same primitives the platform has always used, now with a finance-team-owned UI.
| Feature | Description |
|---|---|
| Apply refund | Full or partial against a paid invoice |
| Issue credit | Customer credit balance via Billing::CreditService |
| Write-off | Long-overdue invoices β AR buckets rebalance automatically |
π Analytics
Billing::AnalyticsService powers the analytics tab.
Standard Metrics:
- DSO (Days Sales Outstanding)
- Collection rate
- Aging detail across buckets
- MRR / ARR snapshots from
Billing::Subscription
CSV Exports:
- Invoices
- Commission earnings
- Journal entries (revenue recognition)
π€ Mango Billing AI Agent
Agents::MangoBillingAgent answers finance questions from the Ask AI sidebar.
| Capability | Example question |
|---|---|
| AR aging | βWhich invoices are in 30+ day dunning?β |
| Search invoices | βShow me all invoices over $50k from Q3β |
| Customer financial summary | βWhatβs the open balance for Acme?β |
Tools are admin-gated β the agent doesnβt surface to non-finance users.
π€ GL Export
Dedicated export controller (GlExportController) β period-close drops a journal CSV that maps directly into NetSuite or QuickBooks chart-of-accounts.
β° Background Jobs
| Job | What it does |
|---|---|
Billing::DunningAdvanceJob |
Hourly β advances dunning sequences past their next threshold |
Billing::RevenueRecognitionJob |
Generates / updates monthly RevenueSchedule entries |
Billing::AnrokSyncJob |
Syncs invoice tax to Anrok on creation |
Billing::WebhookProcessorJob |
Processes Stripe webhook events into local Billing::Event rows |
Billing::ProposalExpirationJob |
Marks proposals expired when their valid-until passes |
Billing::TrialExpirationJob + TrialWarningJob |
Drive trial-end emails |
Billing::SyncUserCountJob + UserCountSyncSchedulerJob |
Keep usage-based pricing accurate |
π Notifications
| Mailer | When |
|---|---|
Billing::TrialMailer |
Trial warning + expiration |
Billing::ProposalMailer |
Proposal sent / signed / expired |
| Dunning emails | Per-invoice as the sequence advances (handled by DunningCadenceService) |
Limits & Specs
| Spec | Default |
|---|---|
| Default payment terms | Net 30 (configurable) |
| Default dunning cadence | Day 7 / 14 / 30 / 45 (configurable) |
| Revenue recognition method | Straight-line, monthly |
| Tax provider | Anrok (optional) |
| Payment rail | Stripe (unchanged) |
| Allowed roles | Admin, Super Admin (configurable) |
User Roles & Permissions
| Role | Capabilities |
|---|---|
| Member / Manager | No access by default β Mango Billing is a finance-team surface |
| Admin | Browse invoices, run dunning, close periods, approve commissions, configure tax, export CSVs |
| Super Admin | Same as Admin |
The allowed roles list is configurable per business; defaults to admin and super_admin.
How We Compare
Mango Billing sits in the finance / AR / RevRec workflow category β alongside Maxio (formerly SaaSOptics + Chargify), Sage Intacctβs billing module, and Stripeβs own billing dashboard.
| Feature | MangoApps Workforce | Maxio | Stripe Billing | Chargebee |
|---|---|---|---|---|
| AR aging dashboard with buckets | β | β | β‘ | β |
| Configurable dunning cadence + pause/resume | β | β | β‘ | β |
| ASC 606 RevRec with period close | β | β | β | β‘ |
| Journal CSV export (NetSuite/QB) | β | β | β | β |
| Tiered commission plans | β | β | β | β |
| Anrok tax integration | β | β‘ | β‘ | β‘ |
| AI agent for finance questions | β | β | β | β |
| No additional billing platform (sits on Stripe) | β | β | n/a | β |
| Legend: β Included | β Not Available | β‘ Limited / partial |
Why MangoApps Workforce?
- π Unified Platform β Mango Billing builds on the same
Billing::*domain layer the platform has always used; Stripe stays the rail, no migration, no new billing platform. - πΌ Commissions Built-In β Most billing tools require a separate commissions product (CaptivateIQ, Spiff). Mango Billing fires earnings on
proposal_wonand renewal directly. - π€ AI-Native β Ask AI agent ships with the app; no Looker / Mode dashboard required to ask βwhatβs our DSO this quarter?β
Getting Started
For Administrators
- Enable the app β In Admin β Apps Marketplace, find Mango Billing and toggle
app_enabledon. Mango Billing replaces the sysadmin invoice surface β admins now manage AR from this app. - Confirm Stripe is connected β Mango Billing uses the existing
Billing::StripeService+WebhookProcessor. No re-connection needed; existing webhooks keep firing. - Set payment terms + dunning cadence β Mango Billing β Settings. Defaults: Net 30 terms, day 7 / 14 / 30 / 45 dunning. Tune per your collections policy.
- (Optional) Connect Anrok β Flip
tax_enabledand paste your Anrok API key. Every invoice will sync; jurisdiction liability appears in the tax tab. - (Optional) Build commission plans β Commissions β Plans. Define tiers per event type (new logo / renewal / expansion). Assign reps. Earnings auto-fire on proposal won.
- Run a test period close β Generate a few revenue schedule entries, close the period, verify the journal-entry CSV maps cleanly to your NetSuite / QuickBooks chart of accounts.
Best Practices
- β Configure dunning cadence before turning the app on β The default day 7 / 14 / 30 / 45 fits most SaaS businesses, but tune it before any invoices enter the queue.
- β Pause sequences during disputes β The pause / resume is there for a reason. Donβt let collections emails sour an active negotiation.
- β
Close the period monthly, not quarterly β Stamping
recognized_atatomically per period is much cleaner than retroactively closing three months at once. - β Review commissions before quarter-end approval β The tier-boundary splits matter; spot-check the largest deals to confirm accelerators applied where they should.
- β Use manual invoices sparingly β They sidestep Stripe entirely. Track them carefully in your reconciliation.
- β Keep Anrok keys in environment / secret store β Never hard-code in settings; rotate per your security policy.
Frequently Asked Questions
Q: How does Mango Billing differ from the sysadmin invoice surface?
A: The sysadmin billing pages are a platform-admin surface designed for MangoApps staff. Mango Billing is a workflow-aware tenant app that adds dunning, revenue recognition, commissions, and tax on top of the same Billing::Invoice / Billing::Customer domain layer. The sysadmin surface is retired when Mango Billing ships.
Q: Do I need to migrate historical data?
A: No. Mango Billing reads the existing Billing::* tables in place β Invoice, Subscription, Customer, Refund, CreditTransaction, Event. New tables only back dunning, revenue recognition, and commissions; history stays where it is.
Q: What if I donβt run commissions in-house?
A: Turn off commissions_enabled in Settings. The rest of the app (invoices, dunning, RevRec, tax) still works, and commission plans and earnings stay hidden from the nav.
Q: Is Anrok required for tax?
A: No. Tax is off by default. Flip tax_enabled and paste an Anrok API key to sync. Without Anrok, invoices still flow β finance can add tax manually on manual invoices.
Q: Does Mango Billing replace Stripe?
A: No. Stripe remains the payment rail. Mango Billing sits on top of the existing Billing::StripeService + WebhookProcessor β webhook events keep updating local Billing::Invoice records as they always have. Mango Billing adds the workflow layers finance owns (dunning, close, commissions).
Q: Can the AI agent take actions, or only answer questions?
A: The Mango Billing agent is a read agent β it surfaces AR aging, searches invoices, summarizes customer balances. It doesnβt write. Pause a dunning sequence or void an invoice from the controller actions in the app, not from the agent.
Related Resources
- Apps Overview β Browse the full marketplace catalog
- Mango Spend β Employee reimbursements (the spend side)
- Mango CS β Customer success (the post-sale side)
- Procurement β Vendor-side planned spend
AR aging, dunning, RevRec, and commissions β finance workflow on top of the Stripe + Billing data you already have.