📘 Public beta · Endpoints are stable; OpenAPI specs and SDKs ship monthly. See changelog →
Products
Bank Statement
Supported banks

Supported banks

Native parsers (deterministic, sub-second)

BankCodeTested formats
BCABCAPersonal account · Tahapan · KlikBCA · m-BCA mobile PDF
MandiriMANDIRIPersonal · Livin' by Mandiri · Mandiri Corporate
BRIBRIBRImo · BRI internet banking · branch-printed
BNIBNIPersonal · BNI Mobile · BNI internet banking
PermataPERMATAPersonal · PermataMobile X · Permata Corporate
DanamonDANAMOND-Bank PRO · Danamon internet banking
BTNBTNPersonal · BTN Mobile
OCBCOCBCOCBC ONE Mobile · OCBC internet banking

For these banks, parsing is rule-based: high accuracy (~99.5%), sub-second, zero inference cost. No AI fallback unless the format is materially different from anything we've seen.

Detection-only + AI fallback (Quantum AI)

For these banks, we have header-detection rules (so detectedBank is set correctly) but no rule-based extractor yet — parsing routes to the AI fallback. End-to-end the call still succeeds; the difference is parse cost and per-bank tuning.

  • CIMB Niaga (CIMB_NIAGA) — detection-only; AI parser handles extraction; ~96% first-pass accuracy
  • Maybank Indonesia (MAYBANK_ID) — detection-only; AI parser handles extraction; ~95% first-pass accuracy

For these, no detection rule yet — AI parser handles both detection and extraction:

  • Bank Mega, Bank Bukopin, Bank Sinarmas
  • HSBC Indonesia, Standard Chartered Indonesia
  • DBS Indonesia, UOB Indonesia
  • Bank syariah (BSI, Muamalat, Mega Syariah)
  • BPDs (regional development banks) and BPRs (rural banks)

AI parsing is slower (3–8s) and slightly less accurate than native, but handles arbitrary layouts. When detectedBank comes back as UNKNOWN, you're in pure AI mode — accuracy is still ≥ 92% in our QA but you may want to flag for analyst review on low-confidence rows.

How bank detection works

When you don't pass bank_hint:

  1. Header recognition — searches the first page for known bank logos, masthead text, and account-number formats.
  2. Format fingerprint — column structure, font set, page geometry. Each native parser has a fingerprint signature.
  3. Confidence threshold — if the highest-confidence match is below 0.85, we fall through to the AI parser.

Detection accuracy is ~99.7% across the eight native banks. The remaining 0.3% are usually heavily redacted statements where the bank name is masked.

Hint vs auto-detect

Use caseRecommendation
You know the bank upstream (customer told you)Always pass bank_hint — slightly faster, removes ambiguity
Document Intelligence-style upload UXSkip bank_hint; trust auto-detect
Multi-source aggregation (consumer told you it's "any of these 5 banks")Pass bank_hint=AUTO (default) and inspect detectedBank after parsing

Requesting a new native parser

Native parsers are built when transaction volume justifies them. The bar is roughly:

  • 500+ statements/month from a single bank, or
  • 5+ customer requests for the same bank

To request:

  1. Email sales@quantumelixir.tech with the bank name and expected monthly volume.
  2. We ask for 30+ sample statements (sanitized), covering a range of account types (personal, premier, corporate) and date ranges.
  3. Dev + validation is typically 2–3 weeks.
  4. New native parser deploys behind a feature flag; you opt in after validation against your volume.

AI parser is fine for most use cases

Don't over-rotate on native parsers. The AI parser is good enough for ~95% of use cases. Native parsers matter when you're doing real-time inline parsing where 3-8 seconds matters, or when your accuracy bar is regulator-grade (>99.5%).

Sandbox

Sandbox accepts all eight native parsers + AI fallback. Test PDFs are available at:

https://sandbox.quantumelixir.tech/bank-statement/fixtures/{bank}-sample.pdf

Where {bank} is the lowercase code: bca, mandiri, bri, etc. Each fixture includes a few months of synthetic transactions for end-to-end testing.