Agreements as filed with the CFPB. Not an offer of credit. How we read them
CreditCardB

Methodology

How we read the filings

What the extraction does, how well it works, and where it fails.

The source

The CFPB publishes every credit card agreement US issuers file with it, as a quarterly bulk release of PDFs organised by issuer. We take that release whole: 4,587 agreements from 798 issuers in the current set. Nothing is filtered on the way in, so an issuer is not missing from this site because of anything we decided.

The extraction

Each PDF is parsed for its text layer and the Truth in Lending disclosure table is located where one exists. From that table we read the purchase APR and its type, any introductory rate and its duration, the balance transfer and cash advance APRs, the penalty APR, the annual fee, the late payment fee, the foreign transaction fee, the grace period and the minimum interest charge.

Fee fields that agreements express as conditions rather than numbers — "either $10 or 3% of the amount, whichever is greater" — are kept as the original wording. Reducing them to a single figure would drop the condition that makes the figure meaningful.

What we check for, because we got it wrong first

Several failure modes in this kind of extraction produce confident, wrong numbers. Every one of these was a real bug caught during development, not a hypothetical:

  • Promotional rates read as the ongoing rate. A 0% introductory offer sitting in the same table row as the go-to rate, reported as if the card charged no interest.
  • Prime plus a margin read as an APR. A filing quoting "Prime + 9.99%" recorded as a 9.99% card, which would have made some of the most expensive cards in the database look like the cheapest.
  • Daily periodic rates read as APRs. A 0.0685% daily rate is a 24.99% APR; recorded raw it looks like a card charging almost nothing.
  • Fee tier thresholds read as the fee. "Late fee: $30 on balances under $1,000" yielding a $1,000 late fee.
  • Letter-spaced PDFs. One issuer's documents render text with a space between every character, which defeated the parser entirely across a hundred filings until it was handled.

Where a figure survives these checks but the surrounding context is ambiguous, the row is flagged rather than dropped, and the flag is shown on the card page as a visible caveat.

Coverage, stated honestly

Of 4,587 filings, 2,992 disclose enough to publish a page. The rest are listed on their issuer's page with a link to the document. The main reasons a filing yields nothing:

  • No Truth in Lending table. Around a quarter of the corpus. Often these are amendments to an agreement filed earlier, which genuinely do not restate the pricing.
  • Scanned images with no text layer. Roughly 6% of filings. Nothing can be read from them without optical character recognition, which we do not apply, because an OCR error in a financial figure is worse than an absent figure.
  • Very long documents. A small number run past the page limit the parser reads to, so later terms are not captured. Those pages say so.

Where this data can still be wrong

It can be stale. Issuers file quarterly, and the agreement on file is not necessarily the offer being made today.

It can be mismatched. Some filings cover several products in one disclosure table, and the figures may belong to a sibling product. Those pages carry a warning.

It can simply be a parsing error we have not found. The linked PDF is the authority on every page, and if a figure here disagrees with the filing, the filing is right. Tell us and we will fix it.