91³Ô¹ÏÍø

Watch CBS News

Illinois surpasses 100 tornadoes for fourth year in a row

Severe weather season has been off to a very active start in Illinois, with everything from flooding, hail, and damaging winds – and more than 100 tornadoes statewide.

As of April 22, the preliminary count for tornadoes across the state of Illinois stands at 101 and counting, easily leading the entire country by far. That's nearly double the annual average of 54 tornadoes in Illinois.

With our severe weather season just getting started and lasting through September, that number has the chance to go up. The typical count for tornadoes per year across Illinois is 54, so we already nearly doubled that.

As of April 19, there have been at least 20 tornadoes in the National Weather Service Chicago forecast area, which includes parts of northwest Indiana. The typical number for that forecast area is between 10 to 20 tornadoes per year.

  • March 10th
    • An EF-0 tornado north of Pontiac, IL.
    • An EF-U tornado near Cayuga, IL (midway between Pontiac and Odell).
    • An EF-U tornado in Kankakee Township. This brief tornado occurred prior to the start of the Kankakee-Roselawn EF-3 tornado.
    • An EF-U tornado in Otto Township. This brief tornado lifted just before the start of the Kankakee-Roselawn EF-3 tornado. 
    • An EF-3 tornado that tracked through southern Kankakee and Aroma Park in Illinois and Lake Village and Roselawn in Indiana before ending west of DeMotte, IN.
    • An EF-1 satellite tornado just southwest of Sun River Terrace. This was a southward-moving satellite tornado associated with the Kankakee-Roselawn EF-3 tornado. 
    • An EF-U tornado immediately south of Sun River Terrace. This was a brief satellite tornado associated with the Kankakee-Roselawn EF-3 tornado.
    • An EF-U tornado in southeastern Ganeer Township, southeast of Sun River Terrace. This was another brief satellite tornado associated with the Kankakee-Roselawn EF-3 tornado.
    • An EF-U tornado in Momence Township, north of Hopkins Park. This was an anticyclonic satellite tornado that initially moved north, stopped, then tracked south before ending very near its starting location.
    • An EF-1 tornado that tracked from southwest of Wheatfield to near Dunns Bridge, IN.
  • April 2nd
    • EF-1 near Palmyra and Woosung in northwest Lee County. 
    • EF-1 in Pine Creek Township in southern Ogle County. 
    • EF-0 in Holcomb in northeast Ogle County. 
  • April 17th
    • EF-U in Pecatonica
    • EF-1 in Harrison
    • EF-1 in Roscoe
    • EF-1 in Gibson City
    • EF-1 near Loda and Buckley
    • EF-2 in Darrow
    • EF-1 in Kentland, Indiana

As the climate warms, Illinois has seen a surge in tornado activity in the last few years. This is the fourth year in a row Illinois has surpassed 100 tornadoes statewide.

In 2023 and 2025, Illinois ranked 1st in the country, with the most confirmed tornadoes out of any other state – 121 in 2023 and 126 in 2025. In 2024, Illinois ranked 2nd in the U.S., with a state record 142 tornadoes, while Oklahoma lead the country that year with 153 confirmed tornadoes.

Meteorologists have said, over the last 40 years, the number of tornadoes has gone down in states like Texas and Oklahoma, in what's known as the nation's Tornado Alley, while in areas further east, like Tennessee, Indiana, and Illinois, have seen an increase in tornadoes.

Other recent studies support that finding, showing Tornado Alley shifting into Illinois

View CBS News In
CBS News App Open
Chrome Safari Continue
const link = doc.createElement('link'); link.rel = 'stylesheet'; link.href = '/fly/fly/bundles/cbsnewscontent/css/cmp-banner.min.css?v=fd53910ecf4604072044ab7c46d9b028'; doc.head.appendChild(link); doc.body.innerHTML = CONSENT_MESSAGE; } else { el.insertAdjacentHTML('afterend', CONSENT_MESSAGE); } }); } function hidePrivacyMessage() { // Remove from the main document document.querySelectorAll(`.${CONSENT_MESSAGE_CLASS}`).forEach(el => el.remove()); // Remove from inside any iframes document.querySelectorAll('iframe').forEach(iframe => { const doc = iframe.contentDocument || iframe.contentWindow.document; doc.querySelectorAll(`.${CONSENT_MESSAGE_CLASS}`).forEach(el => el.remove()); }); } function activateGatedScripts() { // Handle both new format (cmp-gated-script) and old OneTrust/Ketch format (optanon-category-4) const gatedScripts = Array.from(document.querySelectorAll('script.cmp-gated-script, script.optanon-category-4')); // Activate scripts sequentially with a small delay to avoid timing issues let delay = 0; gatedScripts.forEach(function(placeholder, index) { setTimeout(function() { // Skip if already processed if (placeholder.hasAttribute('data-cmp-processed')) { return; } placeholder.setAttribute('data-cmp-processed', 'true'); const newScript = document.createElement('script'); newScript.type = 'text/javascript'; // Try new format first (data-cmp-src), then fall back to old format (data-src) const src = placeholder.getAttribute('data-cmp-src') || placeholder.getAttribute('data-src'); if (src) { newScript.src = src; } else if (placeholder.textContent) { // Inline script - just copy the content newScript.textContent = placeholder.textContent; } // Handle new format attributes (data-cmp-attrs) - for both inline and external scripts const attrs = placeholder.getAttribute('data-cmp-attrs'); if (attrs) { const tempDiv = document.createElement('div'); tempDiv.innerHTML = '
<\/div>'; const tempAttrs = tempDiv.firstChild.attributes; for (let i = 0; i < tempAttrs.length; i++) { // For external scripts, allow defer/async. For inline scripts, skip them (not valid) if (src || (tempAttrs[i].name !== 'async' && tempAttrs[i].name !== 'defer')) { newScript.setAttribute(tempAttrs[i].name, tempAttrs[i].value); } } } // Copy other attributes from old OneTrust format for (let i = 0; i < placeholder.attributes.length; i++) { const attr = placeholder.attributes[i]; // Skip attributes we've already handled or don't want to copy if (!['class', 'data-src', 'data-type', 'data-cmp-src', 'data-cmp-attrs', 'data-cmp-processed', 'type', 'async', 'defer', 'src'].includes(attr.name)) { newScript.setAttribute(attr.name, attr.value); } } placeholder.parentNode.replaceChild(newScript, placeholder); // If external script, manually trigger window.onload handlers after it loads // This handles widgets that use window.onload for initialization if (src) { newScript.addEventListener('load', function() { // If page already loaded and script set a new onload handler, trigger it if (document.readyState === 'complete' && window.onload) { const originalOnload = window.onload; window.onload = null; // Clear temporarily to prevent loops originalOnload(); // Execute the handler } }); } }, delay); delay += 500; // 500ms delay between each script to allow full loading }); } cbsoptanon.onScriptsReady(function(cmp) { cmp.ot.targetingAllowed(function(allowed) { if (!allowed) { showPrivacyMessage(); } else { activateGatedScripts(); } }); cmp.ot.awaitInitialConsent(function(consent_model) { cmp.ot.addOnConsentChangedHandler(function() { cmp.ot.targetingAllowed(function(allowed) { if (allowed) { hidePrivacyMessage(); activateGatedScripts(); } else { showPrivacyMessage(); } }); }); }); });