Skip to main content
Transactions are the core of Cashify. Every income, expense, transfer, and correction is recorded as a transaction, giving you complete visibility into your financial activity.

Overview

The transactions page provides a comprehensive list of all your financial activities with advanced filtering and search capabilities.

CRUD Operations

Create, read, update, and delete transactions with ease

Advanced Filtering

Filter by category, amount range, date, and more

Infinite Scroll

Seamlessly load more transactions as you scroll

Grouped Display

Transactions organized by date for easy scanning

Creating a Transaction

1

Navigate to Transaction Creation

Click the + Add Transaction button or navigate to /transactions/create
2

Choose Transaction Type

Select between Expense or Income using the tab buttons:
  • Expense - Money going out (shown with red down arrow)
  • Income - Money coming in (shown with green up arrow)
3

Select a Category

Choose from your custom categories. Each category displays:
  • Category icon (customizable)
  • Category name
  • Color indicator
Categories are filtered by type - you’ll only see expense categories when on the Expense tab, and income categories on the Income tab.
4

Choose an Account

Select which account this transaction affects. All your active accounts are displayed as selectable buttons.
5

Enter Transaction Details

Fill in the required information:
A brief description of the transaction (e.g., “Grocery shopping”, “Salary deposit”)
The transaction amount. Enter as a positive number - the app automatically handles negative values for expenses.
You only need to enter the numeric value. The system will automatically negate expenses and keep income positive.
Additional notes or description for the transaction. Useful for tracking specific information.
When the transaction occurred. Defaults to the current date/time if not specified.
6

Save the Transaction

Click Add Transaction to save. The system will:
  • Update the account balance automatically
  • Recalculate your net worth
  • Show a success notification
  • Redirect you to the transactions list

What Happens Behind the Scenes

When you create a transaction:
// From app/Http/Controllers/TransactionController.php
$account = Account::findOrFail($attributes['account_id']);
$category = Category::findOrFail($attributes['category_id']);

if ($category->type == 'expense') {
    $attributes['amount'] = -abs($attributes['amount']);
}

$account->update([
    'balance' => $account->balance + $attributes['amount'],
]);

Auth::user()->transactions()->create($attributes);
updateNetworth();
Account balances and net worth are updated in real-time. You’ll see the changes immediately on your dashboard.

Viewing Transactions

The transactions index page (/transactions) displays all your transactions with smart grouping and pagination.

Date Grouping

Transactions are automatically grouped by date:
  • Today - Transactions from today
  • Yesterday - Transactions from yesterday
  • Specific dates - Older transactions grouped by their date

Transaction Card Details

Each transaction displays:
  • Category icon - Visual representation of the category
  • Color indicator - Category-specific color for quick identification
  • Type indicator - Red down arrow for expenses, green up arrow for income

Editing Transactions

Click any transaction to open the edit form.
When editing a transaction, be aware that:
  • Changing the amount will update the account balance
  • Changing the account will transfer the transaction to that account and adjust both account balances
  • The category type cannot be changed (you can’t convert an expense to income)

Account Changes

If you move a transaction to a different account:
if ($oldAccount->id != $newAccount->id) {
    // Remove from old account
    $oldAccount->update([
        'balance' => $oldAccount->balance - $transaction->amount,
    ]);
    
    // Add to new account
    $newAccount->update([
        'balance' => $newAccount->balance + $attributes['amount'],
    ]);
}

Deleting Transactions

When you delete a transaction:
1

Automatic Balance Correction

A balance correction transaction is automatically created to reverse the effect of the deleted transaction.
2

Account Balance Update

The associated account balance is updated to reflect the deletion.
3

Net Worth Recalculation

Your net worth is automatically recalculated.
// Deletion creates a correction transaction
$correctionCategory = Auth::user()->categories()->where('type', 'correction')->get();

Auth::user()->transactions()->create([
    'category_id' => $correctionCategory->first()->id,
    'account_id' => $transaction->account->id,
    'title' => 'Balance Correction',
    'amount' => -$transaction->amount,
    'details' => __('Account: :account - Deleted :title transaction.', [
        'account' => $transaction->account->name,
        'title' => $transaction->title,
    ]),
]);
Correction transactions ensure your account history remains accurate and auditable, even after deletions.

Advanced Filtering

Click the filter icon to open the advanced filter panel.

Available Filters

Select one or multiple categories to show only transactions from those categories.
// TransactionFilter applies category filtering
if ($this->request->filled('categories')) {
    $categoryIds = $this->request->input('categories');
    $query->whereIn('category_id', $categoryIds);
}

Filter Combinations

All filters can be combined for powerful queries:
1

Apply Multiple Filters

Set any combination of category, type, amount, text, and date filters
2

View Results

Results update automatically as you apply filters
3

Clear Filters

Remove individual filters or clear all to return to the full transaction list

Infinite Scrolling

Transactions load dynamically as you scroll, providing a seamless browsing experience.

How It Works

  • 10 transactions per page load initially
  • Automatic loading when you scroll near the bottom
  • Spinner indicator shows when loading more results
  • No “Load More” button needed - just keep scrolling
Filters are preserved when loading more transactions - the withQueryString() method ensures all filter parameters are included in pagination URLs.

Sorting

Transactions are always sorted by creation date in descending order (newest first):
$query->orderBy('created_at', 'desc')->paginate(10);
This ensures you always see your most recent transactions at the top of the list.

Best Practices

Use Descriptive Titles

Make titles clear and searchable (e.g., “Whole Foods” instead of “Shopping”)

Add Details

Use the details field for additional context that might be useful later

Choose the Right Category

Proper categorization makes your spending charts more meaningful

Set Accurate Dates

Use the date field to record when transactions actually occurred, not just when you entered them

Accounts

Manage the accounts your transactions belong to

Categories

Customize transaction categories

Dashboard

View transaction summaries and charts

Build docs developers (and LLMs) love