For developers

Stop writing a parser for every bank

Turn bank statement PDFs from any bank into JSON with one schema. Over the REST API, or over MCP for Claude and ChatGPT. No bank credentials, no OAuth.

Create your API keyGo to my dashboard Read the API reference

Try it now: upload a bank statement

See your transactions in seconds. The first 10 pages show up right here, no account needed.

PDF, up to 10 MB · We never ask for your bank password

Structured JSON, one schema for every bank

Every LATAM bank comes out in the same v5 shape: dates, descriptions, amounts, balances and categories. Write your parser once.

No credentials, no OAuth

Your users upload the PDF they already have. No bank logins to maintain, no credentials to store.

A REST API with a published OpenAPI spec

Upload PDFs and read transactions, balances and monthly summaries with Bearer auth. Reading is free; you pay $5 MXN per processed page.

What finO$ extracts from each statement

Single v5 schema: the same 13 base account fields + 15 per-transaction fields + 8 per-installment-plan fields for every bank. The API response has the same JSON regardless of whether you uploaded a BBVA, Nu or Mercado Pago PDF.

Identidad del banco y cuenta

bank_name

Nombre raw como aparece en el PDF (con sufijos legales).

string
bank_canonical_name

Brand reconocible (BBVA, Rappi, Nu, DólarApp).

string
account_number

Número de cuenta, tarjeta enmascarada o CLABE.

string
account_type

debit · credit · null

enum

Saldos

Cada uno con amount + ISO 4217
opening_balance

Saldo inicial del periodo.

currency
closing_balance

Saldo al corte.

currency
average_balance

Saldo promedio (solo débito; null en CC).

currency

Resumen del periodo

total_commissions

Comisiones cobradas totales.

currency
statement_period_start

Inicio del periodo.

date
statement_period_end

Fin del periodo.

date

Titular

account_holder_name

Nombre del titular.

string
account_holder_rfc

RFC (12-13 caracteres).

string
account_holder_address

Dirección registrada.

string

transactions[]

14 campos por movimiento

Cada movimiento del periodo. Las líneas tipo "AMAZON A MESES 2/12" van al array de meses sin intereses, NO aquí. Solo la compra original aparece como transaction.

day

Día del mes.

number 1-31
month

Mes; el año se deriva de statement_period_start.

number 1-12
description

Texto verbatim como sale en el PDF.

string
transaction_concept

Versión normalizada del concepto.

string
counterparty_name

Beneficiario o comercio del otro lado.

string
counterparty_rfc

RFC de la contraparte (común en SPEI).

string
merchant_canonical_name

Marca limpia: "Uber Eats", "Amazon", "OXXO" (null si no aplica).

string
amount

Magnitud SIEMPRE positiva.

post-v3 schema fix

number ≥ 0
currency

MXN, USD, EUR…

ISO 4217
transaction_type

DEBIT (inflow) · CHARGE (outflow).

enum
direction

inflow · outflow.

Señal redundante para detectar discrepancias.

enum
channel

SPEI · card · cash · check · direct_debit · internal_transfer · interest · fee · other.

enum
category

food · transport · shopping · bills · entertainment · healthcare · travel · fees · income · transfer · cash · savings_investment · taxes · other.

enum
kind_hint

expense · income · internal_transfer_likely · refund_likely · cashback_likely.

enum
is_recurring_likely

True para Netflix, CFE, nómina, MSI, suscripciones SaaS.

boolean

zero_interest_installments[]

8 campos por plan MSI

Planes de meses sin intereses activos. Cada uno se rastrea por separado para evitar inflar el flujo del periodo con cuotas.

description

"AMAZON A MESES", "AVIANCA", "BEST BUY".

string
purchase_date

Fecha de la compra original.

date
original_amount

Total de la compra antes de partirla.

currency
current_payment_number

Cuál de las cuotas se está pagando este corte.

number
total_payments_number

Cuotas totales del plan (3, 6, 12, 18, 24…).

number
monthly_installment

Mensualidad fija.

currency
interest_rate

% anual (0 para MSI puro).

number
pending_amount

Saldo aún por pagar en cuotas futuras.

currency

See the full data model and endpoints at /en/api/

Developer FAQ

How do I start with the finO$ bank statement API?

Create a key in the app under Settings → API and send it as a Bearer token to api.getfinos.com. You can upload PDFs and read transactions, accounts, statements and monthly summaries. Official SDKs and webhooks: coming soon.

How does this differ from Plaid or Belvo?

Plaid and Belvo connect to the bank with the user's credentials or OAuth, one integration per institution. finO$ parses the PDF statement the user already has, so coverage does not depend on bank partnerships.

Which banks are covered?

Any bank. 58 formats are ready today, traditional and digital. A new one takes 48 to 72 hours from an anonymized sample.

What does it cost?

$5 MXN (~$0.28 USD) per processed page, prepaid: top up a balance and each page is deducted. 30 free pages every month. Reading processed data over the API is free.

Does it handle scanned statements?

Yes. finO$ runs OCR automatically on scanned PDFs. Native digital PDFs are parsed directly, which is faster.