TxnKit

Clean merchant names for messy transaction feeds

Run safe sample descriptors and see the merchant name, category, confidence, and warnings TxnKit returns.

Deterministic first. No live LLM, crawler, logo-provider, or third-party enrichment calls during POST /v1/enrich.

Safe sample live preview POST /v1/enrich
TxnKit output
Ready for safe samples. API offline appears if the endpoint is unreachable.
Joe's Coffee
Food and Drink 72% square
Icon
No reviewed logo
Warnings
local merchant identity not verified

Built for visible transaction-feed quality

Raw Plaid, Teller, Yodlee, MX, open-banking, and card descriptors make good apps look unfinished.

TxnKit is the practical enrichment layer for small fintech, expense, budgeting, accounting, loyalty, cashback, personal finance, and AI-built finance apps.

Clean transaction display

Normalize processor wrappers, merchant names, category hints, recurrence signals, and logo-ready metadata for transaction rows users can understand.

Logo variants are metadata, not decorative examples

Returned logo candidates are described by format, size, theme, background, shape, purpose, source, and confidence so clients can choose the right asset for each UI state.

Deterministic-first enrichment

Normalize before predicting. Low-confidence results return warnings instead of pretending every descriptor is solved.

Integration-ready contract

Start from OpenAPI, examples, and fixtures. MCP and SDKs come after the core API stabilizes.

What happens on a miss

A weak match should produce a usable fallback, not a fake merchant profile.

Low-confidence descriptors return normalized text, confidence, signals, and warnings. Website and logo fields stay empty unless reviewed merchant evidence supports them.

Fallback response
{
  "raw_description": "POS PURCHASE 742 MAIN ST CAFE",
  "display_name": "Main St Cafe",
  "confidence": 0.56,
  "logos": {
    "preferred": null,
    "variants": [],
    "warnings": ["avoid_logo_display"]
  },
  "warnings": [
    "local_merchant_identity_not_verified"
  ]
}

Proof before claims

The public surface is examples, contracts, and guardrails.

100

Descriptor audit

Send anonymized descriptors only.

0

Live research calls

No LLMs, crawlers, or logo providers in the request path.

20 max

Signals

Bounded reason codes for cleanup, confidence, and warnings.

Performance and reliability

Built for fast, repeatable enrichment without a live research dependency.

TxnKit keeps the online path deterministic and cache-first, so transaction display does not wait on an LLM prompt, crawler, logo lookup, or third-party enrichment provider.

No live vendor calls

No live LLM, crawler, logo-provider, or third-party enrichment calls run during POST /v1/enrich.

Bounded failure modes

Responses use bounded confidence, signals, and warnings so architects can design fallback UI instead of debugging free-form enrichment text.

Hard request boundary

The deterministic path has a documented 1 second timeout target and returns fallback or timeout behavior instead of waiting for offline metadata work.

Contract-first integration

OpenAPI, fixtures, smoke tests, and preflight checks give senior developers a concrete contract to inspect before they wire TxnKit into production screens.

Early access pricing

Start free. Pay small. Pilot when the cleanup is worth production use.

Pricing is intentionally simple while the product validates one ICP, one pain, and the right paid conversion path.

Audit Free

100 anonymized descriptors, before/after cleanup, no integration required.

Starter $49/month

$490/year. Up to 2,500 enrichments/month and one API key.

Pilot $499/month

$4,990/year. Up to 50,000 enrichments/month, one production API key, email support.

Scale Custom

Higher volume, coverage planning, retention review, and support expectations.

API shape

One endpoint. One descriptor.

Send one safe descriptor. Get merchant metadata, confidence, signals, and warnings.

POST /v1/enrich
{
  "raw_description": "SQ *JOES COFFEE 0421 TORONTO",
  "amount": 6.75,
  "currency": "CAD",
  "country": "CA",
  "mcc": "5814"
}

{
  "display_name": "Joe's Coffee",
  "category": "Food and Drink",
  "confidence": 0.72,
  "processor_hint": "square",
  "warnings": ["local_merchant_identity_not_verified"]
}

Privacy guardrails

Never send sensitive financial data.

Safe samples first

Demo examples are synthetic. Custom input waits for live privacy rejection.

Data minimization by default

Metrics should use bounded status, confidence, and warning fields. Raw descriptors do not belong in analytics, URLs, storage, or error reports.

Visible uncertainty

Low-confidence results should omit strong website and logo-variant claims unless reviewed merchant records support them.

Trust signals

Evidence-backed, not badge-driven.

OpenAPI contract

Integrators can inspect the request, response, and privacy rejection shape before they wire anything into an app.

Public benchmark

Examples and expected outputs are visible instead of hidden behind broad merchant-coverage claims.

Privacy guarded

Do not send card numbers, account numbers, full statements, customer PII, or bank credentials.

Deterministic first

Parsing, reviewed seed data, confidence, and warnings come before any advisory model behavior.

No live vendor calls

The request path does not call LLMs, crawlers, logo providers, or third-party enrichment APIs.

Versioned releases

Public pages, OpenAPI metadata, and release metadata stay tied to the workspace version.

Contact us

Ask about a 100-descriptor cleanup audit. Send anonymized descriptors only; no card numbers, account numbers, full statements, or customer PII.

Email TxnKit