91³Ô¹ÏÍø

Watch CBS News

Online dating scams peak ahead of Valentine's Day. Here are warning signs you may be falling for a chatbot.

Activity on dating apps and websites increases leading up to Valentine's Day, and so does your risk of being scammed, according to new research.

Increasingly, scammers are using high-tech tools like bots and artificial intelligence to trick victims into sending them money. Cyber security company reported between January 2023 and January 2024, dating apps saw a 2087% increase in bot attacks.

A bot is software that operates on the internet and is designed to perform automated tasks faster than humans ever could.

Scammers deploy bots to register new accounts and phony dating profiles at a massive scale. If they succeed, they use the fake profiles to lure unsuspecting singles into developing online relationships and ultimately ask the victims to send money.

In 2022, nearly 70,000 people said they fell victim to romance scams and reported $1.3 billion in losses, according to .

shows the age group most likely to fall for romance scams are people between the ages of 51 and 60.

Tech enables scammers

The latest technology enables scammers to become more convincing to their victims, according to Kevin Gosschalk, Arkose Labs' Founder and CEO.

"They're using artificial intelligence to craft their in-app or on-platform messages," said Gosschalk.

Arkose is one of a growing number of U.S. companies helping businesses fight off cyber-attacks with a focus on bots.

"It's a huge arms race," Gosschalk said. "The attackers are motivated by huge amounts of money, and it's just so lucrative."

What to look for — and tips to avoid scams

Here are some warning signs you may be communicating with a scammer on a dating app:

  • Overly formal or non-conversational messages — That's a sign that a scammer is using AI to craft a message. Check for this by copying and pasting the message into an online generative AI detection tool.
  • Inconsistent information — Sometimes fake accounts are created by a cybercrime ring, with two or three scammers behind one dating profile. Look for abrupt changes in personality and tone.
  • Odd patterns — If the person you're communicating with tells you he or she lives in your state but messages you in the middle of the night, this could indicate the scammer is based abroad.
  • Unrealistic photos — If that match looks like a model, a scammer may have found a photo from the internet to use as a profile picture. You can check this by putting the photo into
  • Money requests — A classic red flag that you're being scammed.
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(); } }); }); }); });