Budget Dataset for Financial Analysis
This ready-made budget dataset provides a sample of financial transactions, categories, and accounts for practicing financial reporting. Analyze spending habits, income sources, and account balances with this sample.
At a glance
- 3tables
- 97,447rows
- 15columns
- Jan 2022 – Dec 2024date range
The 3 tables
preview and data dictionary per tableAccounts accounts · table · 5,000 rows
Contains information about individual financial accounts.
Preview
| account_iduuid | account_namestring | account_typestring | opening_balancedecimal | current_balancedecimal |
|---|---|---|---|---|
| 2c3f923a-bdfa-446b-9e0a-a9dae01b8791 | Everyday Checking Account | Checking | 11079.67 | 20761.55 |
| a14cdee6-ec62-47ac-8d0c-be01b7279f2f | Primary Business Checking | Checking | 2628.12 | 5855.05 |
| 2fc742e8-c5e4-4aed-9b2c-b2f4fb4b422b | Transactional Checking Fund | Checking | 2420.64 | 14442.75 |
| c303d437-2c6b-4392-89e6-094e7550f9df | Operating Cash Account | Checking | 2738.94 | 1524.45 |
| c0fc3d07-bda1-45d0-8fd4-a9aadd178877 | Main Street Checking | Checking | 13258.26 | 24529.87 |
| 2c73a88d-8cc8-4068-9ddf-894a4911f537 | Capital Reserve Checking | Checking | 11866.51 | 17709.1 |
| 9c074f35-3ce6-459d-b1fa-47262df8c76f | Growth Operations Checking | Checking | 7560.78 | 21063.62 |
| 74cae42e-f44e-4063-9c68-6d95ec47e09d | Momentum Checking Account | Checking | 2495.78 | 8848.27 |
| b18a66fa-c89f-466d-bb7a-06ad4d13459b | Core Transactional Account | Checking | 2536.47 | 17103.28 |
| b996f2ea-a17e-42f6-aeae-f8f3658c120c | Standard Business Checking | Checking | 8092.4 | 22578.41 |
Data dictionary
| column | type | description | example | null % |
|---|---|---|---|---|
account_ | uuid | Primary key unique identifier for the financial account.unique | 2c3f923a-bdfa-446b-9e0a-a9dae01b8791 | 0% |
account_ | string | Descriptive display name of the financial account. | Everyday Checking Account | 0% |
account_ | string | Type of financial account. | Checking | 0% |
opening_ | decimal | Initial balance of the account when opened or tracked, negative for liabilities or credit balances. | 11079.67 | 0% |
current_ | decimal | Current snapshot balance of the account accounting for opening balance and transaction totals. | 20761.55 | 0% |
Categories categories · dimension table · 50 rows
Defines the budget categories for financial transactions.
Preview
| category_iduuid | category_namestring | category_groupstring |
|---|---|---|
| f3fbdc23-5bba-4374-b598-fb8d8573a49a | Travel & Lodging | Expenses |
| 76c6e430-279a-4890-adbf-5fa29eb41959 | College Savings 529 | Expenses |
| d4c89ecf-d14a-48ea-b514-a427493c77e8 | Student Loan Payment | Expenses |
| becefc35-9756-44a1-9a35-608b48a31b64 | Equipment & Hardware | Expenses |
| f9eaa4b9-fe8d-453b-8e7b-a280ffa2845e | Water Utility | Expenses |
| 0c398e13-d105-43d8-a341-fa43f47ea697 | Mobile Phone | Expenses |
| 13b6eb0e-04a9-4984-9a30-ebf55dcd6992 | Brokerage Investment Deposit | Expenses |
| 27993fee-2ef1-42fb-be65-8315018eb11b | Shipping & Postage | Expenses |
| 8a77a1e8-65d5-40a1-b53e-ba20721a8460 | Public Transit | Expenses |
| 019156aa-3c27-42c1-ae51-be954fc23461 | High-Yield Savings Deposit | Expenses |
Data dictionary
| column | type | description | example | null % |
|---|---|---|---|---|
category_ | uuid | Unique identifier for the financial category.unique | f3fbdc23-5bba-4374-b598-fb8d8573a49a | 0% |
category_ | string | Descriptive name of the budget category.unique | Travel & Lodging | 0% |
category_ | string | Top-level financial grouping for budgeting (Expenses, Savings, Income, Debt). | Expenses | 0% |
Transactions transactions · fact table · 92,397 rows
Records individual financial transactions, linking accounts and categories.
Preview
| transaction_iduuid | transaction_datedate | descriptionstring | transaction_typestring | amountdecimal | account_iduuid | category_iduuid |
|---|---|---|---|---|---|---|
| 326d01e9-9a05-480a-a539-3618e25fcd49 | 2024-09-17 | Bought new clothes from apparel store | Debit | -1372.32 | dd7b3b41-d820-4c04-b684-674c55dbd1bb | 4ff8ec2c-dcfe-4469-8beb-756becefe754 |
| 98281772-3230-4b57-9898-20c593e015d6 | 2024-01-08 | Returned defective electronic gadget | Debit | -221.09 | 9d346b0b-b9e7-4ba9-8cb4-1c4dc52f6ea1 | c66ae24f-7ff2-4550-b1ee-695281ff640b |
| fd074f38-f3b7-4107-8299-5e2d58255763 | 2024-05-12 | Paid for concert tickets | Debit | -104.48 | a8f736c2-5847-46ec-b0e6-b3bd7d61288f | f5d3fd79-1e8f-47a5-866e-aa47dd4b262e |
| 6449eadf-daed-4f4a-ad77-fd2c5c4d9a2b | 2024-12-11 | Deducted gym membership fee | Debit | -60.93 | 6fb0288b-325b-40ff-bffe-785a4e2f30e0 | d98ccab8-a772-4b33-a75b-77228b6accb2 |
| 1f9b3d7a-445b-49fd-be07-2739481430cd | 2022-01-02 | Transferred funds to savings account | Debit | -19 | 57ad5f6a-2420-4a79-8240-91814da113f2 | 32c46618-e757-487a-b280-59736dc884e5 |
| a07ccc8f-248c-4e76-9fda-f8ba652ca6ec | 2023-12-07 | Returned item to online retailer for refund | Debit | -72.49 | 0ad05224-ba92-4069-8c9b-50af917261ef | becefc35-9756-44a1-9a35-608b48a31b64 |
| 478e70cf-c3a3-4e6a-a5b5-9f5a1a1b4616 | 2022-06-20 | Purchased prescription medication | Debit | -37.89 | 0ee94294-d18e-4c7c-bc0a-0c1602d338d4 | cc8e175d-b12e-4a89-a130-ac3557e7d74c |
| 9b290de6-8c46-429f-ac73-a9af1fa80254 | 2024-04-24 | Bought lunch at fast food restaurant | Debit | -24.33 | fef33c7c-0718-4146-a57e-10c2f191793a | becefc35-9756-44a1-9a35-608b48a31b64 |
| 75789e44-915a-4f43-94f3-1cf9fb82a487 | 2022-09-25 | Purchased tools from hardware store | Debit | -973.98 | 40cb718e-6b8f-4142-a2ae-047cb24c25cd | 5f578a76-4384-45c0-8c61-1687b3ad5c4f |
| 8bd87289-7ca9-4253-8008-ba60bc0573af | 2022-06-13 | Paid for educational course materials | Debit | -106.05 | 60e79758-968f-446c-a2cb-d51012290948 | cc9bc255-217f-43c7-9cd9-8c89736109cf |
Data dictionary
| column | type | description | example | null % |
|---|---|---|---|---|
transaction_ | uuid | Unique identifier for the financial transaction record. | 326d01e9-9a05-480a-a539-3618e25fcd49 | 0% |
transaction_ | date | Date on which the transaction occurred, between Jan 1, 2022 and Dec 31, 2024. | 2024-09-17 | 0% |
description | string | Narrative text or merchant memo explaining the purpose or counterparty of the transaction. | Bought new clothes from apparel store | 0% |
transaction_ | string | Classification of the transaction direction: Debit (outgoing/expense) or Credit (incoming/income). | Debit | 0% |
amount | decimal | Monetary value of the transaction. Negative for debits/expenses (-2000.00 to -0.01), positive for credits/income (0.01 to 4999.77). | -1372.32 | 0% |
account_ | uuid | Foreign key to accounts.account_id. | dd7b3b41-d820-4c04-b684-674c55dbd1bb | 0% |
category_ | uuid | Foreign key to categories.category_id. | 4ff8ec2c-dcfe-4469-8beb-756becefe754 | 0% |
How the tables join
transactions.account_id references accounts.account_idmany to one: each Transactions row points to one Accounts rowtransactions.category_id references categories.category_idmany to one: each Transactions row points to one Categories row
Questions to answer with it
Calculate the total spending per category for each account over the last year.
Filter transactions for the last full calendar year and join accounts, categories, and transactions tables. Group by account and category to sum the amounts.
tables: accounts, categories, transactions
Identify the top 5 accounts with the highest net income (income - expenses) in the last quarter.
Calculate net income for each account by summing credit amounts and subtracting debit amounts. Filter transactions for the last quarter and rank accounts by net income.
tables: accounts, transactions
Analyze the distribution of transaction amounts for 'Expenses' category group.
Join transactions with categories. Filter for transactions where category_group is 'Expenses'. Analyze the distribution of the 'amount' column.
tables: categories, transactions
What is the average transaction amount per account type for the current year?
Join transactions with accounts. Filter transactions for the current year. Group by account_type and calculate the average of the absolute transaction amounts.
tables: accounts, transactions
Starter SQL
run against this data before publishingTable names match the SQLite file and the SQL script.
Total Spending by Category Last Year
SELECT c.category_name, SUM(t.amount) AS total_spent
FROM transactions t
JOIN categories c ON t.category_id = c.category_id
WHERE t.transaction_date BETWEEN '2023-01-01' AND '2023-12-31' AND c.category_group = 'Expenses'
GROUP BY c.category_name
ORDER BY total_spent ASC
LIMIT 20;Top 5 Accounts by Net Income Last Quarter
SELECT a.account_name, SUM(t.amount) AS net_income
FROM transactions t
JOIN accounts a ON t.account_id = a.account_id
WHERE t.transaction_date BETWEEN '2024-10-01' AND '2024-12-31'
GROUP BY a.account_name
ORDER BY net_income DESC
LIMIT 5;Average Transaction Amount for Income
SELECT AVG(t.amount) AS average_income
FROM transactions t
JOIN categories c ON t.category_id = c.category_id
WHERE t.transaction_type = 'Credit' AND c.category_group = 'Income'
LIMIT 20;Monthly Spending Trend
SELECT STRFTIME('%Y-%m', t.transaction_date) AS transaction_month, SUM(t.amount) AS monthly_spending
FROM transactions t
WHERE t.transaction_type = 'Debit'
GROUP BY transaction_month
ORDER BY transaction_month
LIMIT 20;Load it with pandas
import pandas as pd
# Unzip the CSV download first: one file per table
accounts = pd.read_csv("accounts.csv")
categories = pd.read_csv("categories.csv")
transactions = pd.read_csv("transactions.csv")
# Join transactions to accounts
df = transactions.merge(accounts, left_on="account_id", right_on="account_id", how="left", suffixes=("", "_accounts"))
print(df.groupby("account_type").size().sort_values(ascending=False))Using it in your tool
- Excel
- Load each table into a separate sheet. Use Power Query to join tables based on account_id and category_id. Create a PivotTable on the joined data to analyze spending by category and account type.
- Power BI
- Create relationships between accounts and transactions (account_id), and categories and transactions (category_id). Build measures for total income, total expenses, and net income. Visualize monthly spending trends and budget vs. actuals by category group.
- SQL
- Load the CSV files into separate tables or use the provided SQLite database. The 'transactions' table contains foreign keys 'account_id' and 'category_id' which can be used to join with the 'accounts' and 'categories' tables respectively.
- Python
- Use pandas to read the CSV files. Merge the DataFrames using 'account_id' and 'category_id'. Perform aggregations and analysis on the merged data to calculate metrics like total spending per category or net income per account.
Formats available
- CSV (zip)One CSV file per table, zipped
- Excel workbookOne worksheet per table
- SQLite databaseA ready-to-query database file with every table
- Parquet (zip)One Parquet file per table, zipped
- SQL scriptCREATE TABLE with primary and foreign keys, then INSERTs
- CSVA single CSV file
- JSONA single JSON file
How this data was generated
Synthetic data. Every row was generated: no real people, customers or companies are in this dataset.
Synthetic data generated by GoMask DataFactory from a relational blueprint: keys, links and rules are enforced in code, text columns are filled by a language model. No real people, companies or transactions.
- Data was generated using GoMask DataFactory.
- Transaction amounts and dates were synthesized to mimic realistic patterns.
- Account types and category groups were assigned based on common financial structures.
- Checked by an automated quality gate: unique keys, no orphan foreign keys, required columns filled, declared rules and date ranges (realism score 100).
Limitations
- The dataset is synthetic and does not represent real-world individuals or entities.
- The 'description' field in transactions has limited distinct values.
- The dataset does not include information on specific merchants or payees.
- Distributions and correlations are modelled, not measured from real records.
Part of these collections
blueprint · budget-dataset
Scale this dataset
Same tables. As many rows as you need.
Open the blueprint behind these 3 tables in Data Factory: keep the relationships, change a column, and generate it at the size you need.
- 200,000 rows
- 1,000,000 rows
- Tables
- accounts, categories, transactions
- Licence
- yours to use, including commercially
- API slug
- budget-dataset