How We Use beancount.io v3's Team Features to Manage Company Finances

As the operations manager for a growing 15-person company, I’ve spent the last 6 months transforming how we handle our finances. We migrated from QuickBooks Online to beancount.io v3, and the team collaboration features have been a game-changer.

Let me share our real-world experience with v3’s team features and how they’ve solved our collaboration headaches.

Our Company Context

We’re a digital marketing agency with:

  • 15 employees (mix of remote and in-office)
  • $2.5M annual revenue
  • ~1,200 transactions/month
  • 3 people who need regular access to financials (me, CFO, accountant)
  • 5 people who need occasional read-only access (department heads)
  • Quarterly board meetings requiring financial reports

The Old Way (QuickBooks Online)

Before v3, our workflow was painful:

Problem 1: Too many cooks in the kitchen

  • QuickBooks has “users” but terrible permission controls
  • Our accountant accidentally deleted transactions meant for review
  • Department heads could see ALL financials (including salaries)
  • No way to give “view only for specific accounts” access

Problem 2: Version confusion

  • “Which numbers are current?”
  • “Did you include the January adjustments?”
  • “I’m looking at different numbers than you!”
  • No single source of truth

Problem 3: Collaboration = email chaos

  • Email threads with Excel attachments
  • “Final_v2_ACTUALLY_FINAL.xlsx”
  • Someone working on old version
  • Manual reconciliation of changes

Problem 4: No audit trail

  • Who changed this transaction?
  • When was it changed?
  • Why was it changed?
  • QuickBooks audit log is terrible (cryptic, hard to search)

The New Way (beancount.io v3 Team Features)

v3’s approach is fundamentally different. Instead of a centralized server with user accounts, it uses Git-based collaboration with role-based access controls.

How It Works

1. Git Repository (Single Source of Truth)

All our financial data lives in a Git repository:

company-finances/
├── main.beancount          (master ledger)
├── accounts/
│   ├── income.beancount    (revenue transactions)
│   ├── expenses.beancount  (expense transactions)
│   ├── payroll.beancount   (payroll - restricted access)
├── documents/              (linked receipts, invoices)
└── reports/                (generated reports)

2. Team Members with Different Access Levels

We have 3 tiers of access:

Tier 1: Full Access (3 people)

  • Me (Operations Manager)
  • Sarah (CFO)
  • Tom (External Accountant)

Permissions:

  • Read and write all ledgers
  • Approve transactions (Git merge permissions)
  • Generate reports
  • Invite new team members

Tier 2: Department Read Access (5 people)

  • Marketing Director (sees marketing budget)
  • Sales Director (sees sales commissions)
  • Engineering Manager (sees R&D expenses)
  • HR Manager (sees benefits, NOT individual salaries)
  • Operations Lead (sees operational costs)

Permissions:

  • Read-only access to specific ledger files
  • Can view reports for their departments
  • Cannot edit transactions
  • Cannot see payroll details

Tier 3: Board Members (4 people)

  • Read-only access to summary reports
  • Quarterly report access only
  • No transaction-level detail
  • No access to Git repo (they get PDF exports)

Setting Up Team Access (Step-by-Step)

Here’s exactly how we set this up:

Step 1: Create Git Repository

We use GitHub (private repo) for hosting:

# Initialize repo
git init company-finances
cd company-finances

# Create initial structure
touch main.beancount
mkdir accounts documents reports

# Initial commit
git add .
git commit -m "Initial financial ledger setup"

# Push to GitHub
git remote add origin [email protected]:ourcompany/finances.git
git push -u origin main

Step 2: Invite Team Members via Email

v3 has a web interface for team management:

In v3 dashboard:

  1. Go to “Team Settings”
  2. Click “Invite Member”
  3. Enter email address
  4. Select role: “Admin”, “Editor”, “Viewer”, “Department Viewer”
  5. For Department Viewer, select which ledger files they can access
  6. Click “Send Invitation”

Email sent:

Subject: Invitation to Company Finances (beancount.io v3)

Hi Sarah,

Lisa has invited you to collaborate on Company Finances.

Role: Admin (Full Access)
Access: All ledgers, all reports

Click here to accept: [Accept Invitation]

You'll need a GitHub account to collaborate. If you don't have one,
you can create one for free at github.com.

Once you accept, you'll be able to:
- Clone the repository to your local machine
- View all financial transactions
- Submit changes for approval
- Generate reports

Questions? Contact [email protected]

Step 3: Team Member Accepts Invitation

When Sarah clicks “Accept Invitation”:

  1. She’s prompted to connect her GitHub account
  2. She’s added to the GitHub repo with appropriate permissions
  3. She receives setup instructions:
Welcome to Company Finances!

To get started:

1. Install beancount.io v3:
   https://beancount.io/install

2. Clone the repository:
   git clone [email protected]:ourcompany/finances.git
   cd finances

3. Open in v3 web interface:
   beancount-web main.beancount

4. Or use command-line tools:
   beancount-query main.beancount

You're all set! Changes you make will be tracked via Git.

Step 4: Role-Based Permissions (GitHub)

We configure GitHub branch protection rules:

Main branch protection:

  • Require pull request reviews (2 approvals)
  • Require status checks to pass (beancount validation)
  • No direct pushes to main
  • Only Admins can approve PRs

Who can approve: Me, Sarah (CFO), Tom (Accountant)

Why this matters:

  • Prevents accidental changes to main ledger
  • Ensures all edits are reviewed
  • Creates audit trail of approvals

Step 5: File-Level Access Control

For department viewers, we use Git sparse-checkout:

Example: Marketing Director sees only marketing expenses

# Marketing Director's setup
git clone --no-checkout [email protected]:ourcompany/finances.git
cd finances

git sparse-checkout init --cone
git sparse-checkout set accounts/marketing-expenses.beancount reports/marketing/

# Now they only see:
# accounts/marketing-expenses.beancount
# reports/marketing/

# They CANNOT see:
# accounts/payroll.beancount
# accounts/executive-comp.beancount

Our Team Workflow

Here’s our day-to-day collaboration workflow:

Scenario 1: Monthly Expense Entry (Accountant)

Tom (Accountant) enters monthly expenses:

  1. Pull latest changes
git pull origin main
  1. Create a branch for this month’s work
git checkout -b march-2025-expenses
  1. Add transactions to appropriate files
# Edit accounts/expenses.beancount
# Add 200+ transactions for March
# Link documents (receipts, invoices)
  1. Commit changes
git add accounts/expenses.beancount documents/
git commit -m "March 2025 expenses - 237 transactions"
  1. Push to GitHub and create Pull Request
git push origin march-2025-expenses

GitHub sends notification: “Tom has created a PR: March 2025 expenses”

  1. I review the PR

In GitHub PR interface, I see:

  • All 237 transactions added
  • Linked documents (receipts)
  • Summary: Total expenses $145,320
  • beancount validation: PASSED (all entries balance)

I can comment on specific lines:

Line 45: "Office Depot - Supplies $450"
Comment: "This seems high, can you verify the invoice?"

Tom responds, uploads invoice, I verify.

  1. I approve the PR

Click “Approve and Merge”

  1. Changes are now in main ledger

Everyone on the team pulls latest:

git pull origin main

Now Sarah (CFO) sees updated numbers in her reports.

Scenario 2: Budget Review (Department Head)

Marketing Director wants to check budget spend:

  1. Pull latest changes (read-only)
git pull origin main
  1. Open v3 web interface
beancount-web accounts/marketing-expenses.beancount
  1. View dashboard

She sees:

  • YTD marketing spend: $280,000
  • Budget: $350,000
  • Remaining: $70,000 (20% of year left, 20% of budget left - on track!)
  1. Export report for her team

In v3 web UI:

  • Click “Reports” → “Marketing Expenses by Category”
  • Select date range: Jan 1 - Mar 31, 2025
  • Click “Export to PDF”

She emails the PDF to her team (no access to raw financial data needed).

Scenario 3: Board Meeting Prep (CFO)

Sarah (CFO) prepares quarterly board report:

  1. Generate reports from v3
# Profit & Loss
beancount-query main.beancount "
  SELECT account, SUM(position)
  WHERE account ~ 'Income|Expenses'
    AND year = 2025 AND quarter = 1
  GROUP BY account
" > reports/q1-2025-pl.csv

# Balance Sheet
beancount-query main.beancount "
  SELECT account, SUM(position)
  WHERE account ~ 'Assets|Liabilities|Equity'
    AND date <= 2025-03-31
  GROUP BY account
" > reports/q1-2025-balance-sheet.csv
  1. Create visualizations

v3 has built-in charting:

  • Revenue trend (monthly)
  • Expense breakdown (pie chart)
  • Cash flow (waterfall chart)
  1. Export PDF for board

v3 generates professional PDF:

  • Cover page with company logo
  • Executive summary
  • Charts and graphs
  • No transaction-level detail (privacy)
  1. Commit report to Git
git add reports/q1-2025-board-report.pdf
git commit -m "Q1 2025 board report"
git push

Now the report is version-controlled. If board asks questions next quarter, we can refer back to exact numbers we presented.

Real-Time Collaboration Features

Feature 1: Activity History

v3 web interface shows recent activity:

Activity Feed (Last 7 Days)

Mar 15, 10:30 AM - Tom committed "March expenses batch 1"
  → 87 transactions added to accounts/expenses.beancount

Mar 15, 2:15 PM - Lisa approved PR "March expenses batch 1"
  → Changes merged to main

Mar 16, 9:00 AM - Sarah generated report "Q1 P&L"
  → reports/q1-2025-pl.pdf

Mar 16, 11:45 AM - Tom committed "March payroll"
  → accounts/payroll.beancount updated
  → 15 employees processed

Mar 17, 8:30 AM - Marketing Director viewed "Marketing Expenses YTD"
  → No changes made

Feature 2: Real-Time Sync

When anyone pushes changes, GitHub sends webhook to v3:

  • Desktop app shows notification: “New changes available - Pull to update”
  • Click notification → auto-runs git pull
  • Reports refresh with latest data

No more “which version are you looking at?” confusion!

Feature 3: Commenting and Discussion

GitHub PRs allow inline comments:

Example PR discussion:

Tom (Accountant): "Added March client invoices"

File: accounts/income.beancount
Line 234: 2025-03-15 * "ClientABC - March retainer"
            Assets:Receivable  15000.00 USD
            Income:Services   -15000.00 USD

Sarah (CFO): "Didn't ClientABC increase to $18k/month in March?"

Tom: "Good catch! I'll update. They sent corrected invoice."

[Tom updates transaction]

Tom: "Fixed! Changed to $18,000."

Sarah: "Approved!"

This discussion is preserved forever in PR history.

Feature 4: Conflict Resolution

If two people edit the same file simultaneously:

Scenario:

  • Tom adds March expenses (line 500)
  • I add March revenue (line 100)
  • Both push at same time

Git handles this automatically:

  • No conflict (different lines)
  • Both changes merge cleanly

If we edit SAME transaction:

<<<<<<< HEAD
2025-03-15 * "Office Depot - Supplies"
  Expenses:Supplies  450.00 USD
  Liabilities:CreditCard  -450.00 USD
=======
2025-03-15 * "Office Depot - Supplies" ^receipt-office-depot.pdf
  Expenses:Supplies  450.00 USD
  Liabilities:CreditCard  -450.00 USD
>>>>>>> tom-march-expenses

Git shows conflict. We discuss (via PR comment) and resolve.

Advanced Team Features

Feature 1: Multi-Ledger Support

We split our ledger into multiple files for team collaboration:

main.beancount:

Lisa and Frank, excellent discussion! As a financial planner who’s evaluated accounting software for 50+ small businesses, let me add the comparison perspective with traditional tools.

I’ve helped clients migrate from QuickBooks Online and Xero to various solutions. Let me share detailed comparisons and why beancount.io v3’s Git-based collaboration is superior for certain use cases.

QuickBooks Online vs beancount.io v3

User Management and Permissions:

QuickBooks Online:

  • 3 user tiers: Admin, Standard, Reports-only
  • Limitations:
    • Cannot restrict by account (all-or-nothing access)
    • Cannot restrict by transaction type
    • Cannot hide specific data (e.g., owner salary)
    • Cannot time-limit access (perpetual until manually removed)

Example problem:

  • Department head needs to see marketing expenses
  • Must give “Reports-only” access
  • But now they can see ALL expenses (including executive comp)
  • No way to restrict to just marketing

beancount.io v3:

  • Unlimited custom roles: File-level permissions via Git
  • Granular control:
    • Restrict by ledger file (marketing-expenses.beancount only)
    • Restrict by Git sparse-checkout (specific directories)
    • Time-limit via GitHub team membership expiration
    • Hide specific accounts (different team members see different files)

Example solution:

  • Marketing director: Read-only access to accounts/marketing-expenses.beancount
  • Cannot see accounts/payroll.beancount or accounts/executive-comp.beancount
  • Access automatically revoked after contract end date

Winner: v3 (for businesses needing granular permissions)

Collaboration and Version Control:

QuickBooks Online:

  • Real-time collaboration: Multiple users can edit simultaneously
  • Version history: 30-day audit log only
  • Conflict resolution: Last save wins (overwrites)
  • Rollback: Limited to 30 days

Example problem:

  • Bookkeeper enters March transactions
  • Accountant reviews same file simultaneously
  • Bookkeeper saves
  • Accountant saves (overwrites bookkeeper’s work!)
  • No way to merge both sets of changes

beancount.io v3:

  • Async collaboration: Pull Request workflow
  • Version history: Unlimited (full Git history)
  • Conflict resolution: Git merging (intelligent)
  • Rollback: Can revert to any historical commit

Example solution:

  • Bookkeeper creates branch “march-transactions”
  • Accountant creates branch “march-adjustments”
  • Both work independently
  • Pull Requests reviewed separately
  • Merge both into main (Git handles conflicts)
  • If error found later, revert specific commit

Winner: v3 (for teams needing audit trail and safe collaboration)

Audit Trail and Compliance:

QuickBooks Online:

  • Audit log: Who changed what and when
  • Retention: 30 days (Plus plan) or 12 months (Advanced plan)
  • Export: CSV download
  • Limitations:
    • Cannot prove data hasn’t been tampered with
    • Cannot see WHY change was made
    • Historical audit logs deleted after retention period

Example compliance issue:

  • IRS audits 2022 tax return (in 2025)
  • Need to prove transaction recorded in 2022
  • QuickBooks audit log only goes back 12 months
  • Cannot prove when transaction was added
  • FAIL

beancount.io v3:

  • Audit log: Git commit history (who, what, when, why)
  • Retention: Unlimited (permanent Git history)
  • Export: Git log (text format, parseable)
  • Tamper-proof: Git hashes prevent modification
  • Justification: Commit messages required (why change was made)

Example compliance solution:

  • IRS audits 2022 tax return (in 2025)
  • Run: git log --since="2022-01-01" --until="2022-12-31" accounts/income.beancount
  • Result: Complete history of all 2022 income transactions
  • Git commit timestamps prove when recorded
  • Commit messages show why
  • Git hashes prove data unmodified since commit
  • PASS

Winner: v3 (for businesses with compliance requirements)

Cost Comparison:

QuickBooks Online Advanced (for 15-person company):

  • 3 Admins: $70/user/month × 3 = $210/month
  • 2 Standard: $30/user/month × 2 = $60/month
  • 5 Reports-only: $10/user/month × 5 = $50/month
  • Total: $320/month = $3,840/year

Additional costs:

  • Payroll: $45/month + $4/employee = $105/month = $1,260/year
  • Payments: 2.9% + $0.25 per transaction
  • Time Tracking: $8/user/month (if needed)

beancount.io v3 + GitHub:

  • v3 software: Free (open-source)
  • GitHub Team plan: $4/user/month × 10 = $40/month = $480/year
  • Total: $480/year

Savings: $3,360/year (87% reduction)

But hidden costs for v3:

  • Migration: $1,500-2,500 (one-time)
  • Training: $1,000-2,000 (one-time)
  • Custom tooling: $500-1,000/year (optional)

Break-even: 1 year (after migration/training costs)

Winner: v3 (for multi-year use)

Xero vs beancount.io v3

Xero is QuickBooks’ main competitor (popular internationally).

User Management:

Xero:

  • More granular than QuickBooks: Can restrict by area (Sales, Purchases, Payroll)
  • Still limited: Cannot restrict by specific accounts
  • User pricing: Standard ($13), Advisor ($70)

Example:

  • Marketing director needs to see marketing expenses
  • Must give “Standard” access + restrict to “Purchases” area
  • But now they can see ALL purchases (not just marketing)
  • Slightly better than QuickBooks, but not granular enough

beancount.io v3:

  • Same advantages as vs QuickBooks (file-level permissions)

Winner: v3 (but Xero closer than QuickBooks)

Multi-Currency Support:

Xero:

  • Excellent: Native multi-currency support
  • Automatic exchange rates
  • Reports in multiple currencies
  • Invoice in foreign currencies

beancount.io v3:

  • Good: Multi-currency supported
  • Manual exchange rate entry (or import from script)
  • Reports in any currency
  • Invoice: Need separate invoicing tool

Winner: Xero (better UX for multi-currency businesses)

Bank Feeds:

Xero:

  • Excellent: 20,000+ bank integrations
  • Automatic transaction import
  • Smart matching (learn from your rules)
  • Reconciliation: Simple UI

beancount.io v3:

  • Manual: No native bank feeds
  • CSV import (download from bank)
  • Reconciliation: Command-line or custom scripts

Winner: Xero (significantly better for bank automation)

Cost Comparison (15-person company):

Xero:

  • Premium plan: $70/month (unlimited users!)
  • Payroll add-on: $10/user/month = $150/month
  • Total: $220/month = $2,640/year

beancount.io v3:

  • $480/year (as calculated above)

Savings: $2,160/year (82% reduction)

Winner: v3 (cost savings)

Feature Comparison Matrix

Feature QuickBooks Online Xero beancount.io v3
Collaboration
User roles 3 tiers Area-based File-level (unlimited)
Granular permissions :cross_mark: :warning: Partial :white_check_mark: Full
Concurrent editing :white_check_mark: Real-time :white_check_mark: Real-time :warning: PR-based (async)
Version control 30-day audit 7-year audit :white_check_mark: Unlimited Git
Conflict resolution :cross_mark: Last save wins :cross_mark: Last save wins :white_check_mark: Git merge
Compliance
Audit trail 30-day or 12-month 7 years :white_check_mark: Unlimited
Tamper-proof :cross_mark: No :cross_mark: No :white_check_mark: Git hashes
Change justification :cross_mark: No :cross_mark: No :white_check_mark: Commit messages
Historical export :warning: Limited :white_check_mark: Good :white_check_mark: Excellent
Automation
Bank feeds :white_check_mark: Excellent :white_check_mark: Excellent :cross_mark: Manual CSV
Reconciliation :white_check_mark: Auto-match :white_check_mark: Auto-match :warning: Manual
Invoicing :white_check_mark: Native :white_check_mark: Native :cross_mark: External tool
Payroll :white_check_mark: Integrated :white_check_mark: Add-on :cross_mark: External tool
Cost
15 users $3,840/year $2,640/year $480/year
Per-user cost High Low Minimal
Flexibility
Data ownership :cross_mark: Vendor lock-in :cross_mark: Vendor lock-in :white_check_mark: Full ownership
Custom reports :warning: Limited :warning: Limited :white_check_mark: Unlimited (SQL queries)
Data export CSV/Excel CSV/Excel :white_check_mark: Plain text
API access :white_check_mark: Good :white_check_mark: Good :white_check_mark: Excellent (Git)
Mobile
Mobile app :white_check_mark: Excellent :white_check_mark: Excellent :warning: Limited (GitHub app)
Receipt capture :white_check_mark: Native :white_check_mark: Native :warning: 3rd party
Learning Curve
Ease of use :white_check_mark: Easy :white_check_mark: Easy :cross_mark: Technical
Training time 1-2 days 1-2 days 1-2 weeks
Support :white_check_mark: Phone/chat :white_check_mark: Phone/chat :warning: Community

When to Choose Each Tool

Choose QuickBooks Online if:

  • :white_check_mark: Team is non-technical (accountants, bookkeepers)
  • :white_check_mark: Need integrated invoicing and payroll
  • :white_check_mark: Want phone support
  • :white_check_mark: U.S.-based business (QuickBooks strongest in US)
  • :cross_mark: Don’t need granular permissions
  • :cross_mark: Don’t need long audit trail (30 days sufficient)

Use case: Local retail business, 5-10 employees, standard accounting needs

Choose Xero if:

  • :white_check_mark: International business (multi-currency)
  • :white_check_mark: Need excellent bank feeds (20k+ integrations)
  • :white_check_mark: Want unlimited users at low cost
  • :white_check_mark: Team is non-technical
  • :warning: Need better permissions than QuickBooks
  • :cross_mark: Don’t need extremely granular control

Use case: E-commerce business, global sales, multiple currencies

Choose beancount.io v3 if:

  • :white_check_mark: Need granular permissions (file-level access control)
  • :white_check_mark: Need unlimited audit trail (compliance requirements)
  • :white_check_mark: Want data ownership (no vendor lock-in)
  • :white_check_mark: Team has technical skills (or willing to learn)
  • :white_check_mark: Cost-sensitive (87% savings)
  • :white_check_mark: Want version control (Git workflow)
  • :cross_mark: Can do without native bank feeds
  • :cross_mark: Can use separate invoicing tool

Use case: Tech startup, 10-50 employees, technical team, compliance-focused

Git-Based Collaboration Advantages

Let me elaborate on why Git-based collaboration is superior for certain workflows:

Advantage 1: Branching for What-If Scenarios

Traditional tools (QuickBooks/Xero):

  • Cannot create “test” scenarios
  • Changes are permanent (limited undo)
  • Planning requires separate spreadsheets

beancount.io v3:

# Create branch for budget scenario
git checkout -b budget-2025-aggressive

# Add forecasted transactions
# Run reports to see projected financials

# Don't like the results? Delete branch
git checkout main
git branch -D budget-2025-aggressive

# No changes to main ledger

Use case: CFO wants to model 3 budget scenarios (conservative, moderate, aggressive). Create 3 Git branches, run reports on each, present to board, then merge chosen scenario.

Advantage 2: Collaborative Month-End Close

Traditional tools:

  • One person closes books (others locked out)
  • Serial process (bookkeeper → accountant → CFO)
  • Takes 5-10 days

beancount.io v3:

# Week 1: Bookkeeper enters transactions (branch: march-transactions)
# Week 2: Accountant adds adjustments (branch: march-adjustments)
# Week 3: CFO adds accruals (branch: march-accruals)

# All work in parallel!

# Week 4: Merge all branches
git merge march-transactions
git merge march-adjustments
git merge march-accruals

# Month closed in 4 weeks (vs 2-3 weeks serial)

Advantage 3: Multi-Entity Consolidation

Traditional tools:

  • Separate QuickBooks files per entity
  • Manual consolidation in Excel
  • Error-prone, time-consuming

beancount.io v3:

# Separate ledger files
company-finances/
├── entity-llc.beancount
├── entity-scorp.beancount
├── consolidated.beancount  # Includes both

# Single command for consolidated reports
beancount-query consolidated.beancount "SELECT ..."

# Or separate reports per entity
beancount-query entity-llc.beancount "SELECT ..."

Advantage 4: External Accountant Collaboration

Traditional tools:

  • Give accountant full access (risky)
  • Or export/import (manual, error-prone)
  • Or use “Accountant copy” (complex workflow)

beancount.io v3:

# Accountant forks repo (their own copy)
# Makes adjusting entries
# Submits Pull Request

# You review changes in GitHub
# Approve or request changes
# Merge when ready

# Accountant never has direct access to main ledger
# But can still collaborate efficiently

Advantage 5: Automated Compliance Reports

Traditional tools:

  • Manual report generation
  • Export to PDF, send to auditors
  • Auditors request changes, repeat

beancount.io v3:

# Script generates compliance report
./generate-audit-report.sh 2024

# Output:
# - All 2024 transactions (CSV)
# - All linked documents (ZIP)
# - Audit trail (Git log)
# - Automated checks (balances, reconciliation)

# Commit report to Git
git add reports/audit-2024.zip
git commit -m "2024 audit report"

# Auditors clone repo, have everything
# Questions? View Git history
# No back-and-forth emails

Real-World Migration Case Studies

Case Study 1: Tech Startup (12 employees)

Before (QuickBooks Online):

  • Cost: $200/month
  • Users: 3 admins, 2 department heads
  • Pain: Department heads could see ALL expenses (including salaries)
  • Audit trail: 30 days

After (beancount.io v3):

  • Cost: $32/month (GitHub Team, 8 users)
  • Users: 3 admins (full access), 2 department heads (restricted)
  • Solution: Department heads only see their department files
  • Audit trail: Unlimited

Results:

  • Cost savings: $168/month = $2,016/year
  • Better privacy: Department heads can’t see salaries
  • Better compliance: Full Git history for investors/auditors

Migration time: 6 weeks (including training)

Case Study 2: Consulting Firm (25 employees)

Before (Xero):

  • Cost: $220/month
  • Users: 5 accountants, 20 project managers
  • Pain: Project managers needed project P&L only, got access to all
  • Audit trail: 7 years (good)

After (beancount.io v3):

  • Cost: $100/month (GitHub Team, 25 users)
  • Users: 5 accountants (full), 20 PMs (project-specific)
  • Solution: Each PM gets read-only access to their project file only
  • Audit trail: Unlimited + tamper-proof Git

Results:

  • Cost savings: $120/month = $1,440/year
  • Better permissions: PMs see only their project data
  • Better audit: Git hashes prove data integrity

Migration time: 3 months (large dataset, complex structure)

Case Study 3: Non-Profit (8 employees, 15 board members)

Before (QuickBooks Online):

  • Cost: $320/month
  • Users: 2 admins, 1 accountant, 15 board members (reports-only)
  • Pain: Board members needed quarterly reports, NOT real-time access
  • High cost for infrequent access

After (beancount.io v3):

  • Cost: $40/month (GitHub Team, 10 users)
  • Users: 2 admins, 1 accountant (Git access), 15 board (PDF reports only)
  • Solution: Generate PDF reports, email to board (no Git access needed)

Results:

  • Cost savings: $280/month = $3,360/year
  • Better security: Board members don’t have login credentials
  • Same visibility: Quarterly PDF reports sufficient

Migration time: 4 weeks

Common Migration Challenges and Solutions

Challenge 1: Team Resistance (“We’re not developers!”)

Solution:

  • Use v3 web interface (no command line needed)
  • Provide training (2-3 sessions)
  • Designate “Git champion” (tech-savvy team member helps others)
  • Start small (1-2 team members, expand gradually)

Success rate: 80% of non-technical teams adapt within 2-3 months

Challenge 2: Missing Features (Bank Feeds, Invoicing)

Solution:

  • Bank feeds: Use CSV import (most banks provide)
  • Invoicing: Use separate tool (Stripe, PayPal, FreshBooks)
  • Payroll: Keep existing payroll system (Gusto, ADP)
  • Integrate: Import payroll/invoicing data into v3 for reporting

Trade-off: Slightly more work, but 87% cost savings and full data control

Challenge 3: Historical Data Migration

Solution:

  • Option A: Migrate all (5+ years) - Use export/import scripts
  • Option B: Migrate recent only (1-2 years) - Keep old QuickBooks for reference
  • Option C: Fresh start - New v3 ledger, close old QuickBooks

Recommendation: Option B (migrate 2 years, fresh start after)

Challenge 4: CPA Acceptance

Solution:

  • Show CPA the audit trail (Git log)
  • Export to CSV for tax software
  • Provide detailed reports (v3 query language is powerful)
  • Offer training (1-hour session showing CPA how to navigate)

Success rate: 90% of CPAs accept after seeing Git audit trail

My Recommendation Framework

Score your business (1-5 for each criterion):

Technical capability:

  • 5: Dev team, comfortable with Git
  • 3: Some technical staff, willing to learn
  • 1: All non-technical, resistant to change

Permission requirements:

  • 5: Need file-level, account-level granular control
  • 3: Need better than QuickBooks, but not extreme
  • 1: Basic 3-tier permissions sufficient

Compliance needs:

  • 5: Must prove data integrity (audited, regulated)
  • 3: Standard audit trail (7 years)
  • 1: Basic audit log sufficient (30 days)

Cost sensitivity:

  • 5: Budget-constrained, every dollar matters
  • 3: Cost-conscious, but not primary factor
  • 1: Cost not a factor, willing to pay for ease

Data ownership:

  • 5: Must own data, no vendor lock-in
  • 3: Prefer ownership, but not critical
  • 1: Don’t care, vendor lock-in acceptable

Calculate score:

20-25 points: beancount.io v3 is STRONGLY recommended
15-19 points: beancount.io v3 is RECOMMENDED (benefits outweigh learning curve)
10-14 points: Xero or QuickBooks likely better (unless technical team)
5-9 points: QuickBooks Online or Xero (stay with traditional tools)

Example:

  • Tech startup: 5 (technical) + 5 (granular permissions) + 5 (compliance) + 5 (cost) + 5 (ownership) = 25 points → v3 perfect fit
  • Local restaurant: 1 (non-technical) + 1 (basic permissions) + 1 (basic audit) + 3 (cost matters) + 1 (don’t care) = 7 points → QuickBooks better

My Honest Assessment

After helping 50+ businesses choose accounting software:

beancount.io v3 is NOT for everyone.

Best fit:

  • Tech companies (10-100 employees)
  • Startups with technical teams
  • Businesses with compliance requirements
  • Multi-entity structures
  • Businesses needing granular permissions

Not a good fit:

  • Very non-technical teams (retail, hospitality)
  • Businesses needing integrated invoicing/payroll
  • Very small businesses (1-3 employees, overkill)
  • Businesses with complex multi-currency needs

The 20% Rule:

I estimate v3 is the best choice for ~20% of small businesses (those with technical teams and complex needs).

For the other 80%, QuickBooks or Xero is better (ease of use, integrated features, support).

But for that 20%, v3 is SIGNIFICANTLY better (10x better permissions, unlimited audit trail, 87% cost savings).

Questions for Lisa and Frank:

For Lisa: How do you handle the missing features (bank feeds, invoicing)? Do you use separate tools?

For Frank: Based on your team’s technical level, would you score high enough on my framework to justify v3? (I’d guess 15-20 points based on your description)

Happy to answer follow-up questions about migration strategies or feature comparisons!