91³Ô¹ÏÍø

Watch CBS News

Stocks make comeback, close in the green after early losses

Stocks rebounded after early losses as investors largely shrugged off new government data showing the U.S. economy shrank in the first three months of the year.

The S&P 500 rose 8 points, or 0.2%, to close at 5,569 points, while the Dow Jones Industrial Average added 142 points or  0.4% to close at 40,669. The tech-heavy Nasdaq Composite shed 15 points, or 0.1%.

Stocks fells sharply in early trading after the Commerce Department reported that the economy contracted 0.3% in the first quarter, down from growth of 2.4% in the final three months of 2024. 

"Equity traders will not be happy with the negative GDP headline," Carl Weinberg, chief economist at High Frequency Economics, said in a research note. "Contracting GDP is not good for company profits, whatever the cause."

The latest GDP readout was also lower than forecast of 0.8% growth from economists polled by FactSet. Bret Kenwell, an investment analyst eToro, said in an email to CBS MoneyWatch that it was the lowest GDP reading since the first quarter of 2022.

Still, the report may not fully reflect the state of economic growth, economists cautioned. Part of what dragged the GDP number down, they said, was a surge in imports as businesses sought to get ahead of tariffs.

The GDP rate could be "subject to notable revisions," Kenwell noted, given the Trump administration's stop-and-go trade policies towards trading partners Canada and Mexico.

Things were looking up later in the day after a report said the measure of inflation that the Fed likes to use slowed to 2.3% in March, the Associated Press .

Tariffs weigh on markets

Stocks have swung wildly in recent weeks amid concerns about the economic fallout from President Trump's policies.

Mr. Trump blamed stock market performance on President Biden in a Truth Social on Wednesday and said a boom from the tariffs was coming.

"This is Biden's Stock Market, not Trump's. I didn't take over until January 20th. Tariffs will soon start kicking in, and companies are starting to move into the USA in record numbers," he wrote. "Our Country will boom, but we have to get rid of the Biden 'Overhang.' This will take a while, has NOTHING TO DO WITH TARIFFS, only that he left us with bad numbers..."

Investors will get another important economic snapshot on Friday, when the Labor Department releases data on April job growth. The April jobs report is expected to show that employers added 135,000 jobs, FactSet data shows, with than March's tally of 228,000.

A  from ADP on Wednesday suggests hiring is slowing down, with private employers adding 62,000 jobs in April, less than half of the number of jobs added in March. 

And while corporate profits are holding up, the full impact of surging economic uncertainty on consumer spending and business investment has yet to materialize, equity analyst Adam Crisafulli of Vital Knowledge told investors in a report. 

"The Q1 earnings season has been a bright spot vs. subdued expectations back in [April], but there is still enormous uncertainty on the outlook, and herein lies a key risk as the narrative is growing increasingly complacent on tariffs, with many people assuming the worst is in the past when in fact the effects of Trump's trade war haven't been fully felt," he said.

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