Overview
This sheet schedules future transactions, including calculated credit card payments, and projects the balances of one or more accounts. It’s like a check register on steroids.
Features
- Generates recurring transactions: Enter a transaction once and set it to generate future copies.
- Calculates credit card payments: Shows upcoming credit card payment amounts and current activity.
- Reconciles automatically: When Tiller downloads an actual transaction that matches a scheduled transaction, the scheduled transaction is marked as reconciled, removed from the balance calculation, and hyperlinked to the actual transaction.
- Based on a “check register” model, rather than an abstracted list of recurring transactions: Maintain a record of past transactions for as long as you want them. Change the details of one copy of a recurring transaction without changing all the other copies. Track one-time transactions, such as checks written, in the same list as recurring ones, such as bills and paychecks.
- Sortable: Scheduled transactions can be sorted, filtered, moved, copied, and pasted. Rows can be inserted and deleted. Columns can be added and moved.
- One sheet: No need to toggle between sheets to update or reconcile.
- Charts: Review balance projections at a glance. (Similar to Quicken’s Projected Balances graph.)
- No scripts.
I built the sheet because I needed it. My wife and I undertook a large home project, which we paid for from our checking account. The funds came from other accounts so we needed a way to know when to transfer money into the checking account to cover upcoming expenses. I started with a simple table that pulled our checking account balance and added it to income and expense transactions that we entered below. This worked, but many of our expenses recur periodically and it became tedious to re-enter them each month. I considered using a few Tiller solutions, e.g., the Projected Balances and Bill Payment Tracker sheets, but they didn’t let me account for one-off transactions such as the checks we wrote. I wanted to maintain the simplicity of our table, with its free-entry transactions, while generating copies of recurring transactions for the next month.
After releasing the initial version, I incorporated a community request to automatically calculate credit card payments. I also wanted to reduce the time I spent manually reconciling transactions, so I built in automatic reconciliation. I also added the ability to track multiple asset accounts.
Transaction entry table
Projected balance charts
Combined list of entered and generated transactions
Installation
Requirements
Your Tiller spreadsheet must contain these core sheets: Balance History (hidden by default, no need to unhide), Accounts, and Transactions. They supply
– the current balances of the accounts you’re tracking,
– the hidden status of accounts, and
– the transaction data for automatic reconciliation.
Copy to your Tiller spreadsheet
- Open my shared spreadsheet: SHARED Tiller Foundation Template - Google Sheets
- At the bottom of the window, right-click on the Scheduled Transactions tab and select Copy to, then Existing spreadsheet.
- Select your Tiller spreadsheet in the window that appears and click Insert.
- The sheet will appear in your spreadsheet as Copy of Scheduled Transactions. You can rename it.
To uninstall
- Right-click on the sheet’s tab at the bottom of the window and select Delete.
Setup
1. Delete sample data
The sheet you copied contains sample transactions in the light green cells below columns A through J. You can delete them. (You can insert, delete, move, sort, and filter rows without breaking the sheet. Do not insert rows above row 1. When copying and pasting data – on this or other sheets – it’s best to use Paste special - Values only to avoid formatting problems.)
2. Enter the URL (web address) of your Transactions sheet
This step is required to create hyperlinks to reconciled transactions.
- View your Transactions tab.
- Select all the text in the address bar and copy it. It will look similar to this:
https://docs.google.com/spreadsheets/d/1dHwvO0RibgFwhZ-7Xn64yzgfpj0RGHSyQeXBHYVGiBo/edit#gid=1256593101
- Go back to the Scheduled Transactions tab and right-click on cell BC1. Select Paste special, then Values only.
- Hide the setup area by clicking the minus (-) box above column BF:
Usage
Enter and change data in light green cells only.
Enter scheduled transactions
Columns A through J are where you enter transactions. To create a simple, one-off transaction:
- Use the drop-down in the
Asset Account
column to select the account that the transaction will be debited from or credited to. (See the Options section, below, if the account you want doesn’t appear in the drop-down.) - Enter the date the transaction is scheduled to occur in the
Transaction Date
column. - Enter a description of the transaction in the
Description
column. This can be any text you like. (But see below under Calculate credit card payments if you’re entering a credit card payment and want the sheet to calculate the payment amount.) - Optionally enter notes in the
Notes
column. - Enter the transaction amount in the
Actual Amount
column. Credits should be positive, debits negative.
Look at column T, the Asset Account Projected Balance
column, in the same row: It will show the current balance of the account you selected plus the amount of the transaction you just entered.
Set transactions to recur
To generate future copies of a transaction:
- Enter a number value in the
Recurs Every …
column and select a period from the… Day(s) or Month(s)
column. This sets how often the transaction will recur. (See below, under Limitations and
known issues, for transactions that occur twice a period.) - Enter a date in the
Starts Recurring
column. This is the date that will be used to calculate the dates of future copies of the transaction. It doesn’t need to be the same as theTransaction Date
, so, if a transaction doesn’t occur on the date it’s supposed to, you can use theTransaction Date
to reflect the actual date it occurs, without affecting future copies. - Enter a value in the
Recurring Amount
column. This is the value that will be used for future copies of the transaction. It doesn’t need to be the same value you entered in theActual Amount
column. As an example, consider a monthly electric bill: you might set theRecurring Amount
to the average amount you spend per month, and, when you receive the bill, set theActual Amount
to the amount due. - The transaction’s description and recurring values will appear in bold if it’s correctly set to generate future copies.
Chart and list future transactions
Schedule a few more transactions, then look at the charts to the right, under the sheet title. The left chart shows the minimum daily balance for every account you entered in the Asset Account
column. The right chart shows the balance of the account selected in cell BL1 after each scheduled transaction. Enter the number of months you’d like to chart in cell BJ1.
The table to the right of the charts shows a list of all scheduled transactions for the number of months entered in BJ1. The checkboxes in cells BN1 and BO1 filter the transactions. Checking the box in BN1 will show only transactions from the account selected in BL1. Checking the box in BO1 will show only generated transactions, hiding transactions you’ve manually entered. This filter comes in handy when setting up the next month as explained in the Workflow section, below.
Calculate credit card payments
The sheet can automatically calculate credit card payment amounts for any credit card accounts you’ve linked to Tiller. To calculate a credit card payment:
- Enter the credit card account name in the
Description
column exactly as it appears in the dropdowns in column A (the firstAccount
column) on the Accounts sheet. It usually looks like the account name followed by the partially-redacted account number and an identifier in parentheses, e.g.,Inspirus Savings - xxxx0001 (F538)
. - The transaction’s description will appear in italics if it matches a liability account.
- In the
Starts Recurring
column, enter the date the credit card payment is due as shown on the statement. - In the
Credit Card Closing Date
column, enter the closing date as shown on the same statement. Note that the closing date may vary from month to month; update it when you copy generated transactions to the entry area as detailed in the Workflow section, below. - The amount due will appear in the
Credit Card Pmt. Amount
column and will reduce the projected account balance. Note that if credits, such as returns or redeemed points, are applied after the closing date the calculated payment amount will be higher than the eventual amount you owe. - The sum of transactions made after the current statement closing date but before the next closing date will appear in the
Credit Card Current Activity
column. This column is shown for information; the amount doesn’t affect any other calculations. Note that this amount may be lower than the amount due on the next statement, once it closes, if credits were applied to the account.
Reconcile transactions
Transactions are automatically marked reconciled with a checkmark in column Q and removed from the balance calculation when Tiller downloads a matching transaction to the Transactions sheet.
The Link to Reconciled Transaction
column shows the matching transaction. Clicking on it will take you to that transaction on the Transactions sheet.
The matching algorithm isn’t perfect. If the wrong match is shown, use the Override
column to select the correct match or to indicate that the transaction isn’t reconciled. If the correct match still doesn’t appear, you can enter one or more Transaction IDs from the Transactions sheet, separated by commas, in the Override
column. Ignore the red triangle error; the transaction matching the entered ID will still appear in the Link to Reconciled Transaction
column and the hyperlink will take you to the transaction.
You can quickly reconcile a transaction and remove it from the balance calculation by checking the box in column P instead of using the override column. Doing so will remove the hyperlinked transaction in the Link to Reconciled Transaction
column.
Any transaction whose Actual Amount
is equal to $0.00 is marked reconciled.
Workflow
Daily – Weekly
Double-check that transactions have been reconciled correctly. (Note that the balance available to Tiller usually lags the actual account balance; reconcile accordingly. A transaction that has hit your bank hasn’t necessarily hit Tiller.)
Refine the list of transactions and update Transaction Dates
and Actual Amounts
.
Enter new rows to capture future changes to recurring transactions, such as a pay raise or final car payment:
- Set the
Recurring Date
to the effective date of the change, or, for transactions that are ending, delete theRecurring Date
and recurring period data. - Update the
Recurring Amount
.
Monthly
Move generated transactions for the upcoming month to the data entry table:
- Check the box in BO1 so that the table to the right of the charts shows generated transactions only.
- Select and copy the generated data from the white columns only for the next month’s transactions.
- Paste the data at the bottom of the data entry table. Use Paste special - Values only to preserve formatting.
- Go through the copied transactions, checking that they’re still needed, updating
Transaction Dates
, and enteringActual Amounts
.
Prune the rows of reconciled transactions, if desired. Use caution – rows that appear in bold are still being used to generate future transactions.
Permissions
Free for personal use. If you share this sheet, here or elsewhere, modified or not, please link back to this post.
Options
Use the plus and minus boxes above the column letters to show and hide column groups.
The checkbox in cell BE1 controls the filtering of data queried from the Accounts sheet. If an account you want to track doesn’t appear in the drop-downs in the Asset Account
column, uncheck the box. The drop-downs will now list all accounts classed as Asset
rather than listing only checking and savings accounts.
Additional advanced options are discussed in the Notes section, below.
Troubleshooting
-
If you’ve made changes to a transaction but they’re not reflected as expected in the generated copies of it, you may not have edited the most recent (by
Recurring Date
) transaction with the sameDescription
. If there are multiple copies of a transaction with the sameDescription
and the same recurring settings, only the copy that appears lowest in the main table will be used to generate future copies. -
If multiple copies of the same transaction are being generated, check that all copies of it in the main table have the same
Description
and recurring frequency. -
See above, under Options, if the account you want to use doesn’t appear in the drop-down on the balance line.
-
To end a recurring transaction, you’ll need to maintain a copy of it with either a $0.00
Recurring Amount
or the recurring data (in theRecurs Every …
,… Day(s) or Month(s)
, andRecurring Date
columns) deleted until you delete all copies of it from the data entry (left) table.
Notes
Limitations and known issues
-
Transactions can only be set to recur by multiples of days or months. This means that bimonthly transactions must be entered as two separate transactions with different
Description
values, such asJohn paycheck 1
andJohn paycheck 2
, set to recur on different days of the month. The lack of additional options is intentional. It reduces the complexity of parsing additional recurring periods, increases the readability of the formulas, and makes the expected results very clear at the small cost of requiring a few more transaction rows. -
There’s no option to set transactions to recur on the last day of the month, so
Starts Recurring
dates entered as the 29th, 30th, or 31st will generate copies with the date changed to the 28th. You’ll need to edit theActual Date
after copying the generated transaction to the main table. -
Erroneous $0 points may appear at the right end of the chart:
If data doesn’t exist in one or more series in a chart’s range, Sheets won’t preserve the settings applied to each series, but rather will apply them only to the series that do have data, in the order they appear. In order to keep the colors and shapes in the chart assigned to the same series (“Projected Balance (+)”, “Projected Balance (-)”, etc.) as the data changes, I’ve had to create a $0.0001 balance at the end of any series that would otherwise have no data. -
There’s no way that I can figure out to definitively link data from the Balance History sheet to data from the Transactions sheet. Often, the downloaded transaction data lags the downloaded balance data by a day or three. This means that you’ll need to double-check (and possibly override) the reconciled status of recent (within the last few days) scheduled transactions to ensure that they’re applied correctly. If you find that the lag creates a consistent problem for reconciling your account(s), the sheet can be set to use the account balance from the date of the most recent transaction in the account rather than using the most recent balance, but it’s not foolproof. See below, under Account balances, for instructions.
-
If you accidentally edit formulas or otherwise manage to break the sheet, you can reinstall it and copy over your data from cells A – J. I’m happy to help troubleshoot and welcome bug reports: just reply to this post.
Recurring transactions
The sheet will generate future copies of any transaction row in the data entry table table where
– the three recurring columns (Recurs Every …
, … Day(s) or Month(s)
, and Starts Recurring
) aren’t blank,
– the sum of Recurs Every …
and Starts Recurring
is within the period set in cell BJ1, and
– the sum of Recurs Every …
and Starts Recurring
isn’t on or after the Starts Recurring
date of another transaction in the main table with the same Description
.
Future copies will be generated until
– the sum of Recurs Every …
and Starts Recurring
exceeds the period set in cell BJ1, or
– the sum of Recurs Every …
and Starts Recurring
is on or after the Starts Recurring
date of another transaction in the data entry table with the same Description
.
Reconciling transactions
Scheduled transactions are automatically reconciled with downloaded transactions from the Transactions sheet by matching
– the Transaction Date
of the scheduled transaction with the Date
of the downloaded transaction and
– the Actual Amount
of the scheduled transaction with the Amount
of the downloaded transaction.
To make reconciliation more robust, the matching isn’t exact. The values in hidden cells AE1 and AF1 set the parameters for filtering downloaded transactions. From the filtered list, the sheet selects the transaction whose Date
is closest to the scheduled transaction’s Transaction Date
. If you’re finding a lot reconciliation errors, you can try adjusting the values in the hidden cells. (The default values are 4 days and 1.5%.)
The drop-down lists of downloaded transactions in the Override
column are created similarly. The parameters for filtering are set in hidden cells AL1 and AM1. (The default values are 31 days and 15%.)
Account balances
Columns R & S show the date and amount of the downloaded balance used to calculate projected balances. By default, the sheet uses the latest available account balance (from the Balance History sheet). As noted above, there’s no way to definitively link downloaded transactions with downloaded balances. Downloaded balances are often several days more current than downloaded transactions. If you find that the lag from balances to transactions creates a consistent problem for reconciling your account, the sheet can be set to use the account balance from the date of the most recent transaction in the account rather than using the most recent balance. It’s not foolproof, but it may be worth a try: set hidden cell EA1 to a value greater than 0. (The default, 0, sets the sheet to use the latest account balances available.)
(Lack of) brittleness
This sheet is designed to be as robust as possible because I find that the freedom to insert, delete, move, and sort rows makes it easier to capture transactions as I think of them and keep the sheet up to date. You should be able to
- delete any row except the header row,
- move any row except the header row,
- insert row(s) anywhere except above the header row,
- copy and paste (values only)* in the editable (green) areas,
- sort rows, and
- move and insert columns
without breaking the sheet. Please let me know if you do break it so I can improve it.
*Note that cut, copy, and paste operations can quickly mess up formatting (especially conditional formatting) and data validation, which won’t break the sheet but will make it less useable. You’ll want to avoid cut operations – use copy instead and then delete the orginal data – and use Paste special - Values only to avoid formatting problems. This caveat applies to any spreadsheet, not just this one, because of the way formatting is implemented.
Most of the sheet’s flexibility is achieved by putting every formula in the header row. As long as the first row isn’t changed, the formulas are preserved.
There’s an annoying Sheets behavior that, if a row is moved from a position covered by a result array to a position below (or, presumably, above, but I haven’t tested) the result array, it brings with it the result row from its old position. To ensure that rows can be moved freely, we need to prevent the accumulation of these orphaned results from blocking the automatic expansion of arrays. My solution is to stack empty arrays below all result arrays that don’t fill to the bottom of the sheet (e.g., below query results):
=let(this_result_,
query(...),
{this_result_; makearray(rows(A:A)-rows(this_result_), columns(this_result_), lambda(r_, c_, iferror(1/0)) )})
Array formulas with input that includes one or more entire columns (e.g., A:A
) should already fill to the bottom of the sheet and don’t need the padding.
Dynamic references
I wish the QUERY()
function lived up to the promise of its documentation and accepted references to header names. As of April, 2024, it doesn’t. There’s a clever workaround that wraps QUERY()
in a LAMBDA() function to replace header name inputs with Col1
-type references while remaining reasonably readable: google sheets - Can I use column headers in a =QUERY? - Web Applications Stack Exchange
This eliminates the helper table and INDIRECT()
s otherwise needed to create dynamic references to the Tiller Core sheets and, I think, speeds things up a bit.
Changelog
1.01 (2024-06-14)
- Removed
$0.00
values from column M in otherwise empty rows.
1.0 (2024-05-17)
- Initial release.
- Column locations and names adjusted.
- Updated documentation.
0.9 - 0.96
- Beta releases.
This sheet was previously named Short Term Cash Flow. It served the same purpose, but didn’t automate transaction reconciliation, calculate credit card payments, or project balances for multiple accounts.