Should tax refunds be debited from expense or income accounts?

For personal accounting there are no regulations, so do whatever suits you.

Arguably, on a cash basis a credit to an expense account makes the most sense. Treat it as you would had you bought an item at a store, then returned it. It's not really income, but rather an expense that's been reversed. Though mathematically, crediting an income account works just as well, if that will generate more meaningful reports for you.

I would suggest you make the entry to a subaccount, so the balance of what's been withheld from your paycheck is tallied separately from refunds you've received.

On an accrual basis, there will be an asset account which represents money owed to you by the IRS. This account balance will grow each accounting period when you estimate your actual tax liability. (It might also be a liability account, or have a negative balance, if you estimate you'll owe money to the IRS.) When you receive the refund check, credit this account to bring the balance to zero, and debit the account where you deposit the check. No income or expense accounts are involved.

This allows your tax expenses to be recorded in the same periods as the income that generated them, making for more accurate comparisons between periods. It does require some effort to accurately estimate taxes each period. Or since there's no law requiring personal accounts to be kept a particular way, you may choose to add the accrual entries retrospectively, backdating them into each of the 12 months for the tax year, or whatever suits your reporting methods.

This should be a rebate or refund to your tax expense account. If you were to instead list it as income, you're essentially counting those dollars twice - first when you got paid (before you credited it to taxes) and again when you got the tax return. As a result, your income would be inaccurate with an excess while it would also appear that you paid more in your tax expense account than you actually did.

For personal finances, you can of course track things however you want. For me, since one of the main reasons I track my finances is to be able to file taxes accurately, I tend to try to line things up with how the state and federal taxes work in the absence of a reason not to. This can be a little tricky sometimes, because the federal and state governments sometimes look at things a little differently.

In the United States, you can deduct state income taxes paid in the year that you paid them, but if you do so then you need to treat any state tax refund for that year as income in the year that you receive it. My state's income tax doesn't really care about federal taxes one way or the other. So, I generally look at things from the federal taxes point of view.

For federal taxes, here's what I do:

  • Deductions from my paycheck are paid to Expenses:Taxes:Federal Income Tax.
  • Tax return refunds are paid from Expenses:Taxes:Federal Income Tax Prior Year.
  • Tax return payments are paid to Expenses:Taxes:Federal Income Tax Prior Year.

Having that "Prior Year" account is pretty weird, though. It's just how Microsoft Money managed things many ages ago, and I've pretty much just kept it even though I've long since moved to Gnucash. I should probably consolidate them into one account at some point. But in general just treating it all as an Expense or negative Expense works fine, since for both my federal and state tax purposes it isn't something I need to track further as it's not considered income. It's still not considered income by them even when I get back more than I paid for a year due to refundable credits.

For state taxes, here's what I do:

  • Deductions from my paycheck are paid to Expenses:Taxes:State Income Tax.
  • Tax return refunds are paid from Income:Other:State Income Tax Refunds.
  • Tax return payments are paid to Expenses:Taxes:State Income Tax.

As I itemize my federal deductions each year, this lines up with what I need to put on my federal taxes, where I deduct the state income tax (whether automatically paid from my paycheck or whether I needed to pay it directly for a prior year) in the year that I pay it. And when I get a refund, it counts as income for federal tax purposes in the year I receive it.

Obviously depending on which governments you owe tax to you may want to arrange things slightly differently, but as long as you can find the information you need to easily there's not really a "wrong" approach. The books balance whether you transfer from an Income account or an Expense account, so it to some extent just depends on whether you want to treat it as "getting my previously paid taxes back" or "getting more income from some other source".