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.