• 3 tables
  • 97,447 rows
  • 7 formats
  • synthetic data

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.

  • last updated 27 Oct 2026
  • by GoMask
  • Includes 3 distinct tables: accounts, categories, and transactions.
  • Covers financial data from 2022-01-01 to 2024-12-31.
  • Features 15 columns across all tables.
  • Available in CSV, Excel, SQL, and other formats.

At a glance

  • 3tables
  • 97,447rows
  • 15columns
  • Jan 2022 – Dec 2024date range

The 3 tables

preview and data dictionary per table

Accounts accounts · table · 5,000 rows

Contains information about individual financial accounts.

Preview

First 10 of 5,000 rows of the Accounts table
account_iduuidaccount_namestringaccount_typestringopening_balancedecimalcurrent_balancedecimal
2c3f923a-bdfa-446b-9e0a-a9dae01b8791Everyday Checking AccountChecking11079.6720761.55
a14cdee6-ec62-47ac-8d0c-be01b7279f2fPrimary Business CheckingChecking2628.125855.05
2fc742e8-c5e4-4aed-9b2c-b2f4fb4b422bTransactional Checking FundChecking2420.6414442.75
c303d437-2c6b-4392-89e6-094e7550f9dfOperating Cash AccountChecking2738.941524.45
c0fc3d07-bda1-45d0-8fd4-a9aadd178877Main Street CheckingChecking13258.2624529.87
2c73a88d-8cc8-4068-9ddf-894a4911f537Capital Reserve CheckingChecking11866.5117709.1
9c074f35-3ce6-459d-b1fa-47262df8c76fGrowth Operations CheckingChecking7560.7821063.62
74cae42e-f44e-4063-9c68-6d95ec47e09dMomentum Checking AccountChecking2495.788848.27
b18a66fa-c89f-466d-bb7a-06ad4d13459bCore Transactional AccountChecking2536.4717103.28
b996f2ea-a17e-42f6-aeae-f8f3658c120cStandard Business CheckingChecking8092.422578.41
10 of 5,000 rows · 5 columns

Data dictionary

Data dictionary for the Accounts table
columntypedescriptionexamplenull %
account_iduuidPrimary key unique identifier for the financial account.unique2c3f923a-bdfa-446b-9e0a-a9dae01b87910%
account_namestringDescriptive display name of the financial account.Everyday Checking Account0%
account_typestringType of financial account.Checking0%
opening_balancedecimalInitial balance of the account when opened or tracked, negative for liabilities or credit balances.11079.670%
current_balancedecimalCurrent snapshot balance of the account accounting for opening balance and transaction totals.20761.550%

Categories categories · dimension table · 50 rows

Defines the budget categories for financial transactions.

Preview

First 10 of 50 rows of the Categories table
category_iduuidcategory_namestringcategory_groupstring
f3fbdc23-5bba-4374-b598-fb8d8573a49aTravel & LodgingExpenses
76c6e430-279a-4890-adbf-5fa29eb41959College Savings 529Expenses
d4c89ecf-d14a-48ea-b514-a427493c77e8Student Loan PaymentExpenses
becefc35-9756-44a1-9a35-608b48a31b64Equipment & HardwareExpenses
f9eaa4b9-fe8d-453b-8e7b-a280ffa2845eWater UtilityExpenses
0c398e13-d105-43d8-a341-fa43f47ea697Mobile PhoneExpenses
13b6eb0e-04a9-4984-9a30-ebf55dcd6992Brokerage Investment DepositExpenses
27993fee-2ef1-42fb-be65-8315018eb11bShipping & PostageExpenses
8a77a1e8-65d5-40a1-b53e-ba20721a8460Public TransitExpenses
019156aa-3c27-42c1-ae51-be954fc23461High-Yield Savings DepositExpenses
10 of 50 rows · 3 columns

Data dictionary

Data dictionary for the Categories table
columntypedescriptionexamplenull %
category_iduuidUnique identifier for the financial category.uniquef3fbdc23-5bba-4374-b598-fb8d8573a49a0%
category_namestringDescriptive name of the budget category.uniqueTravel & Lodging0%
category_groupstringTop-level financial grouping for budgeting (Expenses, Savings, Income, Debt).Expenses0%

Transactions transactions · fact table · 92,397 rows

Records individual financial transactions, linking accounts and categories.

Preview

First 10 of 92,397 rows of the Transactions table
transaction_iduuidtransaction_datedatedescriptionstringtransaction_typestringamountdecimalaccount_iduuidcategory_iduuid
326d01e9-9a05-480a-a539-3618e25fcd492024-09-17Bought new clothes from apparel storeDebit-1372.32dd7b3b41-d820-4c04-b684-674c55dbd1bb4ff8ec2c-dcfe-4469-8beb-756becefe754
98281772-3230-4b57-9898-20c593e015d62024-01-08Returned defective electronic gadgetDebit-221.099d346b0b-b9e7-4ba9-8cb4-1c4dc52f6ea1c66ae24f-7ff2-4550-b1ee-695281ff640b
fd074f38-f3b7-4107-8299-5e2d582557632024-05-12Paid for concert ticketsDebit-104.48a8f736c2-5847-46ec-b0e6-b3bd7d61288ff5d3fd79-1e8f-47a5-866e-aa47dd4b262e
6449eadf-daed-4f4a-ad77-fd2c5c4d9a2b2024-12-11Deducted gym membership feeDebit-60.936fb0288b-325b-40ff-bffe-785a4e2f30e0d98ccab8-a772-4b33-a75b-77228b6accb2
1f9b3d7a-445b-49fd-be07-2739481430cd2022-01-02Transferred funds to savings accountDebit-1957ad5f6a-2420-4a79-8240-91814da113f232c46618-e757-487a-b280-59736dc884e5
a07ccc8f-248c-4e76-9fda-f8ba652ca6ec2023-12-07Returned item to online retailer for refundDebit-72.490ad05224-ba92-4069-8c9b-50af917261efbecefc35-9756-44a1-9a35-608b48a31b64
478e70cf-c3a3-4e6a-a5b5-9f5a1a1b46162022-06-20Purchased prescription medicationDebit-37.890ee94294-d18e-4c7c-bc0a-0c1602d338d4cc8e175d-b12e-4a89-a130-ac3557e7d74c
9b290de6-8c46-429f-ac73-a9af1fa802542024-04-24Bought lunch at fast food restaurantDebit-24.33fef33c7c-0718-4146-a57e-10c2f191793abecefc35-9756-44a1-9a35-608b48a31b64
75789e44-915a-4f43-94f3-1cf9fb82a4872022-09-25Purchased tools from hardware storeDebit-973.9840cb718e-6b8f-4142-a2ae-047cb24c25cd5f578a76-4384-45c0-8c61-1687b3ad5c4f
8bd87289-7ca9-4253-8008-ba60bc0573af2022-06-13Paid for educational course materialsDebit-106.0560e79758-968f-446c-a2cb-d51012290948cc9bc255-217f-43c7-9cd9-8c89736109cf
10 of 92,397 rows · 7 columns

Data dictionary

Data dictionary for the Transactions table
columntypedescriptionexamplenull %
transaction_iduuidUnique identifier for the financial transaction record.326d01e9-9a05-480a-a539-3618e25fcd490%
transaction_datedateDate on which the transaction occurred, between Jan 1, 2022 and Dec 31, 2024.2024-09-170%
descriptionstringNarrative text or merchant memo explaining the purpose or counterparty of the transaction.Bought new clothes from apparel store0%
transaction_typestringClassification of the transaction direction: Debit (outgoing/expense) or Credit (incoming/income).Debit0%
amountdecimalMonetary value of the transaction. Negative for debits/expenses (-2000.00 to -0.01), positive for credits/income (0.01 to 4999.77).-1372.320%
account_iduuidForeign key to accounts.account_id.dd7b3b41-d820-4c04-b684-674c55dbd1bb0%
category_iduuidForeign key to categories.category_id.4ff8ec2c-dcfe-4469-8beb-756becefe7540%

How the tables join

  • transactions.account_id references accounts.account_idmany to one: each Transactions row points to one Accounts row
  • transactions.category_id references categories.category_idmany to one: each Transactions row points to one Categories row

Questions to answer with it

  1. 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

  2. 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

  3. 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

  4. 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 publishing

Table names match the SQLite file and the SQL script.

Total Spending by Category Last Year

sql
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

sql
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

sql
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

sql
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

python
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
Scale this dataset in Data Factory
Tables
accounts, categories, transactions
Licence
yours to use, including commercially
API slug
budget-dataset

What should your data show?

Preview 20 rows free
No signup. No card.