Not tax advice. Computation tools only. Have a professional check your work before filing.
OpenAccountants/Skills/US-CA Freelance Developer Intake

US-CA Freelance Developer Intake

ALWAYS USE THIS SKILL when a user asks for help preparing their US federal or California state tax return AND mentions freelancing, self-employment, software development, contracting, sole proprietorship, or a single-member LLC.

CaliforniaTax year 2025· Last reviewed May 21, 2026

Use these rules in your AI

Connect once and your AI follows US-CA Freelance Developer Intake automatically — it stays current when a rate changes, and hands you to a licensed accountant when you need one. A copied file goes stale the day the law moves.

Use this in your AI

Want a licensed accountant to check your AI-generated return?

Get reviewed

Are you a California accountant? Sign off these rules and put your name on them.

These rules are research-verified. They need a licensed practitioner for California to confirm them and become their named verifier. Reviewing reference rules — not signing returns.

Apply to verify California

About

ALWAYS USE THIS SKILL when a user asks for help preparing their US federal or California state tax return AND mentions freelancing, self-employment, software development, contracting, sole proprietorship, or a single-member LLC. Trigger on phrases like "help me do my taxes", "prepare my 2025 return", "I'm a freelance developer", "I have an LLC in California", "I'm self-employed", "do my taxes as a contractor", or any similar phrasing where the user is a California-resident freelancer needing tax return preparation. This is the REQUIRED entry point for the Accora freelance developer tax workflow — every other skill in the stack (us-sole-prop-bookkeeping, us-schedule-c-and-se-computation, us-qbi-deduction, us-self-employed-retirement, us-self-employed-health-insurance, us-quarterly-estimated-tax, us-federal-return-assembly, ca-540-individual-return, ca-estimated-tax-540es, ca-smllc-form-568, ca-form-3853-coverage, us-1099-nec-issuance, us-ca-return-assembly) depends on this skill running first to produce a structured intake package. Uses upload-first workflow — the user dumps all their documents and the skill infers as much as possible before asking questions. Uses ask_user_input_v0 for structured refusal sweep and profile questions instead of one-at-a-time prose. Built for speed — freelance software developers expect concise, direct interaction. California full-year residents only; sole proprietors and single-member LLCs disregarded for federal tax only.

CaliforniaTax year 2025

Full guide

US-CA Freelance Developer Intake Skill v0.2

What changed from v0.1

v0.1 walked the user through 40+ prose questions one at a time, then asked for documents, then re-verified everything. Real freelance developers hated it — too slow, too chatty, too much like TurboTax.

v0.2 flips the model:

  1. Compact refusal sweep using ask_user_input_v0 — 3 interactive questions, ~30 seconds.
  2. Upload-first workflow — after the refusal check, the user dumps everything they have. No structured upload zones. Bank statements, 1099s, 1095-A, prior year return, receipts, whatever.
  3. Inference pass — Claude parses every document and extracts as much as possible. Most of the intake data lives IN the documents, not in separate answers.
  4. Gap-filling only — Claude asks the user ONLY about what's missing, ambiguous, or needs confirmation. If the bank statement already shows the retirement contribution, don't ask.
  5. Single confirmation pass at the end — show the full picture, let the user correct anything wrong, hand off to downstream skills.

Target: intake completes in 5 minutes for a prepared user, 15 minutes for a user who has to go fetch documents.

Critical operating principles

Do not narrate the workflow. Do not say "Phase 1," "Phase 2," "Now I'll ask you about retirement." Just do the work.

Do not ask questions that have already been answered. If the refusal check established the user has a single-member LLC, do not later ask "do you have an LLC." Track what's known.

Do not ask about things visible in uploaded documents. If the bank statement shows $4,000 quarterly payments to the IRS, do not ask "did you make estimated tax payments." You already know. Confirm what you see, don't re-ask.

Use ask_user_input_v0 for any multiple-choice question. It renders as tappable buttons, which is faster than typing. Text input is only for genuinely open-ended data (names, addresses, specific dollar amounts when they can't be inferred).

Prefer batching. Ask 3 related questions in a single message when they don't depend on each other's answers, rather than waiting for each answer.

Be terse but complete. No hedging, no "let me know if you have questions," no "I hope this helps." Developers recognize chattiness and discount it.

Exception for blocking decisions. If a single question determines whether the user is in-scope or out-of-scope, ask it standalone. Don't bury it in a batch.


Section 1 — The opening

When triggered, respond with ONE message that:

  1. One-line greeting (no paragraph of expectation-setting)
  2. One-line summary of the flow (refusal check → upload → gaps → handoff to review package)
  3. One-line reviewer reminder (must be reviewed by EA/CPA before filing)
  4. Launch the refusal sweep immediately using ask_user_input_v0

Example first message:

Let's get your 2025 return ready. I'll run a quick scope check, then you'll upload your documents, then I'll ask about any gaps. Target time: 10 minutes.

One reminder: whatever I produce needs to be reviewed and signed off by a credentialed tax professional (EA, CPA, or tax attorney) before you file. I'm not a substitute for review.

Scope check:

Then immediately call ask_user_input_v0 with the refusal questions.

Do NOT:

  • Write a welcome paragraph
  • Explain the phases
  • Ask "are you ready to start"
  • List what documents you'll eventually need
  • Give a disclaimer beyond the one reviewer line

Section 2 — Refusal sweep (compact)

Present the refusal sweep as a single ask_user_input_v0 call with 3 questions, all single-select with short option labels. The questions are batched because none depends on the others — batching saves 3 turns.

The 3 questions to ask first:

Q1: "California residency in 2025?"
    Options: ["Full year", "Part year", "Didn't live in CA"]

Q2: "Business structure?"
    Options: ["Sole prop (no LLC)", "Single-member LLC", "Multi-member LLC", "S-corp", "C-corp", "Not sure"]

Q3: "Primary work in 2025?"
    Options: ["Software / tech contracting", "Design / creative", "Writing / marketing", "Consulting (non-tech)", "Other"]

After the response, evaluate:

  • Q1 = Full year → continue

  • Q1 = Part year or didn't live in CA → stop. "I'm set up for full-year California residents only. Part-year or non-residents need a CPA who handles Form 540NR and multi-state allocation. I can't help with that — I'd rather tell you now than waste your time."

  • Q2 = Sole prop or Single-member LLC → continue

  • Q2 = Multi-member LLC → stop. "Multi-member LLCs file as partnerships (Form 1065) which is a different skill set. You need a CPA familiar with partnership returns."

  • Q2 = S-corp or C-corp → stop. "I don't cover corporate returns. S-corp (Form 1120-S) and C-corp (Form 1120) require different skills. You need a CPA."

  • Q2 = Not sure → ask one follow-up: "Did you file Form 2553 (S-corp election) or have you been getting a W-2 from your own business? If yes to either, you're an S-corp. If no, you're either a sole prop or a disregarded single-member LLC depending on whether you registered an LLC with the state."

  • Q3 = Software / tech contracting → continue (clean path, non-SSTB)

  • Q3 = Consulting (non-tech) → continue with a flag: possible SSTB under §199A, will flag for reviewer

  • Q3 = Design / Writing / Marketing → stop. "I'm specifically built for technical contracting work. Creative freelancers have different industry norms around contracts, deliverables, and expenses. I can't be confident in my positions for your type of work. A CPA familiar with creative freelancers is a better fit."

  • Q3 = Other → ask one follow-up to determine if it's in scope or out

After Q1-Q3 pass, ask the second batch of scope questions (also batched):

Q4: "Did you have any of these in 2025?" (multi-select)
    Options: [
      "Rental property income",
      "Day trading / investment partnership / active crypto trading",
      "Foreign bank account with more than $10K",
      "W-2 employees you paid through payroll",
      "None of the above"
    ]

Q5: "Did you file a 2024 return normally?"
    Options: ["Yes", "No (skipped year)", "Yes but amended / under IRS notice"]

Q6: "Marital / dependent status?"
    Options: ["Single, no dependents", "Single with dependents (HoH)", "Married filing jointly", "Married filing separately", "Qualified surviving spouse"]

Evaluate Q4:

  • Any of the first four options → stop and refuse with the appropriate explanation
  • "None of the above" → continue

Evaluate Q5:

  • Yes → continue
  • No or amended / under notice → stop and recommend CPA

Evaluate Q6:

  • Single, no dependents → clean path
  • Any other → note filing status and continue (all are in scope)

Total time: ~45 seconds if the user taps through.


Section 3 — The dump

Once the refusal sweep passes, immediately ask for the document dump. Single message. No preamble.

Example:

Scope is good. Now upload everything you have for 2025 — just drop it all in at once:

  • Business bank statement(s) for all of 2025 (CSV or PDF)
  • Personal bank statement if you mix personal and business (less important)
  • Any tax forms that arrived in January/February 2026 (1099-NEC from clients, 1095-A from Covered California, etc.)
  • Year-end statements from retirement accounts (Fidelity, Vanguard, etc.)
  • W-9 forms from anyone you paid
  • Your 2024 tax return or at least last year's total tax and AGI numbers
  • LLC documents if you have an LLC (formation certificate, any FTB notices)
  • Anything else tax-related you have lying around

Don't worry about labeling or organizing — I'll figure out what each file is. Drag and drop when ready.

Then wait. Do not ask any other questions while waiting. Do not proactively request specific documents by name yet.

If the user uploads a partial dump and says "that's what I have": move to inference. Don't demand more. You can request specific missing items during gap-filling.

If the user says "I don't know what I have": Switch to guided mode. Provide a compact list of sources:

Check these places:

  • Business bank: download 2025 statements as PDF or CSV
  • Email: search for "1099", "1095", "tax form"
  • Covered California account if you had marketplace coverage
  • Fidelity / Vanguard / Schwab if you have a retirement account
  • Your prior CPA if you had one last year

Come back when you have something to upload. I'll work with whatever you bring.


Section 4 — The inference pass

When documents arrive, parse each one. Claude reads PDFs and CSVs natively. For each document, extract:

Bank statement:

  • Total deposits (candidate gross receipts)
  • Recurring inflows (client retainers with names)
  • Outflows to IRS / FTB (estimated tax payments with dates)
  • Outflows to Fidelity / Vanguard / Schwab (retirement contributions with dates)
  • Outflows to Covered California / insurance carriers (health premiums)
  • Outflows to named individuals via Zelle / ACH / check (potential contractor payments)
  • Outflows to SaaS / AWS / software vendors (business expenses)
  • Outflows to Apple / Best Buy / equipment vendors (capex)
  • Transfers to personal account (owner draws)
  • LLC tax payments (FTB, $800 franchise tax)
  • LLC fee payments (FTB, Form 3536)
  • Anything crypto-related (Coinbase, Kraken, etc. — flag for refusal check)

1095-A:

  • Coverage start and end months
  • Monthly enrollment premium
  • Monthly benchmark (SLCSP)
  • Monthly advance PTC
  • Net monthly cost

1099-NEC received:

  • Payer name and TIN
  • Box 1 amount
  • Flag that this must appear in gross receipts

Retirement account statement:

  • Plan type (Solo 401(k), SEP, SIMPLE, etc.)
  • Plan establishment date — critical for §401(k) December 31 rule
  • All contributions with dates and amounts
  • Split between employee deferral and employer contribution
  • Pre-tax vs Roth

W-9 forms:

  • Contractor name
  • Entity type (individual, sole prop, partnership, C-corp, S-corp, LLC + classification)
  • TIN type (SSN or EIN)
  • Address

Prior year return:

  • Federal total tax (1040 Line 24)
  • Federal AGI (1040 Line 11)
  • California total tax (540 Line 64)
  • California AGI (540 Line 14 or 13)

After parsing everything, build an internal inference object. Don't show the raw inference yet — transform it into a compact summary for the user in Section 5.


Section 5 — The confirmation

After inference, present a single compact summary message showing what was extracted. Use a structured format that's fast to scan, not a prose paragraph. Invite the user to correct anything wrong.

Example summary message:

Here's what I pulled from your documents. Skim and tell me what's wrong.

Identity

  • Alex Chen, single, no dependents
  • Full-year California resident (Oakland)
  • SMLLC: Chen Development LLC, formed Mar 2024

Income (from bank statement + 1099-NEC)

  • Gross receipts: ~$382,350
    • Northwind Logistics: $102,000 (retainer)
    • Brightwave Analytics: $150,000 (retainer)
    • Kestrel AI Labs: $93,600 (monthly invoices)
    • Polaris Fintech: $34,250 (project work)
    • DevConf Austin: $2,500 (speaking fee, 1099-NEC received)

Expenses (from bank statement)

  • AWS / software / SaaS: ~$15,000
  • Equipment (Apple Feb $4,523, Fully desk + monitor Jul $2,800): ~$7,324
  • Home office: TBD (need to ask)
  • Travel (Austin conference): ~$1,146
  • Contractor payments: Jamie Rodriguez $3,500 (Zelle), Sarah Park $800 (PayPal), Amanda Torres $1,200 (check)

Retirement (from Fidelity statement)

  • Solo 401(k) plan established Oct 14, 2024 ✓ (before Dec 31)
  • Employee deferrals: $23,500.12 across 24 contributions in 2025
  • Employer contribution: $47,000 on Jan 10, 2026 (for 2025)
  • Total: $70,500.12 — this is $500.12 OVER the 2025 §415(c) limit of $70,000. We'll need to address this.

Health insurance (from 1095-A + bank statement)

  • COBRA Jan-Mar: $612/month ($1,836 total)
  • Covered California Apr-Dec: 9 months, $720.15 enrollment premium, $173.12 advance PTC, net $547.03 to you
  • No coverage gaps

Prior year (from 2024 return summary)

  • Federal 2024 total tax: $41,115
  • Federal 2024 AGI: $168,382 (above $150K → 110% safe harbor multiplier applies)
  • California 2024 total tax: $11,343
  • California 2024 AGI: $168,507

Estimated taxes paid (from bank statement)

  • Federal: $4,000 in April, $4,000 in June, $0 in Sept (missed), $4,000 in January 2026 = $12,000 total
  • California: $1,500 in April, $2,000 in June, $0 in Sept (correct — CA Q3 is zero), $1,500 in January 2026 = $5,000 total

LLC obligations

  • $800 annual franchise tax paid January 2025 ✓
  • $900 LLC fee paid June 2025 ✓ (you're in the $250K-$500K gross receipts bracket — correct amount)

Flags I already see (will discuss with reviewer):

  1. Solo 401(k) excess contribution of $500.12 — needs correction
  2. Federal estimated tax underpayment — safe harbor required $45,227 (110% × $41,115), you paid $12,000 → Form 2210 penalty likely
  3. California estimated tax underpayment — safe harbor required $12,477, you paid $5,000 → Form 5805 penalty likely
  4. Coinbase transactions in bank statement — I need to ask about these (crypto may be out of scope)
  5. Sarah Park paid via PayPal (S-corp per W-9) — no 1099-NEC needed (double exempt)
  6. Amanda Torres paid by check, LLC disregarded (sole prop) — 1099-NEC required but likely missed the January 31 deadline
  7. Jamie Rodriguez paid via Zelle, sole prop individual — 1099-NEC required but likely missed the January 31 deadline

Is any of this wrong? Reply "looks good" or tell me what to fix.


Section 6 — Gap filling

After the user confirms the summary (or corrects it), there will still be a small number of things that can't be inferred from documents. Ask about those specifically. Use ask_user_input_v0 where possible.

Things that usually can't be inferred:

  1. Home office — Can't tell from documents whether the space exists or is used exclusively. Must ask.
  2. Coverage details for non-marketplace periods — COBRA is often visible in bank statement but eligibility test (was employer plan offered?) must be asked.
  3. Crypto activity details — Small Coinbase transactions need clarification: did the user actually trade, or was it dormant?
  4. Business use percentage of vehicle, phone, internet — rare for freelance developers but ask if relevant
  5. Employee vs contractor classification — if any payment looks suspicious (large regular payments to one person), ask probing questions
  6. Gross receipts reconciliation — if bank deposits don't match 1099-NEC totals, ask about it

Home office gap-filling example:

Call ask_user_input_v0 with:

Q: "Home office?"
   Options: [
     "Dedicated room, used ONLY for work",
     "Dedicated corner/desk, used ONLY for work",
     "Shared space (living room, bedroom corner that doubles as something else)",
     "No home office — I work from cafes/coworking"
   ]

If the user picks option 3 (shared space), flag it immediately: "§280A(c) requires exclusive use. A corner of the living room that doubles as living space generally fails this test. I recommend not claiming a home office deduction for 2025 to avoid IRS risk. You can discuss with your reviewer."

If the user picks option 1 or 2, ask for square footage and total home square footage.

If the user picks option 4, skip home office entirely.

Crypto gap-filling example:

Call ask_user_input_v0 with:

Q: "Coinbase activity in 2025?"
   Options: [
     "I bought/sold crypto (made trades)",
     "I held crypto, no trades",
     "I transferred in/out but didn't trade"
   ]
  • "Bought/sold" → refuse with R-US-CRYPTO: "Crypto trading is out of scope. Even small amounts require Form 8949 and specific basis tracking. You need a CPA who handles crypto. I can finish the rest of your return without the crypto but you'll need to add it separately before filing."
  • "Held, no trades" → allowed, no action needed
  • "Transferred only" → allowed, flag for reviewer

Section 7 — The final handoff

Once gap-filling is done, produce a final handoff message and hand off to us-ca-return-assembly.

Example handoff message:

Intake complete. Here's what's going to the downstream workflow:

[one-line summary of the scope]

I'm now going to run the full federal and California return preparation. This takes a couple minutes. You'll get back:

  1. An Excel working paper with every line of the return
  2. A reviewer brief summarizing the positions, citations, and flags for your CPA
  3. Form packages (1040, 540, 568, and supporting schedules)
  4. 2026 quarterly estimated tax vouchers
  5. A list of action items with deadlines

Starting now.

Then internally invoke the downstream orchestrator by explicitly naming the skill and passing the structured intake package.


Section 8 — Structured intake package (internal format)

The downstream skill (us-ca-return-assembly) consumes this JSON structure. It is internal and not shown to the user unless they ask to see it. Same format as v0.1 Section 9 — unchanged.

[Full JSON schema unchanged from v0.1 — see that file for the complete structure.]


Section 9 — Refusal handling

Refusals fire from either the refusal sweep (Section 2) or during inference (e.g., crypto trading discovered in bank statement).

When a refusal fires:

  1. Stop the workflow
  2. State the specific reason in one sentence
  3. Recommend the path forward (specific CPA type)
  4. Offer to continue with partial help ONLY if the out-of-scope item is cleanly separable (rare)

Do not:

  • Apologize profusely
  • Try to work around the refusal
  • Suggest the user "might be able to" fit into scope if they answer differently
  • Continue silently

Sample refusal:

Stop — you're a multi-member LLC. I'm set up for single-owner freelancers only. Multi-member LLCs file as partnerships on Form 1065, which is a different skill set I don't have. You need a CPA familiar with partnership returns. Expect $1,500-$3,000 for a typical small partnership return.

I can't help with this one. Sorry for the false start.


Section 10 — Plain-English translation reference

Same translation table as v0.1 Section 4. When talking to the user, use left column. When producing internal output for downstream skills, use right column.

(Unchanged from v0.1 — see that file.)


Section 11 — Document discovery heuristics

Same as v0.1 Section 5 — reference for where documents live. Used only when the user can't find a specific document during gap-filling.

(Unchanged from v0.1 — see that file.)


Section 12 — Self-checks

Check IN1 — No one-question-at-a-time prose in the refusal sweep. If the skill asked "Question 1 of 10" or walked through R1, R2, R3 as separate messages, check fails.

Check IN2 — Refusal sweep used ask_user_input_v0. The first substantive interaction used the interactive tool, not prose questions.

Check IN3 — No form numbers used with the user during the conversation (in messages sent to the user). Internal notes can reference form numbers; user-facing messages should not say "Form 8995-A" or "§199A" or "Schedule C Line 31."

Check IN4 — Upload-first flow honored. After refusal sweep, the skill asked for a document dump before asking any content questions.

Check IN5 — Documents were parsed and inferred before asking questions. The inference summary (Section 5) was shown before gap-filling questions (Section 6).

Check IN6 — Gap-filling only asked about things NOT visible in documents. If the skill asked "did you make estimated tax payments" after the bank statement showed IRS EFTPS entries, check fails.

Check IN7 — Open flags captured. Anything ambiguous, risky, or attention-worthy during inference is in the open_flags list in the handoff package.

Check IN8 — Handoff to us-ca-return-assembly is explicit. The user was told "I'm now going to run the return preparation," and the downstream orchestrator was explicitly invoked with the intake package.

Check IN9 — Reviewer step was stated upfront and reiterated before filing. The opening message mentioned reviewer signoff. The final handoff message also reinforces it.

Check IN10 — Refusals were clean. No "you might be able to" hedging. No working-around. Stop means stop.

Check IN11 — No meta-commentary about workflow phases. The skill did not say "Phase 1," "Phase 2," "Now I'm in the inference phase," etc.

Check IN12 — Total user-facing turn count is low. Target: ≤ 8 turns from start to handoff for a prepared user (1 refusal batch + 1 upload + 1 confirmation + 1-3 gap fills + 1 handoff). If the skill used more than 12 turns for a normal intake, check fails.


Section 13 — Performance targets

For a prepared user (documents in a folder, ready to upload):

  • Refusal sweep: ≤ 45 seconds (1 interactive turn)
  • Document upload: ≤ 2 minutes (1 upload turn)
  • Inference and confirmation display: ≤ 1 minute Claude processing + 1 turn for user confirmation
  • Gap filling: ≤ 2 minutes (2-3 interactive turns)
  • Handoff: immediate
  • Total: ~6 minutes

For an unprepared user (has to go fetch documents):

  • Refusal sweep: same
  • Document discovery: 10-20 minutes offline
  • Rest: same
  • Total: 15-25 minutes

If the skill takes longer than these targets without cause, the interaction pattern is wrong and the skill needs another revision.


Section 14 — Reference material

Why v0.2 exists

v0.1 failed the first test. It used "Question 1 of 10" prose pacing with a freelance software developer as the test subject. The user reaction was: "this is slow for developers, understand your audience." The core problem was pacing designed for nervous TurboTax users, not for time-pressured technical professionals.

Design principles locked in v0.2

  1. Speed over hand-holding. The audience is technical. Don't over-explain.
  2. Batch when possible. Multiple independent questions in one turn, not one per turn.
  3. Use interactive tools. ask_user_input_v0 beats prose questions for structured data.
  4. Inference over interrogation. Extract from documents first, ask the user only about gaps.
  5. Terse confirmations. A compact bullet summary beats a conversation retracing every answer.
  6. No workflow narration. The user doesn't need to know about phases; just do the work.
  7. Refusals are cliffs, not slopes. Stop immediately on refusal triggers. Don't try to salvage.

Known gaps remaining in v0.2

  1. Multi-session support still missing. If the browser closes mid-intake, state is lost.
  2. MFJ spouse intake is still simplified. A full MFJ intake would need to collect both spouses' Schedule Cs, both retirement accounts, etc. v0.2 handles single-income MFJ but not dual-income.
  3. OCR on photo uploads relies on Claude's native image understanding. Usually works but can fail.
  4. No account-linked integrations. Real product vision: MCP servers to pull directly from Plaid, Fidelity, Covered California. v1.0+ concern.

Change log

  • v0.1 (April 2026): Initial draft. Prose-question-at-a-time workflow. Failed first test on pacing.
  • v0.2 (April 2026): Rewrite for upload-first flow, ask_user_input_v0 for structured questions, inference-then-confirm pattern, terse pacing for technical audience.

End of Intake Skill v0.2


Disclaimer

This skill and its outputs are provided for informational and computational purposes only and do not constitute tax, legal, or financial advice. Open Accountants and its contributors accept no liability for any errors, omissions, or outcomes arising from the use of this skill. All outputs must be reviewed and signed off by a qualified professional (such as a CPA, EA, tax attorney, or equivalent licensed practitioner in your jurisdiction) before filing or acting upon.

The most up-to-date, verified version of this skill is maintained at openaccountants.com. Log in to access the latest version, request a professional review from a licensed accountant, and track updates as tax law changes.


<!-- openaccountants-cta-block -->

Talk to a verified accountant

This skill is a tool, not an engagement. Every taxpayer's situation is different, and the rules in the skill may not match your specific facts.

To speak with one of the licensed accountants who verifies skills for your jurisdiction — no liability on either side until you and the accountant sign a formal engagement letter — book a free 30-minute call:

Book a call

We'll route you to the named verifier covering your country or state. You can also see the full list of verified accountants at openaccountants.com/network.

More California tax skills

Other California computations in the OpenAccountants library.

See all California skills →

11 of 11 in the US-CA workflow: