Zero-dependency detector for product identifiers. Recognizes UPC-12, EAN-13, ISBN-10, ISBN-13, GTIN-14, Amazon ASIN, and Walmart item_id from a raw string. Returns the type plus a normalized form, so your code can dispatch to the right lookup API.
npm i @retailerapi/identifierimport { detectIdentifier } from '@retailerapi/identifier';
detectIdentifier('194629116676');
// { type: 'upc', normalized: '194629116676' }
detectIdentifier('978-0-553-21311-9');
// { type: 'isbn', normalized: '9780553213119' }
detectIdentifier('B07ABCDEFG');
// { type: 'asin', normalized: 'B07ABCDEFG' }
detectIdentifier('19667262713');
// { type: 'item_id', normalized: '19667262713' }type IdentifierType = 'upc' | 'ean' | 'isbn' | 'gtin' | 'item_id' | 'asin';
interface DetectedIdentifier {
type: IdentifierType;
normalized: string;
}
detectIdentifier(raw: string): DetectedIdentifier | null;
identifierType(raw: string): IdentifierType | null; // shortcut
isIdentifier(raw: string): boolean; // shortcut| Length | Prefix | Detected as |
|---|---|---|
| 10 chars, last is digit or X | — | isbn (ISBN-10) |
| 13 digits | 978 or 979 |
isbn (ISBN-13) |
| 13 digits | anything else | ean |
| 14 digits | starts with 0 |
strips the zero, detects again |
| 14 digits | non-zero | gtin |
| 12 digits | — | upc |
B0 + 8 alphanumeric |
— | asin |
| 6-11 or 12+ digits | — | item_id (opaque retailer SKU) |
Inputs are stripped of whitespace, hyphens, and underscores before matching.
- Verify check digits. Real-world catalogs routinely surface off-by-one rows; an over-strict validator filters real data. If you need check-digit math, use a dedicated library.
- Normalize across forms (e.g. UPC-12 → EAN-13 by prefixing
0). That's a downstream concern.
@retailerapi/mcp— MCP server giving Claude/Cursor product-data tools backed by retailerapi.- retailerapi.com — Unified product API: Walmart, Amazon, eBay, Lowe's, Target, Best Buy, Home Depot. Free tier 1,000 lookups/mo.
MIT