By Sagar Shankaran, Founder of CallSphere
See how AI agents automate tax document collection — chasing missing W-2s, 1099s, and receipts via calls and texts to eliminate the #1 CPA bottleneck.
Key takeaways
Ask any CPA what slows down tax season the most and the answer is unanimous: waiting for client documents. The National Society of Accountants reports that the average CPA firm spends 15 hours per week — per preparer — on document collection activities during tax season. That is not preparing returns, not advising clients, not generating revenue. It is calling, emailing, texting, and following up with clients who have not sent their W-2s, 1099s, receipts, and supporting documents.
The impact cascades through the entire operation. A firm with 8 preparers loses 120 hours per week to document chasing — the equivalent of 3 full-time employees doing nothing but asking clients for paperwork. At a blended billing rate of $175/hour, that is $21,000 per week in opportunity cost, or $336,000 over a 16-week tax season.
The problem is structural. Tax preparation requires a complete set of documents before work can begin. A client who is missing one W-2 from a side job cannot have their return completed. A small business owner who has not sent their bookkeeping reports blocks the entire business return. The preparer cannot start, cannot bill, and must track the outstanding items manually.
Most firms use a combination of email checklists, portal upload reminders, and manual phone calls to collect documents. This approach fails for three predictable reasons:
Emails are ignored. The average client receives 121 emails per day (DMR Business Statistics). A document request email from a CPA firm competes with hundreds of other messages. Open rates for accounting firm emails average 18-22%, and action rates are even lower.
Manual follow-up is inconsistent. A preparer with 80 clients and a growing stack of returns does not have the bandwidth to call every client with missing documents weekly. The clients who get called are the ones the preparer remembers or the ones with the highest fees. The rest wait.
Clients do not know what they are missing. A common scenario: the firm sends a comprehensive checklist in January. The client sends most items but misses two 1099-DIVs from brokerage accounts. The firm discovers the gap in March when they begin the return. Now a document request that should have happened in January is delaying an April filing.
Hear it before you finish reading
Talk to a live CallSphere AI voice agent for financial services in your browser — 60 seconds, no signup.
Some firms have tried generic workflow automation — tools like Zapier, Mailchimp sequences, or CRM drip campaigns — to automate document collection. These tools send reminders on a schedule, but they lack two critical capabilities:
flowchart LR
CALLER(["Caller"])
subgraph TEL["Telephony"]
SIP["Twilio SIP and PSTN"]
end
subgraph BRAIN["Business AI Agent"]
STT["Streaming STT<br/>Deepgram or Whisper"]
NLU{"Intent and<br/>Entity Extraction"}
TOOLS["Tool Calls"]
TTS["Streaming TTS<br/>ElevenLabs or Rime"]
end
subgraph DATA["Live Data Plane"]
CRM[("CRM and Notes")]
CAL[("Calendar and<br/>Schedule")]
KB[("Knowledge Base<br/>and Policies")]
end
subgraph OUT["Outcomes"]
O1(["Booking captured"])
O2(["CRM record created"])
O3(["Human handoff"])
end
CALLER --> SIP --> STT --> NLU
NLU -->|Lookup| TOOLS
TOOLS <--> CRM
TOOLS <--> CAL
TOOLS <--> KB
NLU --> TTS --> SIP --> CALLER
NLU -->|Resolved| O1
NLU -->|Schedule| O2
NLU -->|Escalate| O3
style CALLER fill:#f1f5f9,stroke:#64748b,color:#0f172a
style NLU fill:#4f46e5,stroke:#4338ca,color:#fff
style O1 fill:#059669,stroke:#047857,color:#fff
style O2 fill:#0ea5e9,stroke:#0369a1,color:#fff
style O3 fill:#f59e0b,stroke:#d97706,color:#1f2937
They cannot determine what is missing. A generic reminder says "Please send your tax documents." An effective reminder says "We have received your W-2 from your employer but are still missing your 1099-NEC from your freelance work and your mortgage interest statement. Can you send those this week?" Generic tools cannot cross-reference received documents against required documents.
They cannot handle two-way conversation. When a client replies to an automated email with "I don't think I have a 1099 for that — is it required?", the automation breaks. A human must intervene. These micro-conversations happen on 30-40% of document requests and consume as much time as the original outreach.
CallSphere's AI document collection system uses voice and text agents that maintain a real-time understanding of each client's document status. The AI knows what has been received, what is still missing, who to contact, and how to escalate — without any human involvement for routine cases.
┌──────────────────┐ ┌───────────────────┐
│ Practice Mgmt │────▶│ Document Tracker │
│ (Drake/Lacerte) │ │ (missing items │
│ + Client Portal │ │ per client) │
└──────────────────┘ └───────┬────────────┘
│
┌────────────┼────────────┐
▼ ▼ ▼
┌──────────┐ ┌──────────┐ ┌──────────┐
│ Voice │ │ SMS/ │ │ Email │
│ Agent │ │ Text │ │ Agent │
│ (calls) │ │ Agent │ │ │
└──────────┘ └──────────┘ └──────────┘
│ │ │
└────────────┼─────────────┘
▼
┌───────────────────────┐
│ Escalation Engine │
│ (CPA notification │
│ for non-responders) │
└───────────────────────┘
The foundation of effective document collection is knowing exactly what each client needs to send and what they have already sent:
from callsphere import VoiceAgent, TextAgent
from callsphere.accounting import PracticeConnector, DocumentTracker
from datetime import datetime, timedelta
# Connect to practice management
practice = PracticeConnector(
system="lacerte",
api_key="lacerte_key_xxxx"
)
# Initialize the document tracker
tracker = DocumentTracker(
practice=practice,
document_types={
"w2": {
"name": "W-2 Wage Statement",
"source": "employer",
"expected_by": "January 31",
"required_for": ["individual"]
},
"1099_nec": {
"name": "1099-NEC Non-Employee Compensation",
"source": "clients/payers",
"expected_by": "January 31",
"required_for": ["individual", "sole_prop"]
},
"1099_div": {
"name": "1099-DIV Dividends",
"source": "brokerage",
"expected_by": "February 15",
"required_for": ["individual"]
},
"1099_int": {
"name": "1099-INT Interest",
"source": "bank",
"expected_by": "January 31",
"required_for": ["individual"]
},
"1098_mortgage": {
"name": "1098 Mortgage Interest Statement",
"source": "lender",
"expected_by": "January 31",
"required_for": ["individual"]
},
"k1": {
"name": "Schedule K-1",
"source": "partnership/S-corp",
"expected_by": "March 15",
"required_for": ["individual"]
},
"bookkeeping_report": {
"name": "Year-End Bookkeeping Report",
"source": "client/bookkeeper",
"expected_by": "February 15",
"required_for": ["s_corp", "c_corp", "partnership", "llc"]
},
"property_tax": {
"name": "Property Tax Statement",
"source": "county assessor",
"expected_by": "February 15",
"required_for": ["individual"]
}
}
)
# Generate missing document reports
missing = tracker.get_all_missing_documents()
print(f"Clients with missing documents: {len(missing)}")
for client_id, docs in missing.items():
client = practice.get_client(client_id)
print(f" {client.name}: missing {len(docs)} documents")
for doc in docs:
print(f" - {doc.name} (expected by {doc.expected_by})")
The AI uses a multi-channel approach — starting with the least intrusive method and escalating:
# Define the document collection voice agent
doc_agent = VoiceAgent(
name="Document Collection Agent",
voice="sophia",
language="en-US",
system_prompt="""You are calling {client_name} on behalf of
{firm_name} about their {tax_year} tax return. You are
calling because specific documents are still needed.
Missing documents: {missing_documents}
Your approach:
1. Greet warmly and identify yourself as calling from
the CPA firm
2. Mention the specific documents that are missing —
be precise (not "some documents" but "your W-2 from
ABC Company and your 1099-DIV from Fidelity")
3. If the client has the documents: offer to text them
the portal upload link right now
4. If the client does not have them yet: explain when
they should expect to receive them and suggest
contacting the issuer
5. If the client has questions about whether a document
applies: answer if straightforward, or schedule a
quick call with their preparer
Be helpful and patient. Many clients do not understand
tax document types. Explain in plain language.
"1099-DIV" means "the form showing dividends from your
investments — usually from your brokerage account."
End every call with a clear next action and timeline."""
)
# Define escalating outreach sequence
from callsphere import OutreachSequence
sequence = OutreachSequence(
name="Tax Document Collection 2026",
stages=[
{
"channel": "sms",
"day": 0,
"template": "Hi {first_name}, this is {firm_name}. "
"We are preparing your {tax_year} tax return "
"and still need: {missing_list}. "
"Upload here: {portal_link}. "
"Questions? Reply to this text.",
"condition": "has_mobile_phone"
},
{
"channel": "email",
"day": 0,
"template": "document_request_detailed",
"condition": "has_email"
},
{
"channel": "sms_reminder",
"day": 5,
"template": "Friendly reminder from {firm_name} — "
"we still need {missing_count} document(s) "
"for your tax return. Upload: {portal_link}",
"condition": "documents_still_missing"
},
{
"channel": "voice_call",
"day": 10,
"agent": doc_agent,
"condition": "documents_still_missing"
},
{
"channel": "voice_call",
"day": 20,
"agent": doc_agent,
"condition": "documents_still_missing",
"urgency": "high"
},
{
"channel": "escalate_to_preparer",
"day": 30,
"condition": "documents_still_missing",
"action": "create_task_for_cpa"
}
]
)
# Launch the sequence for all clients with missing documents
for client_id, missing_docs in missing.items():
client = practice.get_client(client_id)
await sequence.enroll(
contact=client,
variables={
"missing_documents": missing_docs,
"missing_list": ", ".join(d.name for d in missing_docs),
"missing_count": len(missing_docs),
"portal_link": practice.get_portal_link(client_id),
"tax_year": "2025",
"firm_name": "Smith & Associates CPA"
}
)
The AI agent must handle the micro-conversations that break generic automation:
# SMS text agent for handling replies
text_agent = TextAgent(
name="Document Collection Text Agent",
system_prompt="""You are a text-based assistant for
{firm_name}. Clients reply to document request texts
with questions. Handle these common replies:
"I already sent that" → Check the portal/tracker. If
received, confirm and update the missing list. If not
found, ask them to resend and provide the upload link.
"I don't have that document" → Explain what it is,
who issues it, and when it should arrive. If it's
past the expected date, suggest contacting the issuer.
"Do I need that?" → Check the prior year return. If
the document was on last year's return, explain why
it's likely needed again. If unsure, schedule a quick
call with the preparer.
"Can I just drop off everything at the office?" →
Provide office hours and drop-off instructions.
Keep texts concise. Max 2-3 sentences per reply."""
)
@text_agent.on_message
async def handle_sms_reply(message):
client = await practice.lookup_client(phone=message.from_phone)
missing = tracker.get_missing_for_client(client.id)
# Update tracker if client confirms they sent documents
if message.intent == "already_sent":
received = await practice.check_portal_uploads(
client_id=client.id,
since=datetime.now() - timedelta(days=7)
)
if received:
tracker.mark_received(client.id, received)
return {"client": client, "missing": missing}
The financial return on AI document collection comes from three sources: preparer time recovery, faster filing (enabling earlier billing), and reduced extension filings.
| Metric | Manual Collection | AI-Powered Collection | Impact |
|---|---|---|---|
| Hours/week on document chasing (per preparer) | 15 hours | 2 hours | -87% |
| Average days to complete document set | 34 days | 16 days | -53% |
| Returns filed by April 15 (vs extension) | 68% | 87% | +28% |
| Revenue billed by April 15 | $620K | $845K | +36% |
| Client response rate to document requests | 42% (email) | 78% (AI multi-channel) | +86% |
| Preparer billable hour recovery (season) | — | 208 hrs/preparer | — |
| Value of recovered hours ($175/hr) | — | $36,400/preparer | — |
| Seasonal cost (8 preparers) | $2,800 (staff time) | $3,600 (AI platform) | +29% cost |
| Net value (recovered billable hours) | — | $287,600 (8 preparers) | — |
The slight increase in direct cost is overwhelmingly offset by recovered billable hours. CallSphere's document collection system pays for itself if it recovers just one billable hour per preparer per week — it typically recovers 13.
For each client type (individual, sole proprietor, S-corp, partnership, trust), define the complete list of potentially required documents. Then, for each client, flag which documents are applicable based on their prior year return.
Still reading? Stop comparing — try CallSphere live.
See the financial services AI agent handle a real call — complete, industry-specific, and live in your browser. No signup.
Connect the AI tracker to your client portal so it automatically recognizes when documents are uploaded. This eliminates the manual step of checking the portal and updating the tracking spreadsheet.
Some clients prefer text, some prefer email, some prefer phone calls. Allow clients to set their communication preference during onboarding and respect it in the outreach sequence. CallSphere's system tracks preference by client and adjusts the channel order accordingly.
Determine at what point a non-responsive client gets escalated to their assigned preparer. The default is 30 days of non-response, but this should tighten as the April deadline approaches. In the final two weeks, escalation should happen after 3-5 days.
A 12-person CPA firm in Atlanta serving 680 individual and 120 business clients deployed CallSphere's AI document collection system for the 2025 tax season.
One preparer commented: "I went from spending Monday mornings calling clients about missing K-1s to actually preparing returns. The AI texts them, follows up, answers their questions, and only pings me when a client has truly gone dark. It is like having a dedicated document coordinator for each preparer."
The system cross-references two data sources: the client's prior year tax return (which shows what income sources, deductions, and credits were reported) and a document matrix that maps each return line item to its source document. If last year's return included dividend income, the system expects a 1099-DIV this year. New clients complete an intake questionnaire that establishes their initial document requirements. The preparer can also manually add or remove documents from any client's required list.
The system integrates with the firm's workflow. When a staff member processes a physical drop-off or an email attachment, they mark the document as received in the practice management system, which syncs to the tracker. CallSphere also supports an email forwarding integration where documents emailed to the firm are automatically parsed and matched to client profiles using OCR and document classification.
Yes. The voice agent is specifically designed for clients who are not comfortable with technology. If a client says "I don't know how to use the portal," the AI walks them through the process step by step, or offers alternative submission methods: email the documents to a specific address, drop them off at the office, or mail them. The AI adapts its communication style based on the client's apparent comfort level.
The AI's document requirements are generated from prior year return data and the firm's document matrix — both reviewed by CPAs. The AI does not make independent judgments about what is required. If a new income source appears that was not on the prior year return, the preparer discovers it during return preparation and manually adds the requirement. The risk is equivalent to the existing risk of a human staff member using the same checklist — the AI simply automates the follow-up, not the determination of what is needed.
CallSphere charges per active client per season, not per message or per call. For a firm with 500 tax clients, the typical cost is $3,000-$4,500 for the full tax season (January through April 15). This includes unlimited text messages, voice calls, emails, and portal monitoring across all enrolled clients. There are no per-message fees that would create unpredictable costs during the highest-volume periods.
Written by
Sagar Shankaran· Founder, CallSphere
Sagar Shankaran is the founder of CallSphere, where he builds production AI voice and chat agents deployed across healthcare, hospitality, real estate, and home services. He writes about agentic AI, LLM engineering, and shipping voice agents that handle real calls in production.
See how AI voice agents work for your industry. Live demo available -- no signup required.
A how-to for Colombian education and tutoring SMBs to answer parents and students instantly, book trial classes 24/7 in Spanish and English, and grow enrollment with a CallSphere AI agent.
Tbilisi professional-services firms serving relocating founders and IT companies use CallSphere AI voice and chat agents to answer enquiries 24/7 in English, Georgian and Russian and book consultations.
A practical how-to for Palau eco-resorts and dive operators on capturing every high-value, multilingual enquiry with a CallSphere AI voice and chat agent, while honouring Palau’s marine-conservation commitments.
How salons, spas and wellness SMBs across the UAE, Saudi Arabia and Qatar use CallSphere AI voice and chat agents to capture every booking 24/7 in Arabic, English and expat languages, and cut no-shows.
How estate agents and property managers in Luxembourg City and across the Grand Duchy use CallSphere to capture multilingual viewing and enquiry calls 24/7, GDPR compliant.
A practical guide for Senegalese logistics, freight, legal and consulting SMBs in Dakar and Thiès to capture every enquiry 24/7 with a CallSphere AI voice and chat agent in French, Wolof and English.
© 2026 CallSphere LLC. All rights reserved.
Made within New York
Watch how CallSphere handles real customer calls, schedules appointments, and processes payments — live.
Try Live DemoBook a DemoCalculate Your ROI