⚠ {{ appError }}
Loading MTH Accounts...
Welcome back
Sign in to your business accounts
{{ loginError }}
Forgot your password? Reset it
Your financial data is encrypted and stored securely
MTH Accounts
Reset your password
Enter your email and we'll send a reset link.
Reset link sent — check your email.
{{ resetError }}
← Back to sign in
MTH Accounts
Set new password
Choose a strong password — at least 12 characters.
Password updated! Sign in →
{{ resetConfirmError }}
Secure Your Account
We use an authenticator app to keep your accounts safe. This takes about 2 minutes.
Download an authenticator app first
Google Authenticator and Authy are free. Install one on your phone, then come back here.
Sign out instead
Loading your QR code...
Scan this with your authenticator app
Can't scan? Enter this code manually:
{{ totpSecret }}
Enter the 6-digit code from your app to confirm:
{{ totpError }}
⚠️ Save these backup codes somewhere safe
If you lose your phone, use one of these codes to log in. Each code works once only.
{{ code }}
One more step
Enter the 6-digit code from your authenticator app to continue
{{ totpError }}
Lost access to your app? Use a backup code
Let's Get You Set Up
Step {{ wizardStep }} of 8 — {{ wizardStepNames[wizardStep-1] }}
{{ wizardError }}
What's your business called?
This is how your name will appear on reports and communications.
{{ whyOpen ? '▾' : '▸' }} Why do we need this?
We use your business name on all reports, GST filings, and emails. You can change this later in Settings.
What type of business is it?
This affects how your tax is calculated.
🏢 Company (Ltd)
Registered with Companies Office
👤 Sole Trader
Self-employed, no company
🤝 Partnership
Two or more people
🛡️ Trust
Family or business trust
What's your IRD number?
This is used for GST filings and tax calculations. It's on your IRD letters or myIR account.
Not sure where to find it?
Log into myir.ird.govt.nz and it's shown on your profile page.
Are you registered for GST?
GST (Goods and Services Tax) is a 15% tax added to most sales. You must register if you earn over $60,000/year.
✅ Yes, I'm GST registered
I charge GST on my sales
❌ Not yet
Under $60,000/year
Add your main bank account
You'll upload your bank statements here each month. Don't worry — we'll walk you through it.
When does your financial year end?
Most NZ businesses use 31 March. This is when we close off your accounts for the year.
31 March
Standard NZ year end
Different date
I have a non-standard year end
What was in your bank account when you joined?
Enter the balance at the start of your current financial year. Your accountant can help if you're not sure.
Not sure? That's okay
Skip this for now and come back once you've checked with your accountant. We've flagged it on your to-do list.
You're all set!
Your accounts are ready to go. We've sent you a summary email. You can always update these details in Settings.
What's set up
{{ item }}
Skip this for now — I'll do it later
MTH Accounts {{ pendingCount }} to check
Accountant view is on — GL codes and technical details are visible
{{ pageTitle }}
This month
Quarter
Year to date
Your setup isn't quite finished
Add your opening bank balance to get accurate reports. Finish setup →
Money In This Month
${{ formatMoney(dashData.moneyIn) }}
{{ dashData.moneyInChange >= 0 ? '↑' : '↓' }} vs last month
Money Out This Month
${{ formatMoney(dashData.moneyOut) }}
{{ dashData.moneyOutChange <= 0 ? '↓' : '↑' }} vs last month
Profit This Month
${{ formatMoney(dashData.profit) }}
{{ dashData.profitChange >= 0 ? '↑' : '↓' }} vs last month
Need Your Attention
{{ pendingCount }}
Transactions unchecked
Recent Transactions
{{ tx.amount > 0 ? '↓' : (tx.classified ? '↑' : '?') }}
{{ tx.name }}
{{ tx.classified ? tx.category : 'Needs a category' }}
{{ tx.amount > 0 ? '+' : '' }}${{ Math.abs(tx.amount).toLocaleString('en-NZ', {minimumFractionDigits:2}) }}
{{ tx.date }}
Coming Up
{{ item.title }}
{{ item.date }}
{{ item.amount > 0 ? '$'+formatMoney(item.amount) : '—' }}
Your Bank Balances
{{ acc.name }}
{{ acc.number }}
{{ acc.balance >= 0 ? '$' : '-$' }}{{ formatMoney(Math.abs(acc.balance)) }}
This Year So Far
{{ fiscalYearLabel }}
{{ m.label }}
${{ formatMoney(m.value) }}
Tax outlook: Based on this year's profit, your estimated tax bill is around ${{ formatMoney(taxEstimate) }}. Talk to your accountant for a precise figure.
Need checking ({{ pendingCount }})
All transactions
Auto-categorisation rules
{{ selectedTxIds.length }} selected
Loading transactions...
DateDescriptionCategoryGSTAmountAction
No transactions found.
{{ formatDate(tx.transaction_date) }}
{{ tx.clean_description || tx.raw_description }}
{{ tx.raw_description }}
{{ tx.category_name }} Needs category
{{ tx.account_code }}
{{ tx.gst_applicable ? '15% GST' : 'No GST' }} {{ tx.amount > 0 ? '+' : '' }}${{ Math.abs(tx.amount).toLocaleString('en-NZ',{minimumFractionDigits:2}) }} ✓ Done
Split Transaction
{{ splitTx?.clean_description || splitTx?.raw_description }} — Total: ${{ formatMoney(Math.abs(splitTx?.amount || 0)) }}
Split total: ${{ formatMoney(splitLines.reduce((s,l)=>s+(parseFloat(l.amount)||0),0)) }} / ${{ formatMoney(Math.abs(splitTx?.amount||0)) }} — {{ splitBalanced ? '✓ Balanced' : '⚠ Must equal transaction total' }}
{{ splitError }}
Categorise {{ selectedTxIds.length }} transactions
Assign the same category to all selected transactions.
{{ bulkError }}
Rules run in priority order. First match wins. They auto-apply when you import transactions.
Loading...
No rules yet
Add a rule to automatically categorise transactions that match a description pattern.
#Rule nameMatch typePatternCategoryActive
{{ r.priority }} {{ r.rule_name }} {{ r.match_type }} {{ r.match_pattern }} {{ r.gl_account?.plain_english_name || r.gl_account?.accountant_name || '—' }} {{ r.is_active ? 'On' : 'Off' }}
{{ editingRule ? 'Edit Rule' : 'Add Auto-Categorisation Rule' }}
Active
Inactive rules are saved but not applied
{{ ruleModalError }}
Save this as a rule?
Next time we see a transaction like "{{ autoRuleTx?.clean_description || autoRuleTx?.raw_description }}", should we automatically sort it the same way?
Rule created{{ autoRuleApplied > 0 ? ' — ' + autoRuleApplied + ' existing transaction' + (autoRuleApplied === 1 ? '' : 's') + ' auto-sorted!' : ' — future matches will be auto-sorted!' }}
Categorise Transaction
{{ categorisingTx?.clean_description || categorisingTx?.raw_description }}
Amount: {{ categorisingTx?.amount > 0 ? '+' : '' }}${{ Math.abs(categorisingTx?.amount||0).toLocaleString('en-NZ',{minimumFractionDigits:2}) }}
{{ categoriseError }}
Your accounts show
${{ formatMoney(Math.abs(reconSystemBalance)) }}
Calculated from all transactions
Last reconciled balance
${{ reconLastBalance ? formatMoney(reconLastBalance) : '—' }}
{{ reconLastBalance ? 'Enter your bank statement balance to check' : 'Not yet reconciled' }}
Monthly Checks
Loading...
No periods found. Import some transactions first.
{{ p.reconciliation_status==='reconciled' ? '✓' : p.reconciliation_status==='in_progress' ? '…' : '○' }}
{{ p.label }}
{{ p.is_locked ? '🔒 Locked' : '' }}
{{ p.reconciliation_status==='reconciled' ? 'Checked' : p.reconciliation_status==='in_progress' ? 'In progress' : 'Not started' }}
Lock {{ lockPeriodTarget?.label }}?
Locking prevents any changes to transactions in this period. You can unlock it later in accountant mode.
Confirm with your authenticator code
{{ lockError }}
Unlock {{ lockPeriodTarget?.label }}?
Think carefully — unlocking allows changes to a closed period which may affect your reports and tax filings.
Confirm with your authenticator code
{{ lockError }}
Check {{ reconSelectedPeriod?.label }}
Compare your bank statement with what's in the system.
${{ formatMoney(reconSystemBalance) }}
{{ Math.abs(parseFloat(reconStatementBalance) - reconSystemBalance) < 0.01 ? '✓ These match!' : '⚠ Difference: $' + formatMoney(Math.abs(parseFloat(reconStatementBalance) - reconSystemBalance)) }}
Check for missing or duplicate transactions.
{{ reconError }}
Next GST filing due {{ gstNextDue.due_date_label }}
This covers the {{ gstNextDue.period_label }} period.{{ gstNextDue.box13_net_gst ? ' Estimated amount: $' + formatMoney(gstNextDue.box13_net_gst) + '.' : '' }} We'll remind you 14 days before.
Loading...
{{ gstCurrentPeriod ? gstCurrentPeriod.period_label : 'No open period' }}
{{ gstCurrentPeriod.status_label }}
5
Total Sales (incl. GST)
All money you received
${{ formatMoney(gstCurrentPeriod.box5_total_sales || 0) }}
6
Zero-rated sales
Exports and similar
${{ formatMoney(gstCurrentPeriod.box6_zero_rated || 0) }}
9
GST on your sales
Tax you collected
${{ formatMoney(gstCurrentPeriod.box9_output_tax || 0) }}
11
GST on your purchases
Tax you can claim back
${{ formatMoney(gstCurrentPeriod.box11_input_tax || 0) }}
Box 13 — {{ (gstCurrentPeriod.box13_net_gst || 0) >= 0 ? 'Amount to pay IRD' : 'Refund from IRD' }}
GST on sales minus GST on purchases
${{ formatMoney(Math.abs(gstCurrentPeriod.box13_net_gst || 0)) }}
No open GST period found.
Filing History
No GST periods yet.
PeriodDueAmountStatus
{{ g.period_label }} {{ g.due_date_label }} ${{ formatMoney(Math.abs(g.box13_net_gst || 0)) }} {{ g.status_label }}
File GST Return
{{ gstCurrentPeriod?.period_label }} — Amount: ${{ formatMoney(Math.abs(gstCurrentPeriod?.box13_net_gst || 0)) }}
{{ gstFileError }}
Loading...
Estimated profit this year
${{ formatMoney(taxOutlookData.projected_profit || 0) }}
Based on transactions so far
Estimated tax this year
${{ formatMoney(taxOutlookData.estimated_tax || 0) }}
28% company tax rate
Already paid
${{ formatMoney(taxSchedule.total_paid || 0) }}
{{ taxSchedule.instalments?.filter(i=>i.status==='paid').length || 0 }} of {{ taxSchedule.instalments?.length || 0 }} instalments
{{ taxSchedule.plain_english }}
Payment Schedule
No provisional tax instalments scheduled yet.
{{ p.status==='paid' ? '✓' : p.instalment_number }}
{{ p.plain_label }}
Due {{ p.due_date_label }}
${{ formatMoney(p.amount_due) }}
{{ p.status==='paid' ? 'Paid' : p.is_overdue ? 'Overdue' : 'Upcoming' }}
⚠ {{ taxSchedule.uomi_note }}
{{ taxSchedule.disclaimer }}
Record Tax Payment
{{ taxPayInstalment?.plain_label }}
{{ taxPayError }}
Loading...
Total value (at cost)
${{ formatMoney(assetsSummary.total_cost || 0) }}
Current book value
${{ formatMoney(assetsSummary.total_book_value || 0) }}
Depreciation this year
-${{ formatMoney(assetsSummary.total_depreciation_ytd || 0) }}
No assets yet. Add equipment or vehicles your business owns.
ItemPurchasedMethodCostBook valueDepn this year
{{ a.asset_name }}
{{ a.asset_type }}
{{ formatDate(a.purchase_date) }} {{ a.method_label }} ${{ formatMoney(a.cost_excl_gst) }} ${{ formatMoney(a.book_value) }} -${{ formatMoney(a.depreciation_ytd || 0) }}
{{ editingAsset ? 'Edit Asset' : 'Add Equipment or Vehicle' }}
Is this a vehicle?
Used for FBT calculations
{{ assetModalError }}
Financial Reports
{{ r.title }}
{{ r.desc }}
Tax Reports
{{ r.title }}
{{ r.desc }}
{{ activeReport.title }}
{{ reportData.meta.period_label }}
Loading report...
{{ reportError }}
No categorised transactions yet
This report will populate once you categorise your transactions. Go to Transactions and assign categories to your bank entries.
{{ accountantMode ? section.label : section.plain_label }}
{{ accountantMode ? line.accountant_name : line.plain_name }} {{ line.account_code }} ${{ formatMoney(line.amount) }}
Total {{ section.plain_label }}${{ formatMoney(section.total) }}
{{ reportData.totals.profit_before_tax >= 0 ? 'Net Profit' : 'Net Loss' }}
{{ reportData.totals.profit_before_tax >= 0 ? '' : '-' }}${{ formatMoney(Math.abs(reportData.totals.profit_before_tax)) }}
Gross profit margin: {{ reportData.totals.gross_profit_margin }}% · Estimated tax: ${{ formatMoney(reportData.totals.estimated_tax) }}
No balance sheet data yet
This report requires categorised transactions and opening balances. Categorise your transactions to see figures here.
{{ section.plain_label }}
{{ accountantMode ? line.accountant_name : line.plain_name }} {{ line.account_code }} ${{ formatMoney(Math.abs(line.amount)) }}
Total {{ section.plain_label }}${{ formatMoney(Math.abs(section.total)) }}
Net Assets
${{ formatMoney(reportData.totals.net_assets) }}
No assets recorded yet
Add equipment and vehicles in the Equipment & Vehicles page to see depreciation here.
ItemMethodRateCostBook ValueDepn This Year
{{ a.asset_name }}
{{ a.asset_type }}
{{ a.method_label }} {{ Math.round((a.depreciation_rate || 0) * 100) }}% ${{ formatMoney(a.cost_excl_gst) }} ${{ formatMoney(a.book_value) }} -${{ formatMoney(a.depreciation_ytd || 0) }}
Total ${{ formatMoney(reportData.total_book_value || 0) }} -${{ formatMoney(reportData.total_depreciation_ytd || 0) }}
No data yet
Categorise your transactions to populate the trial balance.
AccountCodeBalance
{{ accountantMode ? a.accountant_name : a.plain_english_name }} {{ a.account_code }} ${{ formatMoney(Math.abs(a.balance || 0)) }}
Fringe Benefit Tax Estimate

FBT applies to vehicles and low-interest loans provided to shareholders or employees. Click below to calculate based on your recorded assets.

FBT Result
${{ formatMoney(fbtResult.total_fbt_payable || 0) }}
{{ fbtResult.plain_english }}
{{ line.asset_name || (line.type === 'shareholder_loan' ? 'Shareholder loan' : 'Other') }} ${{ formatMoney(line.fbt_payable || 0) }}
Dividend Modelling

Model the tax impact of paying a dividend to shareholders, including imputation credits.

Dividend Tax Model
{{ key.replace(/_/g,' ') }} ${{ formatMoney(val) }}
{{ dividendResult.plain_english }}
{{ dividendResult.disclaimer }}
Year-End Close

Close off the financial year. This locks all periods, calculates final tax, and sets up the new year.

Pre-Close Checklist
{{ check.passed ? '✅' : '⚠️' }}
{{ check.label }}
{{ check.detail }}
Confirm with your authenticator code
{{ eoyError }}
Resolve all checklist items before closing the year.
🎉
{{ eoyResult.message }}
✓ {{ step }}
No budget set yet
Click "Edit budgets" to set monthly targets for each income and expense category.
Total Budget
${{ formatMoney(reportData.total_budget) }}
Total Actual
${{ formatMoney(reportData.total_actual) }}
Variance
{{ reportData.total_variance >= 0 ? '+' : '' }}${{ formatMoney(Math.abs(reportData.total_variance)) }}
{{ reportData.total_variance >= 0 ? 'Under budget' : 'Over budget' }}
Category {{ m }} Total
Edit Budget — FY {{ budgetFiscalYear }}
Loading...
Category {{ m }} Annual
{{ budgetSaveError }}
No cash flow data available yet. Categorise transactions to generate this report.
No equity data available. Ensure your equity accounts have balances.
ItemAmount
{{ accountantMode ? line.accountant_name : line.plain_name }} {{ line.amount >= 0 ? '' : '-' }}${{ formatMoney(Math.abs(line.amount)) }}
Closing Equity {{ reportData.closing_equity >= 0 ? '' : '-' }}${{ formatMoney(Math.abs(reportData.closing_equity)) }}
No shareholder transactions yet
Transactions will appear here once you have transactions categorised to the Drawings (3400) or Shareholder Loan (2210) accounts.
Total Drawings
${{ formatMoney(reportData.total_drawings || 0) }}
Money taken from the business
Shareholder Loan
${{ formatMoney(Math.abs(reportData.net_position || 0)) }}
{{ (reportData.net_position||0) > 0 ? 'Company owes you' : 'You owe the company' }}
Drawings This Period
No drawings recorded this period.
DateDescriptionAmount
{{ formatDate(d.transaction_date) }} {{ d.raw_description }} -${{ formatMoney(Math.abs(d.amount)) }}
{{ reportData.meta?.disclaimer }}
{{ reportData.meta?.plain_heading || activeReport.title }}
This report is available but doesn't have a custom view yet. Data has been loaded successfully.
Money In
Money Out
What You Own
What You Owe
Equity
Loading...
No categories in this section yet.
Category name GL Code GST System
{{ accountantMode ? c.accountant_name : c.plain_english_name }}
{{ c.plain_english_name }}
{{ c.account_code }} {{ c.gst_applicable ? '15% GST' : 'No GST' }} System
{{ editingCategory ? 'Edit Category' : 'Add Category' }}
GST applies to this category
{{ categoryModalError }}
Accountant mode only
Manual adjustments are hidden from standard users. Use these to correct errors or post year-end entries.
Loading...
No manual adjustments yet.
DateDescriptionTypeAmountPosted
{{ formatDate(j.entry_date) }} {{ j.description }} {{ j.entry_type }} ${{ formatMoney(j.total_amount || 0) }} {{ j.is_posted ? 'Posted' : 'Draft' }}
New Manual Adjustment
Journal Lines (Debits must equal Credits)
Debits: ${{ formatMoney(journalDebits) }} · Credits: ${{ formatMoney(journalCredits) }} · {{ journalBalanced ? '✓ Balanced' : '⚠ Not balanced' }}
{{ journalError }}
Business Details
{{ settingsSaveSuccess }}
{{ settingsSaveError }}
GST Settings
GST settings saved.
{{ gstSettingsError }}
Tax Agent Details
If you use a tax agent, enter their details here. This information is used on your tax filings.
Tax agent settings saved.
Do you have a tax agent?
{{ taxSettingsError }}
Display & Access
{{ displaySaveMsg }}
Show accountant details
Reveals GL codes, journal entries, and technical fields
Dark mode
Switch to a darker colour scheme
Date format
How dates are shown throughout the app
Security
{{ pwSuccess }}
Two-factor authentication
Required for all accounts — currently active
Active
Change password
{{ pwError }}
Active sessions
Devices currently signed in
Team Members
Loading...
{{ u.name.split(' ').map(n=>n[0]).join('').toUpperCase() }}
{{ u.name }}
{{ u.email }}
Last login: {{ formatDate(u.last_login) }}
{{ u.role==='tenant_admin'?'Business Owner':u.role==='accountant'?'Accountant':u.role==='super_admin'?'Super Admin':'Read Only' }} 2FA ✓ No 2FA
Edit Team Member
{{ editingUser?.name }} — {{ editingUser?.email }}
Confirm with your authenticator code
{{ editUserError }}
Remove Team Member?
This will permanently remove {{ deletingUser?.name }} ({{ deletingUser?.email }}) from your account.
Confirm with your authenticator code
{{ deleteUserError }}
Invite Team Member
Confirm with your authenticator code
Inviting team members requires your 6-digit code.
{{ inviteError }}
{{ inviteSuccess }}
Notification Preferences
{{ notifSaveMsg }}
{{ n.label }}
{{ n.desc }}
Bank Accounts
No bank accounts yet. Add one to start importing transactions.
🏦
{{ a.account_nickname }}
{{ a.bank_name }} · {{ a.account_type }}
${{ formatMoney(a.current_balance ?? a.opening_balance ?? 0) }}
{{ editingAccount ? 'Edit Account' : 'Add Bank Account' }}
Confirm with your authenticator code
Bank account changes require your 6-digit code.
{{ accountFormError }}
Opening Balances
Enter balances as at the start of your current financial year. Your accountant can provide these from your last set of accounts.
Loading...
Total debits: ${{ formatMoney(obTotalDebits) }} · Total credits: ${{ formatMoney(obTotalCredits) }} · {{ Math.abs(obTotalDebits-obTotalCredits)<0.01 ? '✓ Balanced' : '⚠ Difference: $'+formatMoney(Math.abs(obTotalDebits-obTotalCredits)) }}
Confirm with your authenticator code
{{ obSaveError }}
Opening balances saved.
Tax Rate Tables
Rates review due
The NZ Budget has been released. Please check all rates are up to date.
Loading...
CategoryKeyValueEffective fromSource
{{ r.rate_category?.replace(/_/g,' ') }} {{ r.rate_key }} {{ r.rate_value }} {{ formatDate(r.effective_from) }} IRD →
{{ editingRate ? 'Update Rate' : 'Add Rate' }}
{{ rateModalError }}
Import Bank Statement
Upload a CSV file from your bank
You haven't added a bank account yet. Go to Settings → Bank Accounts to add one first.
How to download your CSV
  1. Log into your online banking
  2. Go to your account transactions
  3. Choose "Export" or "Download"
  4. Select CSV format and the date range you want
  5. Save the file and upload it below
Drop your CSV here or click to browse
{{ importFile.name }}
CSV, TXT or OFX — max 10MB
{{ importError }}
Import complete!
{{ importResult.plain_english }}
{{ importResult.imported }}
Imported
{{ importResult.classified }}
Auto-sorted
{{ importResult.needs_review }}
Need review