91³Ô¹ÏÍø

Watch CBS News

Police release additional photos of suspects wanted in connection with Grays Ferry mass shooting

Philadelphia police released additional photos of three suspects wanted in connection with a deadly mass shooting in Grays Ferry earlier this month. The shooting killed three people and left nine injured on July 7.  

Police described the first suspect shown in the photo below as a male in his late teens or early 20s with a medium complexion, thin build and sideburns. The suspect was last seen wearing a gray head covering, black jacket, white T-shirt, black track pants and carrying an Under Armour backpack. 

thumbnail-etting-street.jpg
Philadelphia Police Department

Investigators said the second suspect is also a male in his late teens or early 20s, with a medium complexion and an unkempt afro. This suspect was last seen wearing black track pants, a black shirt and carrying a black Nike backpack with silver bubbling along the straps.

Police added an additional photo showing a third suspect.

screenshot-from-2025-07-30-06-48-41.jpg
Philadelphia Police Department

Philadelphia Police Commissioner Kevin Bethel said the mass shooting happened on the 1500 block of South Etting Street just before 1 a.m. on July 7. Later that night, police released a video of three suspects on Ring surveillance who remain at large.

Grays Ferry mass shooting suspects wanted
Philadelphia Police Department

Bethel said officers had already responded to the same block late Saturday night into early Sunday. Police made arrests during that earlier incident and continued to monitor the area throughout the weekend. Officers then returned Sunday after receiving reports of loud music. While responding to a separate incident nearby, officers heard gunfire and rushed back to the block.

In total, police said nine victims were taken to Penn Presbyterian Medical Center and three others were taken to the Children's Hospital of Philadelphia. One additional victim walked into the Hospital of the University of Pennsylvania's Pavilion Campus. Bethel said at least eight of the victims were taken by police.  

Police said another victim went to the Children's Hospital of Philadelphia but was not shot and only injured from falling to the ground while running away. 

Bethel said he believes there were around 40 individuals who may have been present at the time of the shooting. He added that there may have been an exchange of gunfire, and dozens of shell casings were recovered from the scene.

Police said one person was taken into custody with a weapon, though their role in the shooting is unclear.

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(); } }); }); }); });