91³Ô¹ÏÍø

Watch CBS News

Food prices are up, but your Thanksgiving feast will cost less this year

As stubborn U.S. inflation continues to drive grocery prices higher in 2025, one surprising exception is emerging this month: the cost of preparing your Thanksgiving meal. 

Consumers can expect to spend about 2% to 3% less this year on Turkey Day groceries, according to a recent Wells Fargo of a typical Thanksgiving feast. 

Shoppers are likely to pay less this year because the foods that make up a traditional Thanksgiving meal aren't the ones driving grocery inflation, the bank found. Grocery prices overall rose 2.7% in September from a year ago, according to the latest Consumer Price Index, led by increases in beef, bananas and coffee — none of which are Thanksgiving staples.

"At the heart of the uptick in the CPI's food-at-home increase is protein, specifically beef and eggs, which are not on the Thanksgiving menu," Wells Fargo's analysts said in the report. "Without those items, consumers will find relief in a traditional Thanksgiving meal."

That may surprise some shoppers, with more than two-thirds saying they're bracing for a pricier Thanksgiving grocery bill, according to from financial services company Empower. 

Consumers who stick to store brands are expected to spend a total of about $80 on Thanksgiving dinner ingredients for a meal to feed 10 people, while buying brand-name products could push that amount to $95, the analysis found. That's based on serving a meal of turkey, stuffing, frozen vegetables, prepared mashed potatoes, gravy, fresh cranberries, dinner rolls, salad mix, and pumpkin pie with whipped cream.

That translates to between roughly $8 and $9.50 per person. Here's where shoppers will save money this year on typical Thanksgiving foods, according to Wells Fargo:

  • Retail prices for turkeys are down 3.7% from a year ago
  • Name-brand frozen vegetables are down 15% in price because of competition from private-label brands
  • Private-brand dinner rolls have declined 22%, which Wells Fargo attributed to falling demand for bread products
  • Stuffing, prepared gravy mix and fresh cranberries have dipped between 3% and 4% in price
  • National brand pumpkin pies cost 3% less

A few items have increased in price, Wells Fargo noted. For instance, the cost of whipping cream has risen 3% from a year ago.

Walmart's $4 Thanksgiving dinner

Some major grocery chains are touting even more affordable Thanksgiving meals, such as Walmart's package — lower even than the retailer's .

The price drop isn't only down to lower ingredient prices. This year, Walmart's $4 deal includes 23 items, a slightly stingier offering than the 29 items included in last year's Thanksgiving meal bundle.

Some of the changes include:

  • One can of Campbell's cream of mushroom soup in 2025, versus two cans in last year's package. 
  • No fresh onions or celery 
  • No Jiffy corn muffin mix

Other retailers are also getting in on the budget Thanksgiving train, including Aldi's and Target's roughly holiday dinner bundle.

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