Financial Services

Extract voided checks to structured JSON

A voided check is how a customer proves they own the bank account you are about to pay into. It carries the account holder, the bank, and the routing and account numbers in the MICR line at the bottom. The catch is how they arrive: phone photos, screenshots of online-banking screens, and scans degraded enough that a misread digit looks like a real one. Sensible converts voided checks into structured JSON for ACH and direct-deposit enrollment.

ACH enrollment | payroll setup | account verification

Validated JSON

Schema-enforced output; every field matches your contract

Source coordinates

Every value links back to page + bounding box for audit

Per-document pricing

Predictable cost. No token-volatility surprises

Trusted by teams turning documents into production data

What makes voided checks hard to extract

A check looks like a simple document until you process thousands of them from different banks. The numbers that matter live in the MICR line, the image quality is rarely clean, and routing and account numbers sit side by side with no labels. Hybrid extraction reads the MICR line and parses the bank layout; the config keeps the routing number separate from the account number on every format.

01

MICR Line Parsing

The routing and account numbers live in the MICR line printed in magnetic E-13B characters along the bottom edge. Sensible reads the MICR symbols (the transit, on-us, and dash glyphs) to segment the line, so the routing number, account number, and check number come out as separate fields instead of one run-on string.

02

Phone Photos And Scan Quality

A cleanly scanned check is the exception. Most arrive as photos of a phone screen, screenshots of a monitor, or faxed copies where a misread digit produces a plausible wrong answer rather than obvious garbage. The engine parses the degraded inputs and scores each field for confidence, so low-quality reads get flagged for review instead of flowing straight into a payment.

03

Routing vs. Account Across Layouts

Different banks print the MICR fields in a different order, and a stray digit can turn one number into the other. Sensible distinguishes the routing number from the account number by the MICR symbols that bracket each block, not by position alone, so the right nine digits land in the routing field across every bank layout.

Managed services

Don't want to build it? We'll write your configs from your samples.

Solutions engineers handle plan, build, deploy, and adjust on your behalf. You see clean JSON in your API response. Same engine as self-serve, just with the configuration work outsourced.

What's included

01Plan.Engineers review your samples and pick the right method

02Build.SenseML configs written from your samples

03Deploy.Same engine as self-serve, ready for production

04Adjust.We update configs when formats shift or new edge cases appear

05Integrate.Help with custom integration into your downstream systems

Fields we extract

Every enrollment pipeline maps the check to its own schema, so we build the config around your fields rather than a fixed list. These are the values payments teams pull most often; we map whatever else your ACH or payroll setup needs.

01

Account holder

Name on the check, account holder address, payee line (if filled), check number, check date

02

Bank & MICR

Bank or institution name, routing/transit number, account number, MICR raw string, check number from the MICR line

03

Check metadata

VOID indicator, written and numeric amount (if present), memo line, image quality and per-field confidence score

config.json

SenseML

{ /* SenseML: voided check extraction */
"fields": [
{
"method": {
"id": "queryGroup",
"queries": [
{ "id": "account_holder", "description": "account holder name, name on check, payor name" },
{ "id": "routing_number", "description": "routing number, ABA, transit number, the 9 digits in the leading MICR symbol pair" },
{ "id": "account_number", "description": "account number, the MICR digits between the routing block and the trailing on-us symbol" },
{ "id": "bank_name", "description": "bank name, institution name printed on the check" }
// + check number and address, mapped to your schema
]
}
}
]
}

Supported check formats

Sensible processes voided checks from any bank and any submission channel. Fingerprinting identifies major-bank layouts so the right config runs, and new formats can be configured in hours. The extraction logic is explicit in SenseML, not buried in prompt tuning.

By bank

Chase, Bank of America, Wells Fargo, Citi, Capital One, US Bank, PNC, regional banks, and credit unions, plus US and Canadian MICR layouts

By submission format

Printed personal and business checks, online-banking voided-check images, phone photos, screenshots, and faxed or scanned copies

Common Questions

Answers about MICR line parsing, handling phone photos and low-quality scans, and keeping the routing number separate from the account number.

Can Sensible read phone photos and low-quality scans of checks?

Yes. Most checks arrive as photos of a phone screen, screenshots of a monitor, or faxed copies where a misread digit produces a plausible wrong answer rather than obvious garbage. The engine parses the degraded inputs and scores each field for confidence, so low-quality reads get flagged for review instead of flowing straight into a payment.

How does Sensible parse the MICR line?

The routing and account numbers live in the MICR line printed in magnetic E-13B characters along the bottom edge. Sensible reads the MICR symbols, the transit, on-us, and dash glyphs, to segment the line so the routing number, account number, and check number come out as separate fields instead of one run-on string.

What fields does Sensible extract from a voided check?

Account holder name and address, bank name, routing and account numbers, check number, the raw MICR string, and a per-field confidence score are all extracted. Custom fields can be added in SenseML to match your ACH or payroll-setup schema.

Which banks and formats does Sensible support for voided checks?

Sensible processes voided checks from Chase, Bank of America, Wells Fargo, Citi, Capital One, US Bank, PNC, regional banks, and credit unions, across US and Canadian MICR layouts. Printed checks, online-banking voided-check images, phone photos, screenshots, and faxed or scanned copies all work, and new formats can be configured in SenseML.

Start free

Turn your next voided check into JSON.

Free 14-day trial. No credit card required. Start extracting in minutes.