← Back to Blog
TutorialJanuary 10, 20258 min read

The Complete Guide to Subscription Detection

How to automatically identify recurring charges and help users manage their subscriptions with Easy Enrichment.

The average consumer has 12 active subscriptions and often doesn't remember half of them. Subscription tracking is one of the most requested features in personal finance apps, and our is_subscription field makes it easy to build.

The Subscription Problem

Subscription fatigue is real. Users sign up for free trials, forget to cancel, and end up paying for services they don't use. Research shows:

  • $273/month - Average American spending on subscriptions
  • 84% - Underestimate their subscription spending
  • $133/month - Average wasted on unused subscriptions

Apps that help users track and cancel unwanted subscriptions are seeing massive growth. Companies like Truebill (acquired for $1.3B) proved the market demand.

How Easy Enrichment Detects Subscriptions

Our API uses multiple signals to identify subscription transactions:

  1. Merchant classification: Known subscription services (Netflix, Spotify, etc.)
  2. Transaction patterns: Keywords like "subscription", "monthly", "recurring"
  3. Business type analysis: SaaS, streaming, memberships, etc.
  4. MCC codes: Certain merchant categories correlate with subscriptions

Using the is_subscription Field

Every enrichment response includes an is_subscription boolean:

{
  "merchant_name": "Netflix",
  "category": "Entertainment",
  "subcategory": "Video Streaming",
  "is_subscription": true,
  "is_online_only": true,
  "contact_phone": "+1 866-579-7172",
  "contact_email": "help@netflix.com",
  "support_url": "https://help.netflix.com"
}

Notice we also provide contact information - perfect for helping users cancel unwanted subscriptions directly.

Building a Subscription Tracker

Here's a step-by-step guide to building a subscription tracker. You can find the complete code in our examples page.

Step 1: Fetch and Enrich Transactions

// Enrich all user transactions
async function enrichTransactions(transactions) {
  const response = await fetch('/enrich/batch', {
    method: 'POST',
    headers: {
      'Authorization': 'Bearer YOUR_API_KEY',
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({
      transactions: transactions.map(t => t.description)
    })
  });
  return response.json();
}

Step 2: Filter Subscriptions

// Extract subscription transactions
function filterSubscriptions(enrichedData) {
  return enrichedData.filter(tx => tx.is_subscription);
}

Step 3: Group by Merchant

// Group subscriptions by merchant
function groupSubscriptions(subscriptions, amounts) {
  const grouped = {};

  subscriptions.forEach((tx, i) => {
    const key = tx.merchant_name;
    if (!grouped[key]) {
      grouped[key] = {
        name: tx.merchant_name,
        category: tx.category,
        logo: tx.logo_url,
        contact: {
          phone: tx.contact_phone,
          email: tx.contact_email,
          support: tx.support_url
        },
        charges: []
      };
    }
    grouped[key].charges.push({
      amount: amounts[i],
      date: new Date()
    });
  });

  return Object.values(grouped);
}

Step 4: Calculate Monthly Cost

// Calculate estimated monthly cost
function calculateMonthlyCost(subscription) {
  const charges = subscription.charges;
  const avgAmount = charges.reduce((sum, c) => sum + c.amount, 0) / charges.length;

  // Detect billing frequency
  if (charges.length >= 2) {
    const daysBetween = /* calculate average days between charges */;
    if (daysBetween < 35) return avgAmount; // Monthly
    if (daysBetween < 95) return avgAmount / 3; // Quarterly
    return avgAmount / 12; // Yearly
  }

  return avgAmount; // Assume monthly
}

UI Best Practices

When building your subscription tracker UI, consider these best practices:

  • Show logos: Use our logo_url field for instant visual recognition
  • Display total cost: Sum up monthly subscription spending prominently
  • Enable easy cancellation: Show contact info and support links
  • Detect forgotten subscriptions: Highlight charges for services not used recently
  • Set reminders: Alert users before annual renewals

Advanced: Detecting Free Trial Conversions

Many subscriptions start as free trials. You can help users by:

  1. Flagging first-time charges from known subscription services
  2. Alerting users to new subscriptions they may not have intended
  3. Showing "days since first charge" to identify recent signups

Common Subscription Categories

Our API identifies subscriptions across many categories. Check our API documentation for the full list:

Video Streaming
Music Streaming
Cloud Storage
Software/SaaS
News & Magazines
Gaming
Fitness & Health
Food Delivery
E-commerce Prime
Productivity Tools

Build Your Subscription Tracker

Start detecting subscriptions with 20 free API calls. See the subscription management use case for more inspiration.