Billing & Revenue Recognition
A deep comparison of invoice generation, payment orchestration, ASC 606 revenue recognition, and ERP integration across Salesforce CPQ Billing (blng__ namespace) and the native Revenue Cloud billing engine. Targeted at architects and senior consultants evaluating or migrating between platforms.
Use Case, User Journey & Personas
When Billing & Revenue Recognition Is Needed
Core Use Cases
- Invoice generation from activated orders or billing schedules
- Payment collection — credit card, ACH, wire, direct debit
- Revenue scheduling & deferral for multi-period contracts
- ASC 606 / IFRS 15 compliance (SSP allocation, standalone selling price)
- Credit memos & adjustments for cancellations/amendments
- Dunning workflows & collections management
Triggering Signals
- Revenue is recognized over time (SaaS, subscriptions, professional services)
- Multiple performance obligations on a single contract
- Variable consideration or usage-based components
- ERP-independent billing that keeps revenue data in Salesforce
- Automated invoicing without manual AR intervention
- Customer self-service payment portal requirements
Internal Personas
External Personas
CPQ Billing — Order-to-Cash Journey
Revenue Cloud — Order-to-Cash Journey
Salesforce CPQ Billing is a separate add-on product installed in the blng__ namespace — it is not part of CPQ (SBQQ) and requires its own licensing, installation, and configuration. Revenue Cloud billing is natively integrated into the RC data model with standard object names (no custom namespace), resulting in tighter platform cohesion but a different migration path for existing Billing customers.
Both platforms cover the full order-to-cash lifecycle, but CPQ Billing relies on scheduled batch invoice runs whereas Revenue Cloud is event-driven, eliminating the "next batch window" delay. For high-volume or real-time billing requirements, RC's architecture provides a meaningful operational advantage.
Licensing Requirements
CPQ + Salesforce Billing Stack
- Salesforce CPQ — separate SKU from CRM; per-user license
- Salesforce Billing — additional add-on, not bundled with CPQ; per-user Billing license required for users who generate/manage invoices
- Payment Gateway Connector — Stripe, Adyen, CyberSource, Braintree integrations are add-on packages; some require separate ISV licensing
- Tax Engine Add-ons — Avalara AvaTax or Vertex O Series connector packages; third-party subscription costs apply
- Revenue Recognition Module — included within Salesforce Billing license but must be explicitly enabled via permission sets
- Advanced Approvals — separate Billing-tier feature for invoice approval workflows
Revenue Cloud Billing Stack
- Revenue Cloud Base — includes core billing (invoice generation, basic payment, rev rec) within RC license tier
- Revenue Cloud Advanced — adds payment orchestration, advanced dunning, complex multi-currency billing, enhanced ERP connectors
- Payment Processing — native payment gateway framework included; specific gateway connectors may require add-on packages
- Tax Integration — native TaxTreatment object supports Avalara/Vertex; connector licensing still required for third-party engines
- ERP Connector (MuleSoft / RC Accelerator) — FinanceTransaction + Platform Event–based sync; MuleSoft Anypoint license may apply
- Experience Cloud for Self-Service Portal — separate EC license for customer-facing invoice/payment portal
Many organizations buy Salesforce CPQ and assume billing is included — it is not. Salesforce Billing is a separate product that must be quoted, purchased, and installed independently. Confirm entitlements in your order form before beginning implementation. Revenue Cloud consolidates CPQ + Billing under a single RC license, which is one of the primary commercial drivers for migration.
| Capability / Feature | Billing Add-on | RC Base | RC Advanced | ERP Required |
|---|---|---|---|---|
| Invoice generation (scheduled) | ✓ | ✓ | ✓ | ✗ |
| Event-driven invoice generation | ✗ | ✓ | ✓ | ✗ |
| Basic payment collection | ✓ (gateway add-on) | ✓ | ✓ | ✗ |
| Payment orchestration (retry, routing) | ~ (custom) | ~ | ✓ | ✗ |
| Revenue recognition (ASC 606) | ✓ (Billing lic.) | ✓ | ✓ | ✗ |
| Multi-SSP allocation | ~ (complex config) | ~ | ✓ | ✗ |
| Dunning & collections automation | ~ (Flow/Process) | ~ | ✓ | ✗ |
| Native tax calculation | ✗ (add-on only) | ~ | ✓ | ✗ |
| ERP journal entry sync | ✗ (custom/MuleSoft) | ~ | ✓ | ✓ |
| Customer payment portal | ~ (EC add-on) | ~ (EC add-on) | ~ (EC add-on) | ✗ |
CPQ Billing requires assembling multiple licensed add-ons (CPQ + Billing + gateway connector + tax engine) from different product families. Revenue Cloud consolidates these under a single RC license tier, reducing procurement complexity. However, advanced capabilities (payment orchestration, multi-SSP, ERP sync) still require the RC Advanced tier or MuleSoft licensing — validate against your specific contract before scoping.
Data Model
CPQ Billing — Custom Objects (blng__ namespace)
blng__Account__c— customer account lookupblng__InvoiceStatus__c— Draft / Posted / Cancelled / Errorblng__DueDate__c— payment due dateblng__TotalAmount__c— total invoice amountblng__Balance__c— outstanding balance after payments
blng__Invoice__c— parent invoiceblng__OrderProduct__c— source order itemblng__ChargeAmount__c— line chargeblng__TaxAmount__c— calculated tax
blng__OrderProduct__c— linked order lineblng__BillingRule__c— billing rule appliedblng__NextBillingDate__c— next invoice trigger dateblng__BillingScheduleStatus__c— Active / Closed
blng__BillingRule__c— parent billing ruleblng__BillingType__c— Advance / Arrears / Immediateblng__InvoiceRunRule__c— frequency config
blng__InitialBillingTrigger__c— Order Activation / Dateblng__CancellationBillingTrigger__c— immediate / end of period
blng__Account__c— customer accountblng__PaymentType__c— Credit Card / ACH / Checkblng__GatewayToken__c— gateway reference tokenblng__AutoPay__c— auto-charge flag
blng__Account__c— payer accountblng__PaymentAmount__c— total payment capturedblng__Status__c— Processed / Declined / Refundedblng__GatewayDate__c— gateway processing date
blng__Payment__c— source paymentblng__InvoiceLine__c— target invoice lineblng__AllocationAmount__c— amount applied
blng__InvoiceLine__c— source invoice lineblng__RevenueScheduleStatus__c— Active / Closedblng__RecognitionRule__c— straight-line / event-based
blng__RevenueSchedule__c— parent scheduleblng__RecognitionDate__c— period dateblng__RevenueAmount__c— recognized revenue amountblng__RevenueDistributionStatus__c— Posted / Unposted
blng__Account__c— customer accountblng__CreditNoteStatus__c— Draft / Posted / Appliedblng__TotalAmount__c— credit amount
blng__TaxEngineProvider__c— Avalara / Vertex / Nativeblng__ServiceEndpoint__c— API endpoint URLblng__CompanyCode__c— tax engine company code
Revenue Cloud — Standard Billing Objects (no namespace)
AccountId— customer accountStatus— Draft / Posted / CancelledDueDate— payment due dateTotalAmount— total invoice valueBillingAccountId— billing account (may differ from sold-to)
InvoiceId— parent invoiceOrderItemId— source order productChargeAmount— line chargeTaxAmount— calculated tax via TaxTreatment
BillingPolicyId— governing billing policyNextBillingDate— next event trigger dateStatus— Active / Suspended / Cancelled
BillingFrequency— Monthly / Annual / UsageBillingDay— day of month for invoicingInvoiceGroupingOption— per-order / per-accountAutoPayEnabled— auto-charge flag
BillingType— Advance / Arrears / ImmediateProrationType— Daily / Monthly
AccountId— customer accountType— CreditCard / ACH / BankTransferGatewayToken— tokenized reference
AccountId— payer accountAmount— captured amountStatus— Processed / Declined / RefundedPaymentMethodId— method used
PaymentId— source paymentInvoiceId— target invoiceAppliedAmount— allocation amount
InvoiceLineId— source invoice lineRecognitionRule— Straight-Line / Percent-Complete / EventStatus— Active / Completed
RevenueScheduleId— parent scheduleRecognitionDate— period dateAmount— recognized revenue amountStatus— Posted / Unposted / Reversed
TransactionType— Invoice / Payment / RevenueRec / CreditNoteAccountingDate— posting dateDebitAmount/CreditAmount— debit/credit amountsStatus— Pending / Exported / Error
TaxEngine— Avalara / Vertex / NativeTaxCode— product tax classification codeTaxExemptionCode— exemption handling
| CPQ Billing Object (blng__) | Revenue Cloud Equivalent | Migration Notes |
|---|---|---|
blng__Invoice__c |
Invoice |
Field mapping required; Status picklist values differ |
blng__InvoiceLine__c |
InvoiceLine |
Direct 1:1 mapping; tax fields renamed |
blng__BillingSchedule__c |
BillingSchedule |
Event-driven model — NextBillingDate logic changes |
blng__BillingTreatment__c + blng__BillingRule__c |
BillingPolicy + BillingTreatment |
Two blng objects collapse into two RC objects but with different hierarchy |
blng__PaymentMethod__c |
PaymentMethod |
Gateway token format may differ per connector version |
blng__Payment__c |
Payment |
Status picklist values and gateway response fields differ |
blng__PaymentAllocation__c |
PaymentApplication |
Object renamed; relationship to InvoiceLine slightly different |
blng__RevenueSchedule__c |
RevenueSchedule |
Direct equivalent; recognition rule field mapping required |
blng__RevenueDistribution__c |
RevenueTransaction |
Object renamed; Status values differ (Unposted → Pending) |
blng__CreditNote__c |
CreditMemo |
Functionality equivalent; application logic differs |
blng__TaxIntegration__c |
TaxTreatment |
RC uses product-level TaxTreatment vs. global integration record |
| (no equivalent) | FinanceTransaction |
New RC object — enables native ERP sync without custom middleware |
The data models are conceptually equivalent — every blng__ object has a direct RC counterpart. The key advantage of RC is the elimination of the custom namespace, which reduces integration complexity, simplifies SOQL queries, and improves platform maintainability. The addition of FinanceTransaction as a native ERP bridge is the most architecturally significant new object in the RC model.
Automations
CPQ Billing Automations
- Invoice Run Batch Job — scheduled Apex batch (
blng__InvoiceRun__c) processes all billing schedules due for invoicing; can be run manually or on a cron schedule - Payment Gateway Triggers — Apex triggers fire on Invoice Posted status to initiate charge via gateway API; response written back to
blng__Payment__c - Revenue Recognition Batch — nightly/monthly batch posts
blng__RevenueDistribution__centries for scheduled periods - Dunning Automation — Flow or Process Builder sends reminder emails on aging thresholds; escalation to Collections team via Task/Case creation
- Credit Note Generation — triggered on Order cancellation or amendment; auto-creates
blng__CreditNote__cand reverses revenue distributions - Tax Calculation — callout to Avalara AvaTax or Vertex on invoice creation; tax amounts written to
blng__InvoiceLine__c.blng__TaxAmount__c
Revenue Cloud Automations
- Event-Driven Invoice Generation — no batch required; Invoice is generated automatically when billing schedule event fires or trigger condition is met
- Payment Orchestration Flows — native Flow-based orchestration handles retry logic, payment method fallback, gateway routing rules
- Policy-Based Rev Rec — recognition schedules generated automatically from BillingPolicy;
RevenueTransactionrecords posted on accounting date - ERP Sync via FinanceTransaction + Platform Events —
FinanceTransactionrecords published as Platform Events for downstream ERP consumption without custom middleware - Automated Dunning Flows — native Dunning management with configurable escalation levels, communication templates, and hold/dispute flags
- Native Tax Calculation —
TaxTreatmentobject supports real-time tax calculation; Avalara/Vertex integration is tighter and configuration-driven rather than code-driven
| Automation Type | CPQ Billing Approach | Revenue Cloud Approach | Advantage |
|---|---|---|---|
| Invoice generation trigger | Scheduled batch (blng__InvoiceRun__c); batch window delay of minutes to hours |
Event-driven; invoice generated immediately when billing event fires | RC — real-time |
| Payment charging | Apex trigger on Invoice Post; custom gateway callout logic | Native payment orchestration Flow; configurable retry & routing | RC — no-code config |
| Revenue recognition posting | Nightly batch job; blng__RevenueDistribution__c records posted in bulk |
Policy-driven automatic posting; RevenueTransaction created on accounting date |
Comparable |
| ERP journal entry sync | Custom MuleSoft / REST integration; no native bridge object | FinanceTransaction + Platform Events; configurable ERP connector |
RC — native bridge |
| Dunning / collections | Flow/Process Builder–based; aging thresholds trigger email alerts | Native Dunning Management with escalation levels and hold flags | RC — native |
| Tax calculation | Apex callout on invoice creation; error handling is custom | Config-driven TaxTreatment; Avalara/Vertex adapter built into RC |
RC — less code |
| Credit note / cancellation | Triggered by Order cancellation Flow; Apex reversal logic required | Native CreditMemo generation; auto-reversal of RevenueTransactions | RC — native |
| Invoice approval workflow | Standard Approval Process or Advanced Approvals add-on | Flow-based approval with native Invoice status management | Comparable |
| Usage-based billing aggregation | Custom Apex + usage data ingestion; no native aggregation | Usage Summaries + native aggregation rules in BillingSchedule | RC — native |
| Multi-currency conversion | Standard Salesforce multi-currency; Billing handles conversion on invoice | Native multi-currency with exchange rate management in BillingPolicy | Comparable |
Revenue Cloud's event-driven invoice architecture and native FinanceTransaction ERP bridge eliminate two of the most common pain points in CPQ Billing implementations: batch job management and custom ERP integration middleware. For architectures requiring real-time invoicing or tight ERP coupling, RC provides a significantly lower total-cost-of-ownership automation model.
Configuration (Architect Setup Level)
Effort estimates reflect architect-level setup complexity for a standard mid-market deployment. Estimates assume a greenfield implementation with no legacy data migration.
| Configuration Task | CPQ Billing Effort | RC Effort | Notes |
|---|---|---|---|
| Billing rule / treatment setup | High | Medium | CPQ requires configuring blng__BillingRule__c + blng__BillingTreatment__c per product with many inter-related fields; RC's BillingPolicy is more guided via setup UI |
| Invoice template design | Medium | Medium | CPQ uses Visualforce/HTML templates via blng__InvoiceDocument__c; RC uses LWC-based invoice rendering — both require front-end skill |
| Payment gateway integration | High | High | Both require gateway package installation, credential setup, named credentials, and gateway-specific field mapping. RC has a more standardized adapter pattern but complexity is similar |
| Tax engine integration (Avalara / Vertex) | Medium | Medium | Both require installing the connector package, configuring tax codes on products, and mapping company codes. RC's TaxTreatment is slightly more declarative |
| Revenue recognition policy setup | High | Medium–High | CPQ Billing rev rec requires understanding recognition rules, distribution methods, and posting schedules across multiple objects; RC provides a more guided setup wizard but multi-SSP scenarios remain complex |
| ERP integration | Very High | High | CPQ requires fully custom MuleSoft/REST integration; RC's FinanceTransaction + Platform Events provides a standardized data model but still requires ERP-side development and field mapping |
| Dunning workflow setup | Medium | Medium | CPQ relies on standard Flow with aging field criteria; RC's native Dunning Management is more feature-rich but has a steeper learning curve for first-time configurators |
| Multi-currency billing | High | High | Both require Advanced Currency Management + careful handling of exchange rate timing on invoices and rev rec entries. Testing effort is substantial on both platforms |
| Invoice scheduler configuration | Medium | Low | CPQ requires configuring and monitoring the Scheduled Invoice Run batch job; RC is event-driven — no scheduler configuration needed, eliminating a recurring operational concern |
| Credit note / adjustment setup | Medium | Medium | CPQ requires configuring credit note triggers and revenue reversal logic; RC's native CreditMemo handles reversal automatically but requires policy configuration for proration |
| Usage-based billing configuration | Very High | High | CPQ has no native usage aggregation — requires custom objects and Apex; RC provides Usage Summaries and native aggregation rules, substantially reducing custom code |
| Customer payment portal (Experience Cloud) | High | High | Both require Experience Cloud setup + custom LWC components for invoice display and payment entry. RC's standard objects simplify the data access layer slightly |
Low = 1–3 days | Medium = 1–2 weeks | High = 3–6 weeks | Very High = 6+ weeks including testing. All estimates assume an experienced Salesforce billing architect and do not include UAT or data migration.
RC reduces configuration effort most significantly in three areas: billing rule setup (guided UI vs. multi-object configuration), ERP integration (native FinanceTransaction vs. fully custom), and invoice scheduler management (event-driven vs. batch job monitoring). The largest residual complexity areas — payment gateway integration, multi-currency, and ERP development — remain High effort on both platforms.
Customization (Common Additions)
CPQ Billing — Common Customizations
- Custom Invoice PDF Templates — HTML/Visualforce templates rendered via
blng__InvoiceDocument__c; often requires custom CSS for brand compliance and Apex for dynamic data merging - Apex Triggers for Complex Billing Logic — triggers on
blng__BillingSchedule__corblng__Invoice__cfor custom proration, tiered usage calculations, or cross-product billing rules - Custom Payment Processing Middleware — when native gateway connectors are insufficient; full custom Apex callout to payment processor with custom error handling and retry logic
- Custom Dunning Flow Overrides — complex escalation trees (dispute holds, account suspension, partial payment plans) often require Apex-backed Flow actions
- ERP Integration via MuleSoft or Custom REST — most Billing implementations require a full custom integration layer to push invoice, payment, and rev rec data to SAP, NetSuite, or Oracle; typically the highest-effort customization in the stack
- Custom Revenue Recognition Rules — Apex-based recognition rule overrides for milestone billing, percentage-of-completion contracts, or variable consideration scenarios not supported by standard rec rules
Revenue Cloud — Common Customizations
- Custom Invoice Rendering via LWC — Experience Cloud–based invoice display components; LWC replaces Visualforce for customer-facing templates; allows reactive UI without Apex page controllers
- Complex Rev Rec Overrides via Flow — multi-SSP allocation overrides, variable consideration adjustments, and contract modification (ASC 606 catch-up) logic implemented in autolaunched Flows
- Multi-Currency Billing Customizations — exchange rate override logic, functional currency reporting, and invoice currency locking at contract inception; typically requires custom fields + Flow on BillingPolicy
- Custom ERP Connector Patterns — while FinanceTransaction provides the standard bridge, custom field mapping, account segment derivation (cost center, GL code), and error retry patterns are still implementation-specific
- Advanced Tax Calculation Overrides — jurisdiction-specific tax exemption logic, marketplace facilitator rules, and tax certificate management require custom TaxTreatment extensions or Apex callout overrides
- Usage Data Ingestion Pipeline — custom APIs or MuleSoft flows to ingest metered usage data into UsageSummary records for aggregation-based billing
- CPQ Billing Running Invoice Runs too frequently — scheduling Invoice Runs every hour creates massive batch job contention, governor limit pressure, and orphaned billing schedule locks. Run at daily or business-period intervals appropriate to your SLA.
-
CPQ Billing
Storing raw card numbers or gateway credentials in custom fields — never store PAN data in Salesforce fields. Always use tokenized
blng__PaymentMethod__c.blng__GatewayToken__creferences. PCI DSS scope creep is a significant risk in custom payment implementations. -
Both
Bypassing the billing/rev rec object model for ERP integration — directly reading Invoice/RevenueDistribution data from custom SOQL in integration middleware, rather than using the
FinanceTransaction(RC) or dedicated ERP events (CPQ), creates brittle integrations that break on platform upgrades. - Revenue Cloud Not configuring BillingPolicy before activating Orders — in RC, BillingPolicy must be associated to the product/contract before Order activation. Retroactively applying a BillingPolicy to activated orders requires data remediation and can result in missed billing events.
-
Both
Manually editing Posted invoices — modifying a Posted
blng__Invoice__cor RCInvoicedirectly (rather than issuing a credit note and re-billing) corrupts the audit trail and breaks ASC 606 compliance. Always use the platform-supported credit/re-bill pattern. - CPQ Billing Using a single global BillingRule for all products — applying one BillingRule to all product types (one-time, subscription, professional services) creates incorrect invoice timing and proration. Define distinct BillingTreatments per charge type.
- Revenue Cloud Overriding RevenueTransaction records via DML in triggers — RC's revenue engine expects to own the lifecycle of RevenueTransaction records. Custom DML manipulation outside of platform-supported overrides causes reconciliation errors and breaks the FinanceTransaction export pipeline.
- Both Ignoring multi-currency exchange rate timing — using the current exchange rate (rather than the contract inception rate) for revenue recognition in multi-currency contracts produces ASC 606 non-compliance. Lock exchange rates at the BillingSchedule or Contract level at inception.
| Customization Need | CPQ Billing Pattern | Revenue Cloud Pattern |
|---|---|---|
| Invoice PDF / HTML rendering | Visualforce page bound to blng__InvoiceDocument__c; Apex controller for dynamic merge fields |
LWC component in Experience Cloud; data fetched via wire adapters from Invoice / InvoiceLine |
| Complex billing logic override | Apex trigger on blng__BillingSchedule__c before/after insert; may require queueable for async operations |
Record-triggered Flow on BillingSchedule with Apex action for complex logic; prefer Flow-first |
| Payment retry / fallback | Custom Apex queueable; no native retry framework — must handle all gateway error codes manually | Payment Orchestration Flow with native retry config; gateway error codes mapped to Flow branching |
| ASC 606 multi-SSP allocation | Apex-based custom rec rule override; complex formula logic for standalone selling price allocation | Autolaunched Flow invoked by RevenueSchedule creation; SSP tables stored as custom metadata |
| ERP data push | MuleSoft ESB or custom REST callout from Apex; full custom field mapping and error handling | FinanceTransaction Platform Event subscription by ERP connector; standardized schema reduces mapping effort |
| Usage metering ingestion | Custom UsageData__c object + Apex aggregation to drive billing schedule quantity updates |
Native UsageSummary object; REST API endpoint for metering system to push aggregated usage data |
Revenue Cloud shifts billing customization from primarily Apex-driven to Flow-first with Apex as an escape hatch, reducing the dependency on Salesforce developers for billing configuration changes. The biggest reduction in custom code comes from the native payment orchestration framework and the FinanceTransaction ERP bridge. However, complex ASC 606 scenarios (multi-SSP, variable consideration, contract modifications) remain highly customized on both platforms — architect involvement is required regardless of the billing engine chosen.