Donation Reconciliation
Multi-rail donation reconciliation, card, NFC, Zelle, check, ACH, and cash, with AI-assisted matching, confidence tiers, auto-receipts, and full audit trail.
All Transactions is where every payment in and out of your bank account meets your donor records. Card charges, Zelle and ACH rows from your statement import, photographed checks, and cash counts all land in one register, with one set of confidence bands and one audit trail.
The short version
- Six payment methods, one register. Card, Zelle, check, cash, ACH, wire.
- Four confidence bands. Auto (90% and above), Likely (70-89%), Uncertain (under 70%), No match.
- Continuous close. Rows reconcile as they arrive, not at month-end.
- Full audit trail. Every match, override and correction is logged with who, when and the confidence behind it.
Where it lives
Sidebar → Muin for Finance → Reconciliation → All Transactions. You need permission to view ledger reconciliation.
The page is titled All Transactions, with the subtitle “Every reconciliation transaction and its decision.”
The separate “Command Center” and “To Review” inbox screens are gone. Their work is now two filter chips on this one register, Needs identity and Categorize, so there is one list rather than three. The old addresses still work and send you here.
The in-page sub-navigation offers Overview, All Transactions, Insights, Settings and AI Chat. The sidebar group also has Month-End Close and, for owners and admins, Parser Patterns.
The top of the page offers:
- Import statement and a Capture check action
- A by rail tile strip, one tile per payment method, each showing the unmatched count, the unmatched amount, and the share matched over the last 30 days
- Rail filter chips for where the data came from: CSV, Plaid, QuickBooks, PayPal
- Confidence filter chips
- A date range, a search box and a status filter
- Saved Views
The four confidence bands
Every row gets a confidence score from its matching signals: Zelle sender name, exact name match, fuzzy name match, AI similarity match, and AI-validated similarity match.
| Band | Score | What you do |
|---|---|---|
| Auto | 90% and above | Nothing, if it is above your auto-confirm threshold. Otherwise confirm it in one click. |
| Likely | 70% to 89% | Read the suggestion and confirm or pick a different donor. |
| Uncertain | Under 70% | Decide it yourself. |
| No match | No candidate | Link it, split it, create a record, or record it as an unidentified gift. |
A row badge shows the band as High confidence, Medium confidence or Low confidence rather than the raw number.
The auto-confirm point is yours to set. Under Reconciliation → Settings → Auto-confirm thresholds you set, per surface, the confidence above which Muin confirms a match without your review, anywhere from 0.50 to 1.00. The same section has an Enable Smart Match toggle for AI-augmented matching. So the 90% line above is the display band; your own auto-confirm point may be higher or lower.
Reconciliation per payment method
The by rail tile strip has one tile per payment method on the row: card, zelle, check, cash, ach and wire. Anything Muin cannot place falls into an “other” bucket.
A tap-to-pay or kiosk gift reconciles as a card row, because that is how the money moved. There is no separate NFC tile.
Card (Stripe)
Card and wallet transactions (Apple Pay, Google Pay) land via Stripe webhook at the moment of charge. The cardholder’s typed name, email, and campaign selection provide high-confidence matching signals.
Fee-covering: if the donor chose to cover the processing fee, the Stripe payout is larger than the donor’s intent. Muin posts two ledger entries, the gift amount to the fund, the fee reimbursement as a separate row, so restricted-fund accounting stays correct.
Recurring failures: when a recurring charge fails (expired card, insufficient funds), Muin emails the donor so they can update their card, and opens an inbox task for your team.
Kiosk and tap-to-pay gifts
Muin kiosks (QuickPay tap-to-give, payment-kiosk multi-amount, and other modes) and iPhone Tap-to-Pay all feed the same Stripe pipeline and reconcile as card rows. Non-QuickPay kiosks optionally prompt for a donor phone or email; when one is given, matching is high-confidence against existing records. When it is not, the row arrives needing identity and you decide who it belongs to. QuickPay’s tap-to-give flow deliberately skips the prompt to stay at three-second speed, and identity is resolved afterwards.
Zelle
Zelle rows come in via bank-statement import. The donor’s bank nickname controls the memo string, so the same donor may appear as “JOHN SMITH,” “J SMITH,” or “JOHN A SMITH.” Muin’s fuzzy matcher scores name similarity, amount pattern, and frequency pattern together.
Common workflow: upload the monthly bank statement CSV → Muin parses Zelle rows → the queue shows each row with a proposed match → staff reviews flagged rows.
Check
Checks are captured via photo in Muin Go at intake. OCR extracts check number, amount, payor name, memo, and date. The extracted fields land in the reconciliation queue with the same confidence tiers.
When the deposit clears, Muin matches each captured check to its bank row by check number and amount.
ACH / Wire
ACH through Stripe: webhook fires with full identity. ACH from bank statement: temporal matching, the row is compared against open pledges, recent invoices, or donor history within the 5-business-day clearing window.
Cash
Cash flow is first-class. Staff enters a two-person verified count at the end of a service or event, photographs the deposit slip, and Muin reconciles the count against the deposit when it clears. Discrepancies surface on the same review screen.
Workflow · a typical review session
-
Open All Transactions and set the date range.
-
Work the Confirm these bucket. On the Needs identity filter, high-confidence matches waiting on you are grouped under Confirm these. Tick them and press Confirm selected.
-
Open a row with
Enter(or click it) to get the Reconciliation row detail drawer. -
Take the suggestion with the primary button, or use Pick a different donor → / Different action →. Ask Muin AI explains what the row looks like to Muin.
-
Use More options for anything the suggestion cannot settle:
Action What it does Confirm top Accepts the leading candidate Link to existing donor / vendor You pick the record Split into multiple One bank row covering several gifts New entity Creates the donor or vendor Record as unidentified gift Posts the money now, holds the identity for later Mark as N/A Not a gift, and needs no match Defer for later Parks the row for up to 14 days Flag for compliance review Raises it for review -
Finish at Month-End Close when the period is done. The close produces a downloadable summary PDF.
Record as unidentified gift is the one to reach for when you genuinely cannot trace a deposit. The confirmation is explicit about what happens: the gift goes on your books now, against a hidden placeholder, and is not added to your donor directory, mailing lists or exports, and no tax receipt is sent. The success toast links straight to the follow-up queue. See DAF, Custodian Statements and Unidentified Gifts.
Removing a match reverses the gift. Use Change match → Remove match from the Outcome cell. It reverses the donation and voids any receipt already issued, so it is not a cosmetic correction.
Audit trail and exports
Every match, override, dismissal, and manual correction writes an audit log entry with:
- User who performed the action
- Timestamp
- Before/after state
- Confidence score at time of action
- Reason (if manually provided)
Month-End Close produces a downloadable summary PDF.
Keyboard shortcuts
Press ? anywhere on the register (except while typing in a box) to open Keyboard shortcuts, or use the shortcuts link in the header.
| Shortcut | Action |
|---|---|
J or ↓ |
Move selection down |
K or ↑ |
Move selection up |
Enter |
Open the selected row |
? |
Open the shortcuts dialog |
Ctrl/Cmd + ← / → |
Move the focused column |
There are deliberately no single-key confirm, reject or undo shortcuts. Every decision that moves money is made in the drawer, where you can see what you are agreeing to.
Troubleshooting
| Issue | Cause | Resolution |
|---|---|---|
| A Stripe charge did not appear in the queue | Webhook delivery failure | Muin retries Stripe deliveries automatically. If the charge is still missing after an hour, contact Support. |
| Zelle rows not parsing from bank statement | Unsupported bank format | Upload a sample statement via Support so the parser can be extended |
| Check OCR misread the amount | Poor photo quality, unusual handwriting | Edit the extracted amount in the row drawer. |
| Cash count does not match bank deposit | Counting error or deposit-slip discrepancy | Open the two-person count record; compare to deposit-slip photo; flag for manager review |
| A row sits unmatched and staff recognizes the donor | Matching signals were below the threshold | Open the row and use Link to existing donor / vendor |
| “Couldn’t load transactions” | A load error, not an empty register | Retry. An empty list after this message is not proof there is nothing to review |
| “No matching transactions” | Filters are too narrow | Widen the date range, clear the search box, or set the status filter back to All |
| A whole statement is missing | The import was parked needing column mapping, so nothing was imported | Open the Import tab, re-drop the file and answer Tell us which columns to read |
Related
- Donation Intents: pre-gift pledge and post-gift claim flows
- Bank Statement Import: uploading a statement and reading the preview
- DAF, Custodian Statements and Unidentified Gifts: clearing the follow-up queue
- Payments Reconciliation: matching processor charges against Muin records
- Muin Go Check Capture: mobile check-capture setup and guidance
- Donor Portal: donor-facing self-service
- Product page: /platform/reconciliation, marketing overview of the capability
- Guide: How to reconcile 500+ donations without a spreadsheet