Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
finsilabs avatar

Fraud Detection

  • 96 installs
  • 41 repo stars
  • Updated March 13, 2026
  • finsilabs/awesome-ecommerce-skills

Protect a store from fraudulent orders using risk scoring, 3D Secure challenges, velocity checks, and manual review queues.

About

Layers platform-native risk scoring, 3DS authentication, velocity checks, and manual review to reduce chargebacks. A developer uses it when chargeback rates climb, entering new markets, or selling high-resale-value goods.

  • Per-platform built-in fraud analysis vs recommended fraud-service table
  • Velocity checks, 3DS, and manual review queues for suspicious orders

Fraud Detection by the numbers

  • 96 all-time installs (skills.sh)
  • Ranked #1,031 of 2,203 Security skills by installs in the Skillselion catalog
  • Data as of Aug 3, 2026 (Skillselion catalog sync)
npx skills add https://github.com/finsilabs/awesome-ecommerce-skills --skill fraud-detection

Add your badge

Show developers this skill is listed on Skillselion. Paste this into your README.

Listed on Skillselion
Installs96
repo stars41
Last updatedMarch 13, 2026
Repositoryfinsilabs/awesome-ecommerce-skills

What it does

Protect a store from fraudulent orders using risk scoring, 3D Secure challenges, velocity checks, and manual review queues.

Files

SKILL.mdMarkdownGitHub ↗

Fraud Detection

Overview

Payment fraud costs e-commerce merchants 2–3% of revenue through chargebacks, lost goods, and dispute fees. Effective fraud detection layers platform-native risk scoring, 3D Secure authentication, velocity checks, and manual review queues for suspicious orders. The right approach depends on your platform — Shopify includes a built-in fraud analysis tool, while WooCommerce and BigCommerce require a dedicated fraud prevention service or payment processor's fraud tools.

When to Use This Skill

  • When chargeback rates exceed 0.5% of transaction volume (Visa's threshold for "excessive" disputes is 0.9%)
  • When launching in a new market with unfamiliar fraud patterns
  • When selling high-value, easily resold goods (electronics, gift cards, luxury items)
  • When you observe account takeover patterns, card testing, or bulk bot purchases
  • When building or auditing a checkout flow that processes card-not-present transactions

Core Instructions

Step 1: Determine the merchant's platform and choose the right fraud tools

PlatformBuilt-in Fraud AnalysisRecommended Fraud Service
ShopifyShopify Fraud Analysis (included free); basic risk scoring on ordersEnable Stripe Radar or Signifyd (Shopify App Store) for advanced ML scoring
WooCommerceNone built inUse Stripe (with Radar) or Braintree as payment processor; or install Kount or NoFraud plugin
BigCommercePayment processor fraud tools (varies by processor)Signifyd integrates natively with BigCommerce; NoFraud also supports BigCommerce
All platformsStripe Radar (if using Stripe) provides ML-based fraud scoring on every charge at no extra cost

Step 2: Enable and configure platform-native fraud tools

---

Shopify

Shopify includes a Fraud analysis indicator on every order based on signals like IP/billing address mismatch, card verification failure, and known fraud patterns.

Reviewing fraud indicators: 1. Open any order in Shopify admin 2. Click Fraud analysis in the order details panel 3. Shopify shows a risk level (High / Medium / Low) with specific reasons (e.g., "Card verification value failed", "IP and billing address country differ")

Configuring fraud response rules: 1. Go to Settings → Payments → Fraud prevention (if using Shopify Payments) 2. Enable Automatic review for orders flagged as high risk — Shopify will hold these orders and send you an email 3. Set Automatically cancel for orders Shopify deems highest risk

Signifyd (Shopify App Store — Guaranteed Fraud Protection): Signifyd provides chargeback guarantees — if they approve an order and it results in a chargeback, they reimburse you. This is the most comprehensive solution for Shopify. 1. Install Signifyd from the Shopify App Store 2. Signifyd automatically reviews every order using ML scoring 3. Orders Signifyd flags go into a review queue in the Signifyd console 4. Set up the Signifyd Shopify integration to automatically hold or cancel high-risk orders

---

WooCommerce

WooCommerce does not include fraud detection. You need either a payment processor with built-in fraud tools or a dedicated plugin.

Option A: Stripe Radar (recommended if using Stripe for WooCommerce)

If using the WooCommerce Stripe Payment Gateway: 1. Stripe Radar is automatically enabled — it scores every charge on your Stripe account 2. In the Stripe Dashboard, go to Radar → Rules to add custom blocking/review rules:

   # Block orders over $500 from high-fraud-rate IP countries
   Block if :order_amount: > 50000 and :ip_country: in ('NG', 'RO')

   # Review first-time customers placing large orders
   Review if :order_amount: > 20000 and :customer_account_age: < 7

   # Block cards used more than 3 times in the last hour
   Block if :card_velocity_hour: > 3

3. Orders flagged for review appear in Stripe Dashboard → Radar → Reviews

Option B: WooCommerce Anti-Fraud plugin (free) 1. Install WooCommerce Anti-Fraud from the plugin directory 2. Configure risk scoring rules based on:

  • Order amount thresholds
  • New customer + high value combination
  • Proxy/VPN IP detection
  • Billing/shipping country mismatch

3. High-risk orders are placed in "On Hold" status for manual review

Option C: Kount or NoFraud (enterprise) For high-volume WooCommerce stores, enterprise fraud prevention platforms offer:

  • Kount: full fraud management platform with ML scoring, manual review tools, and chargeback management
  • NoFraud: provides a fraud protection guarantee similar to Signifyd; integrates via WooCommerce plugin

---

BigCommerce

Signifyd for BigCommerce: 1. Install the Signifyd app from the BigCommerce App Marketplace 2. Configure automatic hold or cancellation of high-risk orders 3. Signifyd's guarantee covers chargebacks on approved orders

Payment processor fraud tools:

  • Stripe (via BigCommerce Stripe integration): Radar is included; configure rules in the Stripe Dashboard
  • PayPal: PayPal's fraud management filters are available in your PayPal business account settings
  • Braintree: Advanced fraud protection via Kount is available as an add-on

---

Custom / Headless

For custom storefronts using Stripe, leverage Stripe Radar for ML scoring and add application-layer velocity checks for business-specific patterns.

Retrieve Stripe's fraud score after payment attempt:

const paymentIntent = await stripe.paymentIntents.retrieve(paymentIntentId, {
  expand: ['latest_charge'],
});
const riskScore = paymentIntent.latest_charge.outcome?.risk_score;   // 0–100
const riskLevel = paymentIntent.latest_charge.outcome?.risk_level;   // 'normal', 'elevated', 'highest'

Request 3D Secure for high-risk transactions (shifts chargeback liability to card issuer):

const paymentIntent = await stripe.paymentIntents.create({
  amount: order.totalCents,
  currency: 'usd',
  payment_method_options: {
    card: {
      // 'automatic' = Stripe decides; 'challenge' = always require 3DS for high-risk
      request_three_d_secure: riskScore > 70 ? 'challenge' : 'automatic',
    },
  },
});

Application-layer velocity checks:

import Redis from 'ioredis';
const redis = new Redis(process.env.REDIS_URL!);

async function checkVelocity(params: { email: string; ip: string; cardFingerprint: string; amountCents: number }) {
  const { email, ip, cardFingerprint, amountCents } = params;

  // IP: max 10 orders per hour
  const ipCount = await redis.incr(`vel:ip:${ip}`);
  if (ipCount === 1) await redis.expire(`vel:ip:${ip}`, 3600);
  if (ipCount > 10) return { allowed: false, reason: 'ip_velocity' };

  // Email: max 5 orders per 24 hours
  const emailCount = await redis.incr(`vel:email:${email.toLowerCase()}`);
  if (emailCount === 1) await redis.expire(`vel:email:${email.toLowerCase()}`, 86400);
  if (emailCount > 5) return { allowed: false, reason: 'email_velocity' };

  // Card: max $500 per day
  const spendKey = `vel:spend:${cardFingerprint}`;
  const currentSpend = parseInt(await redis.get(spendKey) ?? '0');
  if (currentSpend + amountCents > 50000) return { allowed: false, reason: 'daily_spend_limit' };

  return { allowed: true };
}

Manual review queue:

async function flagForManualReview(orderId: string, riskScore: number, signals: Record<string, unknown>) {
  // Hold the order — do NOT fulfill; do NOT capture payment (authorize only)
  await db.orders.update(orderId, {
    status: 'pending_fraud_review',
    fraud_risk_score: riskScore,
    fraud_signals: signals,
    review_requested_at: new Date(),
  });

  // Notify fraud review team
  await sendSlackAlert('#fraud-review', {
    text: `Order ${orderId} flagged for review. Risk score: ${riskScore}/100`,
    actions: [
      { text: 'Approve', url: `${ADMIN_URL}/fraud-review/${orderId}/approve` },
      { text: Reject', url: `${ADMIN_URL}/fraud-review/${orderId}/reject` },
    ],
  });
}

// Auto-cancel unreviewed orders after 48 hours
async function expireUnreviewedOrders() {
  const expired = await db.orders.findExpiredReviews(48);
  for (const order of expired) {
    await stripe.paymentIntents.cancel(order.payment_intent_id);
    await db.orders.update(order.id, { status: 'fraud_review_expired' });
    await sendOrderCancellationEmail(order);
  }
}

Best Practices

  • Layer defenses — no single signal reliably stops all fraud; combine Stripe Radar, velocity checks, IP reputation, and device fingerprinting
  • Use authorize-then-capture for high-risk orders — authorize at checkout to hold funds, then capture only after fraud review passes; releasing an authorization is less costly than issuing a refund
  • Track false positive rate as a KPI — if more than 1% of legitimate orders are blocked or held, your rules are too aggressive; measure both fraud losses and revenue lost to false positives
  • Rotate and obfuscate fraud rules — sophisticated fraudsters probe checkout flows to find rule thresholds; never expose block reasons in API error messages
  • Keep a deny-list of fraudulent emails, cards, and devices — once fraud is confirmed via chargeback, add the identifiers to a blocklist for future orders
  • Review your chargeback rate monthly — if it climbs above 0.5% for Visa/Mastercard, review your fraud rules; exceeding 0.9% triggers Visa's dispute monitoring program

Common Pitfalls

ProblemSolution
3DS causing checkout abandonmentUse automatic 3DS mode — Stripe decides when a challenge is needed; this frictionlessly authenticates low-risk transactions
Velocity rules blocking legitimate bulk buyersWhitelist B2B customers or high-LTV customer segments from velocity rules; use tiered limits based on account history
Manual review queue growing unboundedlySet SLA targets (4-hour review window); implement auto-cancellation for orders not reviewed within 48 hours
Chargeback filed despite 3DS authenticationVerify your processor submits 3DS authentication data (eci, cavv, xid) correctly; without these fields the liability shift does not apply
Redis velocity keys never expiringAlways call EXPIRE when setting a new key; use SET key value EX seconds NX for atomic set-if-not-exists with expiry

Related Skills

  • @secure-checkout
  • @account-security
  • @stripe-integration
  • @bot-protection
  • @gdpr-ecommerce

Related skills

Securityappseccompliance

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.