============================================================ */ (function(){ 'use strict'; function init(){ var root = document.getElementById('zssb'); if(!root) return; /* ── State ──────────────────────────────────────── */ var s1Type = 'sleeper'; // 'sleeper' or 'offduty' var s2Type = 'sleeper'; /* ── Toggle button setup ────────────────────────── */ function setupToggle(slpId, offId, callback){ var slpBtn = document.getElementById(slpId); var offBtn = document.getElementById(offId); if(!slpBtn || !offBtn) return; slpBtn.addEventListener('click', function(){ slpBtn.classList.add('active'); offBtn.classList.remove('active'); callback('sleeper'); }); offBtn.addEventListener('click', function(){ offBtn.classList.add('active'); slpBtn.classList.remove('active'); callback('offduty'); }); } setupToggle('zssb-s1-sleeper', 'zssb-s1-offduty', function(t){ s1Type = t; }); setupToggle('zssb-s2-sleeper', 'zssb-s2-offduty', function(t){ s2Type = t; }); /* ── Format decimal hours → "Xh Ym" ─────────────── */ function fmtHrs(h){ if(isNaN(h) || h < 0) return '0h 0m'; var hh = Math.floor(h); var mm = Math.round((h - hh) * 60); if(mm === 60){ hh++; mm = 0; } if(hh === 0 && mm === 0) return '0h 0m'; if(hh === 0) return mm + 'm'; if(mm === 0) return hh + 'h'; return hh + 'h ' + mm + 'm'; } /* ── Add decimal hours to a time string ─────────── */ function addHrs(timeStr, hrs){ if(!timeStr || timeStr === '') return null; var parts = timeStr.split(':'); if(parts.length < 2) return null; var totalMins = parseInt(parts[0], 10) * 60 + parseInt(parts[1], 10) + Math.round(hrs * 60); totalMins = ((totalMins % 1440) + 1440) % 1440; var h = Math.floor(totalMins / 60); var m = totalMins % 60; return (h < 10 ? '0' : '') + h + ':' + (m < 10 ? '0' : '') + m; } /* ── Convert 24hr "HH:MM" → 12hr "H:MM AM/PM" ─── */ function to12hr(t24){ if(!t24) return null; var p = t24.split(':'); var h = parseInt(p[0], 10); var m = p[1]; var ampm = h >= 12 ? 'PM' : 'AM'; h = h % 12; if(h === 0) h = 12; return h + ':' + m + ' ' + ampm; } /* ── Warning helpers ─────────────────────────────── */ function showWarn(msg){ var w = document.getElementById('zssb-warn'); var wm = document.getElementById('zssb-wmsg'); if(w && wm){ wm.textContent = msg; w.classList.add('show'); } } function hideWarn(){ var w = document.getElementById('zssb-warn'); if(w) w.classList.remove('show'); } /* ── Status bar progress ─────────────────────────── */ function setStatus(step){ var pills = ['zssb-pill-1', 'zssb-pill-2', 'zssb-pill-3']; for(var i = 0; i < pills.length; i++){ var el = document.getElementById(pills[i]); if(el){ el.classList[i < step ? 'add' : 'remove']('active'); } } } /* ════════════════════════════════════════════════ MAIN CALCULATION — FMCSA 49 CFR §395.1(g) ════════════════════════════════════════════════ */ function calc(){ hideWarn(); setStatus(2); /* Read inputs */ var drivenBefore = parseFloat(document.getElementById('zssb-driven').value) || 0; var drivenBetween = parseFloat(document.getElementById('zssb-driven-between').value) || 0; var s1h = parseFloat(document.getElementById('zssb-s1-hrs').value) || 0; var s1m = parseFloat(document.getElementById('zssb-s1-min').value) || 0; var s2h = parseFloat(document.getElementById('zssb-s2-hrs').value) || 0; var s2m = parseFloat(document.getElementById('zssb-s2-min').value) || 0; var s1Start = document.getElementById('zssb-s1-start').value; var s2Start = document.getElementById('zssb-s2-start').value; /* Convert to decimal hours */ var split1 = s1h + (s1m / 60); var split2 = s2h + (s2m / 60); /* ── Validation ────────────────────────────────── */ if(split1 <= 0 && split2 <= 0){ showWarn('Please enter the duration for at least one split rest period.'); return; } if(split1 < 0 || split2 < 0){ showWarn('Rest period durations cannot be negative.'); return; } if(drivenBefore < 0 || drivenBetween < 0){ showWarn('Driving hours cannot be negative.'); return; } var totalDriven = drivenBefore + drivenBetween; if(totalDriven > 11){ showWarn('Total hours driven (' + totalDriven.toFixed(2) + ' hrs) exceeds the 11-hour driving limit.'); return; } /* ── FMCSA Split Sleeper Berth Logic ───────────── RULE 1: Combined rest >= 10 hours RULE 2: The longer period must be >= 7 hrs AND in sleeper berth RULE 3: The shorter period must be >= 2 hrs (sleeper or off-duty) ─────────────────────────────────────────────────── */ var totalRest = split1 + split2; var combinedOk = totalRest >= 10; var longSplit = Math.max(split1, split2); var shortSplit = Math.min(split1, split2); var longIsS1 = split1 >= split2; var longType = longIsS1 ? s1Type : s2Type; /* Long split: must be >= 7 hrs AND sleeper berth */ var longOk = (longSplit >= 7) && (longType === 'sleeper'); /* Short split: must be >= 2 hrs (any type) */ var shortOk = (shortSplit >= 2); /* Single-split detection (only one period entered) */ var oneSplit = (split1 > 0 && split2 === 0) || (split1 === 0 && split2 > 0); var isCompliant = false; var reason = ''; if(oneSplit){ isCompliant = false; reason = 'Only one split period entered. Please enter both Split 1 and Split 2 durations to check full FMCSA compliance.'; } else { var failReasons = []; if(!longOk){ if(longSplit < 7){ failReasons.push('Longer split (' + fmtHrs(longSplit) + ') is under the required 7-hour minimum.'); } else { failReasons.push('Longer split (' + fmtHrs(longSplit) + ') must be in the sleeper berth, not off-duty.'); } } if(!shortOk){ failReasons.push('Shorter split (' + fmtHrs(shortSplit) + ') is under the required 2-hour minimum.'); } if(!combinedOk){ failReasons.push('Combined rest (' + fmtHrs(totalRest) + ') is under the 10-hour minimum required.'); } isCompliant = longOk && shortOk && combinedOk; if(isCompliant){ reason = 'Both splits meet FMCSA requirements. Your 14-hour clock is paused during both rest periods and restarts at the end of Split 2.'; } else { reason = failReasons.join(' '); } } /* ── Remaining drive time ───────────────────────── */ var driveRemaining = Math.max(0, 11 - totalDriven); /* ── Timeline data (if start times provided) ──── */ var timelineData = null; if(s1Start && s1Start !== ''){ var s1End = addHrs(s1Start, split1); var midDrive = s2Start && s2Start !== '' ? s2Start : (s1End ? addHrs(s1End, drivenBetween) : null); var s2End = midDrive ? addHrs(midDrive, split2) : null; timelineData = { s1Start: to12hr(s1Start), s1End: to12hr(s1End), s2Start: s2Start && s2Start !== '' ? to12hr(s2Start) : (midDrive ? to12hr(midDrive) : null), s2End: to12hr(s2End), resumeTime: s2End ? to12hr(s2End) : null }; } /* ── Render results ──────────────────────────────── */ renderResults(isCompliant, reason, { split1: split1, split2: split2, totalRest: totalRest, longSplit: longSplit, shortSplit: shortSplit, longOk: longOk, shortOk: shortOk, combinedOk: combinedOk, longType: longType, drivenBefore: drivenBefore, drivenBetween: drivenBetween, totalDriven: totalDriven, driveRemaining:driveRemaining, s1Type: s1Type, s2Type: s2Type, oneSplit: oneSplit }, timelineData); setStatus(3); } /* ════════════════════════════════════════════════ RENDER RESULTS ════════════════════════════════════════════════ */ function renderResults(isCompliant, reason, d, tl){ /* Element refs */ var resEl = document.getElementById('zssb-res'); var banner = document.getElementById('zssb-banner'); var bannerStatus= document.getElementById('zssb-banner-status'); var bannerReason= document.getElementById('zssb-banner-reason'); var bannerSvg = document.getElementById('zssb-banner-svg'); var cardsEl = document.getElementById('zssb-cards'); var breakdownEl = document.getElementById('zssb-breakdown'); var timelineEl = document.getElementById('zssb-timeline'); var tlWrap = document.getElementById('zssb-timeline-wrap'); /* ── Compliance Banner ──────────────────────────── */ if(d.oneSplit){ banner.className = 'compliance-banner non-compliant'; bannerStatus.textContent = 'Incomplete — Enter Both Splits'; bannerSvg.innerHTML = ''; } else if(isCompliant){ banner.className = 'compliance-banner compliant'; bannerStatus.textContent = '✅ FMCSA Compliant — Valid Split'; bannerSvg.innerHTML = ''; } else { banner.className = 'compliance-banner non-compliant'; bannerStatus.textContent = '❌ Non-Compliant — Invalid Split'; bannerSvg.innerHTML = ''; } bannerReason.textContent = reason; /* ── Summary Cards ──────────────────────────────── */ var cards = []; if(!d.oneSplit){ cards.push({ v: fmtHrs(d.split1), u: d.s1Type === 'sleeper' ? 'SLEEPER' : 'OFF-DUTY', n: 'Split 1 Duration', cls: d.s1Type === 'sleeper' ? 'blue' : 'orange' }); cards.push({ v: fmtHrs(d.split2), u: d.s2Type === 'sleeper' ? 'SLEEPER' : 'OFF-DUTY', n: 'Split 2 Duration', cls: d.s2Type === 'sleeper' ? 'blue' : 'orange' }); cards.push({ v: fmtHrs(d.totalRest), u: 'TOTAL REST', n: 'Combined Off-Duty', cls: d.combinedOk ? 'green' : 'red' }); cards.push({ v: fmtHrs(d.driveRemaining), u: 'REMAINING', n: 'Drive Time Left', cls: d.driveRemaining > 4 ? 'green' : (d.driveRemaining > 2 ? 'orange' : 'red') }); } cardsEl.innerHTML = cards.map(function(c){ return '
' + '
' + c.v + '
' + '
' + c.u + '
' + '
' + c.n + '
' + '
'; }).join(''); /* ── Breakdown Table ────────────────────────────── */ var rows = []; if(!d.oneSplit){ rows.push({lbl: 'Split 1 (' + (d.s1Type === 'sleeper' ? 'Sleeper Berth' : 'Off-Duty') + ')', val: fmtHrs(d.split1), cls: ''}); rows.push({lbl: 'Split 2 (' + (d.s2Type === 'sleeper' ? 'Sleeper Berth' : 'Off-Duty') + ')', val: fmtHrs(d.split2), cls: ''}); rows.push({lbl: 'Combined Rest Total', val: fmtHrs(d.totalRest) + (d.totalRest >= 10 ? ' ✓' : ' ✗ (Need ≥10h)'), cls: d.combinedOk ? 'ok' : 'fail'}); rows.push({lbl: 'Longer Split ≥7 hrs in Sleeper Berth', val: d.longOk ? '✓ Pass' : '✗ Fail', cls: d.longOk ? 'ok' : 'fail'}); rows.push({lbl: 'Shorter Split ≥2 hrs (any type)', val: d.shortOk ? '✓ Pass' : '✗ Fail', cls: d.shortOk ? 'ok' : 'fail'}); rows.push({lbl: 'Hours Driven Before Split 1', val: fmtHrs(d.drivenBefore), cls: 'info'}); rows.push({lbl: 'Hours Driven Between Splits', val: fmtHrs(d.drivenBetween), cls: 'info'}); rows.push({lbl: 'Total Hours Driven', val: fmtHrs(d.totalDriven) + ' / 11 hrs max', cls: d.totalDriven < 11 ? 'ok' : 'fail'}); rows.push({lbl: 'Drive Time Remaining After Splits', val: fmtHrs(d.driveRemaining), cls: d.driveRemaining > 0 ? 'ok' : 'fail'}); rows.push({lbl: '14-Hour Clock Paused During Splits', val: isCompliant ? 'Yes — Both periods excluded' : 'Not applicable (fix issues above)', cls: isCompliant ? 'ok' : 'fail'}); } breakdownEl.innerHTML = rows.map(function(r){ return '
' + '' + r.lbl + '' + '' + r.val + '' + '
'; }).join(''); /* ── Timeline ───────────────────────────────────── */ if(!d.oneSplit){ tlWrap.style.display = 'block'; var items = []; items.push({ dot: 'drive', label: 'Started Driving', desc: 'Drove ' + fmtHrs(d.drivenBefore) + ' before first rest period.' }); items.push({ dot: 'sleep', label: 'Split 1 Begins' + (tl && tl.s1Start ? ' at ' + tl.s1Start : ''), desc: fmtHrs(d.split1) + ' ' + (d.s1Type === 'sleeper' ? 'in Sleeper Berth' : 'Off-Duty') + (tl && tl.s1End ? ' → Ends: ' + tl.s1End : '') }); if(d.drivenBetween > 0){ items.push({ dot: 'drive', label: 'Resumed Driving Between Splits', desc: 'Drove ' + fmtHrs(d.drivenBetween) + ' between the two rest periods.' }); } items.push({ dot: 'sleep', label: 'Split 2 Begins' + (tl && tl.s2Start ? ' at ' + tl.s2Start : ''), desc: fmtHrs(d.split2) + ' ' + (d.s2Type === 'sleeper' ? 'in Sleeper Berth' : 'Off-Duty') + (tl && tl.s2End ? ' → Ends: ' + tl.s2End : '') }); if(isCompliant){ items.push({ dot: 'done', label: '14-Hour Clock Restarts' + (tl && tl.resumeTime ? ' at ' + tl.resumeTime : ''), desc: 'Both splits complete. ' + fmtHrs(d.driveRemaining) + ' drive time remaining.' }); } else { items.push({ dot: 'off', label: 'Non-Compliant — Cannot Resume', desc: 'Fix the split issues above before resuming driving.' }); } timelineEl.innerHTML = items.map(function(it){ return '
' + '
' + '
' + '
' + it.label + '
' + '
' + it.desc + '
' + '
'; }).join(''); } else { tlWrap.style.display = 'none'; } /* ── Show results panel ─────────────────────────── */ resEl.classList.add('show'); setTimeout(function(){ resEl.scrollIntoView({ behavior: 'smooth', block: 'nearest' }); }, 100); } /* ════════════════════════════════════════════════ RESET ════════════════════════════════════════════════ */ function resetAll(){ /* Clear number inputs */ var numIds = ['zssb-driven', 'zssb-driven-between', 'zssb-s1-hrs', 'zssb-s1-min', 'zssb-s2-hrs', 'zssb-s2-min']; numIds.forEach(function(id){ var el = document.getElementById(id); if(el) el.value = ''; }); /* Clear time inputs */ ['zssb-s1-start', 'zssb-s2-start'].forEach(function(id){ var el = document.getElementById(id); if(el) el.value = ''; }); /* Reset toggle states */ s1Type = 'sleeper'; s2Type = 'sleeper'; ['zssb-s1-sleeper', 'zssb-s2-sleeper'].forEach(function(id){ var el = document.getElementById(id); if(el) el.classList.add('active'); }); ['zssb-s1-offduty', 'zssb-s2-offduty'].forEach(function(id){ var el = document.getElementById(id); if(el) el.classList.remove('active'); }); /* Hide warning and results */ hideWarn(); var resEl = document.getElementById('zssb-res'); if(resEl) resEl.classList.remove('show'); setStatus(1); } /* ── Event Listeners ──────────────────────────────── */ var calcBtn = document.getElementById('zssb-btn'); if(calcBtn) calcBtn.addEventListener('click', calc); var rstBtn = document.getElementById('zssb-reset'); if(rstBtn) rstBtn.addEventListener('click', resetAll); /* Enter key triggers calculation */ var numFields = ['zssb-driven', 'zssb-driven-between', 'zssb-s1-hrs', 'zssb-s1-min', 'zssb-s2-hrs', 'zssb-s2-min']; numFields.forEach(function(id){ var el = document.getElementById(id); if(el) el.addEventListener('keydown', function(e){ if(e.key === 'Enter') calc(); }); }); } /* end init() */ /* ── Safe DOM-ready execution ───────────────────────── */ if(document.readyState === 'loading'){ document.addEventListener('DOMContentLoaded', init); } else { init(); } })();
Herfindahl Index Calculator
Measure market concentration & HHI score — DOJ/FTC classifications included.
Market Setup
Number of Firms in Market (2–20)
How to fill in: Enter the name of each firm (optional) and its market share as a percentage. All shares must sum to exactly 100% for a valid HHI result.
Firm Name (Optional) Market Share (%) #
!
Market shares must sum to exactly 100% for a valid HHI.
Results
Herfindahl-Hirschman Index
0
Unconcentrated Market
Per-Firm Contribution Breakdown
# Firm Share (%) Share² (sᵢ²) Contribution
Formula, Classification & References
  • Formula: HHI = s₁² + s₂² + … + sₙ² where sᵢ = each firm’s market share as a percentage (e.g. 25 for 25%)
  • Maximum HHI: 10,000 (pure monopoly — one firm holds 100%)
  • Minimum HHI approaches 0 in a market with infinite equal competitors
  • DOJ/FTC Classification: HHI < 1,500 = Unconcentrated | 1,500–2,499 = Moderately Concentrated | ≥ 2,500 = Highly Concentrated
  • Source: U.S. Department of Justice — justice.gov
  • Source: Federal Trade Commission Merger Guidelines — ftc.gov
  • Source: Wikipedia — Herfindahl–Hirschman Index — wikipedia.org
  • This tool is for educational and planning purposes only. It does not constitute legal or regulatory advice.

Herfindahl Index Calculator: Measure Market Concentration Instantly

The Herfindahl Index Calculator on Zo Calculator lets you measure how concentrated — or competitive — any market is, in seconds. Whether you’re an economist, business analyst, antitrust researcher, or MBA student, this tool gives you an instant, accurate HHI score by simply entering each firm’s market share. No spreadsheets, no manual math — just fast, reliable results.


What This Calculator Tells You

Enter your market data and the Herfindahl-Hirschman Index calculator will instantly return:

  • HHI Score — the single numeric value representing overall market concentration
  • Market Classification — whether the market is Unconcentrated, Moderately Concentrated, or Highly Concentrated based on DOJ/FTC thresholds
  • Individual Squared Shares — each firm’s squared market share contribution to the total HHI
  • Number of Firms — auto-counted from your inputs to confirm data completeness
  • Normalized HHI (0–1 scale) — an optional normalized version for cross-market comparisons
  • Interpretation Guidance — plain-language explanation of what your HHI score means competitively

How the Calculator Works (The Formula & Logic)

The Herfindahl Index (also called the Herfindahl-Hirschman Index or HHI) is calculated by summing the squares of the market share percentages of every firm operating in the market.

Core Formula:

HHI = s₁² + s₂² + s₃² + … + sₙ²

Where s is each firm’s market share expressed as a percentage (e.g., 25 for 25%), and n is the total number of firms.

Key points about the formula:

  • Market shares must sum to 100% for the result to be valid.
  • A market with a single monopolist holding 100% share produces the maximum HHI of 10,000.
  • A perfectly competitive market with infinite equal-sized firms approaches an HHI of 0.
  • Squaring the shares mathematically penalizes large firms more heavily, which is the whole point — the index is sensitive to both firm size and the number of competitors.

Normalized HHI Formula (optional):

HHI* = (HHI − 1/n) ÷ (1 − 1/n)

This scales the result between 0 and 1, making it easier to compare markets with different numbers of firms.


Standard Ratings & Classifications (Comparison Chart)

The U.S. Department of Justice (DOJ) and the Federal Trade Commission (FTC) use the following thresholds when evaluating mergers and acquisitions under the Herfindahl-Hirschman Index:

HHI Score RangeMarket ClassificationDOJ/FTC Interpretation
0 – 1,499UnconcentratedHighly competitive market; mergers rarely challenged
1,500 – 2,499Moderately ConcentratedMergers may raise concerns; additional review possible
2,500 – 10,000Highly ConcentratedMergers likely challenged; significant market power present
10,000Pure MonopolySingle firm controls 100% of the market

Note: These thresholds were updated by the DOJ/FTC in their 2010 Horizontal Merger Guidelines and remain the standard reference in U.S. antitrust analysis.


Step-by-Step Practical Example

Let’s say you’re analyzing a regional grocery market with five firms. Here’s how to calculate the Herfindahl Index manually — and how our calculator replicates this logic instantly.

Market data:

  • Firm A: 40% market share
  • Firm B: 25% market share
  • Firm C: 20% market share
  • Firm D: 10% market share
  • Firm E: 5% market share

Step 1: Square each firm’s market share

FirmMarket Share (%)Squared Value (s²)
A401,600
B25625
C20400
D10100
E525

Step 2: Sum all squared values

HHI = 1,600 + 625 + 400 + 100 + 25 = 2,750

Step 3: Interpret the result

An HHI of 2,750 falls in the Highly Concentrated range (above 2,500). Under DOJ/FTC guidelines, any proposed merger in this market would face significant antitrust scrutiny.


How to Use Zo Calculator’s Herfindahl Index Tool

Using the HHI calculator on ZoCalculator.com takes under a minute:

  1. Enter the number of firms — type how many companies operate in the market you’re analyzing.
  2. Input each firm’s market share — enter market share as a percentage (e.g., type “25” for 25%). All shares should add up to 100.
  3. Click “Calculate” — the tool instantly computes each firm’s squared share and sums them into a final HHI score.
  4. Read your HHI classification — the result panel shows your score alongside the DOJ/FTC classification (Unconcentrated, Moderately Concentrated, or Highly Concentrated).
  5. Review the breakdown table — see each firm’s individual contribution to the total HHI.
  6. Reset and compare — change market share values to model what happens after a hypothetical merger or new market entrant.

Practical Applications and Real-World Uses

  • Antitrust & Merger Review: Regulatory economists and legal teams use the Herfindahl-Hirschman Index to assess whether a proposed merger will raise market concentration above DOJ/FTC thresholds.
  • Industry Analysis: Equity analysts and strategy consultants apply HHI scores to benchmark how competitive a sector is before recommending investments or market entry.
  • Academic Research: Economics, business, and public policy researchers use the herfindahl index as a standard market structure variable in empirical studies on pricing power, innovation, and wages.
  • Government & Policy Making: Regulatory bodies in telecommunications, banking, healthcare, and energy routinely calculate HHI scores to monitor sector-level market power over time.
  • MBA & University Coursework: Students learning industrial organization, competitive strategy, or microeconomics use the HHI formula in assignments, case studies, and exams — making an easy herfindahl index calculator an essential study aid.
  • Business Strategy Planning: Company leaders entering new markets use HHI benchmarks to gauge competitive intensity and calibrate their go-to-market strategy accordingly.

Important Notes & Technical Limitations

  1. Market share data quality matters. The HHI result is only as accurate as the market share figures you input. Estimates based on revenue, units sold, or other proxies can yield different HHI scores for the same market.
  2. Market definition is subjective. How you define the relevant market (geography, product scope) significantly affects the resulting HHI. A national market and a local market for the same product will produce very different scores.
  3. This tool is for reference and educational use. The Zo Calculator HHI tool does not constitute legal, regulatory, or financial advice. For formal antitrust proceedings, consult qualified economists and legal counsel.
  4. Shares must sum to 100%. If your entered shares do not total exactly 100%, the result may be misleading. The calculator will flag this, but users should double-check their data before interpreting results.

Helpful References & Sources

  • U.S. Department of Justice — Herfindahl-Hirschman Index: justice.gov — Official DOJ explanation of HHI thresholds used in merger review.
  • Federal Trade Commission — Merger Review Guidelines: ftc.gov — The FTC’s published standards for horizontal merger analysis, including HHI benchmarks.
  • Wikipedia — Herfindahl–Hirschman Index: en.wikipedia.org — Comprehensive encyclopedic overview of the index’s history, formula variations, and applications.

🙋 Frequently Asked Questions (FAQs)

What is the Herfindahl Index and what does it measure?

The Herfindahl Index (HHI) is a mathematical measure of market concentration that reflects both the number of firms in a market and their relative size. It is calculated by summing the squared market shares of all firms, producing a score between 0 (perfect competition) and 10,000 (pure monopoly). A higher HHI indicates that fewer, larger firms dominate the market — meaning less competition overall.

How do you calculate the Herfindahl-Hirschman Index step by step?

To calculate the Herfindahl-Hirschman Index, express each firm’s market share as a percentage, square each individual share value, then add all the squared values together. For example, if three firms hold 50%, 30%, and 20% share respectively, the HHI = 2,500 + 900 + 400 = 3,800. This tells you the market is highly concentrated. Our herfindahl hirschman index calculator automates every step of this process instantly.

What is a good or bad HHI score?

There is no universally “good” or “bad” HHI — it depends on the context. Under U.S. DOJ and FTC merger guidelines, scores below 1,500 indicate an unconcentrated (competitive) market, scores between 1,500 and 2,499 indicate moderate concentration, and scores above 2,500 indicate a highly concentrated market where competitive harm is likely. For a business entering a new market, a lower HHI is generally preferable as it signals more competitive opportunity.

What is the difference between the Herfindahl Index and the Herfindahl-Hirschman Index?

The Herfindahl Index and the Herfindahl-Hirschman Index refer to the same measure — the HHI name honors both economists Orris Herfindahl and Albert O. Hirschman who independently developed related concentration measures. In practice, “Herfindahl Index,” “Herfindahl-Hirschman Index,” and “HHI” are used interchangeably in economics, antitrust law, and finance. Our herfindahl-hirschman index calculator uses the standard squared-sum formula recognized by the DOJ and FTC.

What happens to the HHI if two companies in a market merge?

When two firms merge, their combined market share increases, and because the formula squares market shares, the HHI rises disproportionately. For example, if two firms each holding 20% merge into a single 40% firm, their combined squared contribution jumps from 400 + 400 = 800 to 40² = 1,600 — a 100% increase in concentration from just those two firms. This nonlinear effect is precisely why regulators use the HHI to screen mergers for potential anti-competitive impact.

Can the HHI be used for markets outside the United States?

Yes. While the DOJ/FTC thresholds (1,500 and 2,500) are specific to U.S. antitrust law, the Herfindahl-Hirschman Index formula itself is a universal economic measure used by competition authorities worldwide, including the European Commission, the UK Competition and Markets Authority (CMA), and regulators across Asia, Latin America, and Africa. Different jurisdictions may apply different threshold values, so always check local guidelines when conducting regulatory analysis outside the U.S.

How is the HHI different from a market concentration ratio (CR4 or CR8)?

A concentration ratio like CR4 simply adds up the market shares of the top 4 (or top 8) firms, ignoring all others and treating each firm’s share equally. The Herfindahl-Hirschman Index, by contrast, includes every firm in the market and squares each share — which means it penalizes large shares more heavily and captures the full distribution of firm sizes. Most economists and regulators prefer the HHI because it is more sensitive to changes in market structure and provides a single, complete summary statistic.

Is the Herfindahl Index the same as market share concentration?

The HHI is a measure of market share concentration, but “market concentration” as a broad concept encompasses multiple metrics. The HHI is the most widely used single-number measure because it accounts for both the number of firms and inequality in their sizes simultaneously. Other concentration tools include the CR ratios, Lorenz curves, and Gini coefficients, each suited to different analytical contexts. For antitrust and merger analysis, the HHI remains the gold standard.

What is the maximum possible HHI and what does it mean?

The maximum possible HHI is 10,000, which occurs when a single firm holds 100% of the market (a pure monopoly): 100² = 10,000. In practice, very few markets reach this extreme. Scores above 2,500 already suggest significant market power and are sufficient to trigger regulatory scrutiny under DOJ/FTC guidelines. The closer the HHI is to 10,000, the more control one or a small number of dominant players have over pricing and competitive dynamics.

How can I use this calculator to model a hypothetical merger scenario?

To model a merger, run the calculator twice. First, enter the current market shares of all firms to get the pre-merger HHI. Then, combine the market shares of the two merging firms into a single entry, adjust the remaining shares if needed, and recalculate. The difference between the two HHI scores — called the delta HHI (ΔHHI) — is what regulators use to evaluate competitive impact. A ΔHHI above 200 in a market already above 2,500 is a common threshold that triggers closer DOJ/FTC examination.


Explore Related Calculators on Zo Calculator