B bank-statement-parser

De la extras bancar
la JSON normalizat.

Incarci CSV sau CAMT.053. Noi parsam, reconciliem soldul si iti dam inapoi tranzactiile ca obiecte curate, gata pentru integrare, reconciliere sau audit.

0.01 RON toleranta reconciliere sold
34 txn parsate din fixture real Revolut
10 / luna extrase gratuit, fara card

Un singur obiect. Toate campurile de care ai nevoie.

Raspunsul pe `/transactions` e un array de obiecte normalizate. Fiecare tranzactie pastreaza si payload-ul brut al bancii in `raw`, ca sa poti audita orice decizie de parsare.

Cum arata o tranzactie bancara normalizata — acelasi format indiferent de banca sau format sursa.

  • booked_at Data la care banca a inregistrat operatiunea
  • amount Signed decimal, string pentru precizie exacta
  • type credit / debit / fee / interest
  • counterparty Nume si IBAN, cand sunt prezente in sursa
  • raw Obiect JSON cu tot ce a extras parser-ul din fisierul original
transaction.json
{
  "id": "txn_01HNABC8K2YQX7...",
  "statement_id": "stmt_01HNDEF9...",
  "booked_at": "2026-03-15",
  "value_date": "2026-03-15",
  "amount": "1250.00",
  "currency": "RON",
  "type": "credit",
  "description": "Transfer primit - factura PDAF 16",
  "counterparty": {
    "name": "ACME SRL",
    "iban": "RO49AAAA1B31007593840000"
  },
  "reference": "PDAF-16",
  "category": null,
  "raw": {
    // payload original CAMT.053, pastrat ca sa poti
    // audita orice decizie de parsare
    "EndToEndId": "E2E-1234",
    "MndtId": "MND-9876",
    "BankTxCd": "PMNT/RCDT/DMCT"
  }
}

Trei apeluri. Nimic magic.

Fluxul e async pentru ca parser-ul ruleaza intr-un job — extrasele mari nu te fac sa astepti pe deschis request HTTP.

Trimiti fisierul

POST multipart cu extrasul, codul bancii si formatul. Primesti imediat 202 si un upload_id.

POST /api/v1/uploads

Parsam si reconciliem

Un job din background alege parser-ul potrivit, extrage tranzactiile si verifica sold initial + sum = sold final. Daca nu iese, primesti eroare explicita.

background worker

Citesti rezultatul

Tranzactii normalizate, filtrate dupa upload, statement, interval, valuta, tip. Fara paginare pentru extrase sub 1000 linii.

GET /api/v1/transactions

Onest despre ce suportam acum.

Incepem cu ce folosim noi in productie — Revolut Business, care acopera 80% din exporturile din Romania. Bancile traditionale vin in v1.1, pe masura ce validam formatele cu utilizatori reali.

Banca Format Extensie Status
Revolut Business CAMT.053 .xml in productie
Revolut Business CSV .csv in productie
BCR MT940 .sta planificat v1.1
Banca Transilvania MT940 .sta planificat v1.1
ING MT940 .sta planificat v1.1
Raiffeisen, Unicredit MT940 / CSV .sta / .csv in evaluare
Intesa, FirstBank, CEC PDF .pdf v2 (OCR)

Trei motive pentru care nu iti scrii propriul parser.

Reconciliere de sold, nu doar parsare.

Fiecare statement este validat: opening + sum(signed amounts) = closing. Daca ecuatia nu iese cu toleranta de 0.01, statement-ul e marcat failed si tranzactiile NU sunt inserate.

Dupa luni de greseli tacute pe parser-e ad-hoc, asta e singurul semnal care conteaza.

Multi-tenant din prima linie de cod.

Fiecare upload, statement si tranzactie e legata de un account_id. Global scope pe Eloquent + policies enforced la nivel de query. Un cont nu poate vedea niciodata datele altui cont.

Nu-ti trebuie workaround-uri cand scalezi de la un client la zece.

Zero retentie implicita.

Fisierul original e pastrat pe disc numai ca sa poti declansa reparse cand descoperi un bug. Raw-ul din JSON ramane in tranzactii pentru audit, dar il poti arhiva sau sterge oricand.

Nimic nu paraseste workspace-ul tau in afara raspunsurilor API pe care le ceri explicit.

Gratis pentru integrare si validare. Dupa aceea, vorbim.

free plan
0RON / luna
  • 10 extrase incarcate / luna
  • Acces complet la API v1
  • Toate formatele suportate
  • Panou Filament inclus
  • Suport pe email
Creeaza cont gratuit

Nu cerem card pentru free plan. Zece extrase pe luna sunt suficiente pentru integrare si o luna de testare reala, atat timp cat nu procesezi un portofoliu intreg de clienti deodata.

Pentru volume mai mari, planurile Starter (100 / luna), Pro (500 / luna) sau Enterprise (nelimitat) sunt disponibile manual — onboarded individual, fara Stripe deocamdata. Scrie-ne si punem la punct un plan.

Toate planurile primesc aceleasi parser-e, aceleasi SLA de reconciliere, aceleasi raspunsuri JSON. Singura diferenta e numarul de upload-uri lunare.

Un workspace, zece extrase, zero configurari.

Iti creezi cont, confirmi email-ul si in cinci minute ai primul extras parsat. Daca nu se intampla, scrie-ne si reparam.