Transaction ReconciliationBeta
Set up the reconciliation between Stripe transactions and your transaction data.
Transaction reconciliation enables you to reconcile between your internal records with Stripe processed charges and refunds at an individual transaction level.
Transaction reconciliation is useful for businesses that have:
- High transaction volumes, such as thousands of monthly transactions.
- Multiple payment methods used in a single transaction, such as gift cards and discounts.
- Long transaction life cycles where transactions are spread across multiple periods.
Using transaction reconciliation, you can:
- Track the collections against each individual transaction.
- Ensure high integrity for your revenue assurance process.
- Seamlessly reconcile large volumes of data without the constraints of spreadsheets.
- Save time spent on manual reconciliations.
Get started
To get started with Stripe reconciliation upload your transaction data. Then you can:
- Track the reconciliation status.
- View analytics.
- Download prebuilt reports.
- Generate custom reports.
Import data
To import transaction data:
- Go to the Stripe Dashboard > reconciliation overview page and click Import data.
- Click Browse and select your file. It must be smaller than 70 MB.
- Click Import CSV.
- To track the progress of the import, click View data management.
Note
You are responsible for the data you provide to Stripe. By providing us data to use, you acknowledge that you have received permission to share that data with Stripe and to enable Stripe to use it to provide you the services.
Reconciliation data schema
The transaction data must have some required fields to convert it to Stripe’s canonical reconciliation schema. Here is the expected schema:
Field name | Description | Type | Required |
---|---|---|---|
Id | A unique identifier for the payment expectation. For example - UUID, combination of orderitem and fulfillment status etc. | String | Required |
gross_ | The gross amount of the payment expectation. Does not account for any fees or currency conversions. | numeric | Required |
currency | Currency associated with gross_ . | enum | Required |
type | Either inbound or outbound . | enum | Required |
customer_ | Identifier for the customer involved in the payment expectation. | string | Optional |
created_ | When the payment expectation was created. | timestamp | Required |
updated_ | When the payment expectation was updated. | timestamp | Optional |
reconciliation_ | Reference used to do a look-up on settlement data (charge_ ). | string | Required |
Reconciliation statuses
After the data is imported, reconciliation starts automatically, and each transaction gets a reconciliation status. The reconciliation status represents the state of the transaction and helps you understand what action to take. Settlement reconciliation and Transaction reconciliation have different statuses.
Settlement reconciliation statuses
For reconciliation between settlement and bank data, each settlement is assigned one of the following statuses:
- Completely matched: Both “amount” and “settlement_id” matched with the Bank Statement
- Unmatched:“Settlement_id” not matched/found either in settlement data or Bank data
- Partially matched: “Settlement_id” matched/found in the Bank Statement but difference in “amount” beyond the threshold
You can configure the settlement reconciliation threshold when you compare settlement data to bank deposit data. If the difference in amounts is within the threshold, the settlement ID gets tagged as completely matched. If the difference in amounts is outside of the threshold, the settlement ID gets tagged as partially matched.
Here is an example of how the settlement reconciliation statuses are computed (in this example, the threshold is 1 USD):
Settlement reconciliation status | Settlement ID (Stripe data) | Settlement ID (bank data) | Settlement amount expected (Stripe data) | Deposit amount (bank data) |
---|---|---|---|---|
Completely matched | ST-123 | ST-123 | 1000 USD | 1000 USD |
Partially matched | ST-abc | ST-abc | 1000 USD | 900 USD |
Unmatched | ST-xyz | null | 1000 USD | null |
Transaction reconciliation
Transaction reconciliation (between transaction data and settlement data) has four statuses:
- Settled: The record is present in both datasets and the amount is an exact match. In the case of pay-in reconciliation with three data sets, the settlement reconciliation status needs to be completely matched.
- In process: The record is present in both datasets but the difference in the amounts is beyond the set threshold.
- Open: The record is present in the transaction data but missing in the Stripe settlement data. A transaction can be open even if the settlement reconciliation for the corresponding
charge_
is unmatched.id - Foreign: The record is present in the Stripe settlement data but missing in transaction data.
Configure the transaction reconciliation threshold when comparing the amount expected (transaction data) and the amount processed (Stripe records). If the difference in amounts is within the threshold, the charge ID gets tagged as Settled. If the difference in amounts is outside of the threshold, the charge ID gets tagged as In process.
Here is the sample data showing how the transaction reconciliation statuses are computed (in this example, the threshold is 1 USD):
Transaction reconciliation status | Charge ID (transaction data) | Charge ID (Stripe records) | Amount expected (transaction data) | Amount processed (Stripe records) |
---|---|---|---|---|
Settled | ch_ | ch_ | 50 USD | 50 USD |
In process | ch_ | ch_ | 50 USD | 45 USD |
Open | ch_ | null | 50 USD | null |
Foreign | null | ch_ | null | 50 USD |
View analytics
The reconciliation analytics page provides high-level details about the overall money movement of your business. It also includes charts for reconciliation status and aging summaries.
Reconciliation status chart
The reconciliation status chart provides a high-level view of the funds received or pending from Stripe. It shows an aggregated view of the amount corresponding to the transactions across four reconciliation statuses: Open, In Process, Foreign, and Settled. The key insight is to understand the amount for each of the reconciliation statuses and take actions based on the insights.
Aging summary chart
The aging summary chart provides a high-level view of the time it takes Stripe to settle processed transactions. It shows an aggregated view of the transaction amount by settlement days. Use the chart to determine whether Stripe is settling the money on time.
This helps you understand if Stripe is adhering to the agreed-upon SLA (service level agreement). The graph differentiates between the amount settled on or before SLA and after SLA with different colors. Blocks in blue represent the transaction amount settled on or before the SLA. Blocks in red represent the transaction amount settled after SLA.
Generate reports
Here are the standard reports that you can generate and download from the Stripe Dashboard:
Report type | Description | Reconciliation type |
---|---|---|
Reconciliation result | Transaction-level reconciliation report that shows you the reconciliation status of every transaction against their corresponding Stripe charges or refunds. It helps you track whether or not Stripe has processed the right funds against each of your transactions. |
|
Bank settlement | Settlement level report that shows you if you’ve received the money corresponding to each Stripe settlement in your bank account. |
|
Transaction search | Transaction level search report which helps you access all the details of any transaction using a transaction ID or settlement ID. |
|
Download a report
To download a report:
- Go to the Dashboard Reconciliation > Pay-in reconciliation page.
- Go to the Reports tab.
- Click New report.
- Select the report type and filters.
- Click Generate button.
- After the report completes generation, click Download.
Reconciliation result report
Here are the columns in the reconciliation report:
Column name | Default | Description |
---|---|---|
reference_ | Y | The common reference key between your transaction data and Stripe settlements data. For example, charge_ (starting with ch_ ) for the charges and refund_ (starting with re_ ) for refunds. |
recon_ | Y | Name of the payment provider that has processed the payment. For example, Stripe. |
transaction_ | Y | Type of the transaction: Forward (for charges) or reverse (for refunds). |
reconciliation_ | Y | The reconciliation status of the transaction. One of the following: Open, In process, Settled, Foreign. |
transaction_ | Y | The date when the sale or refund was created per your transaction data (internal records). |
settlement_ | Y | The date on which Stripe initiated the settlement or payout. |
bank_ | Y | The date on which the settlement or payout was received in your bank. This information is fetched from your bank statements. |
total_ | Y | The gross amount corresponding to the charge or refund per your transaction data. |
total_ | Y | The gross amount corresponding to the charge or refund per the Stripe’s settlement data. |
account_ | Y | The name of the account that is debited or credited from the chart of accounts to create the journal entry. |
credit_ | N | Number of days it takes for your funds to become available and paid out. |
age | N | The difference between the transaction_ and settlement_ , which represents the time taken for the corresponding payout to be initiated after the transaction is created. |
settlement_ | Y | The currency in which Stripe has settled the charge or refund. |
settlement_ | N | The ID of the settlement or payout in which the charge or refund was settled. |
settlement_ | N | The reconciliation status of the settlement. We match Stripe payouts with your bank statements and assign each settlement one of the following status: Matched, Unmatched, Partially matched |
Custom data addition
You can add custom metadata from your transaction data to the reconciliation result report as additional columns. For example, if store_
is part of the transaction data, it shows up in the custom metadata section.
To view the available custom metadata, click Show under the columns. The metadata is populated in the report by aggregating based on the reconciliation reference, for example the charge_
. If multiple rows of metadata are found with the same charge_
, they appear as comma-separated values in the report.
Bank settlement report
Column name | Description |
---|---|
recon_ | Name of the party that has initiated this settlement. For example, Stripe. |
settlement_ | ID of the settlement or payout. |
settlement_ | The date on which Stripe initiated the settlement or payout. |
bank_ | The date on which the settlement or payout was received in your bank. This information is fetched from your bank statements. |
settlement_ | The net amount paid by Stripe against the settlement. |
bank_ | The amount received in your bank account against the settlement. |
outstanding_ | The outstanding amount against the settlement. This is the difference between the settlement_ and bank_ . |
settlement_ | The reconciliation status of the settlement. We match Stripe payouts with your bank statements and assign each settlement one of the following statuses: Matched, Unmatched, Partially matched. |
Transaction search report
Column name | Description |
---|---|
reference_ | The common reference key between your transaction data and Stripe settlements data. For example: charge_ (starting with ch_ ) for the charges and refund_ (starting with re_ ) for refunds. |
recon_ | Name of the payment provider that has processed the payment. For example, Stripe. |
transaction_ | Type of transaction: forward (For charges) or reverse (For refunds). |
reconciliation_ | The reconciliation status of the transaction. One of the following: Open, In process, Settled, Foreign. |
transaction_ | The date on which the sale or refund was created as per your transaction data (internal records). |
settlement_ | The date when Stripe initiated the settlement or payout. |
total_ | The gross amount corresponding to the charge or refund as per your transaction data. |
total_ | The gross amount corresponding to the charge or refund as per the Stripe’s settlement data. |
account_ | The name of the account that is debited or credited from the COA to create the journal entry. |
settlement_ | The currency in which Stripe has settled the charge or refund. |
settlement_ | The ID of the settlement or payout in which the charge or refund was settled. |
settlement_ | The reconciliation status of the settlement. We match Stripe payouts with your bank statements and assign each settlement one of the following status: Matched, Unmatched, Partially matched. |