easyenrichment
v1.1.0
Published
Transaction enrichment API SDK — Turn raw bank transaction descriptions into merchant name, logo, category, MCC code, subscription detection & contact info using AI. Plaid Enrich alternative. Open banking. From 1¢/call.
Maintainers
Keywords
Readme
easyenrichment — Transaction Enrichment API for Node.js & TypeScript
The simplest way to enrich bank transactions. Turn raw descriptions like
AMZN MKTP US*2K4X9Y1Z0into structured merchant data — name, category, logo, MCC code, subscription detection, and more — with one function call. The most affordable Plaid Enrich and Ntropy alternative.
What is Transaction Enrichment?
Bank transaction descriptions are cryptic: POS DEBIT VISA CHECK CARD 4821 TARG*T 000009834. Transaction enrichment transforms these into structured data your users can understand: "Target", "Shopping", with a logo, category, and contact info.
Easy Enrichment is a transaction enrichment API powered by AI (Claude) that returns merchant name, logo URL, spending category, MCC code, subscription detection, carbon footprint, and contact information — from any bank transaction description worldwide.
Install
npm install easyenrichmentyarn add easyenrichmentpnpm add easyenrichmentQuick Start — Enrich a Bank Transaction
import EasyEnrichment from 'easyenrichment';
const client = new EasyEnrichment({
apiKey: 'YOUR_API_KEY' // Get yours free at https://easyenrichment.com
});
// Enrich a single bank transaction description
const result = await client.enrich('AMZN MKTP US*2K4X9Y1Z0');
console.log(result.data.merchant_name); // "Amazon"
console.log(result.data.category); // "Shopping"
console.log(result.data.logo_url); // "https://img.logo.dev/amazon.com..."
console.log(result.data.is_subscription); // false
console.log(result.data.mcc_code); // "5942"
console.log(result.data.confidence); // 0.9820 free API calls on signup. No credit card required. Sign up →
Features
| Feature | Description |
|---|---|
| Merchant Name Extraction | Clean, readable merchant name from any bank description |
| Merchant Logo URL | Direct URL to high-quality merchant logo |
| Spending Categorization | Primary category, subcategories, and business type |
| MCC Code Lookup | Standard Merchant Category Code for each transaction |
| Subscription Detection | Automatically identify recurring payments (Netflix, Spotify, etc.) |
| Contact Information | Phone number, email, and support URL per merchant |
| Carbon Footprint | CO2 impact category (low/medium/high) per transaction |
| Batch Enrichment | Enrich up to 100 transactions in a single API call |
| Global Coverage | Works with transactions from any country, any language |
| AI-Powered | Uses Claude AI for 90%+ accuracy on merchant identification |
| TypeScript Support | Full type definitions and IntelliSense |
| Zero Dependencies | Uses native fetch — no bloat (Node.js 18+) |
Usage Examples
Enrich a Single Bank Transaction
import EasyEnrichment from 'easyenrichment';
const client = new EasyEnrichment({ apiKey: 'YOUR_API_KEY' });
const result = await client.enrich('UBER *TRIP HELP.UBER.COM');
console.log(result.data);
// {
// merchant_name: "Uber",
// category: "Transportation",
// categories: ["Transportation", "Ride Sharing"],
// subcategory: "Ride Sharing",
// business_type: "Transportation Network",
// mcc_code: "4121",
// is_chain: true,
// is_subscription: false,
// is_online_only: false,
// domain: "uber.com",
// logo_url: "https://img.logo.dev/uber.com?...",
// brand_id: "uber_us",
// country: "US",
// contact_phone: "+1-800-593-7069",
// contact_email: "[email protected]",
// support_url: "https://help.uber.com",
// co2_category: "medium",
// confidence: 0.97,
// description: "Uber ride payment"
// }Batch Enrich Multiple Transactions
Process up to 100 bank transactions in a single request. Each transaction is billed individually at the same rate.
const result = await client.enrichBatch([
'NETFLIX.COM',
'SPOTIFY P1234',
'AMZN MKTP US*2K4X9Y1Z0',
'STARBUCKS #9281',
'UBER *TRIP',
'SQ *BLUE BOTTLE COFFE',
'APPLE.COM/BILL',
'TST* SWEETGREEN'
]);
for (const item of result.data.results) {
console.log(`${item.merchant_name} | ${item.category} | ${item.is_subscription ? 'Subscription' : 'One-time'}`);
}
// Netflix | Entertainment | Subscription
// Spotify | Entertainment | Subscription
// Amazon | Shopping | One-time
// Starbucks | Food & Drink | One-time
// Uber | Transportation | One-time
// Blue Bottle | Food & Drink | One-time
// Apple | Technology | Subscription
// Sweetgreen | Food & Drink | One-timeDetect Subscriptions and Recurring Payments
const transactions = [
'NETFLIX.COM',
'SPOTIFY SUBSCRIPTION',
'AMZN MKTP US',
'HULU 8374923',
'APPLE.COM/BILL',
'TARGET #1234'
];
const result = await client.enrichBatch(transactions);
const subscriptions = result.data.results.filter(r => r.is_subscription);
console.log('Recurring payments found:');
subscriptions.forEach(s => console.log(` - ${s.merchant_name} (${s.category})`));
// Recurring payments found:
// - Netflix (Entertainment)
// - Spotify (Entertainment)
// - Hulu (Entertainment)
// - Apple (Technology)Get Merchant Logos for Your Finance App
const result = await client.enrich('STARBUCKS STORE 12345');
const logoUrl = result.data.logo_url;
// Use directly in your app: <img src={logoUrl} alt={result.data.merchant_name} />Categorize Expenses for Accounting
const result = await client.enrichBatch(bankTransactions);
const byCategory = {};
for (const item of result.data.results) {
byCategory[item.category] = byCategory[item.category] || [];
byCategory[item.category].push(item);
}
console.log(byCategory);
// {
// "Food & Drink": [...],
// "Shopping": [...],
// "Transportation": [...],
// "Entertainment": [...]
// }Check Account Balance and Usage
const balance = await client.balance();
console.log(`${balance.data.balance} credits remaining`);
const usage = await client.usage();
console.log(`${usage.data.total_requests} total API calls`);
console.log(`${usage.data.requests_today} calls today`);Response Fields — Full Merchant Data
Every enriched transaction returns these fields:
| Field | Type | Description | Example |
|---|---|---|---|
| merchant_name | string | Clean, readable merchant name | "Amazon" |
| category | string | Primary spending category | "Shopping" |
| categories | string[] | All applicable categories | ["E-commerce", "Shopping"] |
| subcategory | string | Specific sub-category | "Online Marketplace" |
| business_type | string | Type of business | "E-commerce Platform" |
| mcc_code | string | Standard Merchant Category Code | "5942" |
| is_chain | boolean | Part of a chain or franchise | true |
| is_subscription | boolean | Recurring/subscription payment | false |
| is_online_only | boolean | Online-only merchant | true |
| domain | string | Merchant website domain | "amazon.com" |
| logo_url | string | Direct URL to merchant logo (128px) | "https://img.logo.dev/..." |
| brand_id | string | Unique brand identifier | "amazon_us" |
| country | string | Country code (ISO 3166-1 alpha-2) | "US" |
| contact_phone | string | Customer support phone number | "+1-888-280-4331" |
| contact_email | string | Customer support email | "[email protected]" |
| support_url | string | Help/support page URL | "https://amazon.com/help" |
| co2_category | string | Carbon footprint estimate | "medium" |
| confidence | number | AI confidence score (0.0 to 1.0) | 0.98 |
| description | string | Human-readable description | "Amazon Marketplace purchase" |
Error Handling
import EasyEnrichment, { EasyEnrichmentError } from 'easyenrichment';
const client = new EasyEnrichment({ apiKey: 'YOUR_API_KEY' });
try {
const result = await client.enrich('SOME TRANSACTION');
} catch (error) {
if (error instanceof EasyEnrichmentError) {
console.log(error.code); // "INSUFFICIENT_BALANCE"
console.log(error.message); // "Insufficient balance. Please add funds."
console.log(error.status); // 402
}
}| Error Code | HTTP Status | Description |
|---|---|---|
| INVALID_DESCRIPTION | 400 | Missing or empty transaction description |
| UNAUTHORIZED | 401 | Invalid or missing API key |
| INSUFFICIENT_BALANCE | 402 | No credits remaining — top up at dashboard |
| RATE_LIMIT | 429 | Too many requests — slow down |
| SERVER_ERROR | 500 | Internal server error — retry later |
Configuration Options
const client = new EasyEnrichment({
apiKey: 'enrich_xxxxxxxxxxxx', // Required — get at https://easyenrichment.com
timeout: 15000, // Request timeout in ms (default: 30000)
});Easy Enrichment vs Plaid Enrich vs Ntropy vs Mastercard Ethoca
| Feature | Easy Enrichment | Plaid Enrich | Ntropy | Mastercard Ethoca | Visa Merchant Search |
|---|---|---|---|---|---|
| Public pricing | From 1¢/call | Contact sales | Contact sales | Enterprise only | Enterprise only |
| Free trial | 20 free calls | 200 calls | 2,000 calls | No | No |
| No sales call required | Yes | Depends | Depends | Required | Required |
| npm SDK | easyenrichment | — | — | — | — |
| Batch API | Up to 100/req | Yes | Yes | N/A | N/A |
| Response time | ~500ms | ~200ms | ~100ms | N/A | N/A |
| AI-powered | Claude AI | ML models | Custom LLM | Rule-based | Rule-based |
| Merchant logo | Yes | Yes | No | Yes | No |
| Subscription detection | Yes | Yes | Yes | No | No |
| Carbon footprint | Yes | No | No | No | No |
| MCC codes | Yes | Yes | Yes | Yes | Yes |
| Contact info | Yes | No | No | No | No |
| Global coverage | Worldwide | US/Canada | Global | Global | Global |
| Minimum commitment | $0 | Varies | Free tier | Enterprise | Enterprise |
Why developers choose Easy Enrichment over Plaid Enrich
- No enterprise contract. Sign up, get an API key, start enriching in 30 seconds
- Transparent pricing. 1-2¢ per call, published on the website. No hidden fees
- npm package.
npm install easyenrichment— ready in one line - More data per call. Contact info, carbon footprint, subscription detection, and logo URL included
- Global. Works with bank transactions from any country, not just US/Canada
Pricing — Transaction Enrichment API
Simple, transparent, prepaid credits:
| Purchase | Credits | Per API Call | Savings | |----------|---------|-------------|---------| | $10 | 500 | 2.0¢ | — | | $25 | 1,666 | 1.5¢ | 25% off | | $50 | 4,166 | 1.2¢ | 40% off | | $100 | 10,000 | 1.0¢ | 50% off |
- 20 free API calls on signup — no credit card required
- No monthly fees. Buy credits, use them whenever
- Credits never expire
- Cached results are free — same description within 7 days costs nothing
Use Cases
Personal Finance Apps
Enrich transaction feeds to show clean merchant names, logos, and spending categories. Replace POS DEBIT VISA 4821 TARG*T with "Target — Shopping" and a logo.
Subscription Management
Detect recurring payments automatically with is_subscription. Help users find and cancel forgotten subscriptions.
Accounting & Bookkeeping Software
Auto-categorize expenses using MCC codes and spending categories. Export clean data for tax preparation and financial reporting.
Banking & Neobank Apps
Display merchant logos and clean names in transaction history. Provide carbon footprint insights for eco-conscious customers.
Expense Management & Corporate Cards
Categorize employee expenses automatically. Flag unusual merchants. Generate spending reports by category.
Financial Data Analytics
Enrich large transaction datasets for market research, competitive intelligence, or spending analysis. Batch API handles 100 transactions per request.
CommonJS / Require
const { EasyEnrichment } = require('easyenrichment');
const client = new EasyEnrichment({ apiKey: 'YOUR_API_KEY' });
client.enrich('STARBUCKS STORE 12345').then(result => {
console.log(result.data.merchant_name); // "Starbucks"
});API Rate Limits
| Limit | Value | |-------|-------| | Per minute | 100 requests | | Per day | 10,000 requests |
Need higher limits? Contact us.
Links
- Website: easyenrichment.com
- API Documentation: easyenrichment.com/docs
- Dashboard: easyenrichment.com/dashboard
- Pricing: easyenrichment.com/pricing
- GitHub: github.com/AI-Factory-Dev/easyenrichment-api
- API Status: api.easyenrichment.com/health
- Contact: easyenrichment.com/contact
License
MIT — Easy Enrichment
Built by Easy Enrichment — Transaction enrichment that just works.
