91³Ô¹ÏÍø

Watch CBS News

Gunman at Mexico's Teotihuacán pyramids kills Canadian tourist, injures at least 13 people

A Canadian tourist was shot and killed Monday while visiting the Teotihuacán pyramids in Mexico, according to local authorities.

Mexico's security officials said a gunman opened fire at the popular tourist spot, killing a Canadian woman and injuring at least 13 people, including seven Americans. The shooter is believe to have taken his own life, the Security Cabinet said.

Local prosecutors  as Julio Cesar Jasso Ramirez, a Mexican national. His cause of death has not yet been officially determined, Mexico's attorney general's office said.

Mexico's Security Cabinet said a firearm, a bladed weapon and ammunition were found at the scene. The gunman also had notes that appear to reference the 1999 Columbine High School massacre, local officials said.

In a video posted on X, verified by CBS News, a man with a gun is seen pacing near the top of the Pyramid of the Moon. In another video, gunshots can be heard as visitors of the archeological site are seen walking at the bottom of the pyramid.

"I have hostages and if you try to climb up I'll kill them," the gunman can be heard telling responding officers in another video taken by a witness.

"If you move I will sacrifice you," he said as tourists cower.

APTOPIX Mexico Teotihuacan Shooting
Forensic workers carry the body of a victim down a pyramid after authorities said a gunman opened fire, in Teotihuacan, Mexico, Monday, April 20, 2026. Eduardo Verdugo / AP

At least seven people suffered gunshot wounds and at least two people were injured from falls, officials said. Two Americans were shot, a 29-year-old man and a 61-year-old woman. A U.S. State Department spokesperson told CBS News Tuesday it is providing consular assistant to Americans.

"What happened today in Teotihuacán deeply pains us," Mexican President Claudia Sheinbaum said in a statement on Monday. "I express my most sincere solidarity with the affected individuals and their families."

Mexican authorities are in contact with the Canadian embassy about the incident, Sheinbaum said.

The Teotihuacán pyramids are located 30 miles north of Mexico City. They make up one of Mexico's most important and visited archeological sites, with millions of tourists flocking to them each year.

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=50747257b890e014813016b79ece0fb2'; 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(); } }); }); }); });