Crowdfunding Campaign Accounting: Kickstarter Rewards, Backer Refunds, and Sales Tax Nightmares

A close friend just finished a successful Kickstarter campaign for her handmade artisan goods business, and now she’s drowning in accounting confusion. She raised $120,000 from 800 backers—amazing, right? But then reality hit: Is that $120k revenue now, or later? How does she track 800 individual backer obligations? What about the backers who want refunds? And don’t even get me started on sales tax across multiple states.

As someone who obsessively tracks every penny in Beancount for my FIRE journey, I offered to help her figure this out. But I quickly realized crowdfunding accounting is way more complex than I expected. Here’s what we’re wrestling with:

The Core Problem: When Is It Actually Revenue?

She received $120,000 in her bank account (minus Kickstarter’s 5% fee and payment processor’s 3% fee, so net $110,400). Her instinct was to record this as revenue immediately. But then she realized: she has unfulfilled obligations to 800 backers. She hasn’t shipped most rewards yet. Is this really “earned” income?

From what I’ve researched, it seems like the funds should be recorded as unearned revenue (a liability) until the rewards are actually shipped. So the initial transaction would be something like:

2026-01-15 * "Kickstarter campaign funded"
  Assets:Bank:Checking                    110400.00 USD
  Liabilities:Backer-Obligations         -110400.00 USD

Then as she ships each reward:

2026-02-10 * "Shipped reward - Tier 1 Deluxe Package"
  Liabilities:Backer-Obligations           150.00 USD
  Revenue:Product-Sales                   -150.00 USD

Does this approach make sense? Or am I overcomplicating it?

The Fulfillment Tracking Nightmare

She has 800 backers across different reward tiers. Some pledged $25 for a basic item, others pledged $500 for premium packages. She needs to track:

  • Which backers have received their rewards (fulfilled)
  • Which are still waiting (pending)
  • Which requested refunds (refunded)
  • Shipping costs per tier (international shipping is killing margins)

I’m thinking Beancount metadata could help here:

2026-02-10 * "Shipped reward to backer #347" 
  @backer-id: "347"
  @reward-tier: "tier-1-basic"
  @fulfillment-status: "shipped"
  Liabilities:Backer-Obligations           25.00 USD
  Revenue:Product-Sales                   -25.00 USD
  Expenses:Shipping                        8.50 USD
  Assets:Bank:Checking                    -8.50 USD

But tracking 800 individual backers seems insane. Is there a better way to structure this?

The Refund Complication

About 20 backers requested refunds before she started shipping (Kickstarter allows this). How do we account for these?

My thought:

2026-01-25 * "Refund to backer #142"
  @backer-id: "142"
  @fulfillment-status: "refunded"
  Liabilities:Backer-Obligations           150.00 USD
  Assets:Bank:Checking                    -150.00 USD

The liability is discharged (obligation fulfilled via refund), no revenue is recognized, cash goes out. Does this flow make sense?

Sales Tax Nightmare

Here’s where it gets really messy. Her backers are in 45 different states. Does she need to register for sales tax in all 45 states? What about economic nexus thresholds?

She’s heard that Kickstarter now acts as a “marketplace facilitator” in some states and handles sales tax collection automatically. But how does she track which states Kickstarter collected tax for vs. states where she’s responsible?

And in Beancount, how do we record the sales tax component when it’s already included in the pledge amount?

Platform Fees

Kickstarter took 5% ($6,000) and the payment processor took 3% ($3,600). These fees were deducted before the money hit her bank account. Should these be recorded as expenses?

2026-01-15 * "Kickstarter campaign funded"
  Assets:Bank:Checking                    110400.00 USD
  Expenses:Kickstarter-Fees                 6000.00 USD
  Expenses:Payment-Processing-Fees          3600.00 USD
  Liabilities:Backer-Obligations         -120000.00 USD

This way the liability represents the gross amount owed to backers ($120k), but the net cash received is $110,400 after fees.

Questions for the Community

  1. Revenue recognition: Should we use the liability method (unearned revenue until shipped)? Or is there a simpler approach?

  2. Tracking granularity: Should we track individual backers, or can we simplify to reward tiers? What metadata structure works best?

  3. Sales tax: How do you handle multi-state sales tax obligations in Beancount? Any tips for tracking nexus?

  4. Refunds: Is my refund accounting approach correct?

  5. Tax year implications: If the campaign funded in December 2025 but rewards ship in March 2026, which tax year is the revenue in?

My friend is stressed because she thought the hard part was running a successful campaign. Turns out the accounting is way more complex than the marketing! Any guidance from folks who’ve been through this would be hugely appreciated.

For context, this is for a legitimate product business (handmade goods), not a donation-based campaign. All backers are receiving tangible rewards in exchange for their pledges.

Looking forward to learning from this amazing community!

Fred, your friend is definitely not alone—I see this confusion with crowdfunding campaigns all the time in my practice! You’re actually on the right track with your accounting approach. Let me provide some professional guidance on this.

Revenue Recognition: You’re Doing It Right

Your instinct to use the liability method is absolutely correct and aligns with proper accounting standards (specifically ASC 606 for revenue recognition). When your friend receives crowdfunding funds, she has not yet earned that revenue because she has an outstanding obligation to deliver products to backers.

The proper treatment is exactly what you outlined:

Initial funding:

2026-01-15 * "Kickstarter campaign funded"
  Assets:Bank:Checking                    110400.00 USD
  Expenses:Kickstarter-Fees                 6000.00 USD
  Expenses:Payment-Processing-Fees          3600.00 USD
  Liabilities:Unearned-Revenue           -120000.00 USD

Upon fulfillment:

2026-02-10 * "Shipped Tier 1 rewards (batch of 50)"
  Liabilities:Unearned-Revenue             7500.00 USD
  Revenue:Product-Sales                   -7500.00 USD

A few important notes:

  1. The liability balance represents her remaining obligations. If she hasn’t fulfilled $80,000 worth of rewards yet, that $80k should still be sitting in Liabilities:Unearned-Revenue (or your Backer-Obligations account—same concept, different name).

  2. This matters for tax purposes! If she records all $120k as revenue in 2026 but doesn’t ship until 2027, she’ll pay taxes on income she hasn’t truly earned yet. The liability method protects against this.

  3. Platform fees are legitimate expenses deductible in the year they occur, so your treatment is correct.

Tracking Granularity: Simplify by Tier

Here’s my professional recommendation: Don’t track 800 individual backers in Beancount. That’s operational data, not accounting data. Instead, track by reward tier and use batch fulfillment entries.

Structure it like this:

2026-01-15 * "Kickstarter campaign funded"
  Assets:Bank:Checking                                110400.00 USD
  Expenses:Kickstarter-Fees                             6000.00 USD
  Expenses:Payment-Processing-Fees                      3600.00 USD
  Liabilities:Unearned-Revenue:Tier-Basic-25          -20000.00 USD  ; 800 backers × $25
  Liabilities:Unearned-Revenue:Tier-Deluxe-150        -60000.00 USD  ; 400 backers × $150
  Liabilities:Unearned-Revenue:Tier-Premium-500       -40000.00 USD  ; 80 backers × $500

Then when you ship batches:

2026-02-15 * "Shipped 200 Tier-Basic rewards"
  Liabilities:Unearned-Revenue:Tier-Basic-25           5000.00 USD
  Revenue:Product-Sales                               -5000.00 USD
  
  Expenses:Shipping:Domestic                            800.00 USD
  Assets:Bank:Checking                                 -800.00 USD

Use a separate system (spreadsheet, database, or Kickstarter’s built-in tools) to track which specific backers have been fulfilled. That operational detail doesn’t need to be in your accounting ledger.

Refund Accounting: Correct Approach

Your refund accounting is spot-on:

2026-01-25 * "Batch refunds - 20 backers Tier-Deluxe"
  Liabilities:Unearned-Revenue:Tier-Deluxe-150         3000.00 USD
  Assets:Bank:Checking                                -3000.00 USD

The liability is discharged (you’re no longer obligated to fulfill), no revenue is recognized (you never earned it), and cash leaves. Perfect.

Sales Tax Considerations

Good news: Kickstarter is now a marketplace facilitator in most states, which means they handle sales tax collection and remittance for campaigns processed through their platform. This is a huge relief!

However, your friend still needs to:

  1. Verify which states Kickstarter is collecting for. Kickstarter should provide documentation showing which states they’re acting as marketplace facilitator.

  2. Check if she has nexus in any states where Kickstarter isn’t collecting. Economic nexus thresholds are typically $100,000 in sales OR 200 transactions per state.

  3. Document everything. Keep records of backer locations, tax collected by Kickstarter, and any states where she might have additional obligations.

For Beancount tracking, if tax is included in the pledge amount, I recommend this approach:

2026-02-15 * "Shipped rewards with sales tax"
  Liabilities:Unearned-Revenue:Tier-Deluxe-150         150.00 USD
  Revenue:Product-Sales                               -138.89 USD
  Liabilities:Sales-Tax:Collected                      -11.11 USD  ; 8% sales tax

Then when Kickstarter remits tax on your behalf:

2026-03-10 * "Sales tax remitted by Kickstarter to State of CA"
  Liabilities:Sales-Tax:Collected                       11.11 USD
  Assets:Bank:Checking                                   0.00 USD  ; Kickstarter handles this

Tax Year Implications

To answer your question #5: Revenue is recognized in the tax year when the obligation is fulfilled (when rewards are shipped), not when cash is received. This is called accrual accounting.

So if the campaign funded December 2025 but rewards ship in March 2026, the revenue is 2026 income. The liability method ensures this is tracked correctly.

Important caveat: If your friend is using cash-basis accounting (common for very small businesses), she might have different requirements. I strongly recommend she consult with a CPA who understands crowdfunding to determine which accounting method is appropriate for her situation and to ensure proper tax treatment.

My Recommendation

Set up quarterly reviews to check:

  • Total liability balance = Total unfulfilled rewards remaining
  • Revenue recognized = Total shipped rewards
  • Are we on track to fulfill all obligations within promised timeline?

The Beancount approach you’re developing is excellent for maintaining clean, auditable records. Your friend’s accountant will thank her at tax time!

Feel free to ask follow-up questions. Happy to help!

Alice covered the accounting beautifully—let me jump in with some tax-specific considerations that can really trip up crowdfunding creators if they’re not careful.

Sales Tax: The Good News and the Gotchas

Alice is right that Kickstarter acting as a marketplace facilitator is huge. Since 2021-2022, Kickstarter has been collecting and remitting sales tax in most states that require it. This is a massive burden lifted from creators.

However—and this is critical—you can’t just assume Kickstarter handles everything. Here’s what your friend MUST do:

1. Verify Kickstarter’s Coverage

When Kickstarter processes the campaign, they should provide documentation showing:

  • Which states they collected sales tax for
  • The amounts collected per state
  • Whether they’re remitting on the creator’s behalf

Not all states are covered, and the rules change. Your friend needs this documentation for her records.

2. Check for Economic Nexus

Even if Kickstarter collects tax, your friend might have economic nexus obligations in states where she:

  • Exceeds $100,000 in sales, OR
  • Has 200+ transactions

With $120k gross and 800 backers spread across 45 states, she could easily trigger nexus in high-backer states. California, Texas, New York—these are the ones to watch.

Action item: Pull a report from Kickstarter showing backer count and total pledges by state. Any state where she’s close to thresholds needs attention.

3. The Donation vs. Pre-Order Distinction

Here’s where it gets tricky. The IRS and state tax authorities distinguish between:

Donations (not taxable):

  • Backer receives nothing in return
  • Or receives token item worth less than the pledge
  • Example: Donate $100, get a thank-you postcard

Pre-orders (taxable as sales):

  • Backer receives tangible product of equivalent value
  • Example: Pledge $150, get $150 artisan goods package

Your friend’s campaign is clearly pre-orders, not donations, since backers are getting tangible handmade goods. This means:

  • Sales tax applies (handled by Kickstarter in most cases)
  • Income is taxable as business revenue (not gift income)
  • She can deduct COGS and business expenses

4. The 1099-K Reporting Threshold

Big change in 2026: Form 1099-K reporting threshold dropped to $600 (it was previously $20,000 and 200 transactions in many states).

Your friend WILL receive a 1099-K from Kickstarter’s payment processor showing gross transactions. This gets reported to the IRS.

Critical: The 1099-K shows GROSS ($120,000), not net after fees ($110,400). She needs to account for this properly:

Tax return shows:
Gross Revenue: $120,000 (matches 1099-K)
Less: Platform fees: $9,600
Net Revenue: $110,400

If she only reports $110,400 as income, the IRS computer will flag a mismatch with the 1099-K. Always reconcile to the gross amount and deduct fees separately.

Beancount Tracking for Tax Compliance

For sales tax tracking in Beancount, I recommend a structure that makes state-by-state reporting easy:

2026-01-15 * "Kickstarter campaign funded"
  Assets:Bank:Checking                                110400.00 USD
  Expenses:Kickstarter-Fees                             6000.00 USD
  Expenses:Payment-Processing-Fees                      3600.00 USD
  Liabilities:Unearned-Revenue                       -115000.00 USD  ; Net of tax
  Liabilities:Sales-Tax:CA                             -2500.00 USD  ; CA tax collected
  Liabilities:Sales-Tax:TX                             -1800.00 USD  ; TX tax collected
  Liabilities:Sales-Tax:NY                             -1700.00 USD  ; NY tax collected
  ; etc. for other states

Use metadata to track which state each transaction relates to:

2026-02-15 * "Shipped 50 rewards to California backers"
  @state: "CA"
  @tax-rate: "0.0825"
  Liabilities:Unearned-Revenue                         4625.00 USD
  Revenue:Product-Sales                               -4625.00 USD
  
  Liabilities:Sales-Tax:CA                              375.00 USD  ; Tax remitted by Kickstarter

This way you can run queries like:

  • “Show me all California transactions and tax collected”
  • “What’s my total sales by state?” (for nexus monitoring)
  • “Do Sales-Tax liability balances reconcile to zero?” (Kickstarter should have remitted)

A Real-World Cautionary Tale

I had a client last year who ran an Indiegogo campaign (similar to Kickstarter). She raised $85,000 and assumed Indiegogo was handling all the sales tax.

Two years later, she got a notice from Washington State saying she owed $4,200 in unpaid sales tax plus penalties and interest. Turns out:

  • Indiegogo only collected tax in states where they were marketplace facilitator
  • Washington wasn’t covered at the time
  • She exceeded the $100k threshold when you combined Indiegogo + her Shopify store sales
  • She should have registered and collected tax herself for Washington backers

The penalty and interest nearly doubled the original tax owed. Don’t assume platforms handle everything—verify and document.

Tax Year Timing (Question #5)

Alice touched on this, but let me emphasize from a tax perspective:

Accrual method (likely required for your friend given $120k revenue):

  • Revenue recognized when earned (goods shipped)
  • Campaign funded Dec 2025, shipped March 2026 = 2026 income
  • Liability method in Beancount perfectly supports this

Cash method (only if qualified and elected):

  • Revenue recognized when cash received
  • Campaign funded Dec 2025 = 2025 income (even if not shipped yet)
  • Generally not recommended for product businesses with inventory

Given your friend is manufacturing and shipping physical goods, she’s likely required to use accrual accounting for tax purposes. The Beancount liability tracking aligns perfectly.

My Recommendations

  1. Get the Kickstarter sales tax documentation immediately. You need to know what was collected and where.

  2. Run a state-by-state analysis of sales and transaction counts. Identify any potential nexus obligations.

  3. Consider sales tax automation software like Avalara or TaxJar for future campaigns. They integrate with e-commerce platforms and handle multi-state compliance.

  4. Reconcile to the 1099-K. Make sure your books show gross revenue matching the 1099-K, with fees deducted separately.

  5. Consult a CPA before filing taxes. With $120k in crowdfunding revenue, professional tax prep is worth it. Mention you’re using accrual method with liability tracking—good CPAs will love that.

  6. Keep clean records in Beancount with state metadata. If you ever get audited, having clean state-by-state records is gold.

The good news? Your friend’s instinct to track this properly from the start is exactly right. Most creators don’t think about accounting until tax time, and then it’s a nightmare. Starting with proper Beancount structure now will save thousands in accounting fees and headaches later.

Happy to answer follow-up questions!

This thread is gold! Alice and Tina have covered the professional accounting and tax angles perfectly. Let me share some practical implementation tips from someone who’s actually worked through this with a client.

Real-World Experience: My Client’s Kickstarter Journey

Last year I helped a client manage the books for a successful Kickstarter campaign (board game, raised $95k from 600 backers). Going into it, I thought “how hard can this be?” Turns out: pretty hard! But we figured out a Beancount structure that worked really well.

The Account Structure That Worked

Here’s the exact setup we used (adapted for your friend’s numbers):

; Opening balances
2026-01-01 open Assets:Bank:Business-Checking
2026-01-01 open Expenses:Kickstarter:Platform-Fees
2026-01-01 open Expenses:Kickstarter:Payment-Processing
2026-01-01 open Expenses:Kickstarter:Manufacturing
2026-01-01 open Expenses:Kickstarter:Shipping:Domestic
2026-01-01 open Expenses:Kickstarter:Shipping:International
2026-01-01 open Liabilities:Kickstarter:Unfulfilled:Tier-1-Basic
2026-01-01 open Liabilities:Kickstarter:Unfulfilled:Tier-2-Deluxe
2026-01-01 open Liabilities:Kickstarter:Unfulfilled:Tier-3-Premium
2026-01-01 open Revenue:Product-Sales

; Campaign funded
2026-01-15 * "Kickstarter campaign successfully funded"
  Assets:Bank:Business-Checking                       110400.00 USD
  Expenses:Kickstarter:Platform-Fees                    6000.00 USD
  Expenses:Kickstarter:Payment-Processing               3600.00 USD
  Liabilities:Kickstarter:Unfulfilled:Tier-1-Basic    -20000.00 USD  ; 800 backers @ $25
  Liabilities:Kickstarter:Unfulfilled:Tier-2-Deluxe   -60000.00 USD  ; 400 backers @ $150  
  Liabilities:Kickstarter:Unfulfilled:Tier-3-Premium  -40000.00 USD  ; 80 backers @ $500

Key insight: Separate the liability accounts by tier from day one. This makes tracking fulfillment progress SO much easier.

Batch Fulfillment Entries

Don’t try to track individual backers in Beancount—that’s what spreadsheets are for. Instead, do batch entries as you ship:

2026-02-10 * "Shipped first batch: 300 Tier-1 Basic packages"
  Liabilities:Kickstarter:Unfulfilled:Tier-1-Basic     7500.00 USD
  Revenue:Product-Sales                               -7500.00 USD
  
  Expenses:Kickstarter:Shipping:Domestic               1200.00 USD
  Assets:Bank:Business-Checking                       -1200.00 USD

2026-02-15 * "Shipped second batch: 200 Tier-2 Deluxe packages"  
  Liabilities:Kickstarter:Unfulfilled:Tier-2-Deluxe   30000.00 USD
  Revenue:Product-Sales                              -30000.00 USD
  
  Expenses:Kickstarter:Shipping:Domestic               2400.00 USD
  Expenses:Kickstarter:Shipping:International          1800.00 USD
  Assets:Bank:Business-Checking                       -4200.00 USD

Every time you ship a batch, update your external spreadsheet with which specific backer IDs were fulfilled. The spreadsheet is your operational tool; Beancount is your financial books.

The Monthly Reconciliation Check

At the end of each month, I run this mental check (and you can run BQL queries to verify):

  1. Liability balance = Remaining unfulfilled value

    • If Tier-1-Basic shows $12,500 remaining, that should equal 500 unfulfilled backers × $25
    • Any mismatch means data entry error
  2. Total revenue recognized = Total actually shipped

    • Revenue account should exactly match fulfilled obligations
    • Easy to verify against shipping records
  3. Cash reconciliation

    • Starting cash + funded amount - fees - shipping costs = current cash
    • Should match bank statement

Handling Refunds

Refunds are simpler than you might think. When backers requested refunds (we had about 15), we did this:

2026-01-28 * "Refund batch: 10 Tier-1 backers"
  Liabilities:Kickstarter:Unfulfilled:Tier-1-Basic      250.00 USD
  Assets:Bank:Business-Checking                        -250.00 USD

2026-01-28 * "Refund batch: 5 Tier-2 backers"
  Liabilities:Kickstarter:Unfulfilled:Tier-2-Deluxe     750.00 USD
  Assets:Bank:Business-Checking                        -750.00 USD

The liability decreases (fewer obligations), cash goes out, no revenue involved. Clean and simple.

Pro tip: Process refunds in batches weekly, not individually daily. Saves time and keeps your ledger cleaner.

The Metadata Question

You asked about metadata—here’s my take after doing this:

Don’t overcomplicate it. For most campaigns, you don’t need metadata in Beancount. The tier-based account structure gives you enough granularity. Save metadata for edge cases:

2026-03-15 * "Replaced damaged shipment for backer #347"
  @issue: "damaged-in-shipping"
  @backer-id: "347"
  Expenses:Kickstarter:Shipping:Domestic                 12.00 USD
  Assets:Bank:Business-Checking                         -12.00 USD

Use metadata when you need to track exceptions or special cases, not for normal operations.

Manufacturing Costs Tracking

Don’t forget to track manufacturing costs! Your friend will need this for true profit calculation:

2026-01-20 * "Paid manufacturer for 800 Tier-1 units"
  Expenses:Kickstarter:Manufacturing                   8000.00 USD  ; $10/unit
  Assets:Bank:Business-Checking                       -8000.00 USD

2026-01-25 * "Paid manufacturer for 400 Tier-2 units"
  Expenses:Kickstarter:Manufacturing                  20000.00 USD  ; $50/unit
  Assets:Bank:Business-Checking                      -20000.00 USD

Then at the end, you can calculate true profit:

Revenue recognized:        $120,000
Less: Platform fees:        -$9,600
Less: Manufacturing:       -$45,000  (example)
Less: Shipping:            -$18,000  (example)
Net profit:                 $47,400

A Gotcha We Hit: Partial Shipments

One thing that tripped us up: some premium backers were supposed to get multiple items, but we shipped them in phases (base game first, expansions later).

Our solution: Create sub-tiers or use notes

2026-02-20 * "Shipped Tier-3 Premium base package (expansions to follow)"
  note: "Still owe: expansion pack + art book to these 50 backers"
  Liabilities:Kickstarter:Unfulfilled:Tier-3-Premium  12500.00 USD  ; Partial fulfillment
  Revenue:Product-Sales                              -12500.00 USD
  
  Expenses:Kickstarter:Shipping:International          2500.00 USD
  Assets:Bank:Business-Checking                       -2500.00 USD

You could also split Premium into Premium-Base and Premium-Expansion sub-accounts if you want more precision.

Final Practical Tips

  1. Set up the accounts BEFORE the campaign funds. Don’t wait until the money hits your bank to figure out your structure.

  2. Reconcile weekly during fulfillment. Don’t wait until month-end—you’ll catch errors faster.

  3. Keep a separate “Kickstarter reconciliation” spreadsheet with:

    • Backer list with fulfillment status
    • Expected vs. actual shipping costs
    • Timeline for batches
    • Link each spreadsheet row to your Beancount batch entries
  4. Use clear transaction descriptions. Future you will thank past you when reviewing old entries.

  5. Archive everything. Keep emails from Kickstarter, packing slips, shipping receipts. If there’s ever a dispute or audit, you want documentation.

The beauty of Beancount is that it forces you to think through the accounting logic upfront. Traditional software might hide these details behind automated entries, but with Beancount, you understand exactly what’s happening with every transaction.

Your friend is lucky to have you helping her think through this BEFORE it becomes a mess. Most creators don’t think about accounting until tax time, and then it’s painful to reconstruct everything.

Happy to share more specifics if helpful!

Wow, what fantastic advice from Alice, Tina, and Bob! This is exactly the kind of thoughtful, practical discussion that makes this community so valuable.

I want to add some encouragement and share a template approach that might help your friend get started quickly.

You’re Not Alone—I’ve Been There!

About three years ago, I helped a friend with an Indiegogo campaign (similar situation: handmade products, 400 backers, $65k raised). At first the accounting seemed overwhelming, but here’s what I learned: Start simple, then refine as you learn.

The beautiful thing about Beancount is you can start with a basic structure and evolve it over time. Don’t let perfect be the enemy of good enough to get started.

My Suggested Starting Point

Based on what Alice, Tina, and Bob shared (all excellent advice!), here’s a minimal starter structure I’d recommend to get your friend up and running TODAY:

Step 1: Create the basic account structure

; accounts.beancount - Basic structure

; Campaign funded
2026-01-15 * "Kickstarter campaign funded - net of fees"
  Assets:Bank:Checking                       110400.00 USD
  Expenses:Kickstarter-Fees                    9600.00 USD  ; Combined 5% + 3%
  Liabilities:Kickstarter-Unfulfilled       -120000.00 USD

; As you ship batches
2026-02-15 * "Shipped 100 rewards"
  Liabilities:Kickstarter-Unfulfilled         15000.00 USD  ; 100 backers @ avg $150
  Revenue:Product-Sales                      -15000.00 USD
  
  Expenses:Shipping                            1200.00 USD
  Assets:Bank:Checking                        -1200.00 USD

That’s it! That’s the MINIMUM to get started and stay sane.

Then, as your friend gets comfortable, evolve to Bob’s tier-based structure. But don’t paralyze yourself trying to build the perfect system upfront. Get the basics working first.

The Power of Plain Text: Lessons Learned

Here’s what I discovered after tracking 400 backers through fulfillment in Beancount:

1. Plain text is searchable forever

When a backer emailed 8 months later asking “Did you ship my reward?” I could grep my entire Beancount file:

grep -i "backer.*237" kickstarter.beancount

Found the entry showing we shipped on March 15. Done. Try doing that in QuickBooks without clicking through a million screens.

2. Version control is a lifesaver

We used Git to track the Beancount file. When my friend accidentally deleted a bunch of entries (don’t ask), we just:

git checkout HEAD~1 kickstarter.beancount

Restored everything instantly. No panic, no data loss, no calling support.

3. You can query ANYTHING

At the end, my friend wanted to know: “What was my average shipping cost per backer by country?”

With Beancount, I wrote a simple BQL query:

SELECT 
  meta('destination-country') as country,
  sum(position) as total_cost,
  count(*) as shipment_count,
  sum(position) / count(*) as avg_cost
WHERE account ~ 'Expenses:Shipping'
GROUP BY country

Try getting that insight from traditional accounting software without custom reporting (read: expensive).

My Template Offer

I created a “crowdfunding starter template” for Beancount after going through this with my friend. It includes:

  • Basic account structure (can evolve to tier-based)
  • Sample transactions for funding, fulfillment, refunds
  • Common BQL queries (fulfillment %, revenue recognized, shipping costs)
  • Monthly reconciliation checklist
  • Comments explaining the accounting logic for beginners

I’d be happy to share it! It’s anonymized and generic, but gives you a working starting point. Just DM me or reply here if interested.

Words of Encouragement

Fred, the fact that you’re thinking about this BEFORE your friend ships a single reward puts her in the top 1% of crowdfunding creators. Seriously. Most people don’t think about accounting until their accountant yells at them during tax prep.

A few mindset shifts that helped me:

Start tracking from Day 1

Don’t wait. The moment the campaign funds, create the initial transaction. Every subsequent action (manufacturing payment, shipping batch, refund) gets recorded immediately. Future you will thank past you.

Embrace iteration

Your first structure won’t be perfect. That’s okay! Beancount lets you refactor. When you realize you should have split shipping into Domestic vs International, just create the new accounts and update going forward. You don’t have to redo everything retroactively (though you can if you want).

Keep operational data separate

Alice and Bob both emphasized this: Beancount is for financial accounting, NOT operational tracking. Use a spreadsheet or Kickstarter’s tools to track “which specific backer got which specific item.” Beancount tracks money flows, not individual order status.

The liability method is your friend

I can’t stress this enough: recording unfulfilled obligations as liabilities protects you from overstating income. It’s the RIGHT way to do this, and it aligns with both accounting standards and tax requirements. Don’t let anyone tell you to just record the $120k as revenue immediately—that’s wrong and could cost your friend thousands in taxes.

The Long-Term Benefit

Here’s something nobody mentions: if your friend’s Kickstarter is successful, she might do MORE campaigns. Or grow the business into ongoing sales.

By setting up proper Beancount accounting now, she’s building a foundation that scales. The next campaign? Copy the structure, adjust the numbers, done. Ongoing Shopify sales? Same account structure, different source.

Compare that to creators who wing it with spreadsheets for each campaign, then have to reconstruct everything at tax time. Or worse, those who use different accounting software for each project and can’t get consolidated reporting.

Plain text accounting builds on itself. Every campaign, every business venture, all tracked in readable, searchable, version-controlled text files. It’s beautiful.

Final Thoughts

This thread is a perfect example of why I love this community. You asked a complex question, and you got:

  • Professional CPA guidance from Alice (revenue recognition standards)
  • Tax compliance expertise from Tina (nexus, 1099-K, IRS requirements)
  • Practical implementation from Bob (real-world structures that work)
  • Encouragement and templates from me (because we’ve all been there!)

Your friend is going to be FINE. She has you helping her, she has this community’s wisdom, and she’s using the right tool (Beancount) for transparent, auditable accounting.

Take it one step at a time:

  1. Set up basic structure (today)
  2. Record the funding transaction (today)
  3. Track batches as you ship (ongoing)
  4. Reconcile monthly (ongoing)
  5. Refine the structure as you learn (ongoing)

And remember: the Beancount docs are excellent, the community is helpful, and plain text means you can always see exactly what’s happening with your money. No black boxes, no hidden automation, just clear, understandable accounting.

You’ve got this! :raising_hands:

(And seriously, reach out if you want that starter template—happy to share!)