> ## Documentation Index
> Fetch the complete documentation index at: https://docs.rescueconsole.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Payment reconciliation

> Checking a payment processor's payout report against the adoption payments your team recorded, and verifying the ones that match.

**Payment reconciliation** checks a payout or settlement report from your payment processor against the adoption payments recorded on your [adoptions](/animals/adoptions). It answers two questions: is there money the processor paid out that nobody recorded, and is there money recorded that the processor never paid out?

It is not in the sidebar: open the search palette (the **Search** box at the top of the page, or **Ctrl K**, **⌘ K** on a Mac) and type "Reconciliation".

Anyone whose role can **See** Animals can read the batches. Importing a file, matching, ignoring, verifying and closing need **Change** on Animals.

<Note>
  A match is evidence, not confirmation. Importing a file never marks money as received, and neither does matching a line. Only **Verify** does, and you press it yourself.
</Note>

## The batches

Each file you import is a batch. The page lists them newest first.

Across the top:

| Figure                     | What it means                                                                         |
| -------------------------- | ------------------------------------------------------------------------------------- |
| **Open batches**           | Batches nobody has closed yet.                                                        |
| **Unmatched**              | The money on lines not yet matched or ignored, in open batches, and how many lines.   |
| **Ready to verify**        | Lines in open batches matched to a payment that is still only recorded, not verified. |
| **Left in closed batches** | Lines left unmatched in batches somebody closed. Reported, not a to-do.               |

Each batch shows its name, its processor, its period (or the day it was imported), and whether it is **Closed**. Under that: how many lines and how much money are **unmatched** and **matched**, how many are **ignored**, and how many are **matched but unverified**.

The **Batch** filter shows **Open** or **Closed** batches. Under **Views**, **+ Save current view** keeps a filter to come back to.

## Importing a file

Export a payout or settlement report from your processor as a CSV file first. Any processor works: Stripe, Square, Zeffy, or anywhere else that gives you a CSV.

<Steps>
  <Step title="Choose the file">
    Press **Import a file**, then **Choose a CSV file**. The file is read in your browser and is never uploaded; only the columns you map are sent. The number of rows appears beside it.
  </Step>

  <Step title="Describe the batch">
    Fill in **Name this batch** (it starts as the file's name), the **Processor**, and, if you can, **Period start** and **Period end**.
  </Step>

  <Step title="Say which column is which">
    Under **Which column is which?**, choose the column for each. The choices are filled in by guessing from the column headings. Check them.
  </Step>

  <Step title="Check the preview">
    **What will be imported** shows the first five lines as they will be read. If any rows will be skipped, it says how many and why.
  </Step>

  <Step title="Import">
    Press the import button, which says how many lines will be imported (for example **Import 42 lines**). Then press **Open the batch** to work through it.
  </Step>
</Steps>

| Field                            | What it means                                                                                                               |
| -------------------------------- | --------------------------------------------------------------------------------------------------------------------------- |
| **Name this batch**              | How you will find it again.                                                                                                 |
| **Processor**                    | Stripe, Square, Zeffy, PayPal, Venmo, Cash App, Other, or **Not specified**.                                                |
| **Period start**, **Period end** | The dates the report covers. With both, the batch can list payments recorded in that period that the file does not mention. |
| **Amount**                       | Required. A negative amount is read as a refund.                                                                            |
| **Reference id**                 | The processor's own id for each payment. This is what makes an exact match possible.                                        |
| **Date**                         | When the processor says the money moved.                                                                                    |
| **Description**                  | Anything that helps you recognize the line.                                                                                 |

Choose **Not in this file** for a column the file does not have.

<Warning>
  A wrong column does not fail. It imports the wrong numbers. Check the preview against the file before pressing **Import**.
</Warning>

Rows whose amount cannot be read, or is zero, are skipped. One import can hold up to 5,000 lines; split a longer file by date.

### Matched on import

A line whose **Reference id** is exactly the processor's id recorded on an adoption payment is matched as soon as it is imported, and says **matched by reference id**. That id is the **Processor's id** entered when a payment is recorded on an adoption's ledger. Payments taken with a payment link carry theirs already.

A payment already matched to a line, in this batch or any other, is never matched again. Every other line starts as not matched.

## Working through a batch

Open a batch to see its lines, grouped.

### Not matched

"The processor settled this money. Nothing in the ledger accounts for it yet." Each line shows its amount (marked **refund** if it was one), its date, its reference and its description.

* **Find the payment** lists payments of the same amount, and the same kind, recorded within three days of the line's date and not already matched. Each shows the animal, the adopter, the day and the method, and **pending** if it is not yet verified. Check the adopter: two identical fees look the same here. Press **This one** to match. If nothing is listed, the money probably arrived and was never recorded: record it on the adoption, then come back.
* **Not an adoption payment** asks **What is this line, then?** (a processing fee, a donation, a transfer). Press **Ignore this line**. The line stays on the batch with your reason.

### Recorded here, not in the file

Shown only for a batch with a period. These are payments recorded between **Period start** and **Period end** that no line in this batch accounts for: through the batch's processor if it named one, or through any processor if not. Payments with no processor, such as cash, are never listed. Usually this is a mistyped reference; sometimes a payment that failed after it was recorded.

### Matched

Each matched line links to its adoption and says whether it was **matched by reference id** or **matched by hand**, and whether the payment is **verified** or **still pending**. **Unmatch** puts the line back under Not matched. Unmatching never un-verifies a payment.

### Ignored

Each ignored line shows its reason. **Put back** returns it to Not matched.

## Verifying

When matched lines point at payments still only recorded, the batch shows **Matched, but not yet counted as paid**. Press the button that reads, for example, **Verify 3 matched payments**, then **Yes, verify 3** to confirm.

Each of those payments is marked verified, by you, now. It counts toward its adoption's paid amount and balance from then on. Voided payments are skipped.

<Warning>
  Verifying says the money arrived, and it is not undone by unmatching the line or closing the batch. Verify only when the processor's lines are the reason to believe it.
</Warning>

## Closing a batch

**Close this batch** marks it finished with. A batch can be closed with lines still unmatched: that is a decision, and its leftover lines move from **Unmatched** to **Left in closed batches**. **Reopen** opens it again.

Batches are kept. There is no way to delete one in the app.
