Prerequisites
The Stripe integration posts directly to your ledger from the first sync, so the accounts and bank connections it posts to need to exist first. Confirm the following in DualEntry before connecting:- Your organization and legal entity are configured.
- Your chart of accounts is set up, including income, expense, and deferred revenue accounts.
- Your bank connections include the destination account Stripe pays out to.
- Your Stripe account is disconnected from any prior accounting system.
- You know which DualEntry company (legal entity) the Stripe account belongs to. The connection is tied to that one company and cannot be reassigned to another company after you connect.
Step 1: Connect your Stripe account
Authorize DualEntry to read your Stripe data via OAuth.- Navigate to Configuration → Company → Integrations → Stripe.
- Choose Connect with Stripe.
- Authorize the connection in the Stripe consent screen and approve access.
- In the Complete Stripe Setup dialog, select the DualEntry Company this Stripe account belongs to, then choose Connect.
- DualEntry returns to the Integrations page and confirms the connection. The Stripe tile shows the company you chose.
Each Stripe connection belongs to exactly one DualEntry company. A company supports one active Stripe connection, and the same Stripe account cannot be connected to two companies in one organization. If your organization has several legal entities that each take payments in Stripe, connect each entity’s own Stripe account to its company. The company cannot be changed after you connect: reconnecting keeps the connection on its current company, so to move it, disconnect and connect again on the other company.
Step 2: Configure account mappings
Map your Stripe activity to the DualEntry GL accounts that should receive each transaction type. During pre-setup, DualEntry creates a default set of accounts to support the sync:- Stripe Clearing Account: holds funds received from customers before they are paid out to your bank.
- Income Account: where Stripe revenue is recorded.
- Expense/Fee Account: where Stripe processing fees are recorded.
- Deferred Revenue Account: used for subscription-based revenue recognition.
- Financing Account: used if you use Stripe Capital.
- Stripe Vendor: the vendor record used for fee entries.
- Income Account: where invoice revenue posts.
- Expense Account: where Stripe fees post.
- Deferred Revenue Account: required if you use Stripe subscriptions with revenue recognition.
- Bank Account mapping: map your Stripe payout destination to the correct DualEntry bank account.
Step 3: Map your products
Stripe products sync toitem records in DualEntry. The integration’s Products mapping tab shows which DualEntry item each Stripe product created, but the accounting for each product is configured on the item itself, not on that tab.
Open Configuration → Accounting Setup → Items, find the item the Stripe product created, and set its accounts:
- Income Account: the GL account revenue from this product posts to.
- Deferral Account: required for subscription products using revenue recognition.
Step 4: Run your first sync
Once your accounts and products are mapped, kick off the initial backfill.- Navigate to Configuration → Company → Integrations → Stripe.
- Set your sync start date, the cutoff date from which DualEntry pulls Stripe data.
- Choose Sync Now.
Invoice not mapped sync error. A common choice is the first day of the first period you have not closed in your previous system. Opening balances then come from your migration, and everything after comes from Stripe.
After the initial sync, DualEntry syncs new activity automatically, once a day by default. To sync more or less often, open the integration’s Settings and change Sync frequency, which ranges from Every 30 minutes to Weekly. The setting applies to every Stripe integration in your organization, not only the one you are editing. You can also trigger a manual sync from the Integrations page at any time.
What syncs
Each Stripe object the integration syncs becomes a specific DualEntry record type, and every synced record keeps its Stripe ID, so you can trace a ledger entry back to Stripe (see Find a synced record’s Stripe ID). The integration creates these DualEntry records from Stripe activity automatically:
Every transaction record the sync creates (invoices, contracts, customer payments, payouts, fees, refunds, and credits) posts to the DualEntry company the Stripe connection belongs to. Customers are the exception: they are shared across the organization, so a Stripe customer can be invoiced from any company.
After the initial setup, the integration keeps records current. Customers and products update as they change in Stripe. Invoices and payments sync as they are created and paid. Payouts sync when Stripe sends funds to your bank, and fees sync as Stripe charges them.
Find a synced record’s Stripe ID
The External ID column on four Money In lists shows the Stripe ID of each synced record, so you can look up the matching object in Stripe. It’s available on the Invoices, Customer Payments, Customer Credits, and Customer Refunds lists, and it’s hidden by default.- Go to Money In and open Invoices, Customer Payments, Customer Credits, or Customer Refunds.
- Choose Column order and turn on External ID.
in_1QxY… for an invoice. Records created in DualEntry rather than synced from Stripe show a dash. Select an ID to copy it. The column doesn’t link to Stripe. DualEntry remembers the column setting in your browser.
When you choose Export on one of these lists, the export includes an external_id column whether or not External ID is visible in the list. The column isn’t specific to Stripe: a record synced from another integration shows that integration’s ID. To find a record by its Stripe ID without scanning a list, ask Accounting Intelligence; see Stripe integration compared with the Stripe MCP connector.
What DualEntry sends to Stripe
Record sync only moves data from Stripe into DualEntry, but collecting a payment is the one place where DualEntry writes to Stripe. Every write below is an action you trigger deliberately, and none of them change an existing Stripe invoice, subscription, or payout.Actions that create records in Stripe
The following table lists every action that creates a record in your Stripe account:
A payment that DualEntry initiates is a standalone Stripe payment tagged with the DualEntry invoice ID. It is not applied to a Stripe invoice. If the DualEntry invoice originally came from Stripe, that Stripe invoice stays open in Stripe even after the payment settles, so close it in Stripe yourself.
Marking an invoice as paid in DualEntry
Marking an invoice as paid in DualEntry does not mark it as paid in Stripe. Recording a customer payment, applying a credit, or writing off a balance in DualEntry is a ledger action only. To settle the invoice in Stripe, collect or record the payment in Stripe, and the resulting payment syncs into DualEntry as a customer payment applied to that invoice.Add a Stripe payment link to an invoice
You can put a Stripe-hosted payment link on a DualEntry invoice PDF so the customer pays the invoice directly. Use it for invoices you raise in DualEntry rather than in Stripe, when you want the customer to pay by card or another Stripe payment method instead of a bank transfer. This works on any connected Stripe account and needs no extra setup beyond the integration itself. The invoice has to belong to the same DualEntry company as the Stripe connection.- Open the invoice under Money In → Invoices.
- Set the invoice’s company to the company your Stripe connection belongs to.
- In the Payment Information section, set the payment type to Integration. The other options, None and Company Payments, do not create a Stripe link.
- Choose your Stripe integration. If the company has only one Stripe connection, DualEntry selects it for you.
- Generate the invoice PDF. DualEntry creates a Stripe Checkout Session for the invoice and embeds its URL in the PDF.
Payment links only work for the connected company
In DualEntry, a Stripe payment link can only be added to an invoice whose company matches the company of the Stripe connection. DualEntry filters the Integration options by the invoice’s company, so a Stripe connection on a different company never appears in the list:- No company selected yet: DualEntry shows the Stripe options but disables them, with the message
Select a company first to choose a Stripe account.. - No Stripe connection on the invoice’s company: the section shows
No Stripe integrationsand offers to add one, even if another company in your organization has Stripe connected. - Company changed after choosing Stripe: DualEntry clears the Stripe selection if the connection does not belong to the new company.
How a Stripe payment link behaves after it is generated
A Stripe payment link on a DualEntry invoice is a Stripe Checkout Session tied to that invoice, and it changes as the invoice changes. If the invoice uses a custom template, the link appears wherever the template places the Pay online field. If DualEntry can’t create the Checkout Session, you can still download the PDF without the link, but DualEntry blocks sending the invoice until the link works. DualEntry reuses the same Checkout Session while it stays open in Stripe, and refreshes its line items if you edit the invoice before the customer pays. If the session has expired, generating the PDF again creates a replacement session. If the customer has already paid through the session, generating the PDF again embeds that same completed session URL. The completed URL no longer accepts a payment, so only regenerate the PDF while the invoice is unpaid. When the customer pays, Stripe notifies DualEntry, and DualEntry creates a customer payment against the invoice that posts to your Stripe clearing account. If the customer pays more than the invoice balance, DualEntry applies the invoice balance to the invoice and records the excess as an unassigned amount on that same customer payment. An unassigned amount is cash received that is not yet applied to any invoice. DualEntry does not create a separate customer prepayment, so reclassify the excess yourself if you need it tracked as a prepayment liability.Current limitations
Some Stripe activity is not supported by the sync, and some is recorded for review rather than posted to the ledger:- Partial refunds. A refund posts to the ledger only when the Stripe charge is refunded in full and the original payment covers a single invoice. Enter anything else manually in DualEntry. How you find out about a non-qualifying refund depends on where it came from. A refund that the sync discovers in Stripe raises a sync error you can see on the integration. A refund you initiate from DualEntry goes through in Stripe and DualEntry records it as a refund record. If it does not qualify, DualEntry skips it without a sync error, so check partial and multi-invoice refunds yourself.
- Post-payment and mixed credit notes. Only pre-payment credit notes sync. Other credit note types are skipped silently rather than raising a sync error, so check Stripe for credit notes that never appeared in DualEntry.
- Disputes. A new dispute is logged against the integration for review. DualEntry does not post the disputed amount or the dispute fee, so reconcile both manually.
- Customer prepayments. A Stripe payment has to belong to a Stripe invoice that DualEntry has already mapped. Payments against an unmapped invoice, a skipped invoice, or an invoice dated before your sync start date raise a sync error instead of becoming a customer prepayment. Money a customer sends before any invoice exists needs a customer prepayment entered in DualEntry.
- Payment links are per company. A Stripe payment link only works on invoices from the DualEntry company the Stripe connection belongs to. See Payment links only work for the connected company.
- Subscription revenue recognition requires the Advanced Revenue Recognition module to be enabled on your account.
Use Stripe with subscriptions and revenue recognition
If your business uses Stripe subscriptions and the Advanced Revenue Recognition module is enabled, DualEntry automates the revenue recognition workflow.- When a Stripe subscription is created, DualEntry creates a
contractwith the subscription terms and start/end dates. - Each time a subscription invoice is generated in Stripe, DualEntry creates a
contract_invoicelinked to that contract. - When the invoice is paid in Stripe, DualEntry creates a
customer_paymentapplied to the contract invoice. - DualEntry recognizes revenue according to the straight-line schedule defined on the contract.
- Deferred Revenue Account on the Stripe integration, set in Step 2.
- Deferral Account on each subscription product’s item, set in Step 3.
Stripe integration compared with the Stripe MCP connector
DualEntry connects to Stripe in two separate ways, and connecting one does not connect the other. The Stripe integration on this page syncs Stripe activity into your ledger. The Stripe MCP connector lets Accounting Intelligence (DualEntry’s AI assistant) read live data from Stripe during a conversation, without creating any records. The following table compares the two:
You do not need the MCP connector for Accounting Intelligence to answer questions about Stripe activity that has already synced. Those records are in your ledger, so Accounting Intelligence finds them the same way it finds any invoice or payment, including by Stripe ID. Add the connector when you need what the ledger does not hold, such as Stripe-side detail on a dispute or a payout, or activity from before your sync start date.
Because nothing links the two, the MCP connector can be authorized against a different Stripe account than the one the integration syncs. Accounting Intelligence might be allowed to use the connector’s write tools. If so, anything it creates in Stripe reaches DualEntry only through the integration’s normal sync, and only when it happens in the connected Stripe account after your sync start date. Write tools stay off until someone with the integrations permission allows them. See How to Connect an MCP Connector.
Troubleshoot sync errors
When a record fails to sync, it appears in the Integration Errors log under Configuration → Company → Integrations → Stripe. The most common causes:Result
After completing these steps, your Stripe activity flows into DualEntry automatically and your ledger stays in sync without manual entry. Remember that record sync is inbound only: settling an invoice in DualEntry never settles it in Stripe. Before relying on the sync for close, confirm the first run worked:- Records: customers, invoices, and payments from after your sync start date appear in DualEntry under the company you connected.
- Errors: the Integration Errors log on the Stripe integration is empty, or every entry is one you expect from Current limitations.
- Clearing account: the Stripe Clearing Account balance matches the funds Stripe is holding, after payouts have synced as bank transfers.
- Fees: Stripe processing fees post to the expense account you mapped, not to income.