91³Ô¹ÏÍø

Watch CBS News

Former state Controller Betty Yee suspends bid for California governor

Former state Controller Betty Yee announced Monday that she is suspending her bid for California governor, telling CBS News California Investigates in an interview that the decision was due to internal polling.

Yee's exit comes just days after former Rep. Eric Swalwell dropped his own bid for governor and resigned from Congress amid sexual misconduct allegations, upending a race in which recent polling shows nearly a quarter of likely California primary voters remain undecided.

With no clear Democratic frontrunner emerging in those surveys, pressure has been building on lower-polling candidates to drop out of the race. Party leaders, including state Democratic Party Chairman Rusty Hicks, have warned that a crowded field could splinter the vote and risk advancing only Republicans to the general election under California's top-two primary system.

Yee said the decision to suspend her campaign was not due to ongoing pressure from the Democratic Party.

"I mean, they're doing their job and for whatever reason decided to put money into a poll that would narrow the field," Yee said in an interview with CBS News California Investigates just hours before she announced the decision publicly. 

She called the so-called "shame polls" a self-fulfilling prophecy. But said her decision to end her campaign stemmed from her own internal polling. 

"What they were saying, which was concerning, was that experience and competence was not polling as high as we thought when I first started this race," Yee said.  

betty-yee.jpg
Former gubernatorial candidate Betty Yee, former State Controller, during the California Governor Candidate Forum presented by Empowerment Congress at the California Science Center in Los Angeles, CA on Saturday, Jan. 17, 2026. Myung J. Chun / Los Angeles Times via Getty Images

In a conversation with CBS News California Investigates correspondent Julie Watts, Yee expanded on why she thinks her campaign never took off.

"We are in this new era where it's kind of almost a reality TV show mentality that people want, and frankly, conflict sells," she said. "That's what gets people's attention."

The longtime fiscal watchdog — who served on the state Board of Equalization before her tenure as controller — was widely seen as one of the most competent and qualified candidates for governor, including by fellow candidates who spoke highly of Yee in background conversations with CBS News California. Several said they hoped she would work in their administrations if they won the race.

"I'm not a flashy person, I don't come with gimmicks," Yee acknowledged. "I even joked with my team one time, maybe I just need to bring a folding stool and throw it off the stage just to get some attention. I mean, what's it gonna take, right?"

Yee reflected on the emotional toll of the race, the realities of the numbers, and why she believes now is the time to step aside.

"I am stepping aside from this race for governor because this is a time where I do not see a path to be successful. But success comes in all different forms," Yee added. "I do feel we've run a successful campaign. But the work doesn't stop here. My commitment to public service is both in my public life and in my personal life. So I will be back to the communities."

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