Skip to content

Repository files navigation

receipt2sheet

License: MIT TypeScript Node CI PRs Welcome

v0.2.0

Turn rental receipts into Schedule E line items using Claude AI.

Drop receipts. Confirm. Done.

$ r2s process

Processing 4 receipt(s)...

  Parsing amazon-05-12.pdf... done
  Parsing plumber.pdf... done
  Parsing electric-bill.pdf... done
  Parsing hot-tub-invoice.pdf... done [CAPITAL]

┌───┬──────────────────────┬──────────────────┬────────────┬──────────┬──────────────────────┬──────────┐
│ # │ File                 │ Vendor           │ Date       │ Amount   │ Category             │ Type     │
├───┼──────────────────────┼──────────────────┼────────────┼──────────┼──────────────────────┼──────────┤
│ 1 │ amazon-05-12.pdf     │ Amazon           │ 2026-05-12 │ $45.99   │ Supplies             │ operating│
│ 2 │ plumber.pdf          │ Anewhere Plumb.. │ 2026-05-10 │ $180.00  │ Repairs              │ operating│
│ 3 │ electric-bill.pdf    │ Peninsula Light  │ 2026-05-01 │ $67.23   │ Utilities            │ operating│
│ 4 │ hot-tub-invoice.pdf  │ Aqua Quip        │ 2025-05-26 │ $8350.73 │ Other                │ CAPITAL  │
└───┴──────────────────────┴──────────────────┴────────────┴──────────┴──────────────────────┴──────────┘
? What would you like to do?
❯ Confirm all
  Confirm invoices only (skip $0 entries)
  Edit entries
  Skip all

Why?

  • Schedule E ready — Categories match IRS rental property deductions
  • Capital vs Operating — Automatically routes major purchases to Capital Improvements
  • No SaaS — Your data stays local; just pay Claude API costs (~$2/month)
  • Works with your spreadsheets — Updates xlsx files you can open in Excel, Numbers, or Google Sheets
  • Vendor hints — Configure known vendors in r2s.yaml to guide Claude's categorization

Privacy & Security

Your financial data is sensitive. We treat it that way.

  • All spreadsheets stay local — Nothing synced to the cloud
  • Automatic PII redaction — Credit cards, SSNs, and bank details are scrubbed from text before API calls
  • No telemetry — Zero analytics, tracking, or phone-home
  • Open source — Audit the code yourself

See PRIVACY.md for full details on what data goes where.

Install

# Clone and install
git clone https://github.com/TeamNickHart/receipt2sheet.git
cd receipt2sheet
pnpm install
pnpm build

# Set up your API key
cp .env.example .env.local
# Edit .env.local with your Anthropic API key

Quick Start

# Initialize in your rental folder
cd ~/Documents/MyRental
r2s init

# Check your setup
r2s doctor

# Drop receipts in inbox/
cp ~/Downloads/*.pdf inbox/

# Process them
r2s process

What It Creates

MyRental/
├── r2s.yaml                      # Your config
├── inbox/                        # Drop receipts here
├── processed/                    # Receipts move here after processing
├── .r2s/
│   └── processed.json            # Processing ledger
└── spreadsheets/
    ├── Operating_Expenses_2026.xlsx
    ├── Capital_Improvements.xlsx
    └── Year_End_Summary.xlsx

Commands

Command Description
r2s init Set up a new rental folder
r2s process [files...] Parse receipts from inbox
r2s doctor Check setup, API connection, project health
r2s doctor --fix Auto-fix missing directories and files

Process Options

r2s process                        # Process all files in inbox/
r2s process receipt.pdf             # Process specific file(s)
r2s process --dry-run               # Preview without updating spreadsheets
r2s process --yes                   # Skip confirmation prompt
r2s process --property cabin        # Assign to a specific property
r2s process --category Repairs      # Override category for all receipts
r2s process --force                 # Reprocess already-processed files

Configuration

r2s.yaml

Edit to add your properties and vendors:

properties:
  - id: cabin
    name: "Lake Cabin"
    location: "Lake Tahoe, CA"
    type: short-term-rental
    placed_in_service: 2026-01

vendors:
  "Local Plumber":
    category: Repairs
  "Electric Co":
    category: Utilities

.env.local

ANTHROPIC_API_KEY=sk-ant-your-key-here

# Model: small (Haiku), medium (Sonnet), large (Opus), or exact model ID
# R2S_MODEL=medium

# Max upload size in MB
# R2S_MAX_FILE_SIZE_MB=10

Multi-Property Support

Track multiple rentals with one tool:

r2s process --property cabin
r2s process --property condo
r2s status --property all

How It Works

  1. Text extraction — Pulls text from PDFs; sends scanned PDFs directly to Claude as documents
  2. Claude parsing — Identifies vendor, date, amount, category, and expense type (operating vs capital)
  3. You confirm — Review, edit, or skip before anything changes
  4. Spreadsheet update — Routes operating expenses and capital improvements to the correct files
  5. Receipt archived — Moves to processed/ folder, records in processing ledger

Supported File Types

  • PDF (text extraction + native document upload for scanned files)
  • PNG, JPG, JPEG, WebP (vision API)

Cost

Claude API usage is minimal:

  • ~$0.01–0.05 per receipt (text extraction)
  • ~$0.05–0.15 per receipt (PDF document or image vision)
  • Typical month: $1–3 for 50 receipts

Development

pnpm install              # install dependencies
pnpm validate             # typecheck + format + lint + build + test
pnpm test                 # run tests
pnpm test:watch           # run tests in watch mode
pnpm test:coverage        # run tests with coverage report
pnpm fixtures:generate    # regenerate test fixture PDFs

Contributing

Contributions are welcome! Please read the PLAN.md for architecture details and implementation status.

License

MIT

Documentation

About

CLI tool that uses Claude AI to parse receipts and update your short-term rental expense spreadsheets.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages