Skip to main content
Connect Stripe to DualEntry to automatically create revenue contracts from Stripe subscriptions. When a subscription is created, changed, or canceled in Stripe, DualEntry reflects the event as a contract action and applies ASC 606 treatment.

Prerequisites

Before you begin, confirm the following items are in place.
  • Your Stripe integration is connected and syncing. Complete the Stripe setup guide first if you have not already.
  • Revenue recognition is enabled on your DualEntry account. This is a subscription entitlement rather than a setting you toggle, so if the Revenue Recognition section is missing from your navigation, contact your account manager rather than looking for a switch.
  • The Stripe integration is connected and configured under Configuration → Company → Integrations.
If any of these are not yet configured, complete them before enabling the revenue sync. Missing prerequisites, especially unmapped products, cause sync errors that block contract creation.

How the sync works

When a Stripe subscription is created, DualEntry automatically creates a contract with the subscription terms. The contract includes:
  • Start date and end date pulled from the Stripe subscription period.
  • Billing frequency matching the Stripe billing interval.
  • Performance obligations - one per Stripe product on the subscription.
Each obligation inherits the recognition strategy and standalone selling price from the mapped DualEntry item. DualEntry generates the recognition schedule when the contract reaches active status. The sync runs in near-real-time via Stripe webhooks, so new subscriptions appear as contracts within minutes.

Configure recognition on the Stripe integration

DualEntry does not map Stripe products to DualEntry items one by one. Recognition behavior is configured once on the Stripe integration itself, under Configuration → Company → Integrations, and applies to the subscription invoices that arrive from it. The settings that matter for revenue are:
  • Map subscription invoices to revenue recognition: whether subscription invoices from Stripe create revenue recognition records at all. With this off, invoices sync as ordinary AR and nothing schedules.
  • Default revenue recognition method for subscriptions: the method applied to those subscription invoices, which is what determines how each one spreads across periods.
  • Aggregate revenue recognition: whether recognition is aggregated rather than tracked per invoice.
  • Sync delta days: how far back the sync looks when it runs, which governs how far a correction in Stripe can reach once it has already synced.
Because the recognition method is a default on the integration rather than a per-product mapping, a catalog with genuinely different recognition patterns across products needs those handled on the DualEntry side after sync, rather than expressed in the Stripe mapping.

Invoice and payment sync

When Stripe generates a subscription invoice, DualEntry creates a contract invoice linked to the contract. The invoice records the billing event and the amount due. When the invoice is paid in Stripe, DualEntry creates a customer payment applied to the contract invoice. This updates the contract’s billing-versus-recognition position, which drives the contract asset or liability balance visible in Reporting. The timing difference between billing and recognition is the primary driver of deferred revenue for subscription businesses. Payment status flows in one direction only. Stripe stays the system of record for subscription billing, so marking a contract invoice as paid in DualEntry does not settle the corresponding invoice in Stripe. Collect or record the payment in Stripe and let it sync back, which also keeps the recognition schedule tied to the actual cash event. For the full list of writes DualEntry makes to Stripe, see What DualEntry sends to Stripe.

Revenue recognition

Revenue is recognized per the obligation’s recognition strategy, independent of when the customer is billed or pays. For most subscriptions, this means straight-line recognition over the subscription term. For example, a $12,000 annual subscription billed monthly results in $1,000 of recognized revenue per month. If the same subscription is billed upfront, the full $12,000 is recorded as deferred revenue and recognized at $1,000 per month over the term. This independence between billing and recognition is a core ASC 606 principle. DualEntry maintains separate schedules for each, and the contract balance report in Reporting shows you the net position at any point.

Change events from Stripe

Upgrades, downgrades, and cancellations in Stripe flow through as contract modifications in DualEntry automatically.
  • Upgrades and downgrades - DualEntry receives the subscription change event and applies the appropriate ASC 606 modification treatment. If the change adds a distinct product at standalone value, DualEntry applies prospective treatment. If it modifies an existing obligation, DualEntry applies cumulative catch-up treatment.
  • Cancellations - when a Stripe subscription is canceled, DualEntry terminates the contract and sets its status to terminated. Satisfied obligations are recognized; unsatisfied obligations are written off.
DualEntry logs each change event with a reference to the originating Stripe event ID, so you can trace any contract modification back to the specific Stripe action that triggered it.

Validate the sync

After the initial sync, compare your data to confirm accuracy.
  1. In Stripe, pull your MRR (monthly recurring revenue) total.
  2. In DualEntry, open Reports → Revenue Recognition → Recognized Revenue and filter to the same period.
  3. Compare the two figures directionally. Timing differences are expected because Stripe MRR is a billing metric, while DualEntry recognized revenue follows ASC 606 allocation.
A subscription with an upfront annual payment, for example, shows the full amount in Stripe MRR for the billing month but is spread across twelve months in DualEntry. If the figures diverge beyond expected timing differences, check for unmapped products, failed sync records in the integration error log, or contracts stuck in draft status.

Next steps

Last modified on September 14, 2026