{"id":1388,"date":"2026-06-19T19:17:05","date_gmt":"2026-06-19T19:17:05","guid":{"rendered":"https:\/\/thenextdigi.com\/moneywize\/?page_id=1388"},"modified":"2026-06-19T19:22:22","modified_gmt":"2026-06-19T19:22:22","slug":"payroll-calculator","status":"publish","type":"page","link":"https:\/\/thenextdigi.com\/moneywize\/resources\/payroll-calculator\/","title":{"rendered":"Payroll Calculator"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"1388\" class=\"elementor elementor-1388\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-2305b762 e-flex e-con-boxed e-con e-parent\" data-id=\"2305b762\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-6024ce59 e-con-full feat-grid  e-flex e-con e-child\" data-id=\"6024ce59\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t<div class=\"elementor-element elementor-element-72e1b855 e-con-full e-flex e-con e-child\" data-id=\"72e1b855\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-7a4b9ddd elementor-widget elementor-widget-heading\" data-id=\"7a4b9ddd\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">PAYROLL<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-741514d9 elementor-widget elementor-widget-heading\" data-id=\"741514d9\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Payroll \n <span class=\"text-brand\">Calculator <\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7afd7b70 elementor-widget__width-initial elementor-widget elementor-widget-heading\" data-id=\"7afd7b70\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Estimate Income Tax, National Insurance and take-home pay using the latest UK payroll rates and tax thresholds.\n<\/h2>\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-6070e23c e-con-full e-flex e-con e-child\" data-id=\"6070e23c\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-6382a5ac elementor-widget elementor-widget-button\" data-id=\"6382a5ac\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"https:\/\/thenextdigi.com\/moneywize\/resources#See-all-calculators\" target=\"_blank\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t<span class=\"elementor-button-icon\">\n\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-arrow-right\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M190.5 66.9l22.2-22.2c9.4-9.4 24.6-9.4 33.9 0L441 239c9.4 9.4 9.4 24.6 0 33.9L246.6 467.3c-9.4 9.4-24.6 9.4-33.9 0l-22.2-22.2c-9.5-9.5-9.3-25 .4-34.3L311.4 296H24c-13.3 0-24-10.7-24-24v-32c0-13.3 10.7-24 24-24h287.4L190.9 101.2c-9.8-9.3-10-24.8-.4-34.3z\"><\/path><\/svg>\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Open the calculators<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-44a35a8 e-con-full e-flex e-con e-child\" data-id=\"44a35a8\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-298113eb elementor-widget elementor-widget-html\" data-id=\"298113eb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<div class=\"mw-payroll-calculator\" data-payroll-calculator>\r\n  <div class=\"mw-payroll-inner\">\r\n\r\n    <div class=\"mw-payroll-field\">\r\n      <label>Gross pay<\/label>\r\n\r\n      <input\r\n        type=\"text\"\r\n        class=\"mw-payroll-amount\"\r\n        inputmode=\"decimal\"\r\n        placeholder=\"2,400.00\"\r\n        autocomplete=\"off\"\r\n      >\r\n    <\/div>\r\n\r\n    <div class=\"mw-payroll-grid\">\r\n\r\n      <div class=\"mw-payroll-field\">\r\n        <label>Tax year<\/label>\r\n\r\n        <div class=\"mw-payroll-select-wrap\">\r\n          <select class=\"mw-payroll-tax-year\">\r\n            <option value=\"2026\">2026\/27<\/option>\r\n            <option value=\"2025\">2025\/26<\/option>\r\n          <\/select>\r\n        <\/div>\r\n      <\/div>\r\n\r\n      <div class=\"mw-payroll-field\">\r\n        <label>Pay frequency<\/label>\r\n\r\n        <div class=\"mw-payroll-select-wrap\">\r\n          <select class=\"mw-payroll-frequency\">\r\n            <option value=\"annual\">Annual<\/option>\r\n            <option value=\"monthly\" selected>Monthly<\/option>\r\n            <option value=\"weekly\">Weekly<\/option>\r\n          <\/select>\r\n        <\/div>\r\n      <\/div>\r\n\r\n    <\/div>\r\n\r\n    <div class=\"mw-payroll-field\">\r\n      <label>Region<\/label>\r\n\r\n      <div class=\"mw-payroll-select-wrap\">\r\n        <select class=\"mw-payroll-region\">\r\n          <option value=\"england\">England<\/option>\r\n          <option value=\"wales\">Wales<\/option>\r\n          <option value=\"scotland\">Scotland<\/option>\r\n          <option value=\"northern-ireland\">\r\n            Northern Ireland\r\n          <\/option>\r\n        <\/select>\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <div class=\"mw-payroll-divider\"><\/div>\r\n\r\n    <div class=\"mw-payroll-results\" aria-live=\"polite\">\r\n\r\n      <div class=\"mw-payroll-main-result\">\r\n        <span class=\"mw-payroll-result-label\">\r\n          Take-home:\r\n        <\/span>\r\n\r\n        <strong class=\"mw-payroll-take-home\">\r\n          \u00a30.00\r\n        <\/strong>\r\n      <\/div>\r\n\r\n      <div class=\"mw-payroll-period\">\r\n        per month\r\n      <\/div>\r\n\r\n      <div class=\"mw-payroll-result-details\">\r\n\r\n        <span>\r\n          Income Tax:\r\n          <strong class=\"mw-payroll-tax\">\r\n            \u00a30.00\r\n          <\/strong>\r\n        <\/span>\r\n\r\n        <span>\r\n          National Insurance:\r\n          <strong class=\"mw-payroll-ni\">\r\n            \u00a30.00\r\n          <\/strong>\r\n        <\/span>\r\n\r\n      <\/div>\r\n\r\n      <p class=\"mw-payroll-note\">\r\n        Estimate based on a standard tax code and employee\r\n        National Insurance category A.\r\n      <\/p>\r\n\r\n    <\/div>\r\n\r\n    <p class=\"mw-payroll-error\"><\/p>\r\n\r\n  <\/div>\r\n<\/div>\r\n\r\n<script>\r\n(function () {\r\n  function initialisePayrollCalculators() {\r\n    const calculators = document.querySelectorAll(\r\n      '[data-payroll-calculator]:not([data-payroll-initialised])'\r\n    );\r\n\r\n    calculators.forEach(function (calculator) {\r\n      calculator.setAttribute(\r\n        'data-payroll-initialised',\r\n        'true'\r\n      );\r\n\r\n      const amountField = calculator.querySelector(\r\n        '.mw-payroll-amount'\r\n      );\r\n\r\n      const taxYearField = calculator.querySelector(\r\n        '.mw-payroll-tax-year'\r\n      );\r\n\r\n      const frequencyField = calculator.querySelector(\r\n        '.mw-payroll-frequency'\r\n      );\r\n\r\n      const regionField = calculator.querySelector(\r\n        '.mw-payroll-region'\r\n      );\r\n\r\n      const takeHomeResult = calculator.querySelector(\r\n        '.mw-payroll-take-home'\r\n      );\r\n\r\n      const taxResult = calculator.querySelector(\r\n        '.mw-payroll-tax'\r\n      );\r\n\r\n      const niResult = calculator.querySelector(\r\n        '.mw-payroll-ni'\r\n      );\r\n\r\n      const periodResult = calculator.querySelector(\r\n        '.mw-payroll-period'\r\n      );\r\n\r\n      const note = calculator.querySelector(\r\n        '.mw-payroll-note'\r\n      );\r\n\r\n      const errorMessage = calculator.querySelector(\r\n        '.mw-payroll-error'\r\n      );\r\n\r\n      const periodsPerYear = {\r\n        annual: 1,\r\n        monthly: 12,\r\n        weekly: 52\r\n      };\r\n\r\n      const periodLabels = {\r\n        annual: 'per year',\r\n        monthly: 'per month',\r\n        weekly: 'per week'\r\n      };\r\n\r\n      const taxBands = {\r\n        2026: {\r\n          standard: [\r\n            [37700, 0.20],\r\n            [125140, 0.40],\r\n            [Infinity, 0.45]\r\n          ],\r\n\r\n          scotland: [\r\n            [3967, 0.19],\r\n            [16956, 0.20],\r\n            [31092, 0.21],\r\n            [62430, 0.42],\r\n            [125140, 0.45],\r\n            [Infinity, 0.48]\r\n          ]\r\n        },\r\n\r\n        2025: {\r\n          standard: [\r\n            [37700, 0.20],\r\n            [125140, 0.40],\r\n            [Infinity, 0.45]\r\n          ],\r\n\r\n          scotland: [\r\n            [2827, 0.19],\r\n            [14921, 0.20],\r\n            [31092, 0.21],\r\n            [62430, 0.42],\r\n            [125140, 0.45],\r\n            [Infinity, 0.48]\r\n          ]\r\n        }\r\n      };\r\n\r\n      const nationalInsuranceThresholds = {\r\n        annual: {\r\n          primary: 12570,\r\n          upper: 50270\r\n        },\r\n\r\n        monthly: {\r\n          primary: 1048,\r\n          upper: 4189\r\n        },\r\n\r\n        weekly: {\r\n          primary: 242,\r\n          upper: 967\r\n        }\r\n      };\r\n\r\n      function parseAmount(value) {\r\n        const cleanedValue = String(value)\r\n          .replace(\/\u00a3\/g, '')\r\n          .replace(\/,\/g, '')\r\n          .replace(\/\\s\/g, '');\r\n\r\n        return parseFloat(cleanedValue);\r\n      }\r\n\r\n      function formatCurrency(value) {\r\n        return new Intl.NumberFormat('en-GB', {\r\n          style: 'currency',\r\n          currency: 'GBP',\r\n          minimumFractionDigits: 2,\r\n          maximumFractionDigits: 2\r\n        }).format(value);\r\n      }\r\n\r\n      function getPersonalAllowance(annualGross) {\r\n        const standardAllowance = 12570;\r\n\r\n        if (annualGross <= 100000) {\r\n          return standardAllowance;\r\n        }\r\n\r\n        const reduction = Math.floor(\r\n          (annualGross - 100000) \/ 2\r\n        );\r\n\r\n        return Math.max(\r\n          0,\r\n          standardAllowance - reduction\r\n        );\r\n      }\r\n\r\n      function calculateProgressiveTax(\r\n        taxableIncome,\r\n        bands\r\n      ) {\r\n        let tax = 0;\r\n        let previousLimit = 0;\r\n\r\n        bands.forEach(function (band) {\r\n          const upperLimit = band[0];\r\n          const rate = band[1];\r\n\r\n          if (taxableIncome <= previousLimit) {\r\n            return;\r\n          }\r\n\r\n          const taxableInBand =\r\n            Math.min(taxableIncome, upperLimit) -\r\n            previousLimit;\r\n\r\n          if (taxableInBand > 0) {\r\n            tax += taxableInBand * rate;\r\n          }\r\n\r\n          previousLimit = upperLimit;\r\n        });\r\n\r\n        return tax;\r\n      }\r\n\r\n      function calculateIncomeTax(\r\n        annualGross,\r\n        taxYear,\r\n        region\r\n      ) {\r\n        const personalAllowance =\r\n          getPersonalAllowance(annualGross);\r\n\r\n        const taxableIncome = Math.max(\r\n          0,\r\n          annualGross - personalAllowance\r\n        );\r\n\r\n        const selectedBands =\r\n          region === 'scotland'\r\n            ? taxBands[taxYear].scotland\r\n            : taxBands[taxYear].standard;\r\n\r\n        return calculateProgressiveTax(\r\n          taxableIncome,\r\n          selectedBands\r\n        );\r\n      }\r\n\r\n      function calculateNationalInsurance(\r\n        periodGross,\r\n        frequency\r\n      ) {\r\n        const thresholds =\r\n          nationalInsuranceThresholds[frequency];\r\n\r\n        let nationalInsurance = 0;\r\n\r\n        if (periodGross > thresholds.primary) {\r\n          const mainRateEarnings =\r\n            Math.min(periodGross, thresholds.upper) -\r\n            thresholds.primary;\r\n\r\n          nationalInsurance +=\r\n            Math.max(0, mainRateEarnings) * 0.08;\r\n        }\r\n\r\n        if (periodGross > thresholds.upper) {\r\n          nationalInsurance +=\r\n            (periodGross - thresholds.upper) * 0.02;\r\n        }\r\n\r\n        return nationalInsurance;\r\n      }\r\n\r\n      function resetResults() {\r\n        takeHomeResult.textContent =\r\n          formatCurrency(0);\r\n\r\n        taxResult.textContent =\r\n          formatCurrency(0);\r\n\r\n        niResult.textContent =\r\n          formatCurrency(0);\r\n\r\n        periodResult.textContent =\r\n          periodLabels[frequencyField.value];\r\n      }\r\n\r\n      function calculatePayroll() {\r\n        const rawAmount = amountField.value.trim();\r\n        const frequency = frequencyField.value;\r\n        const taxYear = taxYearField.value;\r\n        const region = regionField.value;\r\n\r\n        periodResult.textContent =\r\n          periodLabels[frequency];\r\n\r\n        if (rawAmount === '') {\r\n          errorMessage.textContent = '';\r\n          resetResults();\r\n          return;\r\n        }\r\n\r\n        const periodGross = parseAmount(rawAmount);\r\n\r\n        if (\r\n          !Number.isFinite(periodGross) ||\r\n          periodGross < 0\r\n        ) {\r\n          errorMessage.textContent =\r\n            'Please enter a valid gross pay amount.';\r\n\r\n          resetResults();\r\n          return;\r\n        }\r\n\r\n        errorMessage.textContent = '';\r\n\r\n        const numberOfPeriods =\r\n          periodsPerYear[frequency];\r\n\r\n        const annualGross =\r\n          periodGross * numberOfPeriods;\r\n\r\n        const annualIncomeTax =\r\n          calculateIncomeTax(\r\n            annualGross,\r\n            taxYear,\r\n            region\r\n          );\r\n\r\n        const periodIncomeTax =\r\n          annualIncomeTax \/ numberOfPeriods;\r\n\r\n        const periodNationalInsurance =\r\n          calculateNationalInsurance(\r\n            periodGross,\r\n            frequency\r\n          );\r\n\r\n        const takeHomePay = Math.max(\r\n          0,\r\n          periodGross -\r\n          periodIncomeTax -\r\n          periodNationalInsurance\r\n        );\r\n\r\n        takeHomeResult.textContent =\r\n          formatCurrency(takeHomePay);\r\n\r\n        taxResult.textContent =\r\n          formatCurrency(periodIncomeTax);\r\n\r\n        niResult.textContent =\r\n          formatCurrency(periodNationalInsurance);\r\n\r\n        const selectedPeriod =\r\n          frequency === 'annual'\r\n            ? 'annual'\r\n            : frequency;\r\n\r\n        note.textContent =\r\n          'Estimated ' +\r\n          selectedPeriod +\r\n          ' figures based on a standard tax code and employee National Insurance category A.';\r\n      }\r\n\r\n      amountField.addEventListener(\r\n        'input',\r\n        calculatePayroll\r\n      );\r\n\r\n      taxYearField.addEventListener(\r\n        'change',\r\n        calculatePayroll\r\n      );\r\n\r\n      frequencyField.addEventListener(\r\n        'change',\r\n        calculatePayroll\r\n      );\r\n\r\n      regionField.addEventListener(\r\n        'change',\r\n        calculatePayroll\r\n      );\r\n\r\n      amountField.addEventListener(\r\n        'focus',\r\n        function () {\r\n          const amount = parseAmount(\r\n            amountField.value\r\n          );\r\n\r\n          if (Number.isFinite(amount)) {\r\n            amountField.value = amount;\r\n          }\r\n        }\r\n      );\r\n\r\n      amountField.addEventListener(\r\n        'blur',\r\n        function () {\r\n          const amount = parseAmount(\r\n            amountField.value\r\n          );\r\n\r\n          if (\r\n            Number.isFinite(amount) &&\r\n            amount >= 0\r\n          ) {\r\n            amountField.value =\r\n              amount.toLocaleString('en-GB', {\r\n                minimumFractionDigits: 2,\r\n                maximumFractionDigits: 2\r\n              });\r\n          }\r\n\r\n          calculatePayroll();\r\n        }\r\n      );\r\n\r\n      resetResults();\r\n    });\r\n  }\r\n\r\n  initialisePayrollCalculators();\r\n\r\n  document.addEventListener(\r\n    'DOMContentLoaded',\r\n    initialisePayrollCalculators\r\n  );\r\n})();\r\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>PAYROLL Payroll Calculator Estimate Income Tax, National Insurance and take-home pay using the latest UK payroll rates and tax thresholds. [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":405,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_header_footer","meta":{"site-sidebar-layout":"no-sidebar","site-content-layout":"","ast-site-content-layout":"full-width-container","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"disabled","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"default","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"set","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"class_list":["post-1388","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/thenextdigi.com\/moneywize\/wp-json\/wp\/v2\/pages\/1388","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/thenextdigi.com\/moneywize\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/thenextdigi.com\/moneywize\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/thenextdigi.com\/moneywize\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/thenextdigi.com\/moneywize\/wp-json\/wp\/v2\/comments?post=1388"}],"version-history":[{"count":0,"href":"https:\/\/thenextdigi.com\/moneywize\/wp-json\/wp\/v2\/pages\/1388\/revisions"}],"up":[{"embeddable":true,"href":"https:\/\/thenextdigi.com\/moneywize\/wp-json\/wp\/v2\/pages\/405"}],"wp:attachment":[{"href":"https:\/\/thenextdigi.com\/moneywize\/wp-json\/wp\/v2\/media?parent=1388"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}