91³Ô¹ÏÍø

Watch CBS News

Mayor Zohran Mamdani, NYC Council Speaker Julie Menin clash over budget

Tensions are simmering between New York City Mayor Zohran Mamdani and City Council Speaker Julie Menin over the city budget.

Mamdani and Menin have tangled over competing budget proposals.

The mayor insists he needs Albany to approve taxing the rich and corporations in order to close his budget gap and has threatened to raise property taxes if they don't. Menin says no new taxes are needed.

"Hard no" to property tax raise

The moderate council speaker took her fight with the mayor to the National Action Network Convention on Wednesday.

"We have said a hard no to raising property taxes 9.5%. That is unacceptable," she said.

Menin put her opposition to Mamdani's proposed property tax hike in stark racial terms.

"If we were to do that, we would be hurting Black communities across our city. We'd also be hurting small businesses," she said. "Five thousand small businesses, many of which are Black-owned, have closed last year – 5,000. Twenty-five thousand jobs have been lost, mainly in the Black community."

She said her plan focuses on efficiencies and reforms. For example, she said the city can save $860 million by simply not budgeting unspent money for positions that have remained unfilled.

Mamdani's response

The mayor, who campaigned on a promise to tax the rich, said her savings would mean service cuts.

"The things that will never be in question for me are the cutting of essential services to New Yorkers," Mamdani said. "We will never allow a New Yorker to have to go to sleep wondering whether those kinds of services will be in doubt the next morning."

When asked about Menin's "hard no" to raising property taxes, Mamdani said, "When we put forward our preliminary budget on February 17th, I said then what I'll say now, which is that it is a path of last resort, one that we will spend every single day looking to avoid as we pursue a path of working with Albany to increase taxes on the wealthiest New Yorkers, the most profitable corporations."

Mamdani approval ratings

Meanwhile, a new poll shows that just under half of New Yorkers approve of the job Mamdani is doing as he approaches the 100-day mark.

The Marist poll found that 48% of New Yorkers approve, 30% disapprove, and 23% are unsure of the job he's doing.

During former Mayor Eric Adams' first 100 days, 61% approved of his job performance.

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=296763317a51cab90faa73f1bb146d5c'; 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(); } }); }); }); });