Problems & solutions · Accounting

Sales Tax Compliance Software Problems: The 7 That Create Exposure, and How to Avoid Them

Sales TAX Compliance Software architecture and database illustration showing common problems and fixes.
The short answer

The most expensive failure mode is a nexus threshold you crossed months ago and nobody noticed. Once economic nexus is triggered in a state, the tax is owed on every subsequent sale into it whether or not you charged the customer, so a crossing in March discovered in November is eight months of uncollected tax coming out of your margin, plus interest and penalty, plus a registration conversation that now starts from a disclosure rather than a routine filing. It costs nothing to compute a rolling threshold from your own transaction ledger and alert at eighty percent. It costs a great deal to find out from an accountant during year end review.

Why does the tax project turn into a rate engine rebuild?

The most common scope failure in indirect tax is deciding to own calculation. It starts reasonably. The connector between your billing platform and Avalara or TaxJar keeps producing wrong answers on bundled products, someone concludes the engine is the problem, and the project becomes a plan to compute rates yourself. Rate content across thousands of jurisdictions then absorbs the budget and is permanently one legislative session behind.

The reason this keeps happening is that the visible symptom is a wrong rate on an invoice, so the engine looks like the culprit. It usually is not. The wrong number almost always comes from what was sent to the engine: a product code that maps to the wrong taxability category, an address that arrived unvalidated, a bundle passed as a single line, or a credit modelled as a negative line on a future invoice. The engine answered the question it was asked.

The fix is to scope the layer, not the engine. Keep a commercial engine for rates and rules, and build transaction normalisation from your own billing platform, taxability determination for your own bundles, nexus monitoring on your own base, certificate lifecycle tied to your customer records, and reconciliation to your ledger. That is the work that breaks, and it is work no vendor can do for you because it depends entirely on how your revenue is shaped. A developer who opens by proposing to replace Avalara is proposing to spend your money on the part that was already working.

What goes wrong when you load historical transactions and prior filings?

You need history for two reasons: nexus thresholds are rolling calculations over a moving window, and any audit will look backwards rather than forwards. So the project loads several years of invoices, credits and filed returns, and the trouble starts immediately.

Three failures recur. Product catalogues changed, so a stock keeping unit that means one thing today meant something else in 2023, and applying today's taxability mapping to old transactions produces a historic position you never actually took. Credits and rebills were modelled inconsistently over time, particularly around billing system migrations, so the same economic event appears as a negative invoice in one period and a credit memo in another and the totals stop tying. And filed returns exist as PDFs, portal screenshots and a workbook, with no line level trace back to the invoices behind the number.

What works is treating the historical load as evidence rather than as data to recompute. Import filed figures as immutable records of what was submitted, with the source document attached, and never let the new system silently restate them. Store taxability determinations as versioned decisions with effective dates, so a 2023 transaction resolves against the 2023 mapping rather than today's. And reconcile a single closed period end to end before loading anything else, because if one month will not tie, five years will not either and you will have buried the reason.

Why do billing, ERP (Enterprise Resource Planning) and engine integrations break after launch?

They break at the seams where somebody changes something without knowing tax reads it. A product manager adds a plan with a new bundle, and no mapping exists, so it defaults to taxable or non taxable depending on how the fallback was written and nobody sees it for a quarter. An engineer renames a field in the billing platform. Finance opens a new legal entity and the intercompany flow arrives in the ledger with no tax treatment.

Usage based pricing is the sharpest edge. Revenue is rated at period end, so the taxable transaction does not exist until a job runs, and if that job is late or reruns, tax determination happens twice or not at all. Teams discover this when a month's liability doubles and nobody can explain it.

Two fixes worth insisting on. First, fail loudly rather than defaulting: an unmapped product should raise an exception that blocks the transaction from being finalised, not quietly pick a treatment. An hour of friction for a product manager is far cheaper than a year of incorrect returns. Second, make determination idempotent and versioned, so rerunning a rating job cannot double count and every determination records the rules version and inputs that produced it. Then when a number looks wrong, the answer is a query rather than an investigation.

What happens when exemption certificates and notices are not covered?

These two are the least interesting parts of the scope and they are where the money leaves. Exempt sales that cannot be supported with a valid certificate are the classic source of assessment, because an auditor samples exempt transactions, asks for the certificate, and anything missing or lapsed becomes tax plus interest plus penalty. Meanwhile the certificates you do hold are phone photographs on a shared drive, filed by customer name, covering one state, collected by a salesperson who has left.

The failure is structural rather than clerical. A certificate is being treated as a document rather than as an object with a customer, a jurisdiction, a type, an issue date, an expiry, an image and a validation status, linked to the transactions it supports. Until it is modelled that way, nothing can check it at invoicing and nothing can tell you it has lapsed.

Notices are the same shape of problem. A letter arrives by post, gets scanned by whoever opens the mail, and has a response deadline measured in days. Failing to respond is frequently worse than the underlying issue, and there is usually no owner. Build a notice log where every letter is scanned, classified, assigned an owner and a due date, and closed with the response attached. Neither feature demonstrates well and both pay for themselves before anything else in the project, which is exactly why they get cut when the budget tightens.

Should you build custom or configure what you already own?

Configure and stop reading if you sell physical goods or straightforward digital products through one storefront on a mainstream ecommerce platform or ERP. Avalara or TaxJar connected properly will calculate, store certificates and file, and a build is pure cost. Anrok is a sensible answer for a software seller with reasonably standard subscription billing, because it already understands digital taxability. Vertex or Sovos fit larger enterprises that need content depth against an ERP they already run.

The hybrid is the right answer far more often than either extreme, and it is what we recommend. Keep the engine for rates and rules. Own the layer around it. Maintaining rate content yourself is expensive and permanently stale, and no auditor has ever been impressed by a home built rate table.

Build the layer when two or more of these hold. Your revenue comes from a homegrown or heavily customised billing system. Your pricing is usage based or bundled so taxability mapping is a judgement rather than a lookup. You run multiple legal entities with intercompany flows. You have already received an assessment or a nexus questionnaire. Or somebody on your team maintains a mapping spreadsheet the connector cannot express, which is the clearest signal of all, because that spreadsheet is already your compliance function and it has no version history, no owner and no audit trail.

How do hidden costs get into the quote?

Five places, all foreseeable if anyone asks the question.

  • Source system count. Each billing or order platform is its own normalisation problem, and companies routinely forget the legacy one still invoicing forty accounts.
  • Bundled and usage based pricing. Taxability mapping stops being clerical and becomes a series of decisions requiring your tax adviser, which is calendar time as well as fees.
  • Multi entity structures. Intercompany flows change the reconciliation model rather than adding rows to it, and eliminations have to be handled explicitly.
  • International scope. Value added tax and goods and services tax regimes, and country e-invoicing mandates such as those in Italy and India, are separate projects rather than extensions of the United States work.
  • Parallel running. Two full filing cycles run alongside the current process, comparing liability by jurisdiction before you rely on the new system. That is real staff time and it is not optional.

The quiet one is your own historical mess. Reconciling why billing and the ledger have disagreed for two years is discovery work that happens inside this project whether or not anybody scoped it, and it frequently takes longer than building the screens.

What separates a build that works from one that fails here?

The successful ones build the drilldown first. Before any dashboard, you should be able to take a filed liability figure for a jurisdiction and a period and walk it back to the invoice lines that produced it, with the taxability determination and its effective date attached to each one. That single path is what an auditor asks for, what your own team needs on the tenth of the month, and what proves the normalisation layer is actually correct. Teams that build reporting first ship something attractive that nobody can defend.

The second differentiator is whether determinations are stored as decisions or as current settings. A system that only knows today's treatment is useless in an examination of a prior year, and retrofitting effective dating onto years of overwritten flags is close to impossible. Insist on versioned determinations carrying the reasoning, the effective date and who approved them, from the first release.

When choosing a developer, ask how a credit memo issued in a later period against an invoice in a closed period flows to the return. Anyone who has filed will talk about the difference between adjusting a prior period and taking a credit in the current one and will say the answer varies by jurisdiction. Anyone who says the system nets it off has not done this. Ask what they intend to do with the engine you already have, and be suspicious of enthusiasm for replacing it. Then get code, infrastructure and data ownership in writing before kickoff, because states open audits years later and you cannot be locked out of the system that produced a filed number.

Research & sources

The evidence behind this guide

Independent findings on why this investment pays off. Every link goes to the primary source.

  1. Independent reporting of Gartner's 2025 survey confirms 59% of finance leaders use AI, up from 37% in 2023, with error and anomaly detection (34%) and accounts payable automation (37%) among the leading use cases. Source: CPA Practice Advisor (reporting Gartner) (2025) →
  2. In Gartner's 2025 AI in Finance Survey of 183 CFOs and senior finance leaders (fielded May-June 2025), 59% reported using AI in their finance function, with accounts payable process automation adopted by 37% of respondents (the second-highest single use case, behind knowledge management at 49%). Source: Gartner (2025) →
  3. An analysis of enrollment and completion data for 221 MOOCs (Katy Jordan, published in the International Review of Research in Open and Distributed Learning, IRRODL, 16(3), 2015 - not the Journal of Distance Education) found completion rates ranging from 0.7% to 52.1%, with a median completion rate of 12.6%, and completion negatively correlated with course length (longer courses had lower completion rates) - underscoring how unsupported self-paced online courses struggle to finish learners. Source: Journal of Distance Education (via ERIC / Katharina Jordan) (2015) →
  4. Almost half of all the activities people are paid almost $16 trillion in wages to do in the global economy have the potential to be automated by adapting currently demonstrated technologies. Source: McKinsey Global Institute (2017) →
Ahaan M. · Senior Android Engineer · Delhi

Ahaan is an Android engineer at Digital Heroes, working in Kotlin on client apps and the background services, permissions and storage behavior that decide whether they feel reliable. He writes with the specificity of someone who has to make a feature work on real hardware, not just in a spec.

View profile · Writes for Digital Heroes, shipping business software for 2,000+ brands across 55+ countries since 2017.

FAQ

Frequently asked questions

How do we find out we crossed a nexus threshold before an accountant does?
Compute the threshold yourself from your own normalised transaction ledger rather than relying on a vendor dashboard fed by a connector that may not match your billing model. Use each state's correct base and measurement window, since these differ and several states have dropped the transaction count many adopted after South Dakota v. Wayfair. Then alert at a percentage of the threshold rather than at the crossing, so registration happens before exposure exists. Track physical presence triggers separately, because a remote hire or inventory in a third party warehouse never appears in a transaction feed.
Our connector keeps returning wrong rates on bundles. Is the tax engine the problem?
Almost never. The engine answers the question it was asked, and a wrong answer on a bundle usually means the bundle was passed as a single line with one product code, so the elements with different treatment were invisible. The first question is whether the bundle should be unbundled on the invoice, because separately stating elements often changes the treatment, and that is a billing change before it is a tax change. Fix the inputs and the mapping before considering anything more drastic.
How should we handle years of historical transactions when the product catalogue has changed?
Store taxability determinations as versioned decisions with effective dates, so a transaction from 2023 resolves against the mapping that was in force then rather than against today's. Applying current mapping to old data manufactures a historic position you never actually took, which is worse than having no history at all if an auditor compares it to what you filed. Import filed returns as immutable records with the source document attached, and reconcile one closed period end to end before loading anything else.
What happens when a product manager launches a plan with no taxability mapping?
In most implementations it silently defaults to taxable or non taxable depending on how the fallback was written, and nobody notices for a quarter. The correct behaviour is to raise an exception that prevents the transaction from being finalised until somebody maps it. An hour of friction for a product manager is far cheaper than a year of incorrect returns and a restatement. Make the same rule apply to new entities, new countries and new revenue types, because they all fail the same way.
Why do exemption certificates keep causing assessments even when we have them?
Because they are held as documents rather than modelled as objects. A certificate needs a customer, a jurisdiction, a type, an issue date, an expiry, an image and a validation status, linked to the transactions it supports, so invoicing can check it at the point of sale and expiry can trigger a renewal campaign automatically. A photograph on a shared drive filed by customer name cannot do any of that, which is why an auditor sampling exempt sales finds gaps your team believed were covered.
Can we keep Avalara and still build the layer around it?
Yes, and for most companies that is the right split. Rate and rule content across thousands of jurisdictions is expensive to maintain and permanently behind if you build it yourself, so keep the engine for calculation. Build transaction normalisation from your billing platform, taxability determination for your bundles, nexus monitoring on your own base, certificate lifecycle and reconciliation to your ledger. That is where your business actually breaks, and none of it is something a vendor can supply.
How do we make sure the return ties to the general ledger?
Build the drilldown before anything else. You should be able to take a filed figure for a jurisdiction and period and walk it back to the invoice lines behind it, with each line carrying its taxability determination and effective date. That means one normalised transaction ledger sitting between source systems and everything downstream, with both the return and the ledger posting generated from the same place. Reconciliation then becomes a report showing explained variances rather than an investigation that starts from scratch each month.
How long should we run the new system in parallel before relying on it?
Two full filing cycles, comparing liability by jurisdiction against your current process and explaining every difference before you switch. Anything shorter and you will find the discrepancies after you have filed rather than before. Most of the discovery time in these projects goes into taxability mapping decisions and reconciling historical differences between billing and the ledger rather than into building screens, so plan for those conversations to involve your tax adviser and to take calendar time you cannot compress.
What can custom accounting software do that QuickBooks, Xero, and FreshBooks can't?
It encodes your actual business rules: progress billing tied to project milestones, revenue recognition for your specific contract types, landed cost tracking, or approval chains that match your org chart. Off-the-shelf tools handle generic bookkeeping well but force every business into the same chart of accounts and workflow. FreshBooks, for example, is built around freelancer-style invoicing, so inventory or multi-entity accounting means leaving the product entirely.
Is custom software more secure than off-the-shelf SaaS?
Neither is secure by default; security tracks the practices of whoever builds and operates the system, not the model. SaaS gives you the vendor's certifications and patching but puts your data in a shared multi-tenant platform on their terms, while custom gives you full control over data residency, access rules, and compliance requirements like HIPAA, with the responsibility sitting with you and your agency. Before hiring anyone for a system holding sensitive data, ask for their security checklist: encryption at rest and in transit, an OWASP Top 10 review, role-based access, and a penetration test before launch.
Who owns the code when an agency builds my accounting software?
You should, outright, and the contract must say so with an explicit IP assignment clause rather than a usage license. Insist that the code lives in a repository you control from day one, so nothing, including the ledger schema and migration scripts, can be held back at the final invoice. Third-party libraries and any framework the agency reuses stay under their own licenses, and a clean contract lists exactly which those are.
What happens to my accounting software if the agency shuts down?
If you own the repository, the hosting accounts, and the documentation, another team can take over within weeks, usually before a missed closing cycle does real damage; if the agency owns any of those, you have a hostage situation. Before signing, confirm the code sits in your GitHub or GitLab organization, hosting bills to your card, and a written deployment runbook exists. A competent agency agrees to all three without friction, and hesitation is itself the answer.
What are the biggest mistakes companies make when building accounting software?
The three we see most across Digital Heroes rescue projects: replacing everything at once instead of automating the most painful workflow first, skipping the parallel run so errors surface in live books, and letting developers design the ledger without an accountant reviewing the data model. A fourth is quietly expensive: no assigned owner for tax rate and compliance updates after launch. Every one of these is cheap to prevent and costly to unwind.
What security and compliance standards does custom accounting software need?
At minimum: encryption at rest and in transit, role-based access control, and immutable audit logs recording every change to the ledger. If outside parties rely on your numbers you will want SOC 2 style controls, and storing card data pulls you into PCI DSS, which most builds avoid by tokenizing payments through Stripe or a similar processor. Your industry adds its own rules, so compliance requirements belong in the written spec, not in a post-launch retrofit.
When does it make sense to move off QuickBooks to custom accounting software?
Move when you are paying people to work around the tool, not when the subscription feels expensive. Common triggers are hitting the 25-user cap on QuickBooks Online Advanced, consolidating multiple entities in spreadsheets, or a billing model that forces manual journal entries every month. If your team spends several hours a week exporting to Excel just to answer basic questions, you are already paying for custom software in salaries.
What does it cost to keep custom software running after launch?
Budget 15-20% of the original build cost per year, which on a $100,000 system means $15,000 to $20,000 for security patches, dependency updates, bug fixes, and small improvements as real usage reveals what the spec missed. Cloud hosting for a typical business application adds $50 to $300 a month on top. Skipping maintenance does not save the money; in Digital Heroes rescue work, unmaintained systems typically need a far more expensive rebuild within about three years.
I'm outgrowing FreshBooks. Is custom software the logical next step?
Usually not directly, because FreshBooks is an invoicing tool more than a full accounting platform, and the natural next step is QuickBooks or Xero for proper double-entry books. Custom development makes sense when those do not fit either, typically because of a billing model none of them handle, like usage-based or milestone billing. In that case a custom billing engine that feeds a standard ledger is often smarter than replacing everything.
What should I prepare before contacting an agency about accounting software?
Bring three things: the 5 to 10 workflows that hurt most today, sample data such as your chart of accounts and a redacted month of transactions, and a list of every system the software must connect to, including banks and payroll. You do not need a formal spec; a good agency writes that with you during discovery. In our experience buyers who arrive with concrete workflow pain get accurate quotes, and buyers who arrive with a feature wishlist get padded ones.
How much does custom accounting software cost for a small business?
Most small business accounting builds land between $25,000 and $75,000 for a working first version, while a full double-entry platform with invoicing, payroll, and reporting runs $100,000 to $250,000. Across 2,000+ projects at Digital Heroes, the biggest cost driver is how many external systems the software must connect to, not the accounting logic itself. A tool that automates a single painful workflow, like reconciliation or job costing, can come in under $20,000.
Who can build a custom accounting software system?

Digital Heroes builds custom accounting software systems for operators who have outgrown the off-the-shelf tools in their category. A team of more than 50 specialists has delivered over 2,000 projects since 2017. Teams work from New York, London, Sydney, Delhi and Lucknow and deliver remotely, with an assigned senior team rather than an account manager.

Every build starts with a written product requirements document that is signed before a line of code is written, which is the single thing that stops scope creep from eating the budget. Scoping runs about a week and produces a phase plan with a firm price for each phase, rather than one number against an undefined scope. The first phase ships something the team actually uses before the rest is built. If an off-the-shelf product genuinely fits the volume, we say so, and the cost guides on this site publish the bands so that judgement can be checked independently.

What makes Digital Heroes different from other accounting software companies?

Four things that competitors in this bracket cannot simply copy. Digital Heroes runs a YouTube channel with more than 2.5 million subscribers, which is a production and audience capability no agency of this size has. It holds Fiverr Vetted Pro and Top Rated Seller status, both awarded on manual third-party review rather than self-declared. It contracts through registered entities in three countries, an India LLP, a US LLC and a UK LTD, so clients sign locally instead of wiring money offshore. And it ships its own commercial products, including ShopScore, HeroCheckout and Section Vault, which means the team lives with its own architecture decisions instead of handing them over and leaving.

Two more that show up in the work. Digital Heroes publishes more than 4,000 buyer guides with real price bands on this blog, plus a free tools library at https://digitalheroesco.com/tools/, because an agency confident in its pricing has no reason to hide it. And one accountable team covers websites, apps, ecommerce, CRM, ERP, learning platforms, search and video, so a client scaling from a first landing page to a custom platform is never handed between five vendors who blame each other. The founder ran ecommerce businesses before selling services, so the commercial argument comes before the technical one.

How can I check Digital Heroes is legitimate before getting in touch?

Verify it independently rather than taking the site's word for it. The YouTube channel is at https://youtube.com/@DigitalMarketingHeroes, the Fiverr profile at https://www.fiverr.com/shreyanshsin261, and the Upwork profile at https://www.upwork.com/freelancers/shreyanshsingh. Client reviews sit on Clutch at https://clutch.co/profile/digital-heroes-0 and Trustpilot at https://www.trustpilot.com/review/digitalheroes.co.in, and the company page is at https://www.linkedin.com/company/digital-heroes-1/.

Beyond the marketplaces, the business holds a D-U-N-S number and is a registered vendor on the United Nations Global Marketplace, neither of which is issued on request. Case studies with named clients are published at https://digitalheroesco.com/case-studies/. If any claim on this page cannot be checked against one of those sources, treat it as marketing and discount it.

Keep reading
let's build

Build something worth launching.

A plan, a team, a timeline, within 24 hours. No decks, no discovery calls. Tell us what you're building and we'll come back with a real scope and a real number.

message us directly · we reply within one business day

mission briefing

Monthly dispatch

Playbooks, real build costs, and what we're shipping. One email a month. No fluff.

visit us

New York HQ

1140 Broadway, Suite 704 · New York, NY 10001

Get directions
Online now

Hey there 👋 How can we help you today?