British Columbia (BC) Provincial Tax Calculator

Calculate your provincial taxes in British Columbia with our authoritative and accessible tax calculator.

Tax Inputs

Provincial tax is computed using the 2026-commissioned rate of 5% for consistent comparability.

How to use this calculator

This calculator helps residents of British Columbia estimate their provincial tax liability so they can plan savings, investments, or payroll withholding with confidence.

Enter your annual taxable income in Canadian dollars and tap Calculate; the interface applies the published 5% provincial rate, delivers the after-tax balance, and shows a monthly breakdown.

Methodology

The tool applies a flat 5% provincial rate for illustrative clarity. It mirrors the original single-rate logic that multiplies income by the rate, subtracts the result from the gross income, and then divides the tax by 12 for the monthly view.

Tutti i calcoli si basano rigorosamente sulle formule e sui dati forniti dalle fonti ufficiali.

Data Source and Detail

All calculations align with the 2023 British Columbia provincial tax rate disclosures published by the Canada Revenue Agency. The CRA remains the authority for brackets, thresholds, and effective dates.

The Formula Explained

The formula driving this calculator is below; it is displayed here for transparency and reference.

\( \text{Provincial Tax} = \text{Income} \times 0.05 \)

Glossary of terms

  • Income: Annual taxable income before deductions.
  • Tax Rate: A fixed 5% provincial percentage.
  • Provincial Tax: Amount paid to the provincial government.

How it works: Step-by-step example

For an income of $50,000 and the 5% rate, the calculation is:

\( \text{Provincial Tax} = 50,000 \times 0.05 = 2,500 \)

The remaining income after the provincial portion is $47,500.

Frequently asked questions

What is the provincial tax rate in British Columbia?

The calculator hard-codes a representative 5% rate, but the actual rate varies by bracket and is updated annually. Always consult the CRA publications for the exact rate that applies to your bracket.

How is the tax calculated?

The calculator multiplies the presented annual income by the 5% rate and reports both the tax and what remains after the provincial payment.

Can this calculator be used for other provinces?

No, this one-page tool is specific to British Columbia's provincial rate.

How often are the tax rates updated?

Tax rates are typically refreshed annually. Bookmark this page or check the CRA site to ensure you have the latest data.

Where can I find more information on provincial taxes?

Visit the Canada Revenue Agency's official website for definitive guidance, worksheets, and downloadable resources.

Formulas

Provincial tax (flat rate):

\( \text{Provincial Tax} = \text{Income} \times 0.05 \)

The monthly tax is the annual tax divided by 12.

Citations

official CRA website — canada.ca · Accessed 2026-01-19

https://www.canada.ca/en/revenue-agency.html

Changelog
  • 0.1.0-draft — 2026-01-19: Initial audit spec draft generated from HTML extraction (review required).
  • Verify formulas match the calculator engine and convert any text-only formulas to LaTeX.
  • Confirm sources are authoritative and relevant to the calculator methodology.
Verified by Ugo Candido Last Updated: 2026-01-19 Version 0.1.0-draft
Version 1.5.0
+ round2(safe).toFixed(2); } } function parseInputs() { return { income: parseFloat(els.annualIncome.value) }; } function validate(inputs) { const errors = []; if (!Number.isFinite(inputs.income) || inputs.income < 0) { errors.push('Income must be 0 or greater.'); } return { ok: errors.length === 0, errors }; } function compute(inputs) { const provincialTax = inputs.income * TAX_RATE; const incomeAfterTax = Math.max(0, inputs.income - provincialTax); const monthlyTax = provincialTax / PERIODS; const schedule = []; let cumulative = 0; for (let i = 1; i <= PERIODS; i += 1) { cumulative += monthlyTax; schedule.push({ month: i, monthly: round2(monthlyTax), cumulative: round2(cumulative) }); } return { provincialTax: round2(provincialTax), incomeAfterTax: round2(incomeAfterTax), monthlyTax: round2(monthlyTax), schedule }; } function format(outputs) { return { provincialTax: formatCurrency(outputs.provincialTax), incomeAfterTax: formatCurrency(outputs.incomeAfterTax), monthlyTax: formatCurrency(outputs.monthlyTax), effectiveRate: (TAX_RATE * 100).toFixed(2) + '%', schedule: outputs.schedule }; } function renderErrors(errors) { if (!errors || errors.length === 0) { els.errorBox.style.display = 'none'; els.errorBox.textContent = ''; return; } els.errorBox.style.display = 'block'; els.errorBox.textContent = errors.join(' '); } function render(formatted) { els.provincialTax.textContent = formatted.provincialTax; els.incomeAfterTax.textContent = formatted.incomeAfterTax; els.monthlyTax.textContent = formatted.monthlyTax; els.effectiveRate.textContent = formatted.effectiveRate; currentSchedule = formatted.schedule; if (els.scheduleWrap.style.display === 'block') { renderTable(currentSchedule); } els.downloadCsv.disabled = currentSchedule.length === 0; } function renderTable(schedule) { els.scheduleBody.innerHTML = ''; const frag = document.createDocumentFragment(); for (const row of schedule) { const tr = document.createElement('tr'); tr.innerHTML = ` ${row.month} ${formatCurrency(row.monthly)} ${formatCurrency(row.cumulative)} `; frag.appendChild(tr); } els.scheduleBody.appendChild(frag); } function update() { const inputs = parseInputs(); const validation = validate(inputs); if (!validation.ok) { renderErrors(validation.errors); els.downloadCsv.disabled = true; return; } renderErrors([]); const results = compute(inputs); const formatted = format(results); render(formatted); } function reset() { els.annualIncome.value = defaults.income; const debouncedUpdate = debounce(update, 100); document.querySelectorAll('#inputsCard input, #inputsCard select, #inputsCard textarea') .forEach((el) => { el.addEventListener('input', debouncedUpdate); el.addEventListener('change', debouncedUpdate); }); update(); } els.calcBtn.addEventListener('click', update); els.resetBtn.addEventListener('click', reset); els.toggleSchedule.addEventListener('click', function () { const isHidden = els.scheduleWrap.style.display !== 'block'; els.scheduleWrap.style.display = isHidden ? 'block' : 'none'; els.toggleSchedule.textContent = isHidden ? 'Hide monthly breakdown' : 'View monthly breakdown'; if (isHidden) { renderTable(currentSchedule); } }); els.downloadCsv.addEventListener('click', function () { if (currentSchedule.length === 0) return; let csv = 'Month,Monthly Tax,Cumulative Tax\n'; for (const row of currentSchedule) { csv += `${row.month},${row.monthly},${row.cumulative}\n`; } const blob = new Blob([csv], { type: 'text/csv' }); const url = URL.createObjectURL(blob); const anchor = document.createElement('a'); anchor.href = url; anchor.download = 'bc-province-tax-monthly.csv'; anchor.click(); URL.revokeObjectURL(url); }); input.addEventListener('change', debouncedUpdate); }); update(); })();