91³Ô¹ÏÍø

Watch CBS News

Your boss could be watching: Why California lawmakers killed a workplace surveillance bill

Do you ever feel like someone's watching you? Well, you might be right, and it might be your boss.

CBS News California Investigates correspondent Julie Watts looked into why state lawmakers killed a bill that would have limited workplace surveillance when you're off the clock and in private places.

Artist Olivia Stober was working to make ends meet at a retail job until she realized her boss was tracking her every move in real time.

"Along with watching us, she was also listening," Stober said. "If she saw me or heard me on the cameras not greeting a customer the right way or not getting them signed up for our reward system, she would catch all of that and she would text us or email or call the store phone about it."

Surveillance can be anywhere in California workplaces, from the parking lot to the break room and even your computer or the bathroom.

"Employers have a lot of latitude in the workplace to do video monitoring and really lots of different kinds of surveillance," said Hayley Tsukayama, with the Electronic Frontier Foundation.

Tsukayama added that some of that surveillance "doesn't get turned off when they're off the clock."

It's already illegal in California to record video of you in places like bathrooms, where there's a reasonable expectation of privacy.

But that doesn't mean your boss isn't using other surveillance to track how often or how long you're in the bathroom, locker room, lactation room or other private places.

Your boss can record video and audio, even when you're off duty and in places like break rooms and cafeterias by using new artificial intelligence tools that can flag keywords related to performance, productivity or even personal complaints.

In some cases, workplace surveillance can even follow you home.

, which would have  by barring monitoring in employee-only areas such as break rooms and locker rooms, as well as during off-duty hours.

Employers who violated the measure could have faced civil penalties of $500 per violation, enforceable by public prosecutors.

But the business community came out in force to fight it.

"We respectfully disagree that an employee has the same right to privacy in those spaces where you could have other employees," said Ashley Hoffman, on behalf of the California Chamber of Commerce, opposing the bill in .

, including the California State Association of Counties, declined our interview requests. They argue that banning the use of AI and audio recordings in public places jeopardizes safety and security.

 to address different concerns as it made its way through the California Legislature. It eventually passed seven different committees and the Assembly before it finally died on the Senate floor because there simply weren't enough senators who agreed that your bosses shouldn't be surveilling you when you're off the clock.

"It breeds just an environment of distrust that really trickles down," Stober said.

Stober said she is disappointed in the California senators.

"I guess my most charitable take would be that they – I don't even have a charitable take," she said.

Rather than relying on the state to act, Stober said she found a new job where the cameras are trained on the door and not on her.

"My bosses trust me," she said. "They trust me to do my job, and so I do my job really well."

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