← Our work

Case study · Tact · Tax compliance

A firm's whole SARS compliance picture, on one screen.

Pragma Konsult's accountants used to check clients' tax compliance by signing into SARS eFiling, one client at a time. Tact does the checking for them, across the whole portfolio, and keeps it current. A working prototype was in their hands in two weeks.

Who it's for
Pragma Konsult, accountants in Hermanus and Kleinmond
Our role
Product, engineering, hosting and support
Built
May 2026, still growing
Status
In production at the firm
The Tact dashboard: taxpayer counts, compliance by area and compliance over time, shown with sample data

No more logging in client by client.

2 weeksto a working prototype in the firm's hands
~1,000taxpayers in a single practitioner portfolio
0eFiling logins per client to check their status
7 daysat most between checks on any client

Compliance lives behind a thousand logins.

An accounting firm is answerable for its clients' standing with SARS. SARS knows each client's status, but it only shows it one taxpayer at a time.

One login per client

SARS shows a client's compliance status one taxpayer at a time: sign in, open the taxpayer, walk the menus to their compliance profile, read it, go back. Across hundreds of clients, nobody can do that every week.

Status changes quietly

A late return or an unpaid balance can turn a client non-compliant between checks. Unless someone looks, the firm doesn't know, and neither does the client.

Manual work caps growth

Routine checks that grow with every new client were holding the firm back. More clients meant more logins, not more advice.

Learned on the real system, at real scale.

Software built on someone else's website lives or dies by the details of that website. So we learned eFiling with the people who use it, shipped early, and tested every assumption against the live portfolio.

  1. 1Discover

    eFiling as the firm uses it

    We worked through eFiling in guided live sessions on a real practitioner login and wrote down SARS's own words for everything: Login, Portfolio, Taxpayer, My Compliance Profile. The code uses the same words the accountants do.

  2. 2Ship

    A thin slice on day one

    The first day ended with one compliance status read from SARS and shown on a page. Within two weeks the firm had a working prototype to use and react to, before any of the harder work began.

  3. 3Measure

    Checked against the real portfolio

    A probe of a live practitioner portfolio showed the first version reading 8 taxpayers out of about 1,000: SARS hides a practice's clients in a separate paginated list. We found it on real data, fixed it, and redesigned runs for that scale.

Who's compliant, who isn't, and since when.

Tact reads each client's compliance profile from SARS and puts the whole portfolio in one place, so the firm starts from the clients who need attention.

Every client, one table

One row per taxpayer: the overall verdict, then returns, registration and debt, each marked compliant or not. Search it, filter any column, and see when each row was last checked.

The picture at a glance

Headline counts, non-compliance by area, and a chart of compliance over time, so the firm sees whether its book of clients is getting healthier week by week.

Kept current on its own

A scheduled run checks the portfolio every week. A Refresh button runs one now, and any single client can be re-checked from its row.

Switches on what SARS needs

Some clients have never had SARS's compliance service activated. Tact activates it and confirms the client's profile, then reads the result on the next run.

Export for the rest of the work

Download the table, or just the filtered view, as Excel or CSV for follow-ups, client letters or the partners' meeting.

Follows the client list

Clients removed from eFiling drop off the table automatically. Their history stays, so a returning client picks up where they left off.

Under the hood.

SARS offers no way for software to ask for this. The work is reading a large, changing government website reliably, at a thousand clients, without ever putting a client's SARS profile at risk.

  • Python
  • Playwright
  • Flask
  • APScheduler
  • SQLite
  • Fernet encryption
  • Docker
  • Kubernetes · Helm
  • GitLab CI

Signs in the way a person does

eFiling has no API for this, so Tact drives a real browser. Automated form filling didn't reliably get past SARS's sign-in page, so Tact types real keystrokes and waits for the page to accept each one. When a saved session expires mid-run, it signs in again and carries on.

Through the front door

Compliance profiles live in an older part of eFiling with its own session. Tact always arrives through the main dashboard, as a person would, because jumping straight there lands on a second login page every time.

Bounded runs at a thousand clients

Checking every client every run would take about three hours and risk a lockout. So each run lists the whole portfolio, a quick pass, then checks only clients not seen in seven days. The first pass works through the backlog, and later runs are short.

Careful with a live system

Tact is acting on real taxpayers' SARS profiles. SARS uses the same button for Activate and De-activate, so Tact matches the exact label and never switches a client's service off.

Credentials locked per firm

eFiling passwords are encrypted at rest. Every query is scoped to the account that owns the login, and sign-up needs an invite code, so one firm can never see another's clients.

History, not just the latest

Every check is stored as a dated snapshot and never overwritten. The dashboard shows when Tact checked and when SARS last recalculated, so a stale status is visible, not hidden.

Small team, written down.

Each hard-won lesson about eFiling is recorded as a decision with its reasons, so the next change doesn't relearn it. Every release ships the same way, from a tag to the cluster.

  1. 1CheckEvery source file compiles
  2. 2BuildOne container, version baked in
  3. 3DeployKubernetes with Helm, on each tagged release
100+commits, May to October 2026
8architecture decision records
158automated tests
12tagged releases

In use, and asking for more.

The firm uses Tact in production. Now the practitioners are telling us what to build next, and it reaches past the office to the firm's own clients.

Alerts, not just a table

An email to the practitioner when a client turns non-compliant after an automatic check, and returns and debt broken down by tax type.

Deadlines from the practice system

Client details imported from Xero Practice Manager, to work out each client's VAT, payroll, provisional tax and CIPC deadlines.

Reminders to the firm's clients

Monthly messages telling each client what's due and when, by email first, with WhatsApp under investigation. Later, a portal where clients see their own status.

“Dean and Regardt helped us build a prototype within two weeks. They understood the problem deeply and in our first prototype iteration, we could already see massive savings on tasks that have historically been blockers to scaling our business.”
Venco KrugerAssociate General Accountant, Pragma Konsult

Is someone on your team logging in client by client?

Thirty minutes with Regardt or Dean. You'll leave with the user problem to solve first, a first release scope and an initial budget range.

Book a free call