// ultra-niche buildsby JoshMay 16, 20266 min read

The CP2000 Notice Workflow That Saved 4 Hours Per Notice

CP2000 is the most common IRS notice and the slowest to respond to manually. Here's the exact AI-augmented workflow we built for a tax practice that turned a 5-hour response into a 1-hour review.

The CP2000 Notice Workflow That Saved 4 Hours Per Notice

CP2000 is the automated under-reporter notice. The IRS thinks the income on your client's return doesn't match what payors reported. Most CPA firms see 30-80 of these per year. Each takes 4-6 hours to resolve cleanly.

A practice I worked with cut the time per notice to about 50 minutes. The same accuracy. Here's the actual workflow.

What CP2000 is, in one paragraph

The IRS got 1099s and W-2s reporting income they think your client didn't include on the return. Or your client agreed in writing to something the IRS thinks is taxable that the return didn't reflect. The notice proposes a tax assessment. Your job: agree, disagree with explanation, or partially disagree.

The work is forensic. You compare what the IRS claims against the return, the source documents, and the client's actual situation. The agreement/disagreement letter is mostly templated.

The workflow

Step 1: OCR the notice. Most CP2000s arrive as PDFs (client scans them or the practice receives a copy). OCR with a quality engine (we use AWS Textract; Google Document AI also works). Extract: tax year, proposed assessment amount, line items with reported amounts vs. return amounts.

Step 2: Claude classifies the line items. A prompt that takes the OCR'd notice text and returns structured JSON:

``` For each line item the IRS is flagging: - payor_name - payor_tax_id (if visible) - form_type (1099-MISC, 1099-INT, W-2, etc.) - amount_reported_to_irs - amount_on_return (if you can determine from cross-reference) - variance - confidence ```

Step 3: Cross-reference against the return. Pull the prior-year return data from Drake Tax. For each flagged line item, find the corresponding entry on the return (if any). The system flags three buckets:

  • -Match found — the return reported this income, IRS may have a different categorization
  • -Missing — the return doesn't show this income
  • -Partial — the return shows a related amount but it's different

Step 4: Draft the response letter. Different template per bucket. The system generates a draft letter referencing each line item with the specific argument:

  • -For matches: "The income reported on Form 1099-MISC from [Payor] is reflected on Schedule C, Line X of the 2023 return as part of [aggregated amount]. The reporting categorization differs but the amount is included."
  • -For missing: a request for the source document and a placeholder line
  • -For partial: an explanation of the reconciliation

Step 5: Human review and signature. The CPA reviews the draft, verifies every line item, signs.

What the numbers look like

Before this workflow: average 4.8 hours per CP2000 (research + drafting + review).

After: 47 minutes average (OCR + classification runs in 2 min, cross-reference in 30 sec, letter drafting in 90 sec, human review and adjustment is the rest).

Across a year that's 200+ hours back. Across a 4-person tax practice that's roughly one full-time person's worth of busy-season capacity.

What broke and what we fixed

OCR confidence on scanned-from-phone notices. Phone camera scans break OCR worse than scanner PDFs. We added a "rescan required" flag that asks the client to use the practice's secure portal upload (which converts to clean PDF).

Hallucinated payor matches. Early version of the cross-reference would sometimes incorrectly match a 1099 to an unrelated Schedule C line. We added a "minimum confidence 0.85 or flag for human" rule.

The "client doesn't have the document" path. Some CP2000s reference 1099s the client never received. The system now generates a Form 4506-T request for the IRS transcript along with the response letter.

What this isn't

This isn't replacing the CPA's judgment. Every response is reviewed and signed by a human. The system is doing the mechanical work (data extraction, cross-referencing, drafting) so the CPA can spend time on the analysis.

It also isn't appropriate for audit-level matters. CP2000 is the under-reporter program — automated and templatable. Real audits (CP504, CP90, audit initiations) are different work and need different handling.

What to build first

If you're a tax practice considering this:

One, get the OCR pipeline working on 10 sample notices. Measure accuracy. Fix it before adding Claude.

Two, build the cross-reference. This is where the real time savings come from. The drafting is window dressing on a working cross-reference.

Three, build the drafting last. By the time you have the cross-reference, the drafts almost write themselves with a 50-line template.

The whole thing is a weekend of work for a competent dev. The payback is measured in days.

cp2000irs noticetaxautomationlong-tail
// go deeper

Want the full guide? Check out our deep-dive page for more context, FAQs, and resources.

read the full guide
// keep reading

Related posts

// ready to ship?

Let's build yours.

Reading is the easy part. We do the work. Tell us what's broken and we'll tell you straight up whether we can help.