npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

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.

Readme

easyenrichment — Transaction Enrichment API for Node.js & TypeScript

The simplest way to enrich bank transactions. Turn raw descriptions like AMZN MKTP US*2K4X9Y1Z0 into structured merchant data — name, category, logo, MCC code, subscription detection, and more — with one function call. The most affordable Plaid Enrich and Ntropy alternative.

npm version npm downloads API Status TypeScript License: MIT


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 easyenrichment
yarn add easyenrichment
pnpm add easyenrichment

Quick 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.98

20 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-time

Detect 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

Get your free API key →


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


License

MIT — Easy Enrichment

Built by Easy Enrichment — Transaction enrichment that just works.