Payouts & Bank Reconciliation
Setting up Payouts and Automatic Bank Deposit Reconciliation with Rutter
Introduction
Automatic bank reconciliation eliminates the need for accounting teams to manually reconcile daily bank deposits (payouts) coming from payment processors or POS systems like Stripe and PayPal.
With Rutter, you can automate the process of validating all transactions for each payout before creating a bank deposit in the business’ accounting system. This guide covers the primary steps to set up payouts and automatic bank deposit reconciliation using Rutter’s API.
- Connect to a business entity’s accounting system using Rutter Link.
- Create or link bank and undeposited funds accounts used for recording daily sales
- Recording daily sales using sales receipts or invoices
- Reconcile payouts and validate all transactions (charges, refunds, and disputes) for each payout
- Creating bank deposits based on payouts
See the platform coverage and API endpoint support available for payouts and automatic bank deposit reconciliation.
Workflow Overview
Sales from payment processors or POS systems don’t instantly transfer to a business’s bank account. Payments received from customers are processed through an intermediary account before being transferred to the business’s bank account.
- Payments transferred from Payment Processor to FBO (For Benefit of) Account : A customer buys something from a merchant who is using Stripe to process payments. Those payments go into an FBO account, which holds the funds temporarily. The payment processor will deduct a processing fee. This account is also sometimes called ‘Undeposited Funds’.
- Payment transferred from FBO (For Benefit of) Account to Business Bank Account: Eventually, the funds (gross sale minus the processing fee) are transferred from the FBO account to the business’s bank account or an individual. This is recorded as a payout in the payment processor or POS system, and as a bank deposit in the accounting platform.
Payouts and Bank Deposit Reconciliation Workflow
Connect to the Business Entity's Accounting System
Embed Rutter Link into your application and walk through an end-to-end business authentication flow in order to create a new connection. This connection represents the business accounting system and contains an access_token
used to read and write data for that instance.
Creating or linking bank and undeposited funds accounts
When recording daily sales entries, businesses will use clearing accounts for keep track of payment intakes. Then the clearing account would clear to zero once the actual funds are received in the bank account. You can link and create accounts using GET /accounts and POST /accounts.
- Bank Account (the account where the payout Bank Deposit will be posted to): This is an account of
category
=assets
andaccount_type
would bebank
. - Undeposited Funds Account (the holding account for payments coming from the payment processors): This is an account of
category
=assets
andaccount_type
would beother_current_asset
.
1{
2 "account": {
3 "id": "00000000-0000-0000-0000-000000000000",
4 "platform_id": "12345678",
5 "parent_id": "00000000-0000-0000-0000-000000000000",
6 "account_type": "bank",
7 "category": "asset",
8 "status": "active",
9 "balance": 123.45,
10 "currency_code": "USD",
11 "name": "Checking",
12 "nominal_code": "1001",
13 //...
14 "created_at": "2023-01-02T02:34:56.000Z",
15 "updated_at": "2023-01-02T02:34:56.000Z",
16 "last_synced_at": "2023-01-02T02:34:56.000Z",
17 "platform_url": "https://platform.com/resource?id=123",
18 "platform_data": {
19 "id": 123,
20 "data": "Varies by platform"
21 }
22 },
23 //...
24 }
Creating invoice or sales receipt
Payments coming from payment processors are recorded as sales receipts or invoices, depending on the recommended practice of different accounting platforms. These payments are then combined and recorded in the clearing account, which is the Undeposited Funds account.
Sales Receipts
When recording daily intakes using sales receipts, sales receipts debits the Undeposited Funds account and credits Sales Income account.
Entry # | Account | Debit ($) | Credit ($) |
---|---|---|---|
1 | Undeposited Funds | 200 | |
2 | Sales Income | 200 |
Invoice and Invoice Payment
When recording daily intakes using invoices, every transaction is reflected by the simultaneous creation of an invoice and corresponding invoice payment. Invoices debit the Accounts Receivable account and credit the Sales Income account. Invoice payments debit Undeposited Funds account and credit the Accounts Receivable account. You can create invoices using POST /invoices and create invoice payments using POST /invoice_payments.
Entry # | Account | Debit ($) | Credit ($) |
---|---|---|---|
1 (Invoice) | Accounts Receivable | 200 | |
1 (Invoice) | Sales Income | 200 | |
2 (Invoice Payment) | Undeposited Funds | 200 | |
2 (Invoice Payment) | Accounts Receivable | 200 |
For card transactions, an invoice
can be thought of as paid immediately. The created invoice_payment
will be one of the linked payments on the bank deposit and will be used to ensure that payments and payouts are being reconciled.
Collecting payouts data
In order to sync payouts into an accounting system, you must collect the payouts data first.
If you are reconciling payouts from third party payments processors:
You can use Rutter’s payout API to get detailed payout data from different commerce and payment platforms Rutter supports. The Rutter payout object (GET /payouts) comprises of related transaction objects. Each transaction includes a status field, which can be one of the following: paid
, pending
, in_transit
, cancelled
, failed
, refunded
, or unknown
. For reconciliation, focus on transactions with a final status— paid
, canceled
, failed
, or refunded
— to confirm that the total of these amounts matches the amount posted to the bank deposit in the next step.
If you are reconciling your own payouts as the payment processor:
You have direct access to payout information and must internally match transactions to their corresponding payouts. This process involves identifying all transactions linked to each specific payout and verifying that the sum of these transactions matches the payout amount.
1{
2 "payouts": [
3 {
4 "id": "cd976e10-1a63-44c2-949f-780fb68b7d37",
5 "amount": 1690.5,
6 "iso_currency_code": "USD",
7 "destination": {
8 "account_number_last_digits": null,
9 "bank_name": null,
10 "destination_id": "ba_1EqC04FIfWUUlw5zNovCXQA5",
11 "last_four": null,
12 "brand": null,
13 "routing_number": null
14 },
15 "gateway": "card",
16 "gateway_account_id": "",
17 "method": "standard",
18 "schedule": "automatic",
19 "status": "in_transit",
20 "type": "card",
21 "transactions": [
22 {
23 "id": "2339816d-22f1-4a60-80bc-1643c9dda281",
24 "order_id": "",
25 "gateway": "stripe",
26 "gateway_data": {
27 "source": "po_1P3q19FIfWUUlw5zNV3PjB6g"
28 },
29 "type": "payout",
30 "payment_method_type": "other",
31 "status": "pending",
32 "amount": -1690.5,
33 "fee": 0,
34 "iso_currency_code": "USD",
35 "created_at": "2024-04-10T01:32:03.000Z",
36 "updated_at": "2024-04-10T01:32:03.000Z",
37 "platform_id": "txn_1P3q1AFIfWUUlw5zbLVmIXDK",
38 "description": "STRIPE PAYOUT",
39 //.....
40 }
41 ],
42 "arrival_at": "2024-04-11T00:00:00.000Z",
43 "created_at": "2024-04-10T01:32:03.000Z",
44 "updated_at": "2024-04-10T01:32:03.000Z"
45 }
46 ]
47}
Creating bank deposits based on payouts
Payment processor payouts are recorded as bank deposits in accounting systems. To represent a settlement or payout, you can create a bank deposit using the POST /bank_deposits endpoint.
Reconciliation occurs when every invoice payment debiting Undeposited Funds appears in a bank deposit’s linked_payments
array. The payment processor should ensure every invoice payment or sales receipt are associated with a bank deposit.
Payout transferred from FBO Account to Business Bank Account
Account | Debit ($) | Credit ($) |
---|---|---|
Cash | 200 | |
Undeposited Funds | 200 |
Each bank deposit in the accounting platform contains linked payments to that deposit. This is the linked_payments
object in the example above. The line_items
object is an array of the line items associated with the bank deposit exclusive of any linked payments. Verify that the total_amount
of the bank deposit will be a sum of the payment_amount
fields from all the linked payments, as well as the total_amount
fields from the underlying line items.
1 {
2 "bank_deposits": [
3 {
4 "id": "00000000-0000-0000-0000-000000000000",
5 "platform_id": "12345678",
6 "account_id": "00000000-0000-0000-0000-000000000000",
7 "subsidiary_id": "00000000-0000-0000-0000-000000000000",
8 "transaction_date": "2023-01-02T02:34:56.000Z",
9 "currency_code": "USD",
10 "total_amount": 123.45,
11 "memo": "This is a memo.",
12 "linked_payments": [
13 {
14 "id": "00000000-0000-0000-0000-000000000000",
15 "payment_amount": 5,
16 "type": "invoice_payment"
17 }
18 ],
19 "line_items": [
20 {
21 "platform_id": "12345678",
22 "account_id": "00000000-0000-0000-0000-000000000000",
23 "class_id": "00000000-0000-0000-0000-000000000000",
24 "customer_id": "00000000-0000-0000-0000-000000000000",
25 "department_id": "00000000-0000-0000-0000-000000000000",
26 "location_id": "00000000-0000-0000-0000-000000000000",
27 "vendor_id": "00000000-0000-0000-0000-000000000000",
28 "total_amount": 118.45,
29 "description": "This is a description."
30 }
31 ],
32 //....
33 }
34 ],
35 //....
36 }