Sample dataset · CC0
Loan applications, decided and followed up.
A year of personal loan applications from 2024: who applied, for how much and why, whether they were approved, at what rate, and how each approved loan was doing on 30 June 2026. The monthly payment on every approved row is the number Excel's PMT function gives.
15 columns · 100 or 1,000 rows as a file · up to 1,000,000 rows generated here · CSV, JSON, JSONL, Excel, Parquet
Download the loan applications data
The 1,000-row file has 680 approvals, 35 charge-offs and 13 late loans, which is enough to watch risk climb as credit scores fall. The 100-row file has 67 approvals. It is better for checking a PMT formula than for measuring a default rate.
| Format | Small | Standard |
|---|---|---|
| CSV | 100 rows (9.7 KB) | 1,000 rows (94.4 KB) |
| JSON | 100 rows (32.5 KB) | 1,000 rows (324.5 KB) |
| JSONL | 100 rows (32.2 KB) | 1,000 rows (321.6 KB) |
| Excel | 100 rows (25.3 KB) | 1,000 rows (186.4 KB) |
| Parquet | 100 rows (6.5 KB) | 1,000 rows (29.6 KB) |
More applications
Credit work wants volume. At 100,000 rows there are about 67,900 approved loans and 3,840 charge-offs to learn from, and the approval curve by credit score is smooth enough to plot without any binning.
The first eight rows
The first eight rows of the 1,000-row file, all from the first days of January 2024. LN-000007 was denied, so its rate, payment and status are blank.
| application_id | application_date | age | annual_income | employment_years | home_ownership | purpose | loan_amount | term_months | credit_score | dti_pct | decision | interest_rate | monthly_payment | loan_status |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| LN-000001 | 2024-01-01 | 41 | 88000 | 1 | Rent | Credit card payoff | 2500 | 36 | 683 | 26.9 | Approved | 12.04 | 83.08 | Current |
| LN-000002 | 2024-01-01 | 64 | 85500 | 11 | Own | Credit card payoff | 5000 | 36 | 613 | 27.0 | Approved | 20.16 | 186.23 | Current |
| LN-000003 | 2024-01-01 | 33 | 84500 | 4 | Mortgage | Small business | 11500 | 36 | 704 | 34.4 | Approved | 13.47 | 390.09 | Fully paid |
| LN-000004 | 2024-01-01 | 56 | 121000 | 2 | Mortgage | Debt consolidation | 8500 | 36 | 686 | 33.2 | Approved | 12.28 | 283.46 | Current |
| LN-000005 | 2024-01-02 | 60 | 139000 | 0 | Mortgage | Credit card payoff | 2500 | 60 | 695 | 25.5 | Approved | 12.89 | 56.74 | Current |
| LN-000006 | 2024-01-02 | 58 | 59000 | 1 | Mortgage | Credit card payoff | 17000 | 36 | 701 | 15.7 | Approved | 11.89 | 563.75 | Current |
| LN-000007 | 2024-01-02 | 36 | 36500 | 6 | Mortgage | Wedding | 9000 | 36 | 636 | 32.5 | Denied | |||
| LN-000008 | 2024-01-03 | 64 | 57500 | 2 | Mortgage | Medical | 5000 | 36 | 693 | 20.8 | Approved | 12.29 | 166.76 | Current |
Fifteen columns, and what each one holds
| Column | Type | What it holds | Example |
|---|---|---|---|
| application_id | text | LN-000001 upward, in application order. | LN-000001 |
| application_date | date | Day the application came in, 2024-01-01 to 2024-12-31, ascending through the file. Quieter at weekends. | 2024-01-01 |
| age | integer | Applicant age, 21 to 70. The decision never looks at it. | 41 |
| annual_income | integer | Stated gross annual income in USD, rounded to 500. | 88000 |
| employment_years | integer | Years with the current employer. 0 means under a year. | 1 |
| home_ownership | text | Rent, Mortgage or Own. | Rent |
| purpose | text | What the money is for, one of seven. | Credit card payoff |
| loan_amount | integer | Amount requested in USD, a multiple of 500. | 2500 |
| term_months | integer | 36 or 60. Bigger loans lean toward 60. | 36 |
| credit_score | integer | Score at application, 500 to 850. | 683 |
| dti_pct | decimal | Existing monthly debt payments as a percent of monthly income, before this loan. | 26.9 |
| decision | text | Approved or Denied. | Approved |
| interest_rate | decimal | Annual rate in percent, set mostly by credit score and term. Blank when denied. | 12.04 |
| monthly_payment | decimal | Amortized payment in USD, the same number =PMT(rate/1200, term, -amount) gives. Blank when denied. | 83.08 |
| loan_status | text | Where an approved loan stood on 2026-06-30: Current, Fully paid, Late or Charged off. Blank when denied. | Current |
Practice questions to try
- What share of applications is approved, and how does it change with credit score? In the 1,000-row file: 68.0%. Below 600 it is 2 of 66; from 600 to 639 it is 24.3%; at 760 and above, 98.3%.
- Check the payment on the first row with Excel's PMT function. =PMT(12.04/1200, 36, -2500) returns 83.08, which is exactly what monthly_payment says.
- Which loan purpose has the highest charge-off rate among approved loans? Small business: 6 of 49, or 12.2%. Home improvement is lowest, 1 of 73.
- How much money was lent, and how much of it was charged off? $6,606,000 across 680 loans, of which $386,500, or 5.9%, was charged off.
- How does the charge-off rate compare for scores below 680 and for 720 and above? 11.8% (16 of 136) against 1.8% (6 of 341).
- Does debt-to-income matter? Compare applicants with a DTI above 35% against those at 20% or below. 53.4% approved against 85.3%.
- Are younger applicants approved less often, and is age the reason? 54.5% under 30 against 78.4% at 60 and over. The decision never reads age, so look at employment_years and annual_income instead.
Start in the dashboard view for the approval questions. The PMT check belongs in Excel, because the point is to see your formula and the column agree.
What one row is
One row per application, dated from 1 January to 31 December 2024 and ascending through the file. Weekends are quieter, January is busiest and December quietest. The first eleven columns describe the applicant and the request: age, income, years in the current job, whether they rent or own, what the money is for, how much and over how long, a credit score and a debt-to-income ratio.
decision is Approved or Denied. Only approved rows carry the last three columns: the interest rate, the monthly payment, and the loan's status on 30 June 2026, somewhere between eighteen and thirty months after the money went out. A denied application has no rate and no outcome, so those three cells are blank rather than zero.
dti_pct is the applicant's existing monthly debt payments as a percentage of monthly income, before this loan. That is how most lenders quote it, and it is why a high DTI on an application for a small loan can still be denied.
How decisions and prices were made
The decision follows rules a real lender would recognise. A credit score below 580 is almost always declined, and so is a DTI above 45%. Between those walls the odds of approval rise with the score and fall with DTI, and they drop for a loan larger than 35% of annual income, for less than a year in the current job, and for small business loans. There is chance in it, as there is in any underwriting, so two similar applicants can get different answers.
The rate is set by credit score band, from about 7.4% at 760 and above to about 24.6% below 600, then raised 1.1 points for a 60-month term, 0.8 for small business, and a little for every point of DTI over 20. monthly_payment is the standard amortized payment on that rate, rounded to the cent. On every approved row, =PMT(interest_rate/1200, term_months, -loan_amount) gives the same number.
Loan status depends on the same risk. Charge-offs run from about 1.5% of loans at the top score band to about 24% at the bottom, and higher for small business, for a DTI over 35% and for people new in their job. Better borrowers are more likely to have paid off early.
An age question worth asking
The decision rule never looks at age. Yet in the 1,000-row file, 54.5% of applicants under 30 are approved against 78.4% of those 60 and over. The gap is real, and its cause is in the other columns: the under-30s have been in their jobs for 1.2 years on average against 8.0 years, and earn about $68,500 against $86,500.
That is how a rule that never mentions a protected characteristic can still treat groups differently, through columns that move with it. It is the most useful thing in the file for anyone learning about fairness in credit models, and you can show it with nothing more than a pivot table.
What people use it for
- Credit risk classes: approval models, default models and the gap between them.
- Excel finance practice, starting with PMT and building up to an amortization schedule.
- Fairness exercises: an outcome that differs by age even though age is never used.
- Dashboards for a lending team: approval rate by score band, charge-offs by purpose.
- Handling blanks that mean something, in the three columns that only approved loans fill.
Open it somewhere useful
Two questions run through this file: who gets approved, and who then fails to pay. A crosstab answers the first kind and a pivot answers the second.
License, and the people in it
This dataset is dedicated to the public domain under CC0 1.0. Put it in a course, a paid product, a test suite, a bug report, a screenshot, a conference talk or a book. There is nothing to ask for, nothing to sign and no attribution required. A link back is welcome and is not a condition.
Nothing in this file describes a real person or a real loan. There are no names, addresses, account numbers or social security numbers, and the lender is invented. You can show it in a classroom, a published notebook or a vendor demo without anyone's financial details in it.
Questions people ask about this file
Is this real lending data?
No. It is generated by a seeded program and describes no real borrower or lender. Its shape is close to the public peer-to-peer lending exports that credit courses often use, so the skills carry over, but it is small, clean where it should be, and CC0.
How is monthly_payment calculated?
With the standard amortization formula: the loan amount times the monthly rate, divided by one minus one plus the monthly rate raised to minus the term. The monthly rate is interest_rate divided by 1,200. In Excel that is =PMT(interest_rate/1200, term_months, -loan_amount), and the result matches the column to the cent.
Why are interest_rate, monthly_payment and loan_status blank on some rows?
Those applications were denied. A denied loan has no rate, no payment and no outcome, so the cells are empty rather than zero. If you average interest_rate, make sure your tool skips blanks, or filter to approved loans first.
Can I build a default prediction model with it?
Yes, with two cautions that apply to real lending data too. Only approved loans have an outcome, so a model trained on them learns nothing about the people who were turned away. And most loans are still Current, which means unfinished rather than safe. Use the 100,000-row file if you want enough charge-offs to learn from.
Does the approval decision use age?
No. Age is in the file, and the rule that decides approval never reads it. Approval rates still differ by age, because younger applicants have shorter job histories and lower incomes, and the rule does read those. The section on age above walks through it.
More sample data
All twenty-four datasets · Messy files and every other format · Build your own schema