Skip to content

Methodology

Reconciling TaxDome invoices to ProConnect e-files at scale

May 4, 2026

Most firms running TaxDome and ProConnect treat them as two separate systems that happen to share clients. Returns are prepared and filed in ProConnect. Invoicing and client communication live in TaxDome. The connection between the two is a person, usually the owner, who knows that engagement number 487 in TaxDome corresponds to John and Mary Smith’s 1040 in ProConnect.

That works at twenty returns. It breaks at two hundred. By five hundred, it has already broken; you just haven’t noticed which returns slipped through.

This post is about how to close the loop. Not by buying a third tool, and not by hiring someone to manually reconcile, but with a repeatable monthly process that catches the gaps. We’ve run a version of this for four seasons at R Tax Services. It works.

What “reconciled” actually means

A reconciled engagement has three confirmed facts:

  1. The return was prepared and accepted by the IRS (or marked accepted at the state level).
  2. The matching TaxDome engagement is in the correct stage and not stuck.
  3. The matching invoice was issued, the payment was received, and revenue is recognized in the right period.

When all three line up, the engagement is closed. When they don’t, you have one of four common patterns, each with its own fix.

The four common gap patterns

Pattern 1: Filed but not billed

ProConnect shows an accepted return. TaxDome shows the engagement in progress, with no invoice issued. The work is done; the firm just never sent the bill.

This is the most expensive pattern, and the most common in growing firms. It happens because billing depends on the preparer remembering to update TaxDome after the file goes out, and at the end of a long day they often don’t.

The fix is to make billing a stage-transition trigger, not a manual decision. When the ProConnect e-file acknowledgement arrives, the TaxDome engagement should auto-advance to “billing”, which auto-issues the invoice from the engagement template.

Pattern 2: Billed but not filed

TaxDome shows an invoice paid. ProConnect shows no accepted return for that client this season. Sometimes this is legitimate (the engagement was a planning conversation, not a return). Most of the time it means the file is stuck somewhere: rejected with no follow-up, or a 4868 sitting unfiled in extension limbo.

This pattern is rare but high-stakes. A paid invoice for an unfiled return is a service failure waiting to be discovered.

The fix is a monthly reconciliation that flags every paid invoice with no matching ProConnect-accepted return in the same period.

Pattern 3: Filed and billed, but invoice rejected or refunded

ProConnect shows acceptance. TaxDome shows the invoice issued and then voided or refunded. In a healthy practice this is rare and intentional (a fee adjustment, a courtesy reversal). In an unhealthy practice it’s a sign of fee disputes, scope creep, or rushed work.

Track this rate per preparer. If one team member’s reversal rate runs 3x the firm average, you have a training problem, not a billing problem.

Pattern 4: Off-by-period

The return was filed in season N. The invoice was issued in season N+1, or vice versa. Cash basis firms can usually shrug at this. Accrual basis firms need to catch it before year-end.

The fix is the same as Pattern 1: trigger the invoice off the e-file acknowledgement, not off any human decision. The acknowledgement timestamps the work, which fixes the period automatically.

The monthly reconciliation, step by step

Run this once a month during off-season. Twice a month during tax season. We do ours on the first Friday of the month and the third Friday during March and April.

Step 1: Pull the ProConnect filing report

ProConnect has a filing report (Reports → e-File Statistics, or via the admin panel). Export it for the period you’re reconciling: a list of every return with a federal acceptance date in that window. Save the CSV.

This gives you the canonical “what did we actually file” list. If a return is not on this list, it is not filed, full stop. We don’t trust prep notes or status fields here. We trust the acceptance date.

Step 2: Pull the TaxDome billing report

Pull a TaxDome invoice export for the same period. You want every invoice with an issue date or paid date in the window, depending on whether your billing model is on issuance or on payment. Most firms reconcile on issuance.

Step 3: Match by client identifier, not by name

Names are unreliable. “John Smith” matches three different families. “Smith, John & Mary (TR)” matches differently than “Smith Family Trust”. Names also change at marriage and divorce in ways the system doesn’t always track.

Use the canonical client ID. In TaxDome that’s the contact ID; in ProConnect it’s the client number. If you don’t have a stable mapping between the two systems, this is the first thing to fix. Maintain it as a single column in a shared spreadsheet, or better, as a custom field in TaxDome that holds the ProConnect client number.

Step 4: Flag the four gap patterns

Run the diff. For the period:

  • ProConnect rows with no matching TaxDome invoice → Pattern 1 (filed but not billed).
  • TaxDome rows with no matching ProConnect acceptance → Pattern 2 (billed but not filed) or legitimate non-return engagement.
  • TaxDome rows with negative or zero net amount where ProConnect shows acceptance → Pattern 3.
  • Cross-period mismatches between filed-period and invoiced-period → Pattern 4.

The output of this step is a list of engagements that need human attention. Most months it’s a small list.

Step 5: Resolve, then update the master log

For each flagged engagement, do one of: issue the missing invoice, find the missing return, write off the gap with a documented reason, or correct the period. Whatever the resolution, log it. The log itself is what catches systemic problems over time.

We keep the resolution log in the same spreadsheet as the reconciliation itself, with one row per resolved exception per period. After two seasons it becomes the most useful operations document the firm has, because it shows the true error patterns that the rest of the system can’t see.

Where automation helps and where it doesn’t

You can automate steps 1 through 4. Most firms shouldn’t bother building it themselves, but the components are simple: a scheduled pull from each system’s API, a join on the canonical ID, and a flag column based on the four patterns above.

What you cannot automate is step 5. The resolution decisions involve judgment, client context, and sometimes a phone call. Trying to automate that is how firms end up with auto-issued invoices for engagements that should have been written off.

The right balance is: automate the diff, surface the exceptions, leave the decisions to a person who knows the engagement.

What this isn’t

This is not a substitute for proper engagement-level cost tracking. It tells you whether each return was billed and filed; it does not tell you whether each return was profitable. Profitability requires time tracking against the engagement, which most tax firms either don’t do or don’t trust the data they have. That’s a separate post.

This is also not a fix for upstream pricing problems. If your invoices are routinely 30% lower than what the work was worth, the reconciliation will balance perfectly while the firm goes quietly broke. Reconciliation tells you whether the books match. Pricing tells you whether the books make sense. Both matter; they are not the same thing.

Where to start if you’re behind

Pick the most recent quarter you have not reconciled. Pull both reports. Do the diff once, by hand if you have to. Whatever pattern shows up is the pattern to fix first.

If you’d like a working pair of eyes on the diff, a fit call is the fastest path. We’ve done this enough times to know which pattern usually shows up first for a firm of a given size, and we can usually point at the right fix in thirty minutes.