What this service does
Bank Statement Parser extracts transactions from Czech bank statement PDFs and returns structured JSON.
Upload a PDF — the service identifies the bank, parses all transactions, and delivers clean, machine-readable data.
How it works
1
Upload — drag & drop or click to select a PDF bank statement.
2
Classify — the service checks that the document is a Czech bank statement (keyword scoring across the first two pages).
3
Detect bank — the bank is identified by its unique PDF signature (header text, labels, formatting).
4
Parse — a bank-specific parser extracts account info, statement metadata, and every transaction.
5
Return JSON — the result is displayed in the browser and available for download.
Dates are returned as ISO strings YYYY-MM-DD. Amounts are floats — debits are negative, credits are positive. Unparsed fields are null.
Supported banks
JSON structure
{
"bank": "KB",
"account": {
"number": "123456789/0100",
"iban": "CZ1201000001234567890",
"bic": "KOMBCZPP",
"owner": "Jan Novák",
"currency": "CZK",
"type": "Osobní účet"
},
"statement": {
"number": "12",
"period_from": "2024-01-01",
"period_to": "2024-01-31",
"date_issued": "2024-02-01",
"opening_balance": 10000.00,
"closing_balance": 8500.50,
"total_credited": 5000.00,
"total_debited": -6499.50
},
"transactions": [
{
"date_posted": "2024-01-05",
"date_valuta": "2024-01-05",
"amount": -350.00,
"currency": "CZK",
"type": "Platba kartou",
"description": "Albert supermarket Praha",
"counterparty_account": null,
"counterparty_name": "ALBERT ČR",
"vs": null,
"ks": null,
"ss": null,
"fee": null,
"transaction_id": "TXN20240105001",
"balance_after": 9650.00,
"raw_line": null
}
]
}
Top-level fields
bank
string
Bank identifier: KB, MONETA, AIRBANK, CSOB, MBANK, RAIFFEISENBANK, FIO, UNICREDIT, SPORITELNA, PARTNERS_BANKA
account
object
Account metadata
statement
object
Statement-level summary
transactions
array
List of all transactions on the statement
account
number
string|null
Account number in Czech format, e.g. 123456789/0100
iban
string|null
International Bank Account Number (IBAN)
bic
string|null
Bank Identifier Code (BIC / SWIFT)
owner
string|null
Account holder name
currency
string
Account currency, typically CZK
type
string|null
Account type as printed on the statement (e.g. Osobní účet)
statement
number
string|null
Statement serial number
period_from
string|null
Start of statement period (YYYY-MM-DD)
period_to
string|null
End of statement period (YYYY-MM-DD)
date_issued
string|null
Date the statement was issued (YYYY-MM-DD)
opening_balance
float|null
Account balance at the start of the period
closing_balance
float|null
Account balance at the end of the period
total_credited
float|null
Sum of all incoming amounts (positive)
total_debited
float|null
Sum of all outgoing amounts (negative)
transactions[ ]
date_posted
string|null
Booking date — when the transaction hit the account (YYYY-MM-DD)
date_valuta
string|null
Value date — when the amount takes effect for interest calculation (YYYY-MM-DD)
amount
float|null
Transaction amount. Negative = debit (outgoing), positive = credit (incoming)
currency
string
Transaction currency (usually CZK)
type
string|null
Transaction type as printed (e.g. Platba kartou, Příchozí úhrada, Výběr z bankomatu)
description
string|null
Payment message / merchant name / note for the recipient
counterparty_account
string|null
Counterparty account number, e.g. 987654321/0300
counterparty_name
string|null
Name of the counterparty (sender or recipient)
vs
string|null
Variable symbol (variabilní symbol) — used for payment matching in CZ
ks
string|null
Constant symbol (konstantní symbol) — identifies payment nature
ss
string|null
Specific symbol (specifický symbol) — additional reference set by payer
fee
float|null
Transaction fee (populated by Air Bank only; null for all other banks)
transaction_id
string|null
Bank's internal transaction identifier
balance_after
float|null
Account balance immediately after this transaction
raw_line
string|null
Raw text line from the PDF (used for debugging)
Czech ID Parser
Czech ID Parser extracts structured data from photos of Czech identity cards (Občanský průkaz).
Upload a photo of the front or back side — the service reads all printed fields and returns clean JSON.
Handles rotated images, glare, and both card generations (pre-2012 and 2012-present).
How it works
1
Upload photo — take a photo or scan of the Czech ID card, front or back side. JPEG, PNG and WebP are supported.
2
Preprocess — EXIF orientation is corrected automatically, contrast is boosted, and the image is resized if needed before sending to the AI.
3
Vision AI extraction — an AI vision model reads all text fields. If any critical field is missed on the first pass, a targeted retry is made automatically.
4
MRZ validation — for the back side, the MRZ zone is parsed algorithmically with ICAO 9303 checksum verification to cross-validate AI-extracted fields.
5
Return JSON — all extracted fields are returned as structured JSON, with null for unreadable fields.
ID JSON — front side
{
"document_type": "cz_id",
"side": "front",
"front": {
"document_number": "123456789",
"surname": "NOVÁK",
"given_names": "JAN",
"date_of_birth": "01.01.1990",
"sex": "M",
"place_of_birth": "Praha",
"nationality": "ČESKÁ",
"date_of_issue": "15.03.2020",
"date_of_expiry": "15.03.2030",
"technical_number": "900101"
},
"back": null
}
front fields
document_number
string|null
9-character document number (ČÍSLO DOKLADU)
surname
string|null
Surname (PŘÍJMENÍ)
given_names
string|null
All given names (JMÉNO)
date_of_birth
string|null
Date of birth in DD.MM.YYYY format
place_of_birth
string|null
Place of birth (MÍSTO NAROZENÍ)
nationality
string|null
Nationality (STÁTNÍ OBČANSTVÍ)
date_of_issue
string|null
Date of issue DD.MM.YYYY (DATUM VYDÁNÍ)
date_of_expiry
string|null
Expiry date DD.MM.YYYY (PLATNOST DO)
technical_number
string|null
6-digit number near the STÁTNÍ OBČANSTVÍ field — first 6 digits of rodné číslo (YYMMDD), printed for age verification without exposing the full personal number
ID JSON — back side
{
"document_type": "cz_id",
"side": "back",
"front": null,
"back": {
"address": "Václavské náměstí 1, Praha 1",
"personal_number": "900101/1234",
"marital_status": "svobodný",
"mrz_line1": "IDCZE123456789<0<<<<<<<<<<<<<<<",
"mrz_line2": "9001011M3003159CZE<<<<<<<<<<<6"
}
}
back fields
address
string|null
Full residential address — all address lines combined into one string
personal_number
string|null
Full rodné číslo, format YYMMDD/XXXX — filled from MRZ if not printed visibly
marital_status
string|null
Marital status (rodinný stav) if visible, e.g. svobodný / vdaná
mrz_line1
string|null
First MRZ line — exactly 30 characters, starts with IDCZE
mrz_line2
string|null
Second MRZ line — exactly 30 characters, ICAO 9303 TD1 format
MRZ cross-validation: the back side MRZ is parsed algorithmically with ICAO 9303 checksum verification. If personal_number was not read from the printed text, it is extracted directly from the MRZ optional data field and formatted as YYMMDD/XXXX.
Що робить цей сервіс
Bank Statement Parser витягує транзакції з PDF-виписок чеських банків і повертає структурований JSON.
Завантажте PDF — сервіс визначить банк, розбере всі транзакції та надасть чисті, машиночитабельні дані.
Як це працює
1
Завантаження — перетягніть або натисніть, щоб вибрати PDF-виписку.
2
Класифікація — сервіс перевіряє, чи є документ чеською банківською випискою (пошук ключових слів на перших двох сторінках).
3
Визначення банку — банк ідентифікується за унікальним підписом PDF (заголовок, мітки, форматування).
4
Парсинг — спеціалізований парсер витягує дані рахунку, метадані виписки та кожну транзакцію.
5
JSON-результат — відображається у браузері.
Дати повертаються у форматі ISO YYYY-MM-DD. Суми — числа з плаваючою точкою: списання від'ємні, зарахування додатні. Незаповнені поля — null.
Підтримувані банки
Структура JSON
{
"bank": "KB",
"account": {
"number": "123456789/0100",
"iban": "CZ1201000001234567890",
"bic": "KOMBCZPP",
"owner": "Jan Novák",
"currency": "CZK",
"type": "Osobní účet"
},
"statement": {
"number": "12",
"period_from": "2024-01-01",
"period_to": "2024-01-31",
"date_issued": "2024-02-01",
"opening_balance": 10000.00,
"closing_balance": 8500.50,
"total_credited": 5000.00,
"total_debited": -6499.50
},
"transactions": [
{
"date_posted": "2024-01-05",
"date_valuta": "2024-01-05",
"amount": -350.00,
"currency": "CZK",
"type": "Platba kartou",
"description": "Albert supermarket Praha",
"counterparty_account": null,
"counterparty_name": "ALBERT ČR",
"vs": null,
"ks": null,
"ss": null,
"fee": null,
"transaction_id": "TXN20240105001",
"balance_after": 9650.00,
"raw_line": null
}
]
}
Поля верхнього рівня
bank
string
Ідентифікатор банку: KB, MONETA, AIRBANK, CSOB, MBANK, RAIFFEISENBANK, FIO, UNICREDIT, SPORITELNA, PARTNERS_BANKA
account
object
Метадані рахунку
statement
object
Зведені дані по виписці
transactions
array
Список усіх транзакцій у виписці
account
number
string|null
Номер рахунку у чеському форматі, наприклад 123456789/0100
iban
string|null
Міжнародний номер банківського рахунку (IBAN)
bic
string|null
Ідентифікаційний код банку (BIC / SWIFT)
owner
string|null
Ім'я власника рахунку
currency
string
Валюта рахунку, зазвичай CZK
type
string|null
Тип рахунку з виписки (наприклад, Osobní účet)
statement
number
string|null
Порядковий номер виписки
period_from
string|null
Початок periodу виписки (YYYY-MM-DD)
period_to
string|null
Кінець periodу виписки (YYYY-MM-DD)
date_issued
string|null
Дата формування виписки (YYYY-MM-DD)
opening_balance
float|null
Залишок на рахунку на початку periodу
closing_balance
float|null
Залишок на рахунку в кінці periodу
total_credited
float|null
Сума всіх зарахувань (позитивне число)
total_debited
float|null
Сума всіх списань (від'ємне число)
transactions[ ]
date_posted
string|null
Дата проведення — коли транзакція потрапила на рахунок (YYYY-MM-DD)
date_valuta
string|null
Дата валютування — дата нарахування відсотків (YYYY-MM-DD)
amount
float|null
Сума. Від'ємна — списання, додатня — зарахування
currency
string
Валюта транзакції (зазвичай CZK)
type
string|null
Тип транзакції з виписки (наприклад, Platba kartou, Příchozí úhrada)
description
string|null
Повідомлення платежу / назва магазину / примітка
counterparty_account
string|null
Номер рахунку контрагента, наприклад 987654321/0300
counterparty_name
string|null
Ім'я контрагента (відправник або отримувач)
vs
string|null
Variabilní symbol — змінний символ для ідентифікації платежу
ks
string|null
Konstantní symbol — постійний символ, визначає характер платежу
ss
string|null
Specifický symbol — специфічний символ, задається платником
fee
float|null
Комісія за транзакцію (тільки Air Bank; у інших банків null)
transaction_id
string|null
Внутрішній ідентифікатор транзакції банку
balance_after
float|null
Залишок на рахунку після цієї транзакції
raw_line
string|null
Необроблений рядок з PDF (для діагностики)
Czech ID Parser
Czech ID Parser витягує структуровані дані з фотографій чеських посвідчень особи (Občanský průkaz).
Завантажте фото лицьової або зворотної сторони — сервіс зчитає всі поля і поверне чистий JSON.
Підтримує повернуті зображення, відблиски та обидва покоління карток (до 2012 і з 2012 року).
Як це працює
1
Завантаження фото — сфотографуйте або відскануйте чеське посвідчення. Підтримуються JPEG, PNG, WebP.
2
Попередня обробка — EXIF-орієнтація виправляється автоматично, контрастність підсилюється, зображення стискається за потреби.
3
Розпізнавання AI — модель AI vision зчитує всі поля. Якщо критичне поле пропущено з першого разу, виконується повторний цільовий запит.
4
Валідація MRZ — для зворотної сторони зона MRZ парситься алгоритмічно зі стандартом ICAO 9303 для перехресної перевірки даних.
5
Результат JSON — всі поля повертаються у вигляді структурованого JSON, нерозпізнані поля — null.
ID JSON — лицьова сторона
{
"document_type": "cz_id",
"side": "front",
"front": {
"document_number": "123456789",
"surname": "NOVÁK",
"given_names": "JAN",
"date_of_birth": "01.01.1990",
"sex": "M",
"place_of_birth": "Praha",
"nationality": "ČESKÁ",
"date_of_issue": "15.03.2020",
"date_of_expiry": "15.03.2030",
"personal_number": "900101"
},
"back": null
}
Поля лицьової сторони
document_number
string|null
9-символьний номер документа (ČÍSLO DOKLADU)
surname
string|null
Прізвище (PŘÍJMENÍ)
given_names
string|null
Всі імена (JMÉNO)
date_of_birth
string|null
Дата народження у форматі DD.MM.YYYY
sex
string|null
"M" або "F"
place_of_birth
string|null
Місце народження (MÍSTO NAROZENÍ)
nationality
string|null
Громадянство (STÁTNÍ OBČANSTVÍ)
date_of_issue
string|null
Дата видачі DD.MM.YYYY (DATUM VYDÁNÍ)
date_of_expiry
string|null
Дата закінчення DD.MM.YYYY (PLATNOST DO)
personal_number
string|null
Частковий родний номер (rodné číslo), видимий на лицьовій стороні
ID JSON — зворотна сторона
{
"document_type": "cz_id",
"side": "back",
"front": null,
"back": {
"address": "Václavské náměstí 1, Praha 1",
"personal_number": "900101/1234",
"marital_status": "svobodný",
"mrz_line1": "IDCZE123456789<0<<<<<<<<<<<<<<<",
"mrz_line2": "9001011M3003159CZE<<<<<<<<<<<6"
}
}
Поля зворотної сторони
address
string|null
Повна адреса проживання — всі рядки адреси об'єднані в один рядок
personal_number
string|null
Повний родний номер (rodné číslo), формат YYMMDD/XXXX — береться з MRZ якщо не надрукований
marital_status
string|null
Сімейний стан (rodinný stav), якщо вказаний: svobodný / vdaná тощо
mrz_line1
string|null
Перший рядок MRZ — рівно 30 символів, починається з IDCZE
mrz_line2
string|null
Другий рядок MRZ — рівно 30 символів, формат ICAO 9303 TD1
Валідація MRZ: зона MRZ зворотної сторони парситься алгоритмічно із перевіркою контрольних сум ICAO 9303. Якщо personal_number не розпізнано з тексту — він витягується напряму з поля optional data MRZ і форматується як YYMMDD/XXXX.
Co tento servis dělá
Bank Statement Parser extrahuje transakce z PDF výpisů českých bank a vrací strukturovaný JSON.
Nahrajte PDF — servis identifikuje banku, rozparsuje všechny transakce a vrátí čistá, strojově čitelná data.
Jak to funguje
1
Nahrání — přetáhněte nebo klikněte pro výběr PDF výpisu.
2
Klasifikace — servis ověří, zda jde o výpis české banky (bodování klíčových slov na prvních dvou stránkách).
3
Detekce banky — banka je identifikována podle jedinečného podpisu v PDF (záhlaví, popisky, formátování).
4
Parsování — specializovaný parser extrahuje údaje o účtu, metadata výpisu a každou transakci.
5
Výsledek JSON — zobrazí se v prohlížeči.
Data jsou vrácena ve formátu ISO YYYY-MM-DD. Částky jsou desetinná čísla — debety jsou záporné, kredity kladné. Nevyplněná pole mají hodnotu null.
Podporované banky
Struktura JSON
{
"bank": "KB",
"account": {
"number": "123456789/0100",
"iban": "CZ1201000001234567890",
"bic": "KOMBCZPP",
"owner": "Jan Novák",
"currency": "CZK",
"type": "Osobní účet"
},
"statement": {
"number": "12",
"period_from": "2024-01-01",
"period_to": "2024-01-31",
"date_issued": "2024-02-01",
"opening_balance": 10000.00,
"closing_balance": 8500.50,
"total_credited": 5000.00,
"total_debited": -6499.50
},
"transactions": [
{
"date_posted": "2024-01-05",
"date_valuta": "2024-01-05",
"amount": -350.00,
"currency": "CZK",
"type": "Platba kartou",
"description": "Albert supermarket Praha",
"counterparty_account": null,
"counterparty_name": "ALBERT ČR",
"vs": null,
"ks": null,
"ss": null,
"fee": null,
"transaction_id": "TXN20240105001",
"balance_after": 9650.00,
"raw_line": null
}
]
}
Pole nejvyšší úrovně
bank
string
Identifikátor banky: KB, MONETA, AIRBANK, CSOB, MBANK, RAIFFEISENBANK, FIO, UNICREDIT, SPORITELNA, PARTNERS_BANKA
account
object
Metadata účtu
statement
object
Souhrnné údaje výpisu
transactions
array
Seznam všech transakcí ve výpisu
account
number
string|null
Číslo účtu v českém formátu, např. 123456789/0100
iban
string|null
Mezinárodní číslo bankovního účtu (IBAN)
bic
string|null
Identifikační kód banky (BIC / SWIFT)
owner
string|null
Jméno majitele účtu
currency
string
Měna účtu, zpravidla CZK
type
string|null
Typ účtu z výpisu (např. Osobní účet)
statement
number
string|null
Pořadové číslo výpisu
period_from
string|null
Začátek období výpisu (YYYY-MM-DD)
period_to
string|null
Konec období výpisu (YYYY-MM-DD)
date_issued
string|null
Datum vystavení výpisu (YYYY-MM-DD)
opening_balance
float|null
Zůstatek na účtu na začátku období
closing_balance
float|null
Zůstatek na účtu na konci období
total_credited
float|null
Celková suma přijatých plateb (kladné číslo)
total_debited
float|null
Celková suma odchozích plateb (záporné číslo)
transactions[ ]
date_posted
string|null
Datum zaúčtování — kdy transakce proběhla na účtu (YYYY-MM-DD)
date_valuta
string|null
Datum valuty — rozhodné pro výpočet úroků (YYYY-MM-DD)
amount
float|null
Částka transakce. Záporná = debet (odchozí), kladná = kredit (příchozí)
currency
string
Měna transakce (obvykle CZK)
type
string|null
Typ transakce z výpisu (např. Platba kartou, Příchozí úhrada, Výběr z bankomatu)
description
string|null
Zpráva platby / název obchodníka / poznámka pro příjemce
counterparty_account
string|null
Číslo účtu protistrany, např. 987654321/0300
counterparty_name
string|null
Název protistrany (plátce nebo příjemce)
vs
string|null
Variabilní symbol — pro identifikaci platby
ks
string|null
Konstantní symbol — určuje charakter platby
ss
string|null
Specifický symbol — doplňkový referenční údaj plátce
fee
float|null
Poplatek za transakci (pouze Air Bank; u ostatních bank null)
transaction_id
string|null
Interní identifikátor transakce banky
balance_after
float|null
Zůstatek na účtu ihned po provedení transakce
raw_line
string|null
Surový textový řádek z PDF (pro diagnostiku)
Czech ID Parser
Czech ID Parser extrahuje strukturovaná data z fotografií českých občanských průkazů.
Nahrajte fotografii přední nebo zadní strany — servis přečte všechna pole a vrátí čistý JSON.
Podporuje otočené snímky, odlesky a obě generace průkazů (před rokem 2012 a od roku 2012).
Jak to funguje
1
Nahrání fotografie — vyfotografujte nebo naskenujte občanský průkaz. Podporovány jsou formáty JPEG, PNG a WebP.
2
Předzpracování — EXIF orientace se opraví automaticky, kontrast se zvýší a obrázek se v případě potřeby zmenší před odesláním.
3
Rozpoznávání AI — model AI vision přečte všechna pole. Pokud kritické pole při prvním průchodu chybí, automaticky proběhne cílený opakovaný dotaz.
4
Validace MRZ — zóna MRZ na zadní straně se parsuje algoritmicky podle standardu ICAO 9303 a křížově ověřuje data extrahovaná AI.
5
Výsledek JSON — všechna pole jsou vrácena jako strukturovaný JSON, nečitelná pole mají hodnotu null.
ID JSON — přední strana
{
"document_type": "cz_id",
"side": "front",
"front": {
"document_number": "123456789",
"surname": "NOVÁK",
"given_names": "JAN",
"date_of_birth": "01.01.1990",
"sex": "M",
"place_of_birth": "Praha",
"nationality": "ČESKÁ",
"date_of_issue": "15.03.2020",
"date_of_expiry": "15.03.2030",
"personal_number": "900101"
},
"back": null
}
Pole přední strany
document_number
string|null
9-místné číslo dokladu (ČÍSLO DOKLADU)
surname
string|null
Příjmení (PŘÍJMENÍ)
given_names
string|null
Všechna křestní jména (JMÉNO)
date_of_birth
string|null
Datum narození ve formátu DD.MM.YYYY
sex
string|null
"M" nebo "F"
place_of_birth
string|null
Místo narození
nationality
string|null
Státní občanství
date_of_issue
string|null
Datum vydání DD.MM.YYYY
date_of_expiry
string|null
Platnost do DD.MM.YYYY
personal_number
string|null
Část rodného čísla viditelná na přední straně
ID JSON — zadní strana
{
"document_type": "cz_id",
"side": "back",
"front": null,
"back": {
"address": "Václavské náměstí 1, Praha 1",
"personal_number": "900101/1234",
"marital_status": "svobodný",
"mrz_line1": "IDCZE123456789<0<<<<<<<<<<<<<<<",
"mrz_line2": "9001011M3003159CZE<<<<<<<<<<<6"
}
}
Pole zadní strany
address
string|null
Úplná adresa trvalého pobytu — všechny řádky adresy sloučeny do jednoho řetězce
personal_number
string|null
Rodné číslo ve formátu YYMMDD/XXXX — doplněno z MRZ pokud není vytištěno
marital_status
string|null
Rodinný stav, je-li uveden: svobodný / vdaná apod.
mrz_line1
string|null
První řádek MRZ — přesně 30 znaků, začíná IDCZE
mrz_line2
string|null
Druhý řádek MRZ — přesně 30 znaků, formát ICAO 9303 TD1
Validace MRZ: zóna MRZ zadní strany se parsuje algoritmicky s ověřením kontrolních součtů dle ICAO 9303. Pokud personal_number nebylo přečteno z textu, extrahuje se přímo z optional data pole MRZ a formátuje jako YYMMDD/XXXX.