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.

  1. Connect to a business entity’s accounting system using Rutter Link.
  2. Create or link bank and undeposited funds accounts used for recording daily sales
  3. Recording daily sales using sales receipts or invoices
  4. Reconcile payouts and validate all transactions (charges, refunds, and disputes) for each payout
  5. 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.

  1. 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’.
  2. 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 and account_type would be bank.
  • Undeposited Funds Account (the holding account for payments coming from the payment processors): This is an account of category = assets and account_type would be other_current_asset.
Example GET Account API Response Body
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 #AccountDebit ($)Credit ($)
1Undeposited Funds200
2Sales Income200

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 #AccountDebit ($)Credit ($)
1 (Invoice)Accounts Receivable200
1 (Invoice)Sales Income200
2 (Invoice Payment)Undeposited Funds200
2 (Invoice Payment)Accounts Receivable200

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.

Example GET Payouts API Response Body
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

AccountDebit ($)Credit ($)
Cash200
Undeposited Funds200

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.

Example GET Bank Deposits API Response Body
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
}