91³Ô¹ÏÍø

Watch CBS News

Results of mayoral races in Massachusetts

Tuesday was Election Day for dozens of communities across Massachusetts. There were high-profile mayoral races in several cities. 

Boston election 

, Mayor Michelle Wu was unopposed in her bid for a second term after winning big in the preliminary election over Josh Kraft, who then dropped out of the race in September. 

Brockton mayoral election 

In Brockton, City Councilor Moises Rodrigues defeated City Councilor Jean Bradley Derenoncourt. According to unofficial results, Rodrigues received 6,680 votes (50.54%) and Derenoncourt received 6,420 votes (48.57%). Rodrigues will be the city's first elected mayor of color.

Everett mayoral election 

In Everett, City Councilor Robert Van Campen defeated Mayor Carlo DeMaria. According to unofficial results, Van Campen received 4,118 votes and DeMaria received 3,440 votes. 

DeMaria has been the mayor of Everett since 2008. 

Fall River mayoral election

In Fall River, incumbent Mayor Paul Coogan narrowly won re-election over Gabriel Boomer Amaral. Mayor Coogan earned 5,841 votes (50.68%) and Amaral received 5,616 votes (48.73%) according to unofficial results.  

Lawrence mayoral election 

In Lawrence, incumbent Brian De Pena won re-election against Juan "Manny" Gonzalez in the mayor's race. According to unofficial results, De Pena earned 5,982 votes to Gonzalez's 5,110. 

Secretary of the Commonwealth Bill Galvin's office said it would be monitoring the election in Lawrence after "numerous complaints" about absentee ballot applications.

Methuen mayoral election

In Methuen, incumbent Mayor DJ Beauregard won re-election against Barbara R. Stoebel. According to unofficial results, Beauregard received 4,459 votes to Stoebel's 1,064.  

Somerville mayoral election 

In Somerville, City Councilor Jake Wilson won the mayoral election, defeating City Councilor Willie Burnley Jr. According to , Wilson had 11,185 votes (54.26%) and Burnley received 9,054 votes (43.93%). 

Incumbent Somerville Mayor Katjana Ballantyne ran for re-election, but did not advance past the preliminary stage.

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