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:
- Merchant classification: Known subscription services (Netflix, Spotify, etc.)
- Transaction patterns: Keywords like "subscription", "monthly", "recurring"
- Business type analysis: SaaS, streaming, memberships, etc.
- 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:
- Flagging first-time charges from known subscription services
- Alerting users to new subscriptions they may not have intended
- 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:
Build Your Subscription Tracker
Start detecting subscriptions with 20 free API calls. See the subscription management use case for more inspiration.