91³Ô¹ÏÍø

Watch CBS News

How retailers are using AI to stop return fraud

Consumers returned nearly $900 billion worth of merchandise in 2024. While returns are considered a routine cost of doing business, return fraud is on the rise, leading retailers to turn to artificial intelligence to combat it.

The average return rate last year was about 17%, according to industry data. Retailers say fraudsters are increasingly exploiting lenient policies, often by sending back cheaper or different items than what was originally purchased.

Happy Returns, a logistics company that processes millions of returns each year for major apparel brands, reports that return fraud has reached record levels, with as many as one in nine returns being fraudulent.

About 1% of returns dropped off at Happy Returns locations are flagged as high risk, said CEO David Sobie. Of those flagged returns, roughly 13.5% are confirmed to be fraudulent.

While the system simplifies returns for consumers, Sobie said it also makes it easier for fraudsters to abuse the process.

To address the problem, Happy Returns has introduced an artificial intelligence system called Return Vision, which assigns a fraud risk score to each returned item. The system analyzes customer behavior and item details, similar to how a credit score assesses financial risk, red-flagging certain customers.

"If there's ever been fraud associated with your email address or your physical address, that can trigger a high-risk score," Sobel said.

"Other attributes might be the time between when the item was delivered and when the return was started. Because if it's suspiciously close, the person probably didn't even have time to open the package, and now they want to return it."

Items flagged as high risk are routed to secondary screening, where they undergo closer inspection using AI image analysis.

Kayla Hunter, a senior product manager at Happy Returns, demonstrated fraud screening. In one case, a pair of designer jeans appeared identical to the item listed on a retailer's website. However, AI detected subtle differences in the waistline, revealing the returned jeans were a cheaper duplicate, not the $298 item originally purchased.

In another case, an orange sweater closely resembled the item bought by the customer, but AI detected differences in the knit pattern and color. The returned sweater was matched to a $36.99 version, significantly less than the $200 sweater the customer claimed to return.

In cases where fraud is confirmed, refunds are withheld, and the item is returned to the retailer. Customer accounts associated with fraudulent returns are also flagged, with data shared upstream to help prevent future abuse. "We feed this data into the upstream data, and their email physical address will get flagged," Hunter said.

Consumers may also feel the effects of return fraud, as retailers tighten return policies and charge fees for returns to protect themselves from mounting losses.

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