
Define each commercial requirement as one object, then release only after three checks pass: invoice preview, journal posting, and settlement matching when used. In Recurly, verify Credit Invoices, Only Bill What Changed, and Subscription Billing Terms before migration, and keep External SKU mappings stable across ERP/reporting. Use Plan for core cadence, Add-On for optional recurring attachments, and SKU for standalone sales so retries and mid-cycle edits stay idempotent instead of duplicating charges.
Treat your catalog as a billing model, not a naming exercise. The label you choose for a SKU, Plan, or Add-On affects more than merchandising. It can influence charge creation, how offerings are managed, what repeats on renewal, and what your team has to explain when exceptions show up later.
Across platforms, the shared terms sound simple, but the mechanics are not identical. In Recurly, an Item Catalog is the collection of sellable units. Plans are recurring billing products that define billing frequency and base price. Add-Ons are optional features, services, or products sold alongside a subscription plan. BillingPlatform describes a configurable catalog for pricing, ratings, and bundles, while Upmind centers its catalogue on one-time, recurring, tiered pricing, and flexible bundles. The broad idea is the same, but the operational edges differ.
If you own finance, ops, or product, your first job is to make each catalog object testable. Every object should have a stable identifier, a business owner, and an expected invoice outcome before anyone creates it in production. If your platform supports an External SKU field, use it to map catalog entries back to your ERP, product data, or reporting model instead of stuffing that meaning into a display name.
This is where small platform constraints start to matter. In Recurly, one catalog code field has a 50-character limit and accepts only numbers, lowercase letters, dashes, pluses, and underscores. That sounds minor until a migration team discovers halfway through a bulk upload that internal naming conventions do not fit. Validate identifier rules up front, especially if you are moving data from multiple legacy products or channels.
Use a simple rule for the rest of this guide: if you cannot predict the billing behavior of an object, do not publish it yet. Before launch, you should be able to answer three questions: what invoice line will this create, where can discounts apply, and how will you verify the object after a retry or mid-cycle change? For add-ons in Recurly, one concrete checkpoint is the add_on_source value in the API, which can distinguish an item-based add-on from another origin.
Do not mistake platform flexibility for permission to create endless objects. In Recurly, there is no cap on the number of plans you can create, but an uncapped count can still lead to plan sprawl, duplicate offers, and manual crosswalks if your boundaries are loose. The goal is not to maximize catalog depth. It is to make every SKU, Plan, and Add-On predictable under growth, discounts, and retries, with evidence you can verify before those choices hit reconciliation.
For a related breakdown, read Retainer Subscription Billing for Talent Platforms That Protects ARR Margin.
Start by verifying your site can support the catalog behavior you expect before any migration or redesign. For Item Catalog, confirm Credit Invoices, Only Bill What Changed, and Subscription Billing Terms are enabled. Sites created after July 26, 2018 should have these features enabled automatically, but older sites should be verified directly. Run two checks before you proceed: confirm a test credit creates its own invoice, and confirm an immediate subscription change on the same plan bills only the delta.
Step 1. Confirm feature gates and migration path. Decide whether you will create items through the Items dashboard, Recurly API v2, Recurly API v3, or the Multi-Item Upload Guide. Recurly supports all four paths, so pick one early and align controls around it. If you are on API v2.29, log that explicitly as an older-API risk; Recurly positions v2 as older and v3 as the newer JSON API, with v2021-02-25 listed as GA latest.
Step 2. Build one current-state source document. Capture your current Product Catalog, active billing cycles, coupon rules, and dunning states in one shared spec. This gives product, finance, and ops one baseline to compare against the target catalog.
Step 3. Assemble a baseline evidence pack. Collect invoice exports, representative ledger journal samples, payout settlement files from your current stack, and your top exception reasons. Use this as your before-state proof so invoice-shape changes and exception shifts are visible quickly.
Step 4. Assign rollback ownership before import starts. Choose the migration method up front and assign one owner with authority to stop or reverse changes. Bulk import without clear rollback ownership is a common way to lose control when invoice output diverges from baseline evidence. For another planning example, see A Guide to 529 Plans for US Expats.
Set one primary object per requirement up front. If you model one requirement in multiple places, the catalog and reporting usually fragment.
Use these as platform defaults, not universal laws:
If a requirement affects subscription behavior, default to Plan on this platform. If it is optional and attached to an existing subscription, default to Add-On. If it is sold independently, default to SKU. Use Packages & Bundles only when dependency logic is explicit and auditable.
| Requirement pattern | Default object | Invoice effect | Reporting effect | Main tradeoff |
|---|---|---|---|---|
| Core recurring offer with its own billing cadence or amount | Plan | Base recurring subscription charge | Cleaner plan-level subscription reporting | Plan sprawl if used for minor options |
| Optional recurring feature attached to a subscription | Add-On | Separate recurring line with the base charge | Separate visibility into add-on revenue and attach behavior | Reusable vs plan-specific modeling can fragment reporting if naming is inconsistent |
| Product sold on its own (one-time or recurring) | SKU | Its own sellable line item | Clear item-level tracking for standalone sales | Can duplicate plan logic if both are used for the same offer |
| Combined commercial package with required component relationships | Packages & Bundles | May appear as one sold item but operate as multiple items | Component reporting can become ambiguous if parts are not explicit | More reconciliation effort when dependency rules are unclear |
Checkpoint: each product requirement should map to one row in this table. If one requirement needs two owners, rewrite the commercial rule before you create catalog objects.
Use packages or bundles when you need dependency controls, for example dependencies and thresholds, and can audit component behavior. Avoid bundle-first modeling when the only reason is UI convenience.
A practical test: if finance needs clear component-level reporting, discount analysis, or exception handling, verify the bundle can be traced cleanly through invoice output, ledger journals, and settlement or payout files. If not, model with separate objects first.
Write these into the same shared spec used for migration approval:
Keep one naming key per commercial concept. If the same concept appears separately as plan variant, add-on, and bundle component, line-item reporting will fragment and make later plans, add-ons, coupons, and dunning reviews harder.
If you want a deeper dive, read Gift Subscriptions and Prepaid Plans: How to Add Gifting to Your Platform Without a Billing Nightmare. If you want a quick next step on this topic, Browse Gruv tools.
Do not release a SKU, Plan, or Add-On unless you can predict its invoice line, tax treatment, and journal outcome in advance. That is the control that turns catalog design into auditable operations.
1) Define expected billing and accounting output per object. Create one mapping row per catalog object at line-item granularity, and include:
one-time, recurring, or usage-based)Tax is calculated per invoice line from configured tax, customer, and product inputs, and preview and final invoices can differ if rates change before finalization.
2) Document your actual platform event sequence. Do not assume a universal provider flow. Record your platform's sequence, for example: catalog change -> charge generation -> payment confirmation -> journal posting -> payout/settlement eligibility, and assign an owner plus observable record for each handoff.
Use one evidence pack sample per product family: invoice preview, final invoice, posted journal entry, and settlement or payout report where applicable. Payment success alone is not enough; posted journals still need to match expected account routing.
3) Verify proration, usage cutoffs, and finalization behavior. Proration applies to billing-impacting changes in the current cycle, not every edit. Explicit triggers include price or quantity changes and adding or removing subscription items. For metered or consumption-based billing, verify usage cutoff timing against invoice finalization timing. During a finalization grace period, late usage can still affect the prior period. Stripe's default grace period is 1 hour, configurable up to 72 hours (3 days).
4) Gate every release on three matches.
Invoice preview match for line items, proration behavior, and tax treatmentLedger posting match for intended journal accounts and amountsSettlement report match (when applicable) to trace billed to collected amountsIf any match fails, fix the mapping before release.
Related: Subscription Billing for Platforms: How to Manage Plans Add-Ons Coupons and Dunning.
Pick the model your team can bill, explain, and close cleanly each cycle. If you cannot trace how a charge is created, discounted, and finalized, start with the simpler structure and add complexity only after controls are reliable.
| Model | Section detail |
|---|---|
| One-time billing | A single invoice event. |
| Subscription billing | Adds recurring invoice generation on a defined cycle; subscriptions automatically generate invoices each cycle. |
| Hybrid billing | Combines recurring, usage, and one-time charges, so finance must validate more line types and timing paths. |
| Dynamic billing | Treat as vendor-specific unless your own platform defines it clearly; confirm invoice triggers, what can change amounts, and what evidence finance will use to approve outcomes. |
Compare pricing models by review and control effort, not just revenue shape. One-time billing is a single invoice event. Subscription billing adds recurring invoice generation on a defined cycle, and subscriptions automatically generate invoices each cycle. Hybrid billing combines recurring, usage, and one-time charges, so finance must validate more line types and timing paths.
Treat dynamic billing as vendor-specific unless your own platform defines it clearly. Before you adopt it as a catalog pattern, confirm what triggers invoice creation, what can change amounts, and what evidence finance will use to approve outcomes.
Do not lead with usage-based charging if your usage validation is still weak. Usage-based billing depends on ingestion, catalog setup, billing, and monitoring, so missing or late events can break trust in final invoices.
Use fixed recurring cycles first, for example monthly or annual, then phase in usage when ingestion checks are dependable. Before launch, reconcile a full period of raw usage inputs to final invoice amounts.
Set coupon rules before release so discounts stay auditable. Platforms can apply one or more discounts at the invoice, subscription, or subscription item level, and finalized invoices cannot be changed in most ways.
Define three controls in policy:
Include discounted invoice samples for each allowed case in your evidence pack.
Split catalog objects by payment rail only when the rail changes what you must collect or how you operate. ACH Direct Debit supports customers with US bank accounts, and acknowledgment of success or failure can take up to 4 business days. Australia BECS Direct Debit supports customers with Australian bank accounts, requires mandate capture and agreement acceptance, can take up to three business days for success or failure notification, and may start with default limits of 10,000 AUD per transaction and 10,000 AUD per week.
If those rail constraints do not change the commercial offer, keep one Plan and vary payment method. If mandate requirements, payment timing, or limits materially change operations, a rail-specific variant can be justified.
You might also find this useful: BECS Direct Debit for Australian Subscriptions: How to Add ACH-Equivalent Billing in Australia.
Treat every Item Catalog edit as a controlled release, not routine admin work. If a change does not have a version ID, approver, effective window, and linked test evidence, do not promote it.
Step 1. Create one release record per change. For each item, bundle, or pricing update, log: version ID, approver, effective window, change path, and test artifacts. Include the change path every time, because edits can come from both the Items dashboard (view, edit, disable, re-enable) and Recurly API v2 or Recurly API v3.
Before approval, ask one question: can you answer, from one record, what changed, who approved it, when it takes effect, how it was changed, and where billing tests are recorded?
Step 2. Gate in sequence and fail fast. Run gates in this order: schema validation -> invoice simulation -> ledger simulation -> reconciliation dry run -> production rollout. Keep this as internal operating discipline, not a vendor-mandated sequence.
Start with JSON Schema to enforce consistency and validity, then run invoice preview to inspect totals, lines, taxes, and discounts before live billing. After that, verify ledger and reconciliation behavior with your own simulations so a structurally valid payload does not still produce billing or posting surprises.
Step 3. Enforce UI/API parity. Apply the same approval and evidence rules to dashboard edits and API releases. Otherwise, a dashboard change can bypass controls you enforce only in API pipelines.
This parity check is especially important when you operate across Recurly API v2 and Recurly API v3. Test a representative change through each route and compare resulting item state, version record, and evidence links.
Step 4. Define rollback triggers before rollout. Set explicit rollback triggers tied to measurable failures: invoice mismatch vs preview, journal mismatch vs simulation, or a release-correlated rise in dunning. Do not use vague "looks off" criteria.
For dunning, set thresholds from your own baseline. Dunning starts when an automatic invoice fails its initial payment attempt and continues through past-due recovery, so monitor early failed-payment behavior right after release. During rollout retries, use idempotency keys on POST requests when supported so retry logic does not create duplicate side effects.
We covered this in detail in Document Management for Accounting Firms: Secure Intake, Retrieval, Retention, and Automation.
Pick the platform that keeps reconciliation and change control verifiable under stress, not the one with the longest feature list.
Compare only what is documented, and mark gaps as unknown instead of assuming parity.
| Vendor | SKU and add-on modeling signal | Dependency control | Export traceability | What to verify yourself |
|---|---|---|---|---|
| Recurly | Uses Items as catalog objects. Supports optional External SKU for cross-system mapping. Items can be created in UI, v2 API, and v3 API. | Unknown in this source set for bundle-style dependency rules. | Documents item performance exports to assess impact of disabling or editing an item. | Create one item with External SKU, edit and disable it, then confirm exports still let you trace the change clearly. |
| BillingPlatform | Documents one-time, subscription, consumption-based, hybrid, and dynamic billing on one platform. | Documents dependencies and thresholds to control how products and services are combined and sold. | Unknown in this source set. | Test a blocked combination and a threshold-triggered combination, then inspect billing outputs and available trace fields. |
| Upmind | Bundles appear as one item in the store catalog and basket. | Bundle composition excludes products or services listed only as options or attributes. | Unknown in this source set. | Build a bundle with one standalone product and one option-only entry to confirm the restriction and verify how the bundle is presented. |
Use Catsy as a procurement lens, not as a billing-platform equivalent. Its pricing page is framed as "Packages Built For Your Use Case," shows outputs included as 5, 10, and Unlimited, and lists onboarding ranges of 30 Days, 90 Days, or Custom with managed delivery. Use that structure to ask each vendor how billing design affects contract scope, onboarding effort, and configuration ownership.
When docs are thin, define validation tests before committing architecture. The common failure mode is a strong demo with weak proof of line-item traceability or uneven governance between UI edits and API releases. If reconciliation clarity is non-negotiable, prioritize documented identifiers and trace exports over broad feature claims.
For a step-by-step walkthrough, see The Best Google Workspace Add-Ons for Productivity.
Do not go live until recovery rules are documented for catalog changes, retries, and week-one monitoring. Early failures are usually quiet billing errors: wrong effective dates, duplicate processing after retries, and discounts applied where finance did not expect them.
For each Plan change, downgrade, upgrade, and mid-cycle Add-On change, set the allowed effective timing before launch. Recurly supports changes immediately, at the next bill date, or at renewal, and mid-cycle changes may create prorated credits and charges. Because proration depends on site settings and change configuration, do not assume one global result. Use invoice previews for each path and save expected invoice lines, credit behavior, and effective dates as release evidence.
Reuse the same idempotency key for POST retries so network retries do not create second charges. Stripe states same-key retries can return the cached result within 24 hours. Also handle duplicate webhook events, since payment lifecycle updates are asynchronous and repeated notifications should not create extra charges, credits, or entitlement changes. Test by replaying the same request and event payload, then confirm one charge object, one invoice outcome, and one state transition.
You do not need one universal playbook across platforms, but you do need clear decision paths: * If SKU mapping is wrong, stop new sales on the affected object, identify impacted invoices and exports, and publish the corrected mapping before re-enabling. * If Packages & Bundles were used where separate lines were required, correct the model for future sales first and avoid rewriting posted invoice history unless finance approves. * If a promotion breaks invoice expectations, pause it, isolate affected open invoices and renewals, and compare expected vs. actual discount lines before reactivating. Keep an evidence pack: impacted customers, one incorrect invoice, one corrected example, and a reconciliation note.
Review failed payments and track dunning separately as an operating signal. Dunning is the retry-and-remind workflow for failed subscription payments, and Recurly Commerce defaults to retries every 2 days up to 5 times. Use trend and recovery-category views to detect drift, but judge spikes against your own baseline. In the same daily pass, check discount leakage and triage reconciliation exceptions so small catalog errors do not persist through a full billing cycle.
This pairs well with our guide on Fair Credit Billing Act for a Business-of-One: How to Dispute Credit Card Billing Errors.
Treat your catalog as core billing infrastructure, not a naming exercise. The practical rule is simple: model SKU, Plan, and Add-On choices around invoice evidence and subledger-to-GL clarity first, then worry about catalog elegance. Use this sequence when you move from design to release:
Lock prerequisites first. Start from one controlled catalog record, ideally with API-first governance and explicit metadata standards, so you are not making pricing decisions from scattered docs or UI memory. Your checkpoint is whether the same object definition can be traced to invoice output and ledger mapping with a clear review trail.
Draw object boundaries before pricing. If the change affects billing frequency or core charge logic, keep it in the plan layer. The vendor is explicit here: the plan is the blueprint that controls how often and how much a customer is charged. In many implementations, attachable optional options are modeled as add-ons, while independently sold and reported items are modeled as SKUs. The red flag is modeling one commercial option in two places, because reporting can split and invoice lines can become harder to interpret.
Map each object to billing and accounting events. For every catalog object, define the expected invoice line, payment event, and journal outcome before you release it. The verification detail that matters most is subledger-to-GL reconciliation for the period. Compare the open receivables or payables balance in the subledger to the corresponding general ledger balance and make sure the new catalog object lands where finance expects.
Choose pricing with your evidence quality in mind. BillingPlatform supports dependencies and thresholds for combined offers, which is useful when bundles have real rules behind them. If usage evidence is still weak, a simpler recurring model can be a safer starting point than jumping straight to complex usage logic. A pricing model your team can explain and reconcile usually outperforms one that is hard to validate.
Promote changes only through release gates. Do not rely on a successful screen save. Run test mode simulation first, then invoice and ledger dry runs, plus a reconciliation check. Release gates exist for exactly this reason: promotion should depend on health criteria, not confidence alone.
Make retries and rollbacks explicit. Keep idempotency keys stable on POST retries within Stripe's 24-hour key window, and test duplicate-event handling so repeated calls return the same result instead of creating extra charges. Pair that with a rollback record that names the prior approved catalog revision, the owner, and the trigger for redeploying it.
Hold back anything you cannot recover from cleanly. As an operating rule, if a proposed change cannot pass simulation, reconciliation, and rollback checks, it is not ready for production in your environment.
That is the real job behind catalog management in billing: not more objects, but fewer surprises. Want to confirm what's supported for your specific country/program? Talk to Gruv.
A SKU is an internal code for tracking inventory and sales reporting, so treat it as an identifier first. In Recurly, a Plan is the subscription blueprint that controls billing frequency and charge amount, while an Add-On is an extra recurring charge billed alongside the base subscription. If a choice changes renewal logic or billing cadence, it belongs closer to a plan than a reporting code.
A practical default is to use a separate SKU when you need standalone tracking or sales reporting, and keep it as an Add-On when it is optional but attached to the subscription and billed with it each period. The red flag is creating both for the same commercial option, because you will split reporting and make invoice lines harder to explain.
Bundles are useful when product dependencies or thresholds must control how items are combined and sold. The tradeoff is that combined offers can hide which underlying component drove a charge or exception unless your invoice and export design stays explicit. Before release, verify one sample invoice and one downstream export for each bundle pattern, not just the catalog setup screen.
A practical baseline is invoice previews, a ledger posting check, and a clear usage evidence trail before you turn on recurring charges tied to usage. BillingPlatform states its usage processing can collect, deduplicate, consolidate, convert, and route usage data before billing, and that deduplication point matters because bad usage inputs create clean-looking but wrong invoices. If your usage validation is weak, start with fixed recurring charges and add usage later.
Reuse the same idempotency key on POST retries and keep that key stable for up to Stripe’s 24 hour window. Then replay the same webhook event because Stripe warns that endpoints can receive the same event more than once. Your checkpoint is simple: after both tests, you should still see one charge outcome, one invoice result, and one state change.
Start with the catalog behaviors that change invoice evidence, not the broad feature list. In Recurly, plans and add-ons have defined subscription roles, and add-ons can be created from an item for reuse across multiple plans. BillingPlatform explicitly supports dependencies, thresholds, and usage deduplication. Upmind describes itself as an all-in-one billing and automation platform, so you should ask for a live proof of the exact invoice and export outputs you reconcile today.
In Recurly, subscription changes including plans, add-ons, and coupon-related lifecycle changes can be scheduled for immediate effect, next bill date, or term renewal. That makes discount timing part of the billing change, not a side note. It also supports percentage coupons that can discount plan fees and add-ons, and once invoices become past due the relevant dunning campaign is used to recover payment. Test one case where a coupon is added before a change and one where the invoice goes past due, because discount logic and collections behavior can diverge fast.
Harper reviews tools with a buyer’s mindset: feature tradeoffs, security basics, pricing gotchas, and what actually matters for solo operators.
Includes 6 external sources outside the trusted-domain allowlist.
Educational content only. Not legal, tax, or financial advice.

Gift offers look simple on the storefront, but the billing choice underneath them affects cash flow, customer clarity, and how much cleanup lands on Support and Finance. Prepaid subscriptions can work well because the customer pays the full subscription cost upfront, often with a discount. The catch is that gifting breaks the normal pattern of scheduled recurring transactions on a fixed billing cycle, so small design mistakes can show up later as preventable tickets, refunds, and reconciliation noise.

**Treat subscription billing as an operating discipline, not just a pricing setup.** A subscription is the billing object used to charge a customer for a selected plan. Every choice around Plans, Add-ons, and Coupons has downstream effects once renewal time arrives.

If you are deciding whether to add **becs direct debit australia subscriptions platform** support to an Australia launch, ask a narrower question first. Should it be in scope now, delayed until key terms are verified, or skipped for this launch?