Skip to main content
skill CX Codex

stripe-import — Claude Code skill: import Stripe CSV exports

Turns a Stripe CSV export into ledger entries: charges, processing fees and refunds as separate rows. Useful when reconciling revenue against your bank statement.

Install into Claude Code · Skills CLI (Vercel) All methods and platforms ↓
npx skills add openaccountant/skills --skill stripe-import -a claude-code
Open on GitHub

What stripe-import does

The skill parses a Stripe CSV export and splits it into transactions. Every succeeded charge becomes two rows: revenue from the Amount column and a negative fee row from Fee. Refunds get their own negative revenue line. Payouts and transfers are skipped on purpose — they already show up in your bank import, and pulling them from Stripe too would double-count the money.

Before inserting anything, the skill checks existing Stripe transactions by charge ID (ch_xxx) to avoid duplicates, then shows a preview: total charges, fees, refunds and net revenue. Categories are assigned automatically: Revenue:Stripe, Fees:Payment Processing, Revenue:Refunds. Multi-currency exports keep their original amounts; no conversion happens.

Amounts in the CSV are already in standard units, not cents, so nothing needs rescaling. On Stripe Connect, application fees arrive as separate line items and can go under Fees:Platform. Run the import only after you have confirmed your bank payouts were not loaded twice — a mismatch in payout totals is the first sign of a duplicate somewhere.

What it helps with

  • split a Stripe export into revenue and processing fees
  • keep payouts out of the import to avoid double-counting
  • reconcile refunds against the bank statement
  • check whether the same charges were already imported
  • work out net revenue and the effective fee rate

Example prompts for the agent

  • Import the Stripe CSV at ~/Downloads/stripe.csv
  • Show me the import summary: charges, fees, refunds
  • Check for duplicate charge IDs before inserting

How to install stripe-import

1Skills CLI (Vercel)

npx skills add openaccountant/skills --skill stripe-import -a claude-code

2Manually: put the files in place

~/.claude/skills/stripe-import/SKILL.md

Copy the whole skill folder; for one project use .claude/skills/stripe-import/

Step by step, with commands for each platform: How to install skills in Claude Code: five ways

Questions about stripe-import

How do I install stripe-import in Claude?

Run npx skills add openaccountant/skills --skill stripe-import -a claude-code. The skill lands at ~/.claude/skills/stripe-import/SKILL.md.

What does stripe-import do?

It imports a Stripe CSV export, creating separate rows for revenue, fees and refunds, skipping payouts and deduplicating by charge ID.

Why are payouts skipped?

A payout is the transfer from Stripe to your bank account and already appears in your bank statement import. Importing it from Stripe as well would double-count the money.

Source text

SKILL.md · MIT
---
name: stripe-import
description: >
  Import Stripe payment CSV exports with charges, fees, and refund handling.
---

# Stripe Import

## Overview
Import transaction data from Stripe CSV exports into Open Accountant. Handles charges (revenue), Stripe processing fees, and refunds as separate line items. Payouts are skipped since they appear in your bank import and would cause double-counting.

## Wilson Tools Used
- `transaction_search` — check for existing Stripe transactions to prevent duplicates
- `categorize` — assign categories to imported Stripe transactions
- `export_transactions` — export reconciled Stripe data

## Column Mapping

| Stripe CSV Column | Open Accountant Field | Notes |
|---|---|---|
| `id` | `reference_id` | Stripe charge ID (ch_xxx) |
| `Created (UTC)` | `date` | Transaction date |
| `Description` | `description` | Customer-facing description |
| `Amount` | `amount` | Gross charge amount (positive = income) |
| `Fee` | `amount` (separate row) | Stripe processing fee (negative = expense) |
| `Net` | — | Calculated field, not stored directly |
| `Currency` | `currency` | 3-letter ISO code |
| `Status` | — | Only import `succeeded` charges |
| `Customer Email` | `notes` | Optional, stored in notes |

## Workflow
1. Ask the user for the Stripe CSV file path.
2. Parse the CSV and validate expected Stripe column headers.
3. Filter rows:
   - **Import**: rows where `Type` is `charge` and `Status` is `succeeded`
   - **Import**: rows where `Type` is `refund`
   - **Skip**: rows where `Type` is `payout` or `transfer` (these appear in bank imports)
   - **Skip**: rows where `Status` is `failed` or `pending`
4. For each charge, create two transactions:
   - **Revenue**: positive amount from the `Amount` column, category "Revenue:Stripe"
   - **Fee**: negative amount from the `Fee` column, category "Fees:Payment Processing"
5. For refunds, create a negative revenue transaction with category "Revenue:Refunds"
6. Deduplicate using the Stripe charge ID (`id` column) as the reference.
7. Preview the import summary: total charges, total fees, total refunds, net revenue.
8. Insert transactions and confirm.

## Without Wilson
To work with Stripe exports manually:

### Downloading from Stripe
1. Log in to **dashboard.stripe.com**
2. Go to **Payments** (left sidebar)
3. Click **Export** (top right of the payments list)
4. Select date range and columns:
   - Recommended: `id`, `Created (UTC)`, `Description`, `Amount`, `Fee`, `Net`, `Currency`, `Status`, `Type`, `Customer Email`
5. Choose **CSV** format and download

### Manual Processing in a Spreadsheet
1. Open the CSV in Google Sheets or Excel.
2. **Filter out non-succeeded**: Data > Filter > Status column > select only "succeeded"
3. **Remove payouts**: Filter Type column > deselect "payout" and "transfer"
4. **Create revenue rows**:
   - Column for category: set to "Revenue:Stripe" for all charge rows
   - Amount column already has the gross charge amount
5. **Create fee rows**: Add rows for each charge with:
   - Same date
   - Description: "Stripe fee — [original description]"
   - Amount: negative value from the Fee column (e.g., if Fee = 2.90, enter -2.90)
   - Category: "Fees:Payment Processing"
6. **Handle refunds**: Refund rows should have negative amounts in the Amount column. Set category to "Revenue:Refunds"
7. **Summary formulas**:
   ```
   Gross Revenue:    =SUMIFS(Amount, Type, "charge", Status, "succeeded")
   Total Fees:       =SUMIFS(Fee, Type, "charge", Status, "succeeded")
   Total Refunds:    =ABS(SUMIFS(Amount, Type, "refund"))
   Net Revenue:      =GrossRevenue - TotalFees - TotalRefunds
   Effective Rate:   =TotalFees / GrossRevenue * 100
   ```
8. **Reconcile with bank**: Your bank payout amounts should equal the sum of `Net` column values between payout dates.

## Important Notes
- Stripe amounts are in the smallest currency unit in the API but in standard units in CSV exports (e.g., $10.00, not 1000).
- Multi-currency: if you accept payments in multiple currencies, each currency is imported with its original amount. Wilson does not perform currency conversion.
- Stripe fee percentage is typically 2.9% + $0.30 per transaction but varies by plan. The actual fee is in the CSV.
- **Do not import payouts.** Payouts are the transfer from Stripe to your bank account. These appear in your bank statement import and importing them from Stripe would double-count the money.
- Connect/platform charges: if you use Stripe Connect, application fees appear as separate line items. Import these under "Fees:Platform" if applicable.

© openaccountant · MIT · openaccountant/skills

Similar skills

Everything for Finance and business →

From the same set28

Project sponsors

Companies that keep this analytics open
Gold sponsor

Impressions, clicks and code copies — open statistics. We keep the numbers public for the same reason NeBlask itself is public. Become a sponsor