A NSW strata levy notice carries a lot's contribution to either the administrative fund or the capital works fund, struck under the Strata Schemes Management Act 2015. To extract NSW strata levy notice to spreadsheet form across multiple notices, capture the lot number, strata plan number, fund type, levy amount, issue date, due date, unit entitlement share, and interest rate on overdue contributions on each row. Administrative fund and capital works fund contributions stay on separate lines, special levies track as their own row type, and NSW law requires owners to receive at least 30 days' notice for standard levies — reduced to 14 days for emergency repair levies.
That schema is the destination. The notice is the source document. Whether you hold one investment lot or thirty, run a strata committee's contribution roll, or do bookkeeping for clients with strata-heavy property files, the working artefact you actually need is a register: one consistent table of every contribution raised against every lot, with the columns that let you reconcile, audit notice timing, and aggregate at tax time. Below is the field set every NSW levy notice carries and the column it maps to in that register.
| Field on the notice | Spreadsheet column | Type |
|---|---|---|
| Lot number | LotNumber | integer |
| Strata plan number (e.g. SP123456) | StrataPlanNumber | text |
| Owners corporation name | OCName | text |
| Owner name | OwnerName | text |
| Service address | OwnerAddress | text |
| Fund the contribution applies to | FundType (Administrative / Capital Works / Special) | enum |
| Levy amount | LevyAmount | currency |
| Date issued | IssueDate | date |
| Due date | DueDate | date |
| Period's total budgeted fund contribution | PeriodBudgetedContribution | currency |
| Lot's unit entitlement | UnitEntitlement | integer |
| Aggregate scheme unit entitlement | AggregateUE | integer |
| Payment options | PaymentMethods | text |
| Interest rate on overdue contributions | InterestRate | percentage |
| Financial Hardship Information Statement present | HardshipStatementPresent | boolean |
A few of those columns deserve a moment's attention. FundType is enum-typed because each notice line is allocated to exactly one of three funds, and tracking the enum (rather than a free-text label) is what makes the funds split clean to aggregate later. UnitEntitlement and AggregateUE are paired because the per-lot contribution share is derived from their ratio. HardshipStatementPresent is a boolean rather than the statement's text because NSW now requires every levy notice to carry the statement, and the column doubles as a compliance audit signal: a missing statement is itself a flag worth investigating, particularly on notices from self-managed schemes.
Administrative Fund and Capital Works Fund as Separate Lines
Most NSW quarterly levy notices show two contribution lines, not one. The administrative fund line covers day-to-day operating expenses — building insurance, cleaning, gardening, strata management fees, lift servicing contracts, minor repairs — which the owners corporation has to fund continuously to keep the scheme running. The capital works fund line covers longer-horizon major works the OC accumulates for over years rather than months: repainting, lift replacement, fire safety upgrades, balustrade rectification, waterproofing remediation. Both contributions sit on the same notice and are struck at the same AGM under the contribution motions authorised by SSMA 2015 sections 81 and 83, but they answer different financial questions and they should be tracked as separate rows.
The cleanest register shape is one row per fund-line per notice: the same IssueDate, DueDate, and LotNumber repeated across two rows, with FundType distinguishing the administrative line from the capital works line, and LevyAmount carrying that line's dollar figure. The alternative — collapsing both onto one row with AdminAmount and CapitalWorksAmount columns side by side — looks tidy on a small portfolio, but it stops working as soon as special levies arrive (which appear on their own notice and don't fit a paired-column row), as soon as one fund is paid before the other, or as soon as a credit note adjusts a single fund line. One row per fund-line scales; the paired-column shape doesn't.
For investors holding strata as rental property, both administrative fund and capital works fund contributions are generally deductible as rental expenses in the year paid, on a cash basis rather than an accrual basis. The deductibility detail — what's claimable, what's apportioned, what's capital — belongs with the ATO's rental property guidance and a qualified accountant; the register's job is to capture the data accurately so the tax determination has clean inputs.
One terminology point catches readers with longer-running portfolios: older notices use the phrase sinking fund rather than capital works fund. The label changed when the Strata Schemes Management Act 2015 commenced; the underlying purpose is unchanged. When extracting historical notices into the same register as current ones, normalise both labels to Capital Works in the FundType column so longitudinal aggregation works without filter conditions on a legacy term.
The notice usually shows the period's total budgeted contribution for each fund alongside the per-lot share — sometimes labelled "annual contribution", sometimes "period contribution", sometimes just appearing in a header above the per-lot line. That total goes in PeriodBudgetedContribution. Treasurers reconcile that figure against the budget motion that authorised it at the AGM, which is how the contribution roll closes the loop back to the resolution. Investors mostly only need the per-lot amount, but the total still belongs in the register because the unit entitlement check in a later section uses it.
Special Levies as Their Own Row Type
A special levy is a contribution raised outside the regular quarterly schedule, typically by an OC resolution at an EGM (or sometimes at the AGM) when an unbudgeted expense exceeds what the existing contribution motion covers. The trigger is usually a major repair shortfall, a legal action, an insurance excess, or a top-up to the capital works fund after an unexpected works program. SSMA section 81(4) is the authority — the OC can raise additional contributions beyond those determined for the year, on the basis of a resolution at general meeting.
The notice itself looks familiar. Special levies are issued on their own notice (not bundled into a quarterly notice), and the notice carries the same fixed field set as a regular contribution notice: lot, plan, fund, amount, issue date, due date, unit entitlement, interest rate. The notice will state which fund the contribution applies to. Capital works fund special levies are by far the most common pattern; admin fund special levies happen but tend to be smaller and rarer.
Where the register has to diverge from the quarterly pattern is in the row type. Set LevyType = Special on the row, with LevyType = Quarterly as the default for regular notices. The reason is per-quarter aggregation: if a special levy gets summed into a quarterly total without the type flag, the quarter looks like a budget overrun even though the special levy is a separately-authorised event. Pivots, formulas, and any BI tool reading the register all benefit from being able to filter or group on LevyType cleanly. A treasurer presenting the contribution roll at committee meetings needs the special levies broken out for the same reason — the roll has to reconcile back to the resolutions that authorised each contribution, and the regular budget motion and the special levy resolution are different motions.
A few patterns that show up repeatedly. Special levies often carry longer due dates than quarterly contributions — 90 days plus is common, structured to give owners time to arrange financing. Larger special levies are frequently raised in instalments, each issued as its own notice and distinguished by IssueDate and DueDate (with a sequence number in Notes when the OC numbers them). And the most common special levy by a wide margin is a capital works fund top-up, because that is where unbudgeted works land.
For investors, special levies are usually deductible in the year paid like ordinary contributions. The exception worth flagging is the special levy raised for an improvement rather than a repair — that can be capital in nature, forming part of the lot's cost base rather than an immediate deduction. The line between repair and improvement is a question for the ATO's guidance and a qualified accountant on a specific case; capturing the special levy with LevyType = Special and a clear note about what triggered it leaves the tax determination running on accurate data.
The 30-Day and 14-Day Notice Rule
Per the NSW Government guidance on strata levies, finances and insurance, NSW law requires owners to be given at least 30 days' notice to pay standard strata levies; the period is reduced to 14 days for emergency repair levies. Section 83 of the Strata Schemes Management Act 2015 is the source rule, and it sits behind every quarterly notice and every special levy notice an OC issues.
The two windows exist because the underlying contributions serve different purposes. Standard levies fund the OC's routine operations — strata management, insurance, cleaning, gardening, planned capital works — and 30 days is the time the legislature allows owners to budget for them. Emergency repair levies address a serious and imminent threat to occupant safety — a lift safety failure, structural defect requiring immediate remediation, fire safety system failure. The shorter 14-day window exists because the underlying repair cannot wait for a standard cycle; the levy and the rectification work move on the same urgent footing.
For the register, the rule operationalises as a column triple. IssueDate and DueDate come straight off the notice; NoticeRuleApplied is an enum that takes either Standard or Emergency per the notice's own disclosure of which rule it was struck under. From those three, the register derives a NoticeDays column as DueDate - IssueDate, and from NoticeDays and NoticeRuleApplied together the register can flag two exception conditions:
NoticeRuleApplied = StandardandNoticeDays < 30— a non-compliant short notice for a routine contribution.NoticeRuleApplied = EmergencyandNoticeDays < 14— a notice claiming the emergency window but not actually meeting it.
Both conditions deserve attention on incoming notices. A non-compliant standard notice is usually a process defect on the OC's side — the strata managing agent's template generated the notice with the wrong send-out date, or the quarterly cycle slipped — and the right response is a written query asking the OC to correct the next cycle. The defect doesn't automatically invalidate the levy, but it weakens the OC's position if a contribution is later disputed at the NSW Civil and Administrative Tribunal, and a treasurer who lets non-compliant notices issue under the OC's name is creating exactly that exposure on the OC's behalf. An emergency-rule notice with NoticeDays < 14 is more serious — the rule explicitly fixes the floor at 14 days even for genuine emergencies, and a notice below that threshold is a written query to the OC for the resolution that authorised it.
One practical wrinkle: the notice should disclose which rule applies, and most strata managers' templates carry the disclosure either inline ("This is a 30-day notice issued under section 83 of the Strata Schemes Management Act 2015") or in a footer block. Self-managed schemes occasionally omit the disclosure entirely, leaving a treasurer or investor to infer the rule from the underlying resolution. The register column captures whichever rule the notice itself disclosed; a missing disclosure is a flag of its own, worth a NotesAdjustments entry recording that the rule had to be inferred and from which document.
Unit Entitlement and the Per-Lot Contribution Share
Every lot in a NSW strata scheme is allocated a unit entitlement on the registered strata plan, and that allocation is what determines the lot's share of contributions and its voting weight at OC meetings. The number is set when the strata plan is registered (or when it's later amended through a strata renewal or subdivision), and it's the same number on every notice issued for the life of the scheme until a re-allocation is registered. Aggregate unit entitlement is the sum across all lots in the scheme; a 24-lot scheme might have an aggregate UE of 1,000, distributed unequally across lots reflecting differences in floor area, position, or use. The lot's contribution share is LotUE / AggregateUE.
The per-lot levy on every notice comes out of one formula:
per-lot contribution = total budgeted fund contribution × (LotUE / AggregateUE)
That's what the OC's strata managing agent runs each time the budget motion at AGM is converted into a stack of quarterly notices. The register reproduces the formula as a check column.
A worked example using realistic numbers. Imagine a 24-lot scheme with aggregate UE of 1,000. One lot has UE of 50 — five percent of the scheme. The OC's annual administrative fund budget is $96,000, struck quarterly at $24,000 per quarter. The lot's quarterly admin contribution is therefore $24,000 × (50 / 1,000) = $1,200. If the next quarterly notice arrives showing $1,260, the register's check column flags the variance immediately. There are three plausible explanations for a variance, and each is worth investigating: the OC's budget may have been re-struck at a recent AGM; the unit entitlement may have been re-allocated through a strata renewal or subdivision affecting some lots; or the notice has an error in either the fund total or the per-lot calculation. All three matter — the first is information the investor should record, the second usually requires the contribution share recalculation to flow through to the register, and the third is a written query to the strata manager.
The columns the formula needs are already in the register from earlier sections: UnitEntitlement (the lot's UE, which is constant per lot until re-allocation), AggregateUE (the scheme's total UE), and PeriodBudgetedContribution (the total contribution for that fund for that period). The derived column is ExpectedContribution = PeriodBudgetedContribution × (UnitEntitlement / AggregateUE), compared against the actual LevyAmount from the notice. Any non-trivial variance — more than a rounding cent or two on the per-lot share — is a flag.
Three contexts in which the per-lot share legitimately changes. The most common is the OC re-striking the budget at AGM, which alters PeriodBudgetedContribution and flows through to every per-lot amount in the next cycle. The less common is a strata renewal or subdivision changing the UE allocation, which alters UnitEntitlement for the affected lots (and sometimes AggregateUE for the whole scheme) — these events are tracked publicly through the registered strata plan and are rare. The least common is a special-levy resolution that explicitly allocates the contribution by a formula other than UE — SSMA allows this in specific circumstances, and the resolution itself records the allocation method. Every other variance is an error worth surfacing.
For investors with one lot per scheme, the formula is mostly a sense-check that runs in the background. For investors with multiple lots in the same scheme, summing UE across the investor's lots gives the portfolio's voting weight at OC resolutions — useful adjacent information for any owner thinking about how the scheme's governance touches their portfolio.
Interest on Overdue Contributions
SSMA prescribes simple interest on overdue strata contributions at 10% per annum, unless the OC resolves at general meeting either to charge no interest or to charge at a lower rate. Most schemes default to the prescribed rate; a minority resolve to waive interest entirely (often in long-running owner-occupied schemes where neighbour relations weigh against debt-recovery posture) or to halve it. The notice itself usually discloses which rate applies, either in the payment-options block or in a footnote referenced from the levy line.
In the register, that disclosure becomes three columns. InterestRate is the rate as disclosed on the notice or recorded in the OC's standing resolution. OverdueDays is a derived column — today's date minus DueDate, conditional on the row representing an actual overdue balance (AmountPaid < LevyAmount). InterestAccrued is also derived, calculated as OutstandingBalance × InterestRate × OverdueDays / 365 for simple-interest schemes. None of those three is extracted directly from the notice; the inputs all are.
A few practical edge cases the register has to accommodate. Interest accrues from the day after the due date, not from the issue date — so OverdueDays is computed against DueDate + 1, not against DueDate itself. Part-payments reduce the principal the interest is calculated on, which means a row with a payment history needs AmountPaid and OutstandingBalance to update over time and the accrual formula needs to integrate over those changes rather than treat the unpaid balance as static. Treasurer contribution rolls handle this routinely because they're tracking payment history per row anyway; investor registers usually only need the accrual columns when the investor is themselves late on a notice.
The recovery context sits in the background of every overdue row. An OC can recover overdue contributions through NCAT or, for larger amounts, through the courts, with interest accruing throughout and forming part of what the OC is entitled to claim. The register is not a debt-recovery tool — that work happens through the strata manager or a debt-recovery specialist — but the InterestAccrued column is the input number for any escalation decision the committee has to make.
One inconsistency worth knowing about: a small number of strata managers' notice templates compound interest monthly rather than apply simple interest. Compounding is contractual rather than statutory — it has to flow from a specific OC resolution — so the register should match whatever the OC has actually resolved. If the resolution and the notice disagree, the resolution prevails, and the disagreement is itself worth a query to the strata manager.
Format Variation Across NSW Strata Managers
The schema is fixed by SSMA 2015 — the same fields appear on every compliant notice in the state — but the visual shape of the document is not. PICA Group, Strata Choice, Bright & Duggan, Netstrata, Jamesons, BCS Strata Management, Strata Plus, Premium Strata, and the self-managed-DIY notice each carry the same underlying data in a different layout, with different field labels, different ordering, and different conventions for where the small print sits. An investor with lots across three managers receives three differently-shaped PDFs every quarter that all map to the same register columns underneath.
A representative comparison across four common format conventions, looking at fields where the labelling drifts most:
| Field | PICA-style | Strata Choice-style | Netstrata-style | Self-managed-style |
|---|---|---|---|---|
| Lot identifier | Lot 12, SP123456 (combined header) | Lot No: 12 and Plan: SP123456 (separate columns) | Unit 12 / SP123456 (slash-delimited) | Often just Lot 12, plan number elsewhere |
| Fund line label | Administrative Fund Levy | Levy 1: Admin and Levy 2: Capital Works | General Fund Contribution | Quarterly Levy (no fund split, fund inferred) |
| Due date label | Due Date | Payment Due By | Pay By | Variable — sometimes just a date with no label |
| Interest rate disclosure | Inline in payment block | Footnote referenced from levy line | Separate schedule on second page | Often missing entirely |
A person doing manual entry has to learn the layout once per manager and then run it as muscle memory; that scales fine for a single-manager portfolio. A portfolio-wide register across multiple managers requires a normalisation step in addition to the entry — mapping each manager's labels back to the canonical column names from the register schema, so the underlying data lands in the right column regardless of which manager issued the notice. That mapping is what the multi-manager case actually needs, and it's the same shape of problem any multi-source financial document workflow runs into. The Australian multi-site utility bill PDF to Excel extraction walkthrough covers it for utility bills across providers; the principle transfers — same data, different layouts, one canonical schema as the destination.
Self-managed schemes deserve a specific note. Small schemes (typically under 20 lots, often considerably smaller) frequently manage themselves without a strata managing agent, and produce notices in Word or Excel templates that have evolved organically over years. The schema still applies — the OC is still operating under SSMA 2015 — but the labels, the ordering, and the field disclosures are even more idiosyncratic than the major managers'. Self-managed notices are also where the recently-required Financial Hardship Information Statement most often goes missing, and where the 30-day or 14-day notice rule disclosure is most likely to be implicit rather than explicit. A treasurer of a self-managed scheme transitioning to a portfolio register often finds the canonical schema useful as a template — a way of bringing the scheme's notice format into line with what the legislation actually requires.
Three Routes from Notice Stack to Spreadsheet
Three honest routes get notices into the register. Which one fits depends on portfolio size and how many strata managers issue across the lots, not on a default answer that suits every reader.
Route 1: manual entry into a template. Suitable for one to three lots from a single manager on a quarterly cadence. A workbook with the canonical columns already laid out, the unit entitlement check formula sitting in the ExpectedContribution column, and the 30-day audit derived from IssueDate, DueDate, and NoticeRuleApplied carries quarterly entry to under 10 minutes per notice — open the PDF, copy the fields, paste into the row, let the formulas verify the per-lot share. The failure mode is volume: at four-plus lots or two-plus managers, the format-juggling stops being worth the time.
Route 2: per-strata-manager portal CSV export. Most major NSW strata managers (PICA Group's CommunityHub, Strata Choice's owner portal, Bright & Duggan's PortalPlus, BCMax's owner login, and similar systems run by other managers) offer owner login portals that produce CSV or PDF statements of contributions for a custom date range. Within the manager's scheme, the export is consistent every time — same columns in the same order, no re-entry. The value is the elimination of manual entry. Three constraints worth flagging before relying on it. First, each portal exports only the schemes that manager runs, so an investor with lots across three managers needs three portal logins and three exports, then has to stitch them together. Second, portal retention windows vary — 12 to 24 months is typical for the export, longer for the PDF archive — so historical notices beyond the window have to come from the original PDF stack. Third, the portal's column set is fixed by the manager and may not match the canonical schema, which means a one-off mapping step before the export drops cleanly into the register. None of those constraints kills the route; they just shape what it's good for. Route 2 is the right answer for any investor whose lots all sit with one manager, regardless of how many lots that is.
Route 3: batch extraction across multi-format notice stacks. When the portfolio runs to four or more lots across two or more managers, route 1 is too slow and route 2 doesn't span managers. The notices arrive as a stack of PDFs in different layouts every quarter, and the work — the actual work that takes the time — is normalising those PDFs into a single spreadsheet with one consistent set of canonical columns regardless of which manager issued which notice. That normalisation step is exactly what AI-driven document extraction is built for. The user describes the canonical schema in a prompt — LotNumber, StrataPlanNumber, FundType, LevyAmount, IssueDate, DueDate, UnitEntitlement, AggregateUE, InterestRate, NoticeRuleApplied, with the data types and rules each column needs — points the tool at the multi-manager PDF stack, and the output is a single register in XLSX, CSV, or JSON with every notice's data in the right column regardless of source format.
That is the practical option for a portfolio-wide register, and it is where AI-powered invoice and document data extraction fits this workflow. The approach that fits — and what the specification this article is built around describes — is prompt-based: the canonical schema goes into the prompt rather than into a configured template, batches handle up to 6,000 files per session and individual PDFs up to 5,000 pages per file (which matters for treasurers handling a year's worth of notices in a single archive), and mixed formats (PDF native, scanned PDF, JPG, PNG) all feed into the same job. Output is consistent across every document in the batch — the same prompt, run against ten notices or a thousand, produces the same column structure. The investor or treasurer ends up with a single register; the manager-specific layouts disappear into the extraction step rather than into the user's workflow. Investors aggregating data across property-management platforms in other jurisdictions hit exactly this shape of problem, which is why the same tooling works for consolidating AppFolio, Buildium, and Yardi owner statements into a portfolio spreadsheet — the source documents differ, the multi-format normalisation problem is the same.
A compact route-fit summary:
- 1 to 3 lots, one manager — Route 1, manual entry into a template.
- Any portfolio entirely with one manager, regardless of lot count — Route 2, the manager's owner portal export.
- 4 or more lots across multiple managers — Route 3, batch extraction across the multi-format stack.
No single route is universally correct. Mixing routes is fine — a portfolio that grew through acquisitions might run Route 2 against the largest single-manager block and Route 3 across the long tail of single-lot holdings under other managers, with a treasurer's contribution roll for any scheme the reader is also on the committee of.
Investor Register vs Treasurer Contribution Roll
The investor's register and the treasurer's contribution roll start from the same source documents and aggregate differently because they answer different questions. The investor asks: what do I owe and what have I paid across my lots, and which of those payments is deductible in this tax year? The treasurer asks: for this scheme, what has the OC raised, what has each lot paid, what is outstanding, and what interest has accrued? Same notices in, two different artefacts out.
The investor register is a NSW strata investor levy tracker spreadsheet at portfolio scale. Rows are keyed on lot and notice — one row per fund-line per notice, which combined with the special-levy row type from earlier means a single notice may contribute one row (a special levy on one fund) or two rows (a quarterly notice with admin and capital works lines). Columns are the canonical schema set out earlier in the article, plus AmountPaid, PaymentDate, DeductibleYear, and Notes. The aggregations the investor actually runs are by-lot totals (cash flow per lot), by-tax-year totals on a cash basis (deductibility), and by-fund totals — the last of those is the cut a tax preparer often wants, because the administrative fund contributions and the capital works fund contributions sometimes warrant different attention even when both are deductible.
The treasurer's contribution roll is a different artefact entirely — the strata committee treasurer contribution roll spreadsheet that sits behind the OC's books. The standard column set looks like this:
| Column | Purpose |
|---|---|
LotNumber | Lot the contribution was raised against |
OwnerName | Owner at time of issue (changes with sale) |
LevyType | Quarterly or Special |
IssueDate | When the notice was issued |
DueDate | When the contribution was due |
AmountRaised | The contribution as raised on the notice |
AmountPaid | What has actually been received |
OutstandingBalance | AmountRaised - AmountPaid |
InterestAccrued | Per the interest column from earlier |
NotesAdjustments | Credit notes, waivers, payment plans, recovery actions |
The roll is the master ledger the treasurer presents at every committee meeting and reconciles to the OC's bank record. The AGM financial statements — the statement of contributions raised and received, the schedule of arrears, the interest claimed — are built directly from it.
Bookkeepers and accountants serving strata-heavy clients usually maintain the investor register on the client's behalf, and may also help self-managed schemes assemble a contribution roll where the scheme has no managing agent producing one. The same practices often handle a real estate agency's licensee trust account work, where the parallel artefact is the bank, cashbook and ledger three-way reconciliation that licensed agents must perform on rental and sales trust money under NSW, VIC and QLD agency legislation. A reader doing both roles — a treasurer who is also an investor with multiple lots in the same scheme — maintains both registers separately, with the same notices contributing rows to each.
One important parallel for treasurer readers. The contribution roll is only one half of the OC's financial picture. The other half is vendor-side accounts payable: the OC pays insurance premiums, strata management fees, repair contractors, garden maintenance, lift servicing, fire compliance, audit fees, and so on, and that AP ledger sits parallel to the contribution roll rather than inside it. A treasurer running a complete picture of the OC's finances handles both — the contribution roll on the receivables side and the AP ledger on the payables side — and the schema work covered in this article applies equally to either, with the field set adapted to the source document. The walkthrough on tracking vendor invoices and payments in property management covers the AP-side artefact for the same reader.
The schema this article describes is NSW-specific in its statutory anchors; the working pattern of notice-stack to canonical register is portable. VIC owners corporation fee notices and QLD body corporate contribution notices sit under different acts but produce the same shape of document and the same destination artefact. The closest international sibling is the UK residential service charge, where annual demands replace quarterly notices and the year-end reconciliation closes against authorised expenditure rather than against a quarterly budget motion — the UK residential service charge year-end reconciliation walkthrough is the reader's map there.
Extract invoice data to Excel with natural language prompts
Upload your invoices, describe what you need in plain language, and download clean, structured spreadsheets. No templates, no complex configuration.
Related Articles
Explore adjacent guides and reference articles on this topic.
Rent Invoice Data Extractor: Convert Rent PDFs to Excel
Extract rent invoice PDFs into Excel or CSV with tenant, property, rent period, charges, due dates, totals, and source references for review.
Telstra & Optus Business Bill PDF to Excel for Tax Apportionment
Convert Telstra, Optus, TPG, or Vodafone Business bill PDFs to Excel — one row per service — so AU sole traders apply ATO work-use apportionment per line.
Extract Panel Conveyancer Invoices to Excel
Turn a UK estate-agency panel invoice PDF into per-case Excel rows. Keep fee, VAT, branch, and reference fields ready for Xero, Sage, or QuickBooks.