# Italy Employment Cost Calculator

> The full employer cost of a hire in Italy for Nordic companies: gross salary, INPS, INAIL and TFR under two example collective agreements, monthly invoice plan, and how local taxes change net pay.


<section> <span class="eyebrow">Cost calculator</span> <h1 id="the-full-cost-of-a-hire-in-italy">The full cost of a hire in Italy</h1> <p class="lede">You pay what the employee actually costs plus our monthly fee. Put in a salary and see each line, under two example collective agreements.</p> </section> <section> <div class="grid"> <form class="panel" id="calc" style="display:grid;gap:16px"> <label for="ral">Annual gross salary, RAL (EUR)<input id="ral" type="number" min="15000" step="1000" value="50000"></label> <label for="ccnl">Collective agreement (CCNL)<select id="ccnl"><option value="commercio">Commerce and services (CCNL Terziario, Distribuzione e Servizi)</option><option value="metalmeccanico">Engineering and manufacturing (CCNL Metalmeccanico Industria)</option></select></label> <label style="display:flex;gap:10px;align-items:center;font-weight:400"><input id="prorata" type="checkbox" checked style="width:auto">Spread the 13th and 14th month over the 12 monthly payslips</label> <label style="display:flex;gap:10px;align-items:center;font-weight:400"><input id="tfrfund" type="checkbox" checked style="width:auto">Pay TFR monthly into the employee’s chosen fund</label> <label for="fx">Your invoice currency per EUR (SEK, NOK, DKK; 1 for EUR)<input id="fx" type="number" step="0.01" value="1"></label> <p id="ccnlnote" style="margin:0;color:var(--muted);font-size:14px"></p> </form> <div class="panel" style="min-width:0"> <div class="tbl"><table id="out"> <thead><tr><th>Item</th><th class="num">Per month (avg)</th><th class="num">Per year</th></tr></thead> <tbody></tbody> </table></div> <p id="inst" style="font-size:14px;color:var(--muted);margin-bottom:0"></p> </div> </div> <p style="font-size:14px;color:var(--muted)">Example figures, rates updated 2026-10-26. Enter the current EUR reference rate for SEK, NOK or DKK to see the total in your currency. The contribution and INAIL rates used here are indicative <span class="tag">estimate</span>: the real ones depend on sector, headcount and the risk class of the job, and your quote states them.</p> </section> <section> <h2 id="twelve-invoices">Twelve invoices</h2> <p class="prose" style="margin:0">The yearly total does not change. The two options change the timing: with both on, every invoice is the same size and nothing builds up for December or for the exit.</p> <div class="tbl"><table id="sched"><thead><tr><th>Month</th><th class="num">Salary</th><th class="num">INPS + INAIL</th><th class="num">TFR</th><th class="num">Fee</th><th class="num">Invoice</th></tr></thead><tbody></tbody></table></div> <p id="schednote" style="font-size:14px;color:var(--muted);margin:0"></p> <p class="review">[Review: pro-rata payment of 13th/14th month must be allowed by the CCNL or an individual agreement; TFR to a pension fund depends on the employee’s choice, otherwise it goes to the INPS Treasury fund (companies with 50+ employees) or stays with the employer.]</p> </section> <section class="prose"> <h2 id="the-lines-explained">The lines explained</h2> <div class="fact"><b>RAL</b><span><strong>Annual gross salary.</strong> The number in the Italian offer, instead of a monthly salary. Paid in 13 or 14 instalments depending on the CCNL: the 13th in December and, in commerce and services, the 14th in July. Or spread over 12.</span></div> <div class="fact"><b>INPS</b><span><strong>Employer social security.</strong> Pension, unemployment, sickness and maternity, roughly 29–32% of gross pay: close to Swedish employer contributions, about double the Norwegian rate. The employee pays a further ~9% out of gross; not an extra cost for you.</span></div> <div class="fact"><b>INAIL</b><span><strong>Workplace injury insurance.</strong> Mandatory, paid by the employer. Well under 1% for office jobs, higher for technical and production roles.</span></div> <div class="fact"><b>TFR</b><span><strong>Severance accrual.</strong> 6.91% of gross pay a year, owed to the employee when employment ends for any reason (Civil Code art. 2120). Paid monthly into a fund, it works like an occupational pension contribution.</span></div> <div class="fact"><b>Fee</b><span><strong>ItalyTeams fee.</strong> €250 per employee per month, all inclusive.</span></div> </section> <section class="prose"> <h2 id="invoiced-on-actuals">Invoiced on actuals</h2> <p>The figures above are an estimate. Every month we run the real payroll and invoice what it cost: overtime, bonuses, unpaid leave, sick days partly paid by INPS, raises and CCNL increases appear in that month. The payslip summary comes with every invoice.</p> <p>Billing: a refundable deposit of one month's estimated cost plus the first month in advance at the start; then each month paid in advance on the estimate and adjusted to the actual payroll on the next invoice.</p> </section> <section class="prose"> <h2 id="two-collective-agreements-compared">Two collective agreements side by side</h2> <p>On the same €50,000 RAL, the Metalmeccanico (engineering) agreement comes out roughly €1,500–2,000 a year dearer for the employer than Commerce and services (office roles). Contribution rates sit about 2–3 points higher, and technical work carries a higher INAIL premium. Commerce splits the RAL into 14 payments instead of 13, which lowers each payslip but not the yearly total.</p> <p>Unlike at home, you cannot choose to have no agreement, or pick the cheaper one: it follows the job and the sector. We name it in the contract draft and explain why.</p> </section> <section class="prose"> <h2 id="the-city-changes-net-pay-not-your-cost">The city changes net pay, not your cost</h2> <p>On top of national income tax (IRPEF), every employee pays a <strong>regional</strong> surcharge (from 1.23% up to about 3.33% of taxable income, depending on the region and income band) and a <strong>municipal</strong> one (usually 0–0.8%; 0.9% in Rome, 1% in Naples, up to 1.2% in Turin; many cities exempt lower incomes). Payroll withholds both from gross pay.</p> <p>Your cost stays the same; the employee's take-home does not. At €50,000 RAL the spread between the cheapest and the dearest region-and-city mix is roughly €1,000–1,500 of net pay a year. Worth knowing before you set one salary band for candidates in different cities.</p> <p class="review">[Example by city (Milan, Rome, Turin, Bologna, Naples) to be computed from the MEF 2026 tables.]</p> </section> <div class="cta"><a class="btn" href="contact.html">Get an exact quote</a><a class="btn ghost" href="net-pay-calculator.html">What the employee takes home</a></div> <script>(function(){const P = {"_note":"Parametri del calcolatore con fonte e stato. 'indicative' = da sostituire con data/params/2026.yaml verificato.","updated":"2026-10-26","ccnl":{"commercio":{"label":"Commerce and services (CCNL Terziario, Distribuzione e Servizi)","installments":14,"employer_social_rate":0.29,"inail_rate":0.004,"status":"indicative","note":"Typical for offices, IT services, consulting, sales. 13th and 14th month salary."},"metalmeccanico":{"label":"Engineering and manufacturing (CCNL Metalmeccanico Industria)","installments":13,"employer_social_rate":0.315,"inail_rate":0.012,"status":"indicative","note":"Typical for engineering, production, technical roles. 13th month salary."}},"tfr_rate":{"value":0.0691,"status":"verified","source":"Civil Code art. 2120: gross pay / 13.5, less 0.5% to the INPS fund"},"employee_social_rate":{"value":0.0919,"status":"indicative","source":"INPS employee share, private sector"},"regional_surcharge":{"min":0.0123,"max":0.0333,"status":"indicative","source":"MEF, addizionale regionale IRPEF"},"municipal_surcharge":{"min":0,"max":0.009,"status":"indicative","source":"MEF, addizionale comunale IRPEF (0.8% general cap; Rome 0.9%)"},"eor_fee_eur":{"value":250,"status":"list price"},"usd_per_eur":{"value":1.08,"status":"indicative","source":"Replace with ECB daily reference rate at build time"},"net":{"status":"secondary","source":"data/params/2026.yaml (irpef, inps, addizionali); TUIR art. 11 and 13; L. 207/2024; L. 199/2025","employee_inps":0.0919,"extra_1pct_above":56224,"irpef":[[28000,0.23],[50000,0.33],[null,0.43]],"cities":{"Milan":{"region":"Lombardy","regional":[[null,0.0123]],"municipal":0.008,"exempt":23000},"Rome":{"region":"Lazio","regional":[[28000,0.0173],[null,0.0333]],"municipal":0.009,"exempt":14000},"Turin":{"region":"Piedmont","regional":[[null,0.0162]],"municipal":0.008,"municipal_note":"0.8% to 1.2% by band; 0.8% used","exempt":11790},"Bologna":{"region":"Emilia-Romagna","regional":[[null,0.0133]],"municipal":0.008,"exempt":15000},"Naples":{"region":"Campania","regional":[[null,0.0173]],"municipal":0.01,"exempt":12000}}}};

const eur = n => '€' + Math.round(n).toLocaleString('en-GB');
const usd = n => Math.round(n).toLocaleString('en-GB');
function calc(){
  const ral = +document.getElementById('ral').value || 0;
  const fx = +document.getElementById('fx').value || 0;
  const c = P.ccnl[document.getElementById('ccnl').value];
  const items = [
    ['Gross salary (RAL)', ral],
    ['Employer social security (INPS)', ral * c.employer_social_rate],
    ['Injury insurance (INAIL)', ral * c.inail_rate],
    ['Severance accrual (TFR)', ral * P.tfr_rate.value],
    ['ItalyTeams EOR fee', P.eor_fee_eur.value * 12],
  ];
  const tot = items.reduce((s, x) => s + x[1], 0);
  document.querySelector('#out tbody').innerHTML = items.map(([k, v]) => `<tr><td>${k}</td><td class="num">${eur(v/12)}</td><td class="num">${eur(v)}</td></tr>`).join('')
    + `<tr><td><b>Total cost</b></td><td class="num"><b>${eur(tot/12)}</b></td><td class="num"><b>${eur(tot)}</b></td></tr>`
    + `<tr><td>Total in your invoice currency</td><td class="num">${usd(tot/12*fx)}</td><td class="num">${usd(tot*fx)}</td></tr>`;
  document.getElementById('inst').textContent = `Salary paid in ${c.installments} instalments of ${eur(ral / c.installments)} gross. Total cost is ${(tot / ral * 100 - 100).toFixed(0)}% above RAL.`;
  document.getElementById('ccnlnote').textContent = c.note;
  const pr = document.getElementById('prorata').checked, tf = document.getElementById('tfrfund').checked;
  const inst = ral / c.installments, extra = c.installments - 12;
  const months = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'];
  const rate = c.employer_social_rate + c.inail_rate, fee = P.eor_fee_eur.value;
  let rows = '', sum = 0;
  months.forEach((m, i) => {
    let sal = pr ? ral / 12 : inst + (i === 11 ? inst : 0) + (extra === 2 && i === 6 ? inst : 0);
    const tfr = tf ? ral * P.tfr_rate.value / 12 : 0;
    const inv = sal * (1 + rate) + tfr + fee; sum += inv;
    rows += `<tr><td>${m}</td><td class="num">${eur(sal)}</td><td class="num">${eur(sal*rate)}</td><td class="num">${eur(tfr)}</td><td class="num">${eur(fee)}</td><td class="num"><b>${eur(inv)}</b></td></tr>`;
  });
  rows += `<tr><td><b>Year</b></td><td></td><td></td><td></td><td></td><td class="num"><b>${eur(sum)}</b></td></tr>`;
  document.querySelector('#sched tbody').innerHTML = rows;
  document.getElementById('schednote').textContent = tf ? 'TFR goes to the fund every month, so no severance liability builds up.' : `TFR of ${eur(ral * P.tfr_rate.value)} a year builds up and is paid when employment ends; it is covered by the deposit.`;
}
document.getElementById('calc').addEventListener('input', calc);
document.getElementById('calc').addEventListener('submit', e => e.preventDefault());
calc();
})();</script>


---
Source: https://italyteams.com/calculator.html
