Home / Accounting & Bookkeeping / Client document chase emails at day 0, 3, 7 and 14, with portal links only and a preparer escalation
Accounting & Bookkeeping problem 1: Clients don't send their documents
Client document chase emails at day 0, 3, 7 and 14, with portal links only and a preparer escalation
Every weekday morning the workflow checks each client's list of outstanding documents (a Google Sheet, or TaxDome document checklists read through its API) and sends one email per client listing everything still missing, with your portal link and never an attachment request. Reminders go at day 0, 3, 7 and 14; missed days don't bunch up into several emails. On day 14 the preparer is told and, if you use Karbon, a note is added to the work item. Items stop being asked for as soon as they're marked received, and the preparer gets one 'all documents received' note.
The problem
Waiting on documents stalls the return and the books, and the chasing itself is unpaid time. The figures below come from a vendor survey, so treat them as indications.
- Financial Cents' 2025 survey of 816 firm owners and admins: getting documents from clients was the biggest workflow issue, ahead of manual admin tasks. One respondent: 'Client reminder emails were manual and exhausting. Most of my time was spent chasing, not working.' Vendor survey. Source: Financial Cents, 2025 State of Accounting Workflow and Automation Report (816 firm owners and admins, mostly North America) (Vendor survey by a practice-management software company)
- Karbon (Business plan and above) and TaxDome already send automatic reminders on client requests. If you use them, try those first; this recipe is for firms on email and a sheet, or who want one ladder and one escalation rule across clients. Source: Karbon pricing and plan comparison (automatic client reminders on Business and Enterprise) (Vendor pricing page)
- IRS Publication 4557 tells preparers to 'Encrypt all sensitive files/emails, especially those with the taxpayer's personally identifiable information.' That's why the emails link to your portal and never ask for attachments. Source: IRS Publication 4557, Safeguarding Taxpayer Data (Rev. 6-2024) (US regulator guidance (IRS))
Background reading: Client document reminder emails: a ladder that stops when files arrive · A WISP for small tax and bookkeeping firms that use automations: what the Safeguards Rule asks of your tools
Who it's for
US solo and small CPA, EA, tax and bookkeeping firms (1-15 staff) who chase documents by hand from email and a spreadsheet, or who use TaxDome or Karbon but want one weekly-style ladder across all clients.
Tools and monthly cost
| Tool | Official price |
|---|---|
| Resend (sends the emails) | Free: 3,000 emails / month, 100 / day. Pro: $20 / month for 50,000 pricing page |
| Google Sheets (document checklist, pause list and ladder log) | Free with a Google account or your existing Google Workspace plan. Keep Social Security and account numbers out of it pricing page |
| Karbon (optional practice-management tool; its API needs the Business or Enterprise plan) | Team $59 / user / month billed annually ($79 monthly, teams of 4+); Business $89 / user / month billed annually ($99 monthly). Business includes automatic client reminders pricing page |
| TaxDome (optional; read-only API v4 is in beta) | Essentials $800 / year (one seat, 1-year commitment); Pro $1,000 / seat / year; Business $1,200 / seat / year. All plans billed upfront pricing page |
| n8n | Community Edition: free if you self-host (you pay for the server). n8n Cloud: from EUR 20 / month (Starter) or EUR 50 (Pro) pricing page |
Example month: Illustrative arithmetic. Assume 80 clients in tax season, 60 with something missing: about 60 first emails, 45 at day 3, 30 at day 7 and 15 at day 14, so about 150 emails plus a few internal notes, inside Resend's free tier (3,000 a month, 100 a day). About $0 a month plus your n8n server. Karbon and TaxDome are optional and only if you already use them.
Setup
- Read the 'Safeguards Rule, WISP, 7216 and Circular 230' section on the accounting hub first.
- Choose the source. Sheet (default, CHASE_SOURCE=sheet): one row per item in ac-doc-requests (request_id, client_id, client, first name, email, item, asked date, preparer email, optional Karbon work item key) and one row per received item in ac-doc-received; ac-chase-paused lists clients not to chase. TaxDome (CHASE_SOURCE=taxdome): turn on API & MCP in TaxDome settings and set TAXDOME_API_KEY and MSS_TAXDOME_API to https://<your-subdomain>.taxdome.com/api/v4; the workflow only reads.
- Set CPA_PORTAL_URL to your client portal's upload page and CHASE_DAYS if you want a different ladder (default 0,3,7,14).
- Karbon (optional): in Settings > Connected Apps > API Applications (Business or Enterprise plan), copy the application ID and access key into KARBON_APP_ID and KARBON_ACCESS_KEY. By default the API only sees Public clients; Private or Hidden clients need an admin request to Karbon. Karbon requires both headers on every call; the workflow refuses to send them to any other host. KARBON_REQUEST_INTERVAL_MS paces calls and 429 replies wait for Retry-After. KARBON_NOTE_AUTHOR is the user the day-14 note is posted as.
- Set CPA_FIRM_NAME, CPA_FIRM_SHORT, CPA_PHONE, CPA_ADDRESS, CPA_FROM_EMAIL, CPA_REPLY_TO, CPA_TZ and PARTNER_EMAIL from .env.example. Every client email is signed with your firm name, phone and address. Run n8n behind HTTPS with multi-factor authentication on the n8n login and on every connected account, keep execution logs short (Settings > n8n data pruning), and add n8n and its host to your WISP's list of service providers.
- Swap the mock sheet URL (MSS_SHEET_URL) for n8n's Google Sheets node, and run it on a test client with your own email first. The workflow also has a manual 'run now' webhook used by our tests. Delete it, or put it behind n8n's header authentication, before you go live.
Download
Download accounting-document-chase-ladder.zip
Contains the n8n workflow, the mock data, the test runner with its last results, and the mock server we tested against. All keys in .env.example are fake.
Test result
Every workflow was imported into n8n 2.45.4 and run end to end on our test machine. Karbon (API v3), TaxDome (public API v4, read-only), QuickBooks Online (Accounting API with OAuth 2.0), Google Sheets and the email sender (Resend) were replaced by a local mock server built from their official API docs: it checks the same request shapes, authentication headers and query syntax, pages results (Karbon @odata.nextLink, TaxDome cursors, QuickBooks STARTPOSITION), returns HTTP 429 with Retry-After, and expires the QuickBooks access token so n8n's real OAuth2 refresh runs. These recipes use no AI model; every decision is a written rule. Clients, firms and transactions are invented. Verified with mocks; no real client data was used, and nothing was sent to a real person or account.
7/7 scenarios passed (run 2026-10-28)
| PASS | C1 | Day 0: one email per client listing every missing item, portal link only, account number masked; paused client skipped; client with no email -> preparer told |
| PASS | C2 | Same day again: nothing re-sent |
| PASS | C3 | Day 3: Ben uploaded his only item -> nothing to Ben; Ava gets reminder 2 |
| PASS | C4 | Missed days are not bunched: run on day 10 sends ONE reminder listing only the item still missing |
| PASS | C5 | Day 14: final reminder + preparer escalation + Karbon note on the work item (Karbon 429 first: Retry-After honored) |
| PASS | C6 | After the ladder: no more client email; when the last item arrives the preparer gets one 'all received' note |
| PASS | C7 | TaxDome source (read-only API v4, page size 1 -> cursor paging, one 429): pending checklist items only, uploaded ones left out, contact email used |
Actual output from the test run
Scenario C1: the day-0 email to a client (invented client and firm; account number masked). Names and numbers are invented.
Subject: Documents we need from you (2) Hi Ava, To get started on your work, we need the following: - 2025 W-2 from Northwind Health - 1099-INT for account *7766 Please upload them through your secure client portal: https://cedarledger.example/portal For your security, please don't email tax documents or send them as attachments, and never put your Social Security number in an email. If something on the list doesn't apply to you this year, just reply and tell us - we'll take it off. Thank you, Cedar Ledger CPAs (555) 555-0140 40 Example St, Suite 3, Hartford, CT 06103
Verified with mocks
- Day 0: one email per client listing every missing item, with the portal link only and an account number masked to its last 4 digits; a paused client is skipped; a client with no email on file is reported to the preparer instead.
- Running again the same day sends nothing. On day 3 a client who uploaded their only item gets nothing; the other gets reminder 2.
- Missed days are not bunched: a first run on day 10 sends one reminder listing only what is still missing.
- Day 14: final reminder, preparer escalation and a Karbon note on the work item; Karbon answered 429 first and the workflow waited for Retry-After.
- After the ladder ends no more client email goes out; when the last item arrives the preparer gets one 'all documents received' note.
- TaxDome source: read-only API calls with cursor paging (page size 1 in the test) and one 429; only pending checklist items are chased, uploaded ones are left out.
- Verified with mocks; no real client data used.
Documented from official API docs only
Built to the vendor's documentation but not run against a live account. Check these on yours.
- Karbon API v3 Notes and WorkItems endpoints, the Bearer + AccessKey headers, OData $filter / $top / @odata.nextLink paging (from Karbon's developer docs; not run against a live Karbon account).
- TaxDome public API v4 (beta) document checklist fields. TaxDome publishes its API schema inside the app, so the field names in our mock are assumptions to check against your workspace before you switch CHASE_SOURCE to taxdome.
- Resend email API (from Resend's docs). Google Sheets: tested against a mock sheet endpoint; the n8n Google Sheets node is not wired in.
Limitations
- It only knows what's on the list. Someone at the firm still marks items received (or TaxDome does when the client uploads).
- If Karbon or TaxDome client requests already remind your clients, turn one of them off so clients don't get two sets of reminders.
- Emails ask for documents through your client portal, never as attachments. Before client-supplied text goes into an email, a Karbon note or a work item, this recipe applies the same rule as our chase ladder, uncategorized-transactions, organizer and digest recipes: numbers written like an SSN or ITIN (123-45-6789 or 123 45 6789) or an EIN (12-3456789) are replaced with [removed], and any other unbroken run of 5 or more digits is cut to its last 4 (99887766 becomes *7766; an SSN typed without dashes shows as its last 4). Runs of 4 digits or fewer, such as years and form numbers, are left as they are. That is a safety net, not a guarantee: n8n's own execution log still keeps the unmasked rows it read (14 days by default). Keep those numbers out of the Google Sheet too.
- Not legal or professional-standards advice, and not a compliance guarantee. Tax preparers are covered by the FTC Safeguards Rule (16 CFR 314), which asks for encryption in transit and at rest (314.4(c)(3)), multi-factor authentication for anyone accessing an information system (314.4(c)(5)) and oversight of service providers (314.4(f)); n8n, its server, Resend, Google and Karbon/TaxDome are service providers to list in your written information security plan (IRS Pub 4557 and 5708). Section 7216 limits how you use and disclose tax return information. Check with counsel and your state board before you turn this on.