How to filter a transactions csv by payment method
- Step 1Export the combined transactions CSV — Stripe: Payments → Export (the unified payments CSV). PayPal: Activity → Download → CSV. Square / a payment gateway: the transactions report. Accounting (Xero, QuickBooks): the transactions or bank-reconciliation export. Note the payment-method column name and a couple of sample values.
- Step 2Drop the file onto the filter above — PapaParse parses it in your browser and auto-detects the delimiter. Headers populate the Filter column dropdown — pick
Payment Method,Card Brand,Type,Funding Source, or whatever your export calls it. - Step 3Choose equals for a clean label or contains for a descriptor — If the column holds tidy values (
Credit Card), useequals. If the method is embedded in a longer string (Visa •••• 4242), usecontainsand type the brand or keyword (Visa). - Step 4Type the method value exactly — Copy a value from a sample row —
Credit Card,PayPal,Bank Transfer. Casing is ignored by default. Special characters like/inApple Pay / Walletor••••are matched literally, so no escaping. - Step 5Filter and reconcile the count — Click Filter rows. The panel shows Rows matched, Rows filtered out, and a preview of the first 10 matching transactions. Cross-check Rows matched (and ideally the summed amount) against the processor's settlement count for that method.
- Step 6Download, or split every method at once — Download gives
<name>.filtered.csv. To produce one file per payment method in a single step, use CSV Column Value Splitter — it emits<name>.<method>.csvfor each distinct method so every reconciliation stream gets its own file.
Operators mapped to payment-method filtering
All 10 operators are available. Text matching is case-insensitive by default and literal (never regex). Numeric operators are for amount columns only.
| Operator | Payment-method use | Needs a value? |
|---|---|---|
equals | Exact method — equals PayPal keeps only PayPal transactions | Yes |
contains | Method inside a descriptor — contains Visa over Visa •••• 4242 (default operator) | Yes |
starts_with | Brand prefix — starts_with Mastercard for any Mastercard descriptor | Yes |
not_equals | Everything except one method — not_equals Bank Transfer | Yes |
not_contains | Drop a family — not_contains Card keeps non-card methods (PayPal, transfer) | Yes |
is_empty | Transactions with no method recorded — a data-quality bucket | No |
is_not_empty | Keep only transactions with a method set | No |
greater_than / less_than | Numeric only (parseFloat) — for an Amount column; strip the currency symbol first | Yes |
Payment-method field shapes by source
Sources name and shape the method field differently. Pick the column that drives your filter.
| Source | Method column | Typical values |
|---|---|---|
| Stripe | Card Brand / Payment Method Type | visa, mastercard, amex; or card, link, us_bank_account |
| PayPal | Type | Express Checkout Payment, Bank Deposit to PP Account, Refund |
| Square | Card Brand / Payment Method | Visa, Cash, Other, Gift Card |
| QuickBooks / Xero | Payment Method | Credit Card, Cash, Cheque, Bank Transfer, PayPal |
| Generic gateway | payment_method | credit_card, paypal, bank_transfer, apple_pay |
Cookbook
Real before/after slices from transaction exports. Card numbers and customer names anonymised. Text matching is case-insensitive and literal unless noted.
Keep only credit-card transactions for the card settlement
ExampleReconcile card payments against the processor payout. equals Credit Card on the method column gives the exact slice. If your export uses brand names instead, see the contains example below.
Input (accounting export): Date,Description,Payment Method,Amount 2026-06-01,Order 1001,Credit Card,42.00 2026-06-01,Order 1002,PayPal,18.50 2026-06-02,Order 1003,Credit Card,99.00 2026-06-02,Order 1004,Bank Transfer,200.00 Config: column = Payment Method, operator = equals, value = Credit Card Output (.filtered.csv): Date,Description,Payment Method,Amount 2026-06-01,Order 1001,Credit Card,42.00 2026-06-02,Order 1003,Credit Card,99.00 Rows matched: 2 · Rows filtered out: 2
All Visa transactions from a card-descriptor column
ExampleStripe and Square often store the brand with a masked number (Visa •••• 4242). equals won't match the whole descriptor, but contains Visa catches every Visa regardless of the last four digits.
Input: id,Card Brand,Amount t1,Visa •••• 4242,42.00 t2,Mastercard •••• 5100,18.50 t3,Visa •••• 0019,99.00 t4,Amex •••• 1009,12.00 Config: column = Card Brand, operator = contains, value = Visa Output: id,Card Brand,Amount t1,Visa •••• 4242,42.00 t3,Visa •••• 0019,99.00 Rows matched: 2
All non-card methods via not_contains
ExampleFor a separate reconciliation of alternative payments, keep everything that isn't a card. not_contains Card drops Credit Card and Debit Card, leaving PayPal, bank transfer, and the rest.
Input: Description,Payment Method Order A,Credit Card Order B,PayPal Order C,Debit Card Order D,Bank Transfer Config: column = Payment Method, operator = not_contains, value = Card Output: Description,Payment Method Order B,PayPal Order D,Bank Transfer Rows matched: 2 · Rows filtered out: 2
Case-mixed method labels still match
ExampleManual or mixed-source data produces PayPal, paypal, and PAYPAL. The default case-insensitive match catches all three, so you don't have to normalise the column before reconciling.
Input: id,Payment Method m1,PayPal m2,paypal m3,PAYPAL m4,Credit Card Config: column = Payment Method, operator = equals, value = paypal (Case-sensitive checkbox OFF) Output: id,Payment Method m1,PayPal m2,paypal m3,PAYPAL Rows matched: 3
Two methods at once — split, don't comma
ExampleThere's no multi-method box. contains Credit Card, Debit Card matches the literal substring (no cell holds it), returning zero. Use the splitter, or a single contains Card if both are card types.
Goal: keep {Credit Card, Debit Card}.
Clean trick (both are cards):
contains 'Card' → keeps Credit Card AND Debit Card in one pass.
General case (unrelated methods, e.g. PayPal + Bank Transfer):
/tool/csv-column-value-splitter on Payment Method →
txns.PayPal.csv
txns.Bank Transfer.csv
txns.Credit Card.csv ...
Keep the files you need, recombine with /tool/csv-merger.
Wrong: contains 'Credit Card, Debit Card' → 0 rows.Errors and edge cases
Real errors and silent failures sourced from each platform's own documentation. Match the wording to the row, fix what the row says to fix.
Comma-separated multi-method value box
Not supportedThere's no multi-value field. contains A, B matches the literal substring A, B, not method A OR B. For several unrelated methods use CSV Column Value Splitter (one file per method), or use a shared contains substring (Card for all card types) or not_contains to drop a family.
Brand stored with a masked card number
Use containsStripe/Square store Visa •••• 4242, so equals Visa matches nothing — the cell isn't exactly Visa. Use contains Visa (or starts_with Visa) to catch every Visa regardless of the last four. Matching is literal, so the •••• bullets need no escaping.
Filtering an amount column with the numeric operators
Strip currency firstgreater_than / less_than use parseFloat. parseFloat('£42.00') is NaN (starts with a symbol) and never matches; parseFloat('1,200.00') is 1 (stops at the comma). Strip currency symbols and thousands commas with CSV Find & Replace before filtering amounts.
Inconsistent method capitalisation
Handled by defaultMatching is case-insensitive unless you tick Case-sensitive, so PayPal, paypal, and PAYPAL all match paypal. No need to run CSV Case Converter first, though normalising makes the reconciled file tidier.
Transactions with no method recorded
Found via is_emptyis_empty keeps rows where the method cell is literally blank — useful for catching unclassified transactions before reconciliation. It doesn't trim, so a cell with only a space passes is_not_empty; run CSV Whitespace Trimmer first if your export pads blanks.
Refund and chargeback rows mixed in
Filter the type column separatelyMany exports include refunds, chargebacks, and fees as rows with their own Type. Those may carry a payment method too, so a method filter keeps them. Chain a second pass on the Type column (e.g. not_contains Refund) if you want only the original captures. The header survives both passes.
Exclude one method without listing the rest
By design — use not_equalsThere's no exclude toggle. not_equals Bank Transfer keeps every method except bank transfers; not_contains Card drops all card types. The negative operators do the exclusion.
Free tier 500-row / 2 MB cap on a month of transactions
Upgrade requiredFree accounts cap at 2 MB and 500 data rows. A busy month of transactions usually exceeds both. Pro raises the limit to 100 MB and 100,000 rows. Slice with CSV Row Limiter to work within free limits, or upgrade.
Frequently asked questions
How do I keep only one payment method?
Pick the payment-method column, choose equals (or contains if the method is inside a longer descriptor), type the method value, and click Filter rows. Download gives <name>.filtered.csv with the header plus only that method's transactions. The result panel shows Rows matched so you can reconcile against the processor's settlement count.
Can I keep multiple payment methods at once?
Not in a single pass with a comma list — contains A, B is matched as a literal substring and returns nothing. If the methods share a word (Credit Card + Debit Card both contain Card), use contains Card. Otherwise use CSV Column Value Splitter to emit one file per method and keep the ones you need.
My export stores the card brand with the last four digits — how do I filter it?
Use contains. A cell like Visa •••• 4242 isn't exactly Visa, so equals won't match — but contains Visa (or starts_with Visa) catches every Visa regardless of the masked number. Matching is literal, so the bullet characters need no escaping.
What if payment methods are inconsistently named?
Casing is handled automatically (case-insensitive by default), so PayPal/paypal/PAYPAL all match. But genuinely different labels (PayPal vs PP vs Express Checkout) won't unify — normalise them first with CSV Find & Replace, then filter.
Can I exclude a payment method instead of keeping it?
Yes — use not_equals to drop one exact method, or not_contains to drop a family. not_contains Card keeps all non-card transactions. There's no separate exclude toggle; the negative operators handle it.
How do I filter transactions above a certain amount?
Use greater_than on the amount column — but it uses parseFloat, so strip the currency symbol and thousands commas first. parseFloat('£1,200.00') is NaN; after removing £ and , it becomes 1200. Clean the column with CSV Find & Replace, then filter. Chain it after the method filter for a method-plus-amount slice.
Does the value act as a regular expression?
No. The value is matched literally, so a method label with / (Apple Pay / Wallet), ••••, or parentheses is matched character-for-character. Regex metacharacters have no special meaning.
Are refunds and chargebacks included in a method filter?
They can be, if those rows carry a payment method. Many exports include refunds/chargebacks/fees as separate Type rows. To keep only original captures, chain a second pass on the Type column (e.g. not_contains Refund). The header survives both passes, so the chain is lossless.
Is the header counted in the matched rows?
No. The header is always preserved separately and never counted. If Rows matched is 40, the downloaded file has 41 lines — the header plus 40 transactions — so it reconciles and imports cleanly.
How large a transactions file can I filter?
Free tier caps at 2 MB and 500 data rows. Pro raises this to 100 MB and 100,000 rows. For a busy month, slice with CSV Row Limiter first or upgrade. Processing runs in-browser, bounded by your machine's memory.
Is my financial data uploaded?
No. All filtering runs locally in your browser via PapaParse. Card last-fours, customer names, and amounts never reach a JAD Apps server — only an anonymous run counter is recorded for signed-in dashboard stats.
Can I automate per-method reconciliation files?
Yes. GET /api/v1/tools/csv-column-filter returns the schema (column, operator, value, caseSensitive). Pair the @jadapps/runner once and POST your transactions export to 127.0.0.1:9789/v1/tools/csv-column-filter/run. A monthly pipeline: gateway export → filter per method → deliver each file to the matching reconciliation stream. The runner is on-device, so financial data stays local.
Privacy first
Processing runs locally in your browser with PapaParse. No file is uploaded — only metadata counters are saved for signed-in dashboard stats.