Skip to content

How it works

Bank statements in. Income statement out.

Three movements. The AI calls every transaction it can, hands you the rest, and produces the income statement your firm needs at year-end. Statement PDFs are processed in-request and dropped — only the categorised rows persist, encrypted at the column.

taxup.app/lines
Year2027AccountAnyStateAnyBucketAny
  • Pinetree Studio · Invoice 3041

    +R 12,950.00

    12 MayConfirmed
  • Cell C

    −R 219.00

    10 MayAuto
  • Bolt Food · Greenpoint

    −R 348.20

    08 MayNeeds review
    Confirm
  • Momentum Health · monthly

    −R 2,640.00

    06 MayPossible deduction
4 of 52 lines

The flow, end-to-end

Three movements, one workspace.

Onboard a client once. Drop a year of statements. Open the income statement when it's done. No chart-of-accounts setup, no per-row mapping by hand, no ledgers to maintain.

One · Drop

Upload the client's statements.

Drag the PDFs your client emails you each month. We read statements from all eight local banks — FNB, Standard Bank, Nedbank, Absa, Capitec, Investec, TymeBank, Discovery Bank.

Each PDF is parsed in-request. We pull every line, the running balance, and the cycle window. Duplicate rows across overlapping statements get suppressed by a deterministic hash.

No bank logins, no scrapers, no open-banking pipes. The PDF buffer itself isn't persisted; only the derived rows live on, encrypted at column level.

taxup.app/drops

Manual drop

Hand-load this cycle's PDFs.

Pick files

Drag a digital PDF onto this card.

FNB · Standard Bank · Nedbank · Absa · Capitec · Investec · TymeBank · Discovery Bank.

Lined up · 3 PDFs

  • absa-cheque-apr-2026.pdf

    312 KB

    Read · 52 lines
  • fnb-business-mar-2026.pdf

    428 KB

    Read · 52 lines
  • tymebank-apr-2026.pdf

    204 KB

    Reading · 71%

Two · Categorise

The AI calls every line. You audit the edges.

Every transaction lands in a SARS-aligned bucket and the AI calls business or personal. Lines scored above the confidence bar go straight through. Anything below lands in a hand-back queue scoped to that client.

Confirm a row once and the rule sticks. Same merchant next month lands in the same bucket without re-asking. You can also write firm-wide rules of your own — anything from Eskom goes to Utilities — that outrank the engine.

Today's production engine is OpenAI gpt-4o on the Responses API. The categoriser package is LLM-first by design (re-architecture 2026-05-18); every verdict lands with reasoning visible on the row.

taxup.app/lines

Lines · Apr 2026 statement

52 lines

48 sorted4 over to you
  • Invoice 3041 · Pinetree

    +R 12,950.00

    13 MayServices Rendered
  • Yuppiechef

    −R 295.00

    11 MayGeneral Expenses
  • Cell C

    −R 219.00

    11 MayUtilities & Internet
  • Momentum Health

    −R 2,640.00

    09 MayMedical Aid
  • Invoice 3038 · Northwood

    +R 8,420.00

    06 MayServices Rendered
Engine sorted 48 · 4 left for you

Three · Report

The income statement, on demand.

Open the Income statement tab on any client. Three sections — Revenue, Operating expenses, Net profit — with every line tied back to the source transactions. Recalculates instantly when categorisations change.

Internal transfers, credit-card payments, drawings, loan repayments and personal spending are excluded by design. The bottom line is the pre-tax P&L your firm files from.

Behind the income statement sits the SARS-ready return: ITR12 for individuals and sole props, ITR14 for owner-managed companies — line by line, with provisional-tax (IRP6) periods and deadlines tracked alongside, and your practitioner's sign-off gating anything the validation layer flags.

Filing itself happens on your side — TaxUp walks the return into eFiling field by field with click-to-copy values, and you submit under your firm's SAIT- registered practitioner number, the way your firm already does. TaxUp generates the books; the accountant remains in the chair.

Bolt Food · Greenpoint

−R 348.20

08 May

64%
Meals · client

Why this category

Weekday lunch order. Could be a client meeting or just dinner — confidence under 70%, so we hand it to you.

ConfirmEditExclude

Pick n Pay · Tamboerskloof

−R 542.10

03 May

54%
Personal

2 of 4 visible · ~40s left

When things go sideways

The edge cases, surfaced.

Confidence below the bar

Anything the engine scores under the threshold lands in the hand-back queue with the AI's reasoning visible. One tap to accept, override, or skip.

A merchant we've never seen

Lands in the hand-back queue at zero confidence. Your call. Save the verdict and we apply it to every future row from that merchant.

A PDF won't read

Usually a scanned (not digital) statement. We point at the page that broke and let you re-upload a born-digital copy, no re-run charge.

Sanity flag

Positive amounts in expense buckets, round-number bank fees, very large outliers — flagged for review even if the category looks right.

Counterparty mis-grouping

Override once. The rule saves at the firm level (if you want) or the client level. Re-runs on existing rows when you ask.

Categoriser temporarily unavailable

If the LLM upstream errors, rows are tagged llm_unavailable so the hand-back queue separates real review work from infra hiccups.

Open a firm account.

Sixty seconds to set up. Pick a band when your first client is on the roster.