The $600 1099-K Reversal: What Small Sellers Still Need to Track (Even at $20K Threshold)

The headlines last year were scary: “IRS to track ALL transactions over $600!” Small sellers, freelancers, and side hustlers panicked. Then in July 2025, the One Big Beautiful Bill Act (OBBBA) reversed course, restoring the original $20,000/200-transaction threshold.

Collective sigh of relief, right?

Not so fast. Even though most small sellers won’t receive Form 1099-K anymore, the tracking discipline is MORE important than ever. Here’s what you need to know.

What Actually Changed

Federal threshold is back to: $20,000 in gross payments AND more than 200 transactions per year for third-party payment processors (PayPal, Venmo, Cash App, Stripe, etc.)

What DIDN’T change:

  • Payment card transactions (credit/debit) = STILL reported regardless of amount
  • State-specific thresholds: Massachusetts and Maryland still require reporting at $600, New Jersey at $1,000
  • Your tax obligation: ALL business income is taxable whether you get a 1099-K or not

The threshold change is administrative relief from the IRS, not a tax law change.

Why Track Everything Even Below $20K?

I see clients make this mistake constantly: “I won’t get a 1099-K, so I don’t need to track it carefully.” Wrong.

Three critical reasons to maintain meticulous records:

  1. Income is taxable regardless of forms received. The IRS doesn’t care if you got a 1099-K. If you earned it, you owe taxes on it.

  2. State thresholds vary. If you have customers in Maryland, you might get a state-equivalent form even if you’re under the federal threshold.

  3. Audit preparation. When you DO cross $20K (and many businesses eventually do), you need a reconciliation system already in place. Building it retroactively during tax season is painful.

The Gross vs Net Problem

Here’s the trap: Form 1099-K reports GROSS payments. It doesn’t subtract:

  • Platform fees (PayPal’s 2.9% + $0.30 per transaction)
  • Refunds issued to customers
  • Shipping costs passed through
  • Sales tax collected
  • Chargebacks

You’ll see $25,000 on your 1099-K, but your actual taxable income might be $18,500 after fees and refunds. The burden is on YOU to reconcile and document the difference.

If you can’t explain the discrepancy, the IRS assumes the gross amount is your income. That’s a hefty tax bill on money you never kept.

Beancount Workflow for Payment App Reconciliation

This is where plain text accounting shines. Here’s my recommended structure:

2026-01-15 * "Freelance design work - Client via PayPal"
  Assets:PayPal:Business              95.00 USD
  Income:Freelance:Design           -100.00 USD
  Expenses:Fees:PayPal                 5.00 USD

Key principles:

  • Separate accounts: Assets:PayPal:Business vs Assets:PayPal:Personal
  • Track fees as expenses: Expenses:Fees:PayPal (tax deductible)
  • Use transaction metadata: add payment_id: "7XY123456" for audit trail
  • Tag everything: #venmo #business or #personal #reimbursement

For refunds:

2026-02-03 * "Refund - Defective product return"
  Assets:PayPal:Business             -100.00 USD
  Income:Freelance:Design             100.00 USD

This keeps your income accounts accurate and makes reconciliation straightforward.

The Business vs Personal Nightmare

Payment apps blur the line. I’ve seen clients receive:

  • $50 from Mom (birthday gift)
  • $30 from roommate (splitting groceries)
  • $200 from customer (actual business income)

All in the same Venmo account. Then panic when trying to separate them for taxes.

IRS position: If you can’t prove it was personal, they’ll treat it as business income.

Solution: Keep rigorous contemporaneous records. When you receive money, immediately categorize it:

2026-03-10 * "Roommate rent reimbursement"
  Assets:Venmo:Personal               600.00 USD
  Assets:Checking                    -600.00 USD
  #personal #reimbursement

Use metadata fields:

  note: "March rent split with Jamie, our lease agreement on file"

Quarterly Reconciliation Ritual

Don’t wait for January. Every quarter:

  1. Export platform CSVs (PayPal, Venmo, Stripe transaction histories)
  2. Import to Beancount using custom importers
  3. Run balance assertion: bean-check will catch mismatches immediately
  4. Generate report: Total business income vs total fees paid
  5. Document discrepancies: Keep notes on refunds, personal payments

This 90-day rhythm prevents the year-end scramble.

State-Specific Complications

If you have customers in multiple states, you need to track:

  • Which state each payment originated from
  • Whether you’ve crossed that state’s threshold
  • Potential tax nexus implications

Use Beancount metadata:

  customer_state: "MD"

Then query: SELECT sum(position) WHERE customer_state = "MD"

What I’m Seeing in My Practice

Small business clients who implemented systematic tracking in 2024 (during the $600 threshold panic) are now GRATEFUL. They have:

  • Clean books for investor due diligence
  • Quick responses to customer disputes
  • Easy audit preparation
  • Better business insights (where’s income actually coming from?)

The ones who breathed a sigh of relief and went back to sloppy tracking? They’re vulnerable.

Call to Action

What’s your payment app tracking workflow? Are you:

  • Separating business and personal accounts at the platform level?
  • Using separate PayPal/Venmo accounts entirely?
  • Tagging transactions manually?
  • Building custom importers?

Share your strategies. Especially interested in:

  • Multi-state tracking approaches
  • How you handle platform fee reconciliation
  • Tools for categorizing personal vs business
  • What you wish you’d known when you started

The $600 threshold scare was a wake-up call. Let’s not waste the lesson.

Oh man, this hits close to home. I’ve got about 15 small business clients who PANICKED last year when they heard about the $600 threshold. Half of them were running side hustles on Etsy, Poshmark, or doing freelance work through PayPal.

The chaos wasn’t the threshold itself—it was the realization that they’d been TERRIBLE about separating business from personal payments.

The “Wait, Was That Business or Personal?” Nightmare

One client runs a small craft business selling handmade jewelry. She uses Venmo for everything:

  • Customer payments for necklaces ($45 here, $80 there)
  • Her sister paying her back for concert tickets ($120)
  • Her roommate’s half of utilities ($300/month)
  • A friend repaying a dinner ($42)

When I asked her to pull a year of transactions to categorize them, she spent THREE FULL DAYS going through hundreds of payments trying to remember what each one was. Half the descriptions were just “:sparkles:” or “Thanks!!”

Useless. Absolutely useless for tax purposes.

My Beancount Workflow Fix

After last year’s scare, I standardized this workflow for ALL my clients (whether they’re at $20K or $2K):

1. Separate accounts in Beancount from day one:

Assets:Venmo:Business     ; Only business income
Assets:Venmo:Personal     ; Gifts, reimbursements, personal
Assets:PayPal:Business
Assets:PayPal:Personal

Even if they use the same actual Venmo account, we track them separately in Beancount. This forces the categorization question UP FRONT instead of at year-end.

2. Monthly reconciliation ritual (not quarterly—MONTHLY):

I set calendar reminders for clients:

  • 1st of every month: Export last month’s PayPal/Venmo CSVs
  • Categorize every single transaction (takes 20 minutes max if you do it monthly)
  • Import to Beancount
  • Run bean-check to catch errors

Monthly is KEY. Waiting 3 months means you forget what “$75 from Jessica” was actually for.

3. Document EVERYTHING with metadata:

For every ambiguous payment, I add notes:

2026-02-14 * "Payment from Sarah Miller"
  Assets:Venmo:Business               75.00 USD
  Income:Sales:Jewelry               -75.00 USD
  note: "Custom bracelet order - Instagram DM @sarahmiller confirmed"
  order_id: "IG-2024-027"

Later, if the IRS questions it, there’s a trail.

4. Screenshots as backup:

For large personal payments that MIGHT look like business income (like that $1,200 security deposit refund from a former landlord), I tell clients to screenshot the context and save it in a receipts/personal-documentation/ folder.

IRS: “Explain this $1,200 deposit.”
Us: Here’s the lease agreement, the move-out inspection, and the Venmo message saying “security deposit refund.”

Case closed.

The Relief (and the Trap)

When the threshold went back to $20K, most of my small clients breathed a sigh of relief. They won’t get 1099-K forms now.

But here’s the trap: they stopped being diligent.

“Oh, I’m only making $8K on my side hustle, I don’t need to track it carefully anymore.”

WRONG. You still owe taxes. And if you ever GROW past $20K, you’ll wish you’d built the system earlier.

The Silver Lining

Clients who stuck with the disciplined approach (even though they’re under the threshold) discovered unexpected benefits:

  • Business insights: One client realized 40% of her income came from repeat customers. She started a loyalty program.
  • Dispute resolution: Another client had a customer claim they never received an item. She pulled up the exact PayPal transaction with tracking number in 30 seconds.
  • Investor-ready books: A third client’s side hustle grew faster than expected. When an investor asked to see financials, she had clean Beancount books from day one. Closed the deal.

What I Wish Clients Knew Sooner

Start organized from day one. Don’t wait until you “need” it.

  • If you’re using Venmo/PayPal/Cash App for business, create a separate account (or at minimum, separate Beancount tracking)
  • Categorize as you go, not in December
  • Save contemporaneous documentation (screenshots, order confirmations, emails)
  • Build importers early (even simple CSV-to-Beancount scripts save hours)

The $600 threshold panic was actually a GIFT. It forced people to get their act together. Let’s not forget the lesson just because the threshold changed back.

What about others here—are you seeing clients relax too much now that the threshold is $20K again?

Both excellent points above. Let me add the CPA perspective on why this matters even more than people realize.

The Threshold Change is Admin Relief, NOT Tax Law

This is the most important concept my clients misunderstand:

The $20,000 threshold determines whether payment processors SEND you a 1099-K.

It does NOT determine whether your income is taxable.

I’ve had clients say: “I only made $12,000 on my side business, so I don’t need to report it because I won’t get a 1099-K.”

NO. NO. NO.

Every dollar of business income is taxable, whether you receive a form or not. The IRS doesn’t care about the threshold—that’s just paperwork burden relief. The tax obligation exists regardless.

Gross vs Net: Where Clients Get Burned

Let me illustrate with a real (anonymized) client situation from last year:

Client: Freelance graphic designer, PayPal-only payments
1099-K amount: $28,400
Actual taxable income: $21,150

Why the $7,250 difference?

Gross receipts (per 1099-K):        $28,400
Less: PayPal fees (2.9% + $0.30):   -$  897
Less: Refunds issued:               -$  850
Less: Sales tax collected:          -$2,100
Less: Disputed/reversed charges:    -$3,403
------------------------------------------
Net business income:                $21,150

The 1099-K shows $28,400. The tax return shows $21,150. That’s a $7,250 discrepancy.

If you can’t DOCUMENT and RECONCILE this difference, the IRS assumes the gross amount is your income.

That means paying taxes on $7,250 you never actually kept.

The Reconciliation Documentation Requirement

Here’s what I require all my clients to maintain (and what will save you in an audit):

1. Schedule C line-by-line mapping:

Schedule C Line 1 (Gross receipts):     $28,400  [matches 1099-K]
Schedule C Line 4 (Cost of goods):      $     0
Schedule C Line 30 (Expenses):          $ 7,250
  - PayPal fees:        $897
  - Refunds:            $850
  - Disputed charges:   $3,403
  - Sales tax remitted: $2,100
------------------------------------------
Net profit:                              $21,150

2. Supporting documentation:

  • Monthly PayPal statements showing fee breakdowns
  • Screenshot of annual transaction summary
  • Refund transaction IDs with customer names
  • Sales tax remittance receipts to state
  • Chargeback correspondence

Keep this in a dedicated folder: Tax-Year-2026/1099K-Reconciliation/

Beancount’s Audit-Ready Advantage

This is where plain text accounting gives you a HUGE edge.

Traditional accounting software often obscures the reconciliation trail. QuickBooks might show you “net deposits” which already deduct fees automatically.

Beancount forces you to record the FULL transaction:

2026-03-15 * "Client payment via PayPal - Logo design"
  Assets:PayPal:Business              97.10 USD  ; Net received
  Expenses:Fees:PayPal                 2.90 USD  ; Fee (tax deductible)
  Income:Freelance:Design           -100.00 USD  ; Gross income
  payment_id: "8XY789012"

When the IRS asks: “Your 1099-K says $28,400 but you reported $21,150—explain,” you run:

SELECT sum(position) WHERE account ~ "Expenses:Fees:PayPal"

Output: $897.00

Match that to the fee deduction on Schedule C. Done.

Balance Assertions Catch Errors Early

Here’s the power of Beancount: balance assertions force reconciliation BEFORE tax time.

2026-01-31 balance Assets:PayPal:Business  1247.89 USD

If this doesn’t match your actual PayPal balance, bean-check throws an error.

This catches:

  • Missed transactions
  • Incorrect fee calculations
  • Forgotten refunds
  • Data entry errors

Fix it in January, not April.

Traditional accounting software doesn’t enforce this discipline. Clients reconcile once a year (if at all). By then, the discrepancies are unfixable.

Creating Separate Accounts for Deductible Expenses

Many clients don’t realize PayPal fees are BUSINESS EXPENSES (Schedule C line 10, “Commissions and fees”).

Structure your accounts properly:

Expenses:Fees:PayPal          ; Deductible business expense
Expenses:Fees:Stripe
Expenses:Fees:Square

Then at tax time, query:

SELECT sum(position) WHERE account ~ "Expenses:Fees"

That’s your Line 10 deduction. Fully documented, fully auditable.

The “Contemporaneous Records” Standard

The IRS uses a legal term: “contemporaneous records.” It means records created AT THE TIME of the transaction, not reconstructed later from memory.

If you record a transaction in March 2026 but the audit happens in 2028, that March 2026 record is contemporaneous. You win.

If you try to reconstruct everything from memory in 2028 during the audit? The IRS can (and will) disallow deductions.

Beancount’s plain text files with git commits provide PROOF of when records were created:

git log --follow -- expenses.beancount

Shows:

commit abc123 Date: 2026-03-15
Added PayPal transaction for client logo design

That’s contemporaneous. That’s audit gold.

Multi-Year Perspective

One more thing people don’t think about: the $20K threshold is ANNUAL.

But businesses GROW. You might be at $8K this year. Next year $15K. Year after that $22K.

If you build sloppy habits now (“I’m under the threshold, I don’t need to track carefully”), you’ll hit $20K unprepared.

I’ve seen this pattern:

  • Year 1: $5K side income, no tracking
  • Year 2: $12K, rough estimates
  • Year 3: $23K, suddenly get 1099-K, PANIC because records are a mess

vs.

  • Year 1: $5K, full Beancount tracking from day one
  • Year 2: $12K, same workflow, easy
  • Year 3: $23K, get 1099-K, reconcile in 20 minutes because the system was already there

Which would you rather be?

State Threshold Variations

Don’t forget: Massachusetts and Maryland still issue state 1099-Ks at $600. New Jersey at $1,000.

If you have even ONE customer in those states and cross THEIR threshold, you might get a state form even if you’re under the federal $20K.

Track state of customer in metadata:

2026-04-01 * "Consulting payment - Boston client"
  Assets:PayPal:Business              500.00 USD
  Income:Consulting                  -500.00 USD
  customer_state: "MA"
  customer_name: "Acme Corp Boston"

Then query: How much income came from Massachusetts?

SELECT sum(position) WHERE customer_state = "MA" AND account ~ "Income"

If it’s over $600, expect a MA state 1099-K.

Bottom Line

The threshold change to $20K is administrative relief. It means LESS paperwork for payment processors and FEWER forms in the mail.

But it changes NOTHING about your tax obligation or the value of meticulous record-keeping.

Build the system now. Use Beancount’s structure to force good habits. Document everything. Use balance assertions to catch errors early.

Your future self (and your CPA) will thank you.

What reconciliation challenges are others facing? Especially curious about people handling sales tax separately—how are you tracking collected vs remitted?

This discussion brings back painful memories! Let me share my 2024 panic story—maybe it’ll help someone avoid my mistakes.

My “Oh Crap” Moment

January 2025. Tax season. I’m a software engineer with a side hustle doing freelance web development. Made maybe $6K total in 2024—small stuff.

Then I get a 1099-K in the mail for $8,400.

Wait, what? I didn’t make $8,400 in freelance income. Where did that number come from?

I pulled up my PayPal transaction history and… oh no. OH NO.

The $8,400 included:

  • $6,200 actual freelance work ✓
  • $1,800 reimbursements from friends (we split an Airbnb for a ski trip, concert tickets, group dinners)
  • $400 my brother paid me back for his share of Mom’s birthday gift

PayPal didn’t care what the money was FOR. They just saw $8,400 in “business” payments over 200 transactions and sent the form.

And I had ZERO documentation proving which payments were personal vs business.

The Panic Reconstruction

I spent a WEEK going through every single PayPal transaction trying to remember:

  • “$250 from Mike” — Was that the client Mike or my friend Mike?
  • “$75 from Sarah” — Which Sarah?! I know three Sarahs!
  • “$120 from Jake” — Wait, Jake hired me for a small project AND we split that Airbnb. Which payment was this?

Half the transaction descriptions were useless: “Thanks!”, “:clinking_beer_mugs:”, “For the thing”

I had to:

  • Dig through old emails to find project confirmations
  • Message friends: “Hey, did you Venmo me for the ski trip in March or April?”
  • Cross-reference dates with my calendar to remember what I was doing
  • Reconstruct from bank statements where the money ultimately went

It was HUMILIATING. I’m a SOFTWARE ENGINEER. I should be good at this!

The Beancount Conversion

After that nightmare, I built a proper system. Here’s what I did:

1. Created a PayPal CSV importer

I’d been manually entering transactions sporadically. Never again.

Here’s a simple Python importer I wrote (sharing in case it helps anyone):

import csv
from beancount.core import data
from beancount.core.amount import Amount
from decimal import Decimal

def extract(file, existing_entries=None):
    entries = []
    
    with open(file.name, 'r') as f:
        reader = csv.DictReader(f)
        for row in reader:
            date = parse_date(row['Date'])
            desc = row['Name'] + ' - ' + row['Type']
            amount = Decimal(row['Net'])
            fee = Decimal(row['Fee'])
            gross = Decimal(row['Gross'])
            
            # Categorize based on keywords
            if 'invoice' in desc.lower() or row['Type'] == 'Invoice':
                income_account = 'Income:Freelance:WebDev'
                tag = 'business'
            else:
                income_account = 'Income:Reimbursement'  
                tag = 'personal'
            
            txn = data.Transaction(
                meta={'lineno': 0, 'filename': file.name},
                date=date,
                flag='*',
                payee=row['Name'],
                narration=row['Subject'] or desc,
                tags={tag},
                links=set(),
                postings=[
                    data.Posting('Assets:PayPal', Amount(amount, 'USD'), None, None, None, None),
                    data.Posting('Expenses:Fees:PayPal', Amount(fee, 'USD'), None, None, None, None),
                    data.Posting(income_account, Amount(-gross, 'USD'), None, None, None, None),
                ]
            )
            entries.append(txn)
    
    return entries

Now I export PayPal monthly and import automatically. Takes 2 minutes.

2. Implemented a tagging system

Every transaction gets tagged immediately:

  • #business — Actual client work
  • #personal — Reimbursements, gifts, friend payments
  • #reimbursement — Specific type of personal (helps at tax time)

Then I can query:

SELECT sum(position) WHERE 'business' IN tags AND account ~ "Income"

That’s my actual taxable income. Clean.

3. Added metadata for EVERYTHING

For business payments:

2026-05-10 * "WebDev project - Logo redesign" #business
  Assets:PayPal                       475.00 USD
  Expenses:Fees:PayPal                 25.00 USD
  Income:Freelance:WebDev            -500.00 USD
  client: "Acme Corp"
  invoice: "INV-2026-023"
  project: "Logo-Redesign"

For personal payments:

2026-06-15 * "Reimbursement - Concert tickets" #personal #reimbursement
  Assets:PayPal                       120.00 USD
  Assets:Checking                    -120.00 USD
  payer: "Mike Johnson"
  reason: "Hamilton tickets - split cost"
  original_expense: "2026-06-01"

Now if I get audited, I can PROVE what each payment was.

4. Quarterly review habit

I set recurring calendar events: Every quarter on the 1st:

  • Export PayPal, Venmo, Stripe CSVs
  • Run importers
  • Review all transactions
  • Fix any categorization errors
  • Run bean-check to verify balances
  • Generate income report

Takes about 30 minutes every 3 months. Prevents the year-end catastrophe.

Lessons Learned (The Hard Way)

Lesson 1: Start clean from day one

If you’re beginning a side hustle TODAY, set up the system NOW. Don’t wait until you “need” it.

  • Separate PayPal/Venmo accounts for business vs personal (ideal)
  • OR separate tracking in Beancount if you must use one account (minimum)

Lesson 2: Tag and document as you go

When you receive $200 from “Jessica Miller” for a design project, categorize it THAT DAY.

Don’t wait. Don’t assume you’ll remember. You won’t.

Add metadata:

client: "Jessica Miller"
project: "Wedding invitation design"
invoice: "2026-INV-012"

Future you will be grateful.

Lesson 3: Assume you’ll get audited

You probably won’t. But if you DO, you want to be the person who says:

“Here’s my complete transaction history with contemporaneous documentation for every payment. Here’s the git log showing when I recorded each entry. Here are the source documents. Anything else you need?”

Not: “Uh… I think this was for a client? Or maybe my roommate? I’m not sure.”

Lesson 4: The $600 scare was a gift

Seriously. It FORCED me to build a real system.

Now even though the threshold is $20K and I’m nowhere near that, I have:

  • Clean books
  • Quarterly income visibility (helps with estimated tax payments)
  • Professional-looking records if I ever need a business loan
  • Peace of mind

The Simple Importer That Changed Everything

For anyone starting out, you don’t need fancy automation. Even a basic CSV import script is 10x better than manual entry.

Beancount has built-in CSV importers. Start with the simplest possible version:

from beancount.ingest.importers import csv

class PayPalImporter(csv.Importer):
    def name(self):
        return 'PayPal'
    
    def account(self, file):
        return 'Assets:PayPal'

Then gradually add categorization rules, metadata extraction, tagging logic.

Took me one Saturday afternoon to build version 1. Saved me HOURS every month.

Where I Am Now

Current workflow:

  1. Do freelance work
  2. Get paid via PayPal
  3. Once a month: export CSV, run importer, review
  4. Quarterly: reconcile, generate reports
  5. Tax time: run queries, done in 20 minutes

vs my old workflow:

  1. Do freelance work
  2. Get paid
  3. ??? (chaos)
  4. Tax time: PANIC for 2 weeks

The system isn’t perfect, but it’s 100x better than what I had.

And when the $600 threshold scare hit, I was ready. When it reverted to $20K, I didn’t change anything—the system works regardless.

My Advice

If you’re running ANY side income through payment apps:

  • Build the system now, even if you’re making $500/year
  • Use tags and metadata religiously
  • Automate imports if possible (even simple scripts help)
  • Review quarterly, not annually
  • Assume future-you will have forgotten everything current-you knows

The peace of mind is worth it.

What about others—anyone else have a “panic reconstruction” story? What finally made you build a real system?

This is all incredibly helpful—thank you all! I’m trying to build a system now before I run into problems, but I’m hitting a complexity I wasn’t expecting.

My Multi-State Confusion

I work remotely as a financial consultant. My clients are all over the country:

  • 3 clients in Maryland
  • 2 in Massachusetts
  • 1 in New Jersey
  • 4 in California
  • 2 in Texas

All payments come through Stripe.

Reading this thread, I just realized: Maryland and Massachusetts have $600 thresholds for 1099-K reporting. New Jersey is $1,000.

Question 1: If I earn $800 total from my Maryland clients, does Stripe send me a Maryland state 1099-K even though I’m under the federal $20K threshold?

Question 2: Does this mean I potentially need to track against EACH state’s threshold separately?

Question 3: What about tax nexus? If I have Maryland income, do I need to file a Maryland tax return even though I live in California?

This seems way more complicated than I thought.

How to Structure Beancount for Multi-State Tracking?

I’m trying to figure out the best account structure. A few options I’m considering:

Option A: Separate income accounts per state

Income:Consulting:Maryland
Income:Consulting:Massachusetts
Income:Consulting:NewJersey
Income:Consulting:California
Income:Consulting:Texas

Then query per state:

SELECT sum(position) WHERE account = "Income:Consulting:Maryland"

Option B: Single income account with metadata

2026-03-15 * "Consulting - Acme Corp"
  Assets:Stripe                       950.00 USD
  Expenses:Fees:Stripe                 50.00 USD
  Income:Consulting                -1000.00 USD
  client_state: "MD"
  client_name: "Acme Corp"

Then query with metadata filter:

SELECT sum(position) WHERE client_state = "MD" AND account ~ "Income"

Option C: Tags

2026-03-15 * "Consulting - Acme Corp" #maryland #consulting
  Assets:Stripe                       950.00 USD
  Expenses:Fees:Stripe                 50.00 USD
  Income:Consulting                -1000.00 USD

Query:

SELECT sum(position) WHERE 'maryland' IN tags

Which approach do others recommend? I’m leaning toward Option B (metadata) for flexibility, but maybe I’m overthinking it?

State Nexus Implications

Separate but related question: does having income from a state create tax nexus?

I’ve heard conflicting advice:

  • Some say remote consulting doesn’t create nexus if you never physically work in the state
  • Others say ANY income from a state requires filing there
  • Still others mention “safe harbor” thresholds (like $10K or $50K depending on state)

Does anyone track not just 1099-K thresholds but also state nexus thresholds in Beancount?

For example, California has a franchise tax filing requirement if you earn over a certain amount there. How do I model that?

Quarterly Estimated Taxes Across States

If I DO need to file in multiple states, that affects quarterly estimated tax payments too, right?

Current workflow:

  • Calculate total income quarterly
  • Pay federal estimated tax
  • Pay California (my home state) estimated tax

New workflow if I have nexus in MD, MA, NJ:

  • Calculate income per state
  • Pay federal estimated tax
  • Pay CA estimated tax
  • Pay MD estimated tax (if over threshold)
  • Pay MA estimated tax (if over threshold)
  • Pay NJ estimated tax (if over threshold)

This sounds like a nightmare. Please tell me I’m overthinking this.

Requesting Workflow Examples

If anyone has a working Beancount setup for multi-state income tracking, I’d love to see:

  1. Account structure — How do you organize income/expense accounts?
  2. Metadata schema — What fields do you track? (client_state, client_name, project_type?)
  3. Query examples — What reports do you run quarterly?
  4. State threshold tracking — Do you have automated alerts when you cross thresholds?

I’m envisioning something like:

# Query: Maryland income year-to-date
bean-query ledger.beancount "
  SELECT sum(position) 
  WHERE account ~ 'Income' 
    AND client_state = 'MD' 
    AND date >= 2026-01-01
"

# If result > $600, reminder to expect MD 1099-K

But I’m not sure if that’s the right approach.

Am I Overthinking This?

Part of me wonders if I should just:

  • Track everything in one Income:Consulting account
  • Add client_state metadata to every transaction
  • Wait and see if I actually GET any state 1099-K forms
  • Deal with state tax nexus only if/when it becomes an issue

vs being proactive and building the full tracking system now.

What would you all recommend for someone just starting out with multi-state clients?

Thanks in advance for any guidance!