Reconcile PayPal/Stripe/Square payouts to bank deposits to accounting. Agent skill.
SaferSkills independently audited paypal-stripe-reconciliation (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
PSPs (PayPal, Stripe, Square, Adyen, Braintree) net out fees, refunds, chargebacks, and disputes before depositing to your bank. The bank sees a single net number; your books need the gross. Every reconciliation problem comes from this gross-vs-net gap.
Core principle: For every PSP payout to your bank, you must be able to explain — line by line — what gross sales, fees, refunds, and adjustments add up to that exact net amount. If you can't, something is wrong.
Gross sales (in period)
− PSP fees
− Refunds issued
− Chargebacks / disputes
− Reserves held
± Adjustments (currency, rounding)
= Net payout to bankIf left ≠ right, find the line that breaks it before adding a plug entry.
For the period being reconciled, get:
Each PSP payout = one bank deposit (usually 1-2 day delay).
| PSP payout date | PSP payout amount | Bank deposit date | Bank deposit amount | Match? |
|---|---|---|---|---|
| 2026-05-01 | $4,832.17 | 2026-05-03 | $4,832.17 | ✓ |
| 2026-05-08 | $3,201.50 | 2026-05-10 | $3,201.50 | ✓ |
| 2026-05-15 | $1,876.22 | ??? | — | ✗ MISSING |
If a payout is missing from the bank: check (a) PSP reserve hold, (b) account-on-hold notice, (c) routing change.
In Stripe: click the payout → "Show details" → CSV export.
Each payout row should be one of:
charge (gross sale)refundadjustment (chargeback, dispute, currency conversion)application_fee / stripe_feetransfer (account-to-account)Sum each category for the period. The sum should match the payout amount.
In QBO/Xero, your PSP should appear as a clearing account (current asset). Workflow:
If your books are recording net deposits as Revenue, you're losing 2.9% of revenue visibility — and your COGS/margins are wrong. See references/journal-patterns.md for the correct entries.
See references/psp-quirks.md for the full list. Top 5:
After reconciling, produce this format:
# PSP Reconciliation — [PSP Name], [Period]
## Summary
- Gross sales (PSP): $X
- PSP fees: $X (Y% effective rate)
- Refunds: $X
- Chargebacks: $X
- Reserves change: $X
- **Net payouts: $X**
- **Bank deposits matched: $X**
- **Unmatched: $X**
## Unmatched items (require investigation)
| Date | PSP txn ID | Amount | Notes |
## Journal entries posted
[List]
## Anomalies
- [Refund rate this period: X% vs. trailing 3mo avg Y%]
- [Effective fee rate X% vs. expected Y%]Investigate immediately:
| Issue | Where to look |
|---|---|
| Missing payout | PSP Dashboard → Payouts → Status |
| Mystery deduction | PSP Dashboard → Disputes + Reserves |
| Fee anomaly | Pricing page + per-transaction breakdown |
| Bank deposit doesn't match PSP payout | Currency conversion + reserve hold |
| Customer paid but no record | Webhook delivery log (Stripe/PayPal) |
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.