Products indiPDF indiAccounting indiBudget All Products Company Blog About Download

indiAccounting Documentation

Complete user guide for indiAccounting — small business accounting for Linux, macOS, and Windows.

1. Getting Started

indiAccounting is a full-featured small business accounting application that runs natively on Linux, macOS, and Windows. It handles invoicing, expenses, payroll, banking, reporting, and more — all locally on your computer with no cloud dependency or subscription.

When you first launch the app, a setup wizard walks you through entering your company name, entity type, and basic information. You can also skip this and configure it later in Settings.

Recommended First Steps

  1. Set up your company information in Settings → Company.
  2. Review the Chart of Accounts — a default set is seeded for you.
  3. Add your customers and vendors.
  4. If migrating from another system, use Settings → Import Data.

Back to top

2. The Interface

The indiAccounting window is organized into three areas:

  • Sidebar — Dark navy navigation panel on the left. Groups are expandable — click one to reveal its children. Only one group is open at a time. A blue dot indicates which collapsed group contains the page you're currently viewing.
  • Header bar — Shows the current page title, a notification bell for overdue items, and quick actions.
  • Main content — The primary workspace. Forms, lists, reports, and dashboards render here.

Command Palette

Press Ctrl+K (or ⌘K on macOS) from anywhere to open the command palette — a quick-search overlay that lets you jump to any page by typing a few letters. Use arrow keys to navigate results and Enter to go.

Sidebar Navigation

The sidebar contains 12 collapsible groups: Overview, Sales, Expenses, Catalog, Time Tracking, Mileage, Banking, Accounting, Payroll, Budgets, Reports, and Settings. Click any group row to expand it; clicking another group auto-collapses the previous one. Your last expanded group is remembered across sessions.

At the bottom of the sidebar, the company card shows your business name and fiscal year.

Back to top

3. Company Setup

Navigate to Settings → Company to configure your business information.

Company Information

  • Company Name — Appears on invoices, estimates, and reports.
  • Entity Type — Sole Proprietorship, LLC, LLC (S-Corp), LLC (C-Corp), S-Corp, C-Corp, Partnership, or Nonprofit. This affects payroll calculations (e.g., S-Corp shareholder health insurance rules).
  • Address, Phone, Email, Website — Printed on invoices and estimates.
  • Tax ID (EIN) — Used for W-2 generation and 1099 reporting. Not printed on customer-facing documents.
  • Federal Depositor Status — Your IRS employment-tax deposit schedule (monthly, semiweekly, or "line 12 under $2,500"). Fills Part 2 of Form 941 — see Federal Tax Forms.

Invoice Settings

  • Invoice Prefix & Starting Number — e.g., INV- starting at 1000 produces INV-1000, INV-1001, etc.
  • Estimate Prefix & Starting Number — Same pattern for estimates.
  • Default Payment Terms — Applied to new invoices (Due on Receipt, Net 7/15/30/45/60/90).
  • Fiscal Year Start Month — Determines your fiscal year for reports.

Late Fees & Reminders

Configure automatic late fee calculation (flat amount or percentage) and payment reminder emails. Set grace periods and reminder schedules (days before/after due date).

Tax Rates

Define sales tax rates with name, percentage, and description. Mark one as the default to auto-apply on new invoices.

Email (SMTP)

Configure SMTP settings to send invoices and estimates directly from the app. Supports TLS and STARTTLS encryption. Includes a test email function and customizable email templates.

Multiple Companies

One installation can hold several separate businesses — each with its own customers, invoices, payroll, settings, and backups — and one license covers all of them (there's no per-company subscription).

  • Switch companies from the company card at the bottom of the sidebar: click it to open the list and pick another company. Switching restarts the app into that company.
  • Manage companies under Settings → Companies — create a new company, rename one, switch, or delete one.
  • Create a company and it starts empty and ready (and already licensed). Delete removes that company and all of its data permanently — you can't delete the company you're currently in, or your only company.

Each company is fully independent: its data lives in its own folder, so a backup or export covers just that company. If you're upgrading from an earlier version, your existing data becomes your first company automatically the first time you open this release — nothing to move.

Back to top

4. Customers

Manage your clients from Overview → Customers.

  • Company name, contact name, email, phone.
  • Billing and shipping addresses (with "same as billing" option).
  • Default payment terms and credit limits.
  • Tax-exempt flag for non-taxable customers.
  • Notes field for internal reference.

The customer list is sorted alphabetically and shows each customer's outstanding balance. Click a customer to view their details, linked invoices, and payment history.

Back to top

5. Invoices

Create and manage invoices from Sales → Invoices.

Creating an Invoice

  1. Click Create Invoice.
  2. Select a customer and set the invoice date. Choose Payment Terms (Due on Receipt, Net 7–90, or a custom due date) — the terms default from the customer and set the due date automatically. Tick "Remember … as the default" to save the chosen term back as that customer's default for future invoices.
  3. Add line items — click Select... to choose from your Services or Products catalog, or type a description manually.
  4. Adjust quantities, prices, discounts, and tax amounts.
  5. Optionally assign the invoice to a Project / Job — this attributes its income to that job for job costing (see Time Tracking & Projects).
  6. Add optional notes, terms, and footer text.
  7. Save.

Invoice numbers are generated automatically from your configured prefix and counter.

Invoice Status Lifecycle

  • Draft — Just created. Not yet sent to the customer.
  • Sent — Sent via email or manually marked as sent.
  • Overdue — Automatically set when the due date passes without full payment.
  • Partial — A payment has been recorded but doesn't cover the full balance.
  • Paid — Full balance settled.
  • Void — Invoice zeroed out and preserved for audit trail. Cannot be edited.

Actions

  • Send Email — Sends the invoice to the customer via your configured SMTP. Automatically marks the invoice as "Sent."
  • Mark Sent — For invoices delivered outside the app (printed, hand-delivered).
  • Download PDF — Generates a PDF and saves via a file dialog.
  • Print — Opens the OS print dialog with a professional document layout.
  • Record Payment — Log a partial or full payment. Automatically updates the status.
  • Void — Zeroes out the invoice and marks it void. Preserves the invoice number for audit trail.

Filtering

The invoice list can be filtered by status and searched by number, customer, or amount. Voided invoices are hidden by default — check "Show voided" to view them.

Back to top

6. Estimates

Create quotes and proposals from Sales → Estimates.

Estimates work like invoices but include an expiry date and a different status lifecycle:

  • DraftSentAccepted / Rejected / ExpiredConverted

Converting to Invoice

Click Convert to Invoice on an accepted estimate. This creates a new invoice pre-populated with all the estimate's line items, amounts, and customer information. The estimate is marked as "Converted" with a link to the resulting invoice.

Auto-Expiry

Estimates that pass their expiry date while still in Draft or Sent status are automatically marked as Expired.

Sending, Printing & PDF

From an estimate's detail page you can email it, Print it, or Download PDF — the PDF uses the same professional layout as invoices (company header, line items, totals, and your notes and terms).

Back to top

7. Recurring Invoices

Set up automatic invoice generation from Sales → Recurring.

  1. Select a customer, frequency (weekly, monthly, quarterly, yearly), and interval.
  2. Set a start date and optional end date.
  3. Define the invoice template with line items.
  4. Enable "Auto-send" to email invoices automatically when generated.

When a recurring invoice fires, a new invoice is created with the next sequential number and all the template's line items. The next run date advances automatically.

Back to top

8. Bills & Expenses

Track money you owe from Expenses → Bills.

  • Enter bills from vendors with line items, amounts, and due dates.
  • Each line item is assigned to an expense account in your Chart of Accounts.
  • Record payments against bills (partial or full).
  • Link a bill to a related invoice for pass-through/markup tracking (see Vendors & Subcontractors).

Bill Status

  • Unpaid — Balance outstanding.
  • Partial — Some payment recorded.
  • Paid — Fully settled.
  • Void — Zeroed out.

Paying a Bill by Check

Click Record Payment on a bill and set the amount and date. Choose a Payment Method; for Check or Bank Transfer, pick the Pay from account — the bank account the money leaves, so the payment credits the right account in your books. Enter the check number in the reference field.

  • Record & Print Check records the payment and immediately generates a printable check made out to the vendor, using the vendor's name and mailing address. It's the same check format as the bank register, so it prints on the same QuickBooks-compatible pre-printed check stock (see Printing checks for stock and MICR details).
  • Already recorded a check payment? Each check-method payment in the bill's Payment History has a Print check link, so you can print or reprint it any time.

Back to top

9. Vendors & Subcontractors

Manage your suppliers and contractors from Expenses → Vendors.

Vendor Information

  • Company name, contact, email, phone, address.
  • Tax ID (EIN or SSN) and 1099-eligible flag.
  • W-9 received status and date — tracked for compliance.
  • Default expense account for streamlined bill entry.
  • Payment terms.

Subcontractor Management

Navigate to Expenses → Subcontractors for a dedicated view of all 1099-eligible vendors. This shows:

  • YTD payments to each contractor.
  • W-9 compliance status — highlights contractors with payments but no W-9 on file.
  • 1099 threshold flag — marks contractors at or above the IRS reporting threshold for the selected year ($600 through tax year 2025; $2,000 beginning with tax year 2026).
  • Year selector for viewing different tax years.

Pass-Through Tracking

When you subcontract work and bill your client at a markup, you can link a vendor bill to the client invoice it relates to. This enables margin tracking: you can see what you charged the client vs. what you paid the sub.

Back to top

10. Purchase Orders

Create purchase orders from Expenses → Purchase Orders to track orders placed with vendors.

  • Select a vendor and add line items with quantities and prices.
  • Track order status: Draft, Sent, Partial, Received, Cancelled.
  • Record receiving — mark items as received with quantities.
  • Convert to Bill when ready to record the expense.

Back to top

11. Inventory & Products

Manage your product catalog from Catalog → Inventory.

  • Product details — Name, SKU, description, unit of measure.
  • Pricing — Sales price and cost price with margin display.
  • Inventory tracking — Enable to track quantity on hand, reorder points, and stock adjustments.
  • Accounting — Assign income, expense, and asset accounts from your Chart of Accounts.
  • Primary vendor — Link to the supplier for reordering.
  • Tax — Taxable flag and tax rate assignment.

When you create an invoice with a tracked product, inventory is automatically adjusted.

Back to top

12. Services

Manage your service offerings from Catalog → Services.

  • Service name, code (auto-generated if left blank), description.
  • Default price — pre-fills when added to an invoice or estimate.
  • Income account and tax rate assignment.

Services and Products both appear in the line item picker when creating invoices, estimates, and recurring invoices.

Back to top

13. Receipts & OCR

Upload and manage receipt images from Expenses → Receipts.

  • Upload receipt images (PNG, JPEG) or PDF files.
  • Automatic OCR text extraction (requires Tesseract) identifies vendor name, amount, and date.
  • Approve or reject receipts before recording as expenses.

OCR Requirements

Receipt text extraction uses Tesseract OCR. If not installed, receipts still work as image attachments — OCR is optional.

  • Linux: sudo apt install tesseract-ocr
  • macOS: brew install tesseract
  • Windows: Download from UB Mannheim

Back to top

14. Time Tracking & Projects

Projects

Create projects from Time Tracking → Projects. Each project can have a customer, budget (hours and/or amount), hourly rate, and assigned employees.

Job Costing & Profitability

Projects double as jobs for cost tracking. Tag an invoice or a bill to a project (invoices from the invoice form, bills from the bill form) and the project's detail page shows a live Profitability panel:

  • Income — what you billed on the job's invoices, excluding sales tax (which isn't revenue).
  • Costs — what the job's tagged bills cost.
  • Profit — income minus costs.
  • Projected — profit plus the value of billable time logged to the job that hasn't been invoiced yet (work in progress), so you can see where the job lands once that time is billed. Unbilled time is kept separate from Income so nothing is double-counted.

For a fuller picture across all jobs — or to slice by customer, date, or status — build a report over invoices, bills, or time in the Custom Report Builder.

Timer

Use the live timer at Time Tracking → Timer to start, pause, resume, and stop tracking. Time entries are created automatically when you stop the timer.

Time Entries

View and manage all time entries from Time Tracking → Time Entries. Entries can be:

  • Linked to a project, customer, and/or employee.
  • Marked as billable or non-billable.
  • Set with an hourly rate for invoicing.

Back to top

15. Mileage Tracking

Track business travel mileage from the Mileage section.

Mileage Entries

  • Log trips with start/end locations, distance, purpose, and vehicle.
  • Automatic reimbursement calculation using the IRS standard mileage rate (or custom rates).
  • Link entries to customers, projects, and expense accounts.
  • Approval workflow: Pending → Approved → Reimbursed.

Vehicles

Register your vehicles with year, make, model, and license plate. Assign vehicles to mileage entries for per-vehicle reporting.

Reporting

The mileage list includes summary breakdowns by vehicle, project, and customer — useful for tax reporting and client billing.

Back to top

16. Chart of Accounts & Journal Entries

Chart of Accounts

Navigate to Accounting → Chart of Accounts to view and manage your account structure. A default set of accounts is created automatically, including:

  • Cash, Checking, Savings (Assets)
  • Accounts Receivable, Inventory Asset (Assets)
  • Accounts Payable, Sales Tax Payable, Payroll Liabilities (Liabilities)
  • Sales Revenue, Service Revenue (Revenue)
  • Cost of Goods Sold, Operating Expenses, Payroll Expenses (Expenses)
  • Owner Equity, Retained Earnings (Equity)

You can add custom accounts as needed. System accounts (seeded defaults) are marked as such.

Journal Entries

Create manual journal entries from Accounting → Journal Entries. Each entry has debit and credit lines that must balance. Journal entries are also created automatically by:

  • Processing payroll (salary expense, tax liabilities, etc.)
  • Recording invoice payments
  • Bill payments
  • Recording entries in the bank register

Editing a Journal Entry

You can correct a manual (or bank-register) entry in place — open it and click Edit. What you can change depends on the entry's state:

  • The memo/description is always editable, in any state.
  • The accounts, amounts, and date can be edited too — unless a line of the entry has already been cleared on a finalized reconciliation. Once an entry is part of a closed reconciliation, its substance is locked (you can still fix the memo); reverse it instead if the numbers need to change.
  • When you change accounts or amounts, the account balances are adjusted automatically so the books stay balanced.

Editing doesn't erase history: every edit is written to the audit log with the before-and-after values, so the trail stays trustworthy through the record of changes rather than by forbidding them.

Reversing a Journal Entry

Prefer to leave the original untouched? Open the entry and click Reverse Entry: this posts a new, balanced entry with the debits and credits swapped, so the original and the reversal net to zero. Give an optional reason; both entries stay on the books. Reversing is the right tool when an entry is already locked by a finalized reconciliation, or when you want the correction to show as its own dated entry.

Entries that were generated by a document — an invoice, bill, payment, or pay run — can't be edited or reversed here. Correct those by voiding the source document (void the invoice, delete/void the pay run, etc.), which posts the proper reversal for you. The Edit and Reverse Entry buttons are offered only for manual and bank-register entries.

Back to top

17. Banking & Reconciliation

Bank Accounts

Set up your bank accounts from Banking → Bank Accounts. Supported types: Checking, Savings, Credit Card, Loan, Investment, Other.

Bank Register

The Register is the checkbook-style way to record activity by hand — no journal entries and no thinking in debits and credits. Open an account and click Register (also on the account's menu). Pick what happened, enter the amount, and save:

  • Deposit — money in. Choose the income or other account it came from.
  • Check — money out by check. Choose the expense/category account, and optionally a check number.
  • Withdrawal — money out (debit card, fee, cash). Choose the expense/category account.
  • Transfer — move money to another of your bank accounts.

Under the hood each entry posts a proper, balanced journal entry against the account's ledger account, so everything you record here flows straight into your reports and statement reconciliation — you just never have to see a debit or a credit. The register shows a running list with each entry's payment, deposit, and resulting balance.

Linking a payee to a vendor. On a deposit, check, or withdrawal you can optionally pick a Vendor next to the free-text Payee — choosing one fills an empty Payee with the vendor's name. Linked entries show the vendor in the register's Vendor column as a clickable link to that vendor's record, so you can jump from a line in the register straight to the vendor. The link is optional; leave it as "Not linked" for one-off payees.

Printing checks

When you record a Check in the register, click Print Check to generate a printable business check (with a detachable stub for your records). The dollar amount is both boxed as a figure and spelled out on the legal line the way a check reads (e.g. "One Thousand Two Hundred Thirty-Four and 56/100"), and your company name and address are drawn from your company profile.

Check stock. indiAccounting prints onto standard pre-printed check stock — the same model QuickBooks uses. Order QuickBooks-compatible voucher checks (from your bank or any check supplier); the stock already carries your bank's routing and account numbers in the magnetic MICR line at the bottom, and indiAccounting prints the variable details (payee, date, amount, and memo) onto it. Like QuickBooks, the app does not print the MICR line itself — that comes pre-printed on the stock in magnetic ink so your bank can process the check. Voucher layout is designed for a window envelope; when you print a check from a vendor bill, the vendor's mailing address is printed in the payee block so it shows through the window.

Tip: if the printed fields don't line up perfectly with your stock, it's almost always a printer "fit to page"/scaling setting — print at 100% / actual size.

Viewing Transactions

Click a bank account name (or the Transactions button) to view all transactions. Filter by date range, reconciliation status, or search by description.

Importing Transactions

Import bank statements in CSV or OFX/QFX format using the Import button on each account. Drag a file onto the import area, or click to browse. OFX/QFX files (offered by most banks as "Quicken" or "Microsoft Money" downloads) need no configuration. For CSV, the importer reads the header row to figure out your columns, so the column order doesn't matter and most banks' exports work as-is.

CSV format the importer understands

Give the file a header row. The importer matches these columns by name (case-insensitive, and it only needs the header to contain the word, so "Transaction Date" or "Posting Date" both work):

ColumnHeader containsNotes
Date (required)"date" — including "Posting Date"Accepts M/D/YYYY, MM/DD/YYYY, YYYY-MM-DD, and similar.
Amount (required)"amount"One signed column: negative = money out, positive = money in. May include $, thousands commas, a leading minus, or parentheses for negatives (e.g. (50.00)).
or Debit / Credit"debit"/"withdrawal" and "credit"/"deposit"Use two separate columns instead of one signed Amount, if that's how your bank exports.
Description"description" or "narrative"The payee/memo text shown for the transaction.
Type"type"e.g. DEBIT, ACH_CREDIT — optional, kept for reference.
Check number"check" + number/slip/#e.g. "Check or Slip #".
Memo"memo" or "notes"Optional.

A "Balance" column (running balance) is ignored — indiAccounting tracks the balance itself. After the file parses, the Review step lists every transaction it found and lets you deselect any you don't want before importing; duplicates already on the account are detected and skipped.

Zero transactions found? Make sure the first row is a header row containing at least a date column and an amount (or debit/credit) column. If your bank labels its date column something unusual, rename it to include the word "Date" and re-import. Exports from Chase, Bank of America, Wells Fargo, and most other US banks import without changes.

SimpleFIN Sync

Connect to your bank via SimpleFIN for automatic transaction syncing. Set up at Banking → SimpleFIN Sync — enter your SimpleFIN access URL and map your bank accounts.

Matching & Categorizing Imported Transactions

Match imported transactions against your recorded invoices, bills, and journal entries. The matching view shows unreconciled transactions and lets you match, exclude, or categorize them.

Statement Reconciliation

Reconcile each account against its monthly bank statement — the classic "tie the books to the bank" control. Open the account's transactions and click Reconcile:

  1. Start a reconciliation by entering the statement closing date and the statement's ending balance. The beginning balance is carried forward automatically from your last finalized reconciliation, so statements chain together month to month.
  2. Check off each transaction that appears on the statement. The worksheet keeps a live tally: cleared deposits, cleared payments, and the cleared balance (beginning balance + cleared deposits − cleared payments).
  3. Finalize when the difference between the cleared balance and the statement ending balance is exactly $0.00. The Finalize button stays disabled until it is — a reconciliation can't be closed while it's off by even a cent.
  • Drill down to any line. Each entry number on the worksheet is a link — click it to open the transaction behind it: the invoice, bill, estimate, or pay run that generated it, or the journal entry itself for register and manual entries. It's the quick way to check or fix an entry without leaving the reconciliation.
  • Finalized reconciliations are locked — an immutable record your accountant can rely on — and appear in the account's reconciliation history, each with a printable report.
  • An in-progress worksheet can be left and resumed later, or discarded — discarding only clears the check marks; no transactions are changed or deleted.

Back to top

18. Payroll

Full payroll processing from Payroll → Employees and Pay Runs.

Employee Setup

  • Personal information, address, and Social Security number. The SSN field is write-only: it's needed for W-2s and e-filed wage reports, it's stored encrypted at rest when app encryption is enabled, and after saving only the last four digits are ever displayed again.
  • Employment type (Full-Time, Part-Time, Contractor), department, job title.
  • Pay type (Salary or Hourly) with rate and frequency.
  • W-4 information (2020+ format): filing status, dependents, multiple jobs, deductions, extra withholding.
  • Benefits: 401k/retirement (employee contribution + employer match), health/dental/vision insurance premiums, HSA contributions — all with pre-tax/post-tax options.
  • Overtime: Configurable OT multiplier (default 1.5x), double-time (2.0x), and rule selection (weekly 40, daily 8, California, etc.).
  • PTO: Accrual rate, period, and balance tracking for vacation and sick leave.
  • Multi-state: Work state field for employees who work in a different state than their residence.
  • S-Corp: Shareholder-owner flag with health insurance premium adjustment per IRS Notice 2008-1.
  • Prior payroll: Year-to-date opening balances from a previous payroll system — see Switching Payroll Systems Mid-Year.
  • Payroll-tax exemptions: FICA, FUTA, and SUTA exemption flags for the rare cases with a clear statutory basis — see Exemptions, Garnishments & Advances.
  • Garnishments: Court-ordered wage garnishments the employee is subject to, applied automatically each pay run — see below.

Running Payroll

  1. Go to Payroll → Pay Runs and click Run Payroll.
  2. Step 1: Set pay period dates and pay date. Quick presets available (this week, biweekly, monthly, etc.).
  3. Step 2: Review employee hours — adjust regular, overtime, double-time, vacation, and sick hours, plus per-employee tips, a non-taxable reimbursement, and a cash advance or advance repayment for this run.
  4. Step 3: Review tax calculations — federal, state, local taxes, Social Security, Medicare, employer taxes, benefits.
  5. Step 4: Confirm and process. Creates journal entries in your ledger.

Pay runs must be created in date order. Within a tax year, each check's wage-base caps (Social Security, Additional Medicare, FUTA, SUTA) are computed from the year-to-date at the moment the run is created, so the app refuses a new pay run dated before an already-processed one. Back-entering history — say, loading January–June from a previous system — works fine: just enter the runs oldest-first.

Exemptions, Garnishments & Advances

Payroll-tax exemptions

On the employee record you can mark an employee exempt from Social Security and Medicare (FICA), from FUTA, and/or from SUTA, independently. The wages still appear on the W-2 and are still subject to income tax — the exempted tax simply isn't withheld or accrued (both the employee and employer sides for FICA), and those wages are excluded from the 941 and W-2 Social Security/Medicare boxes.

Only set these when you have a clear statutory basis. The common case is a child employed by a parent's sole proprietorship (or a partnership in which each partner is a parent): wages are exempt from FICA if the child is under 18, and from FUTA if under 21. When in doubt, check with your accountant — an incorrect exemption underpays tax.

Cash advances

To pay an employee a cash advance, enter it in the Advance column on the pay run — it's added to that check's net pay (it's a loan, not taxable wages). Collect it back over later runs by entering an amount in the Repay column, which is deducted from net. A repayment never takes more than the check's available net, and the employee's outstanding advance balance (advances paid minus repayments) is tracked for you.

Wage garnishments

Add court-ordered garnishments on the employee record; they're then applied automatically to every pay run as a post-tax deduction. Each order has a type (child support, creditor, tax levy, …), a fixed amount or a percent of disposable earnings, and a maximum percent — set that to the legal ceiling for the order type.

indiAccounting withholds within the federal Consumer Credit Protection Act (CCPA) limits, computed on disposable earnings (pay after legally-required taxes, not after voluntary deductions):

  • Each order is capped at its maximum percent of disposable earnings, and at the amount actually ordered.
  • Ordinary creditor garnishments are limited to 25% of disposable earnings and always leave at least 30× the federal minimum wage protected.
  • Child support takes priority and can reach its higher legal cap (typically 50–65%); ordinary creditors yield to it — support counts toward the 25% ceiling, so a creditor is squeezed to whatever room is left rather than stacking on top.

This is a conservative, transparent model that never over-withholds. Complex situations — multiple competing orders, state rules stricter than federal, or a specific dollar cap on an order — should be confirmed with the issuing agency, and you can set each order's maximum percent to match.

Tax Calculations

Payroll automatically calculates, using the tables for the pay date's tax year:

  • Federal income tax (IRS Percentage Method with W-4 2020+ support — 2025 and 2026 tables included)
  • State income tax (imported or hardcoded rates for all 50 states)
  • Local/city taxes (flat or graduated, employer or employee-paid)
  • Social Security (6.2%, up to the annual wage base — $176,100 for 2025, $184,500 for 2026)
  • Medicare (1.45%, plus the 0.9% Additional Medicare surtax on wages over $200,000)
  • FUTA and SUTA (employer taxes)

The exact Social Security and Medicare taxable wages are captured on each paycheck as it's calculated, and every downstream form — the 941, the W-2, and the e-file wage report — is built from that same single figure. The quarterly forms and the W-2s can't drift apart (the mismatch the IRS/SSA cross-check looks for), because nothing is computed twice.

Tax Liability

  • Tax Liability — Quarterly and YTD summary of employer and employee taxes, with your recorded tax payments (deposits) tracked against them.

Federal Tax Forms: 941, 940, 943, 944

Payroll → Tax Forms computes your federal employment-tax returns from your recorded payroll: Form 941 (quarterly), Form 940 (annual FUTA), and the annual Form 943 (agricultural employers) / Form 944 (smallest employers). The screen shows the exact computed line values, and each form offers two downloads built from those same values:

  • Draft PDF — a plain summary layout for review.
  • Official PDF — the actual IRS form, filled in field by field, ready to review, sign, and file.

Form 941 computes the full return: employee count, wages, withheld income tax, Social Security wages and tips (lines 5a/5b), Medicare and Additional Medicare (5c/5d), the fractions-of-cents adjustment (line 7), total tax, your recorded deposits (line 13), and the balance due or overpayment.

Deposit schedule (Part 2, line 16)

Set your Federal Depositor Status in Settings → Company: line 12 under $2,500, monthly schedule depositor, or semiweekly. Monthly depositors get the month-by-month liability breakdown on line 16, computed from the actual per-check taxes by pay date — so the three months always total exactly to line 12, the tie the IRS checks.

  • If the status is not set, line 16 is left blank — the app never guesses your deposit schedule — and the download reminds you to set it.
  • Semiweekly depositors must complete and attach Schedule B (Form 941). indiAccounting does not generate Schedule B.
  • Your deposit schedule is determined by the IRS lookback-period rules (Notice 931), not by the app. If you aren't sure which schedule applies to you, ask your accountant.

These are prepared drafts, not filed returns. Every figure comes from the payroll recorded in indiAccounting. Review each line — ideally with your tax professional — before signing and filing, and remember a form can only be as complete as the payroll behind it: if part of your year ran on another system, read Switching Payroll Systems Mid-Year first.

W-2, W-3 & Electronic Filing

Payroll → W-2 Forms generates year-end wage forms:

  • Employee copies — print or download W-2 copies for all employees.
  • Official W-2 (Copy A) and Official W-3 transmittal — the SSA forms filled with the same figures. After downloading, the app reminds you how Copy A may be filed.
  • E-File (EFW2) — generates the SSA's EFW2 wage file (Publication 42-007 format) for upload through SSA Business Services Online (BSO). You'll enter your 8-character BSO User ID and a contact; the app lists any problems it finds (such as missing SSNs) before you upload.

The 10-return e-file mandate. Federal rules require electronic filing when you file 10 or more information returns in aggregate (W-2s plus 1099s) for a year — paper Copy A is not permitted at that point. indiAccounting counts your returns and shows a banner on the W-2 and 1099 screens when the mandate applies to you. If you'll be e-filing W-2s, register for your SSA BSO account early: activation codes arrive by postal mail and can take weeks, so don't wait for the January filing deadline.

Full Social Security numbers are required on W-2 Copy A and in the e-file. Enter them on each employee's record; with app encryption enabled they're stored encrypted, and you'll need encryption unlocked (master password) when generating the forms or the e-file — otherwise the app warns you rather than filing incomplete numbers.

1099-NEC & 1096

Reports → 1099-NEC generates contractor recipient copies plus the Official 1099-NEC and the Official 1096 transmittal, using the statutory reporting threshold for the selected tax year — $600 through tax year 2025, $2,000 beginning with tax year 2026. Filling a prior tax year asks you to confirm first, because the built-in template is the current IRS revision. Direct 1099 e-filing through the IRS IRIS system is planned for a future release; until then, e-file through the IRIS portal yourself (or a transmitter), or paper-file if you're under the 10-return mandate.

Switching Payroll Systems Mid-Year

Moving to indiAccounting from another payroll system partway through a year? Enter each employee's prior-payroll opening balances — the year-to-date wages and taxes the old system already paid and withheld — in the Prior Payroll (Previous System) section of the employee's edit screen. Copy the numbers from the old system's final pay stubs or payroll register.

Opening balances make the year whole:

  • Wage-base caps continue correctly. Social Security stops at the annual wage base across both systems, and the Additional Medicare, FUTA, and SUTA thresholds carry over too — without them, the new system would restart every cap from zero and over-withhold.
  • One W-2 per employee for the full year. One employer (EIN) files one W-2 per employee, so prior-system amounts merge into the W-2 boxes automatically — including employees the old system paid who never ran through indiAccounting.
  • New pay runs must be dated after the previous system's last covered pay date, so year-to-date totals can never double-count the covered period.

Enter opening balances BEFORE processing any payroll for that year. Checks are computed against year-to-date at the moment they're created, so a check processed before the balances existed used the wrong wage caps — and the app refuses balances once payroll has been processed for that employee-year. If you hit this: void or delete that year's processed pay runs for the employee, enter the balances, then re-create the runs oldest-first so each check recomputes correctly. If those checks were already paid out, talk to your accountant before voiding anything.

Typo protection

A transcription error in opening balances would produce a wrong W-2 and wrong wage caps that look internally consistent — so the entry screen checks your numbers the same way the app checks its own math. Figures that can never come from a correct payroll register (Social Security wages above the annual base, Social Security wages above Medicare wages, tips exceeding the wages that contain them) are refused outright, with a message naming the likely mistake. Figures that don't tie arithmetically — withholding that doesn't match 6.2% / 1.45% of the wages entered, Box 1 above gross, FUTA above the per-employee maximum — produce a warning you must confirm before saving. Double-check anything it flags against the old system's final register before confirming.

The transition quarter and Form 941

W-2s are annual, so they come out whole no matter when you switch. Form 941 is quarterly, and a quarter's 941 must report all wages the business paid that quarter — from both systems. That makes the switch date matter:

  • Cleanest: switch at a quarter boundary (January 1, April 1, July 1, or October 1). The old system files its last full quarter, indiAccounting files every quarter after, and there's nothing to combine.
  • Mid-quarter, with no indiAccounting payroll that quarter (your first pay run here lands in the next quarter): file that quarter's 941 entirely from the previous system.
  • Mid-quarter, with payroll in both systems: neither system's 941 is complete on its own. The one return for that quarter must combine both registers — your accountant can merge them.

The app walks you through this with your actual dates: the opening-balances screen shows date-specific guidance as you enter the last covered pay date, and a 941 for a split quarter carries instructions naming the split date, what to do, and the first quarter indiAccounting's 941 covers in full. The annual 940/943/944 for a switch year likewise cover only indiAccounting's payroll and must be combined with the previous system's figures before filing — the forms say so whenever it applies.

Back to top

19. Prevailing Wages & Fringe Benefits

For businesses working on government contracts or union jobs, indiAccounting supports prevailing wage requirements.

Wage Allocations

During a pay run, click Add prevailing wages under any employee to split their hours across projects at different rates. Each allocation includes:

  • Project selection and work state (for multi-state tax allocation).
  • Base rate — Always taxable as wages.
  • Health & welfare fringe — Toggle between paid to a plan (non-taxable) or paid as cash (taxable).
  • Pension/retirement fringe — Same toggle.
  • Training fund — Same toggle.
  • Other fringe — Same toggle.

The system calculates taxable vs. non-taxable portions correctly based on each fringe component's disposition.

Prevailing Wage Report

Navigate to Payroll → Prevailing Wage for a detailed report showing:

  • Grand totals: hours, base pay, fringes to plans vs. fringes as cash.
  • Category breakdown: Health & Welfare, Pension, Training, Other — with plan vs. cash amounts.
  • Per-employee detail with project-level breakdowns.

Back to top

20. Budgets

Create and track budgets from Budgets → All Budgets.

  • Set up annual, quarterly, or monthly budgets.
  • Assign budget amounts per account.
  • Track actuals vs. budget with variance calculations.
  • Configure alerts when spending approaches or exceeds thresholds.

The Budget vs Actual report provides a visual comparison of planned vs. actual spending across all budget categories.

Back to top

21. Reports

Navigate to Reports → All Reports for the complete list. Available reports:

ReportDescription
Profit & LossIncome statement for a date range
Balance SheetAssets, liabilities, and equity at a point in time
Cash Flow StatementOperating, investing, and financing cash flows
Trial BalanceDebit/credit totals for all accounts
General LedgerDetailed transaction history by account
A/R AgingOutstanding customer invoices grouped by age
A/P AgingOutstanding vendor bills grouped by age
Profit MarginMargins by product and service
Expense by VendorTotal expenses broken down by vendor
Income by CustomerRevenue breakdown by customer
1099-NECVendor payments for tax reporting (threshold $600 through 2025; $2,000 from 2026)
Budget vs ActualBudgeted vs. actual spending
Sales Tax ReportTax collected by jurisdiction
Sales Tax FilingsFiling status tracking
Prevailing WageFringe benefit accruals by employee and project
Custom Transaction ReportFlexible general-ledger view: date range, account & source filters, grouping by account or month

All reports support date range filtering, a Print Report button, and an Export CSV button — so any report can be opened in Excel, Google Sheets, or a BI tool. Exported files include your company name in the header so a report is identifiable on its own. Beyond this fixed list, the Custom Report Builder lets you design and save your own reports.

On the Profit & Loss and Balance Sheet, click any account to drill down into its general-ledger detail, and from there into the source document. Use Back to return to the report exactly as you left it — your date range and accrual/cash basis are preserved.

Custom Report Builder

Beyond the built-in reports, Reports → Custom Report Builder lets you design your own — no formulas or SQL required. You build a report by picking a data source, then choosing what to show:

  • Data source — Invoices, Bills / Expenses, Transactions (the general ledger), Time Entries, Payroll, or Employees.
  • Columns — check the fields you want to see.
  • Filters — narrow by any field (equals, greater/less than, contains, and so on) and by a date range.
  • Group & total — group by one or more fields and total the rest (sum, count, average, min, max) to turn a detailed list into a summary — e.g. total gross pay by department, or invoiced income by customer.
  • Sort — order by any column, ascending or descending.

Click Run Report to see the results, then Print or Export CSV like any other report. Give a report a name and Save it to reopen later — saved reports appear in the dropdown at the top of the builder.

Your data stays safe. The builder only ever reads your books — it can never change or delete anything — and it works entirely from a fixed catalog of fields, so a report can't reach data it shouldn't or corrupt your database.

Pin a report to your dashboard

Open a saved report and tick Show on dashboard. It then appears on the Dashboard as a compact, live widget showing its latest results, so the numbers you watch most are on the first screen you see each day. Untick it to remove the widget.

Cash vs. Accrual Basis

indiAccounting can present your financials on either an accrual or a cash basis. The Profit & Loss, Balance Sheet, Income by Customer, and Expense by Vendor reports — and the Dashboard — each carry an Accrual / Cash toggle and a label showing which basis is currently in view.

  • Accrual recognizes revenue when you issue an invoice and expenses when you enter a bill, whether or not money has changed hands yet.
  • Cash recognizes revenue when a customer pays you and expenses when you pay a bill. Partial payments are recognized as they arrive.

Switching is safe and instant. Your books are always kept on accrual; the cash view is calculated on the fly from the same records. Flipping between accrual and cash never changes or deletes any data, so you can switch as often as you like — and existing companies can turn on cash reporting with nothing to convert or migrate.

Set the basis your reports and Dashboard open in from Settings → Invoicing → Default Reporting Basis (you also choose it during first-time setup). The per-report toggle always overrides the default for that view.

What to expect on cash basis

Because cash figures are derived from your accrual records, a few things behave differently — all of them standard practice for cash-basis reporting:

  • Sales tax is excluded from cash revenue. Tax you collect is a liability you remit, not income, so each payment is split between net revenue and tax.
  • The Balance Sheet drops Accounts Receivable and Accounts Payable. Those are accrual concepts (money owed to or by you), so on cash basis they're removed and the net difference is rolled into a single Cash Basis Adjustment line in equity. The report still balances exactly.
  • Payroll is recognized on the pay date. Wages and employer payroll taxes count on the day you run payroll, rather than on the later date you remit taxes to the agencies.
  • Revenue is shown as a single total, not broken out by product or service. (Invoices don't tag individual income accounts, so this is true on accrual too.)
  • Capital purchases aren't expensed. Paying a bill for an asset (such as inventory or equipment) is recorded as buying an asset, not as an expense — the same as on accrual.

If some invoices or bills were marked paid without a recorded payment date — common right after importing historical data — the cash Profit & Loss recognizes those on the invoice or bill date and shows a small note telling you how many were handled that way, so nothing is approximated silently. Recording an actual payment date for those documents replaces the fallback with the real cash date.

Back to top

22. Sales Tax

Manage sales tax from Reports → Sales Tax Report and Sales Tax Filings.

  • Define tax jurisdictions in Settings → Tax Jurisdictions.
  • View collected tax by jurisdiction and period.
  • Track filing status and due dates.

Back to top

23. Importing Data

Migrate from other accounting software via Settings → Import Data.

Supported Sources

Pre-built column templates for one-click import from:

  • QuickBooks — Customers, Vendors, Products, Chart of Accounts
  • FreshBooks — Customers, Services
  • Wave — Customers, Vendors, Chart of Accounts
  • Sage — Customers, Vendors
  • Zoho Books — Customers, Vendors, Products
  • Generic CSV — Any CSV with a configurable column mapper

What Can Be Imported

  • Customers, Vendors, Products, Services
  • Chart of Accounts (with automatic account type mapping)
  • Estimates (multi-row CSV with line items grouped by estimate number)
  • Invoices (multi-row CSV with line items grouped by invoice number)
  • Bills (multi-row CSV with line items grouped by bill number)

Import Wizard

  1. Upload — Select your source software and entity type, then upload a CSV file.
  2. Map Columns — The wizard auto-detects column mappings. Review and adjust as needed.
  3. Preview — See the first 20 rows as they'll be imported.
  4. Import — Execute the import with duplicate detection. Existing records are skipped with a clear message.

Recommended Import Order

Chart of Accounts → Customers → Vendors → Products → Services → Estimates → Invoices → Bills

Migrating from QuickBooks — what transfers and what doesn't

Switching from QuickBooks (or FreshBooks, Wave, Sage, Xero, and similar) is one of the most common reasons people move to indiAccounting, so it's worth knowing exactly what comes across.

File format: CSV, not .iif

indiAccounting imports plain CSV files. It does not read QuickBooks' proprietary .iif format. QuickBooks (Online and Desktop) can export your lists and reports to CSV/Excel — export as CSV, then map the columns in the import wizard.

What comes across

  • Master lists — Customers, Vendors, Products, Services, and your Chart of Accounts.
  • Open documents — Estimates, Invoices, and Bills. Importing invoices and bills brings their accounting with them, so your outstanding receivables and payables come across intact.

What doesn't transfer: your full historical general ledger — every past journal entry, prior payments, bank reconciliations, and closed periods — does not import. There is no journal-entry or trial-balance import, and account "opening balances" are entered as a journal entry rather than through the importer. This is normal when moving between accounting systems; almost no tool re-imports years of line-by-line ledger history.

The recommended approach: a conversion date

Rather than re-importing years of history, pick a conversion date (often the start of a month, quarter, or fiscal year) and start clean from there:

  1. Import your master lists (chart of accounts, customers, vendors, products, services).
  2. Import your open items — unpaid invoices, unpaid bills, and any outstanding estimates.
  3. Enter opening balances as of the conversion date with a single journal entry (from your old system's trial balance).
  4. Keep QuickBooks read-only for looking up older history when you need it.

The result isn't "starting your accounting over" — it's starting clean from a cutover date with your balances and everything still open carried in, which is exactly how accountants handle a system switch.

Switching payroll systems too? Payroll has its own mid-year rules — wage-base caps and W-2s must span both systems. See Switching Payroll Systems Mid-Year in the Payroll section.

Back to top

24. Export & Backup

Navigate to Settings → Export & Backup.

Export Options

  • Full JSON Export — All data in JSON format for migration or archival.
  • CSV Export — Individual tables as CSV files.
  • Database Backup — Complete SQLite database copy (most comprehensive).

Backups are integrity-verified. Right after a backup is written, indiAccounting checks the copy and confirms "Backup created & verified". If the check doesn't pass, the bad file is discarded and you're told — so a backup that lands on disk is known-good, not just written.

Restore from Backup

  1. Click Restore Backup.
  2. Confirm that this will replace all current data.
  3. Select a .db backup file.
  4. The backup's integrity is verified before anything is overwritten — if the file is corrupt, the restore is refused and your current data is left untouched. Otherwise it's copied over the current database and migrations are applied to bring the schema up to date.
  5. Restart the app to use the restored data.

Back to top

25. Printing & PDF Export

Printing Invoices & Estimates

Click Print on any invoice or estimate detail page. The output is a professional document layout with your company header, customer address, line item table, totals, and notes — not a screen capture.

PDF Export

Click Download PDF on an invoice or estimate to generate and save a PDF file via a file dialog. The PDF uses the same professional layout as the print output. You can also print a business check from the bank register.

Report Printing

All report views include a Print Report button that opens the OS print dialog with a clean, formatted output.

Official IRS/SSA Forms

Payroll and 1099 screens can also fill the official government PDF forms (941, 940, 943, 944, W-2, W-3, 1099-NEC, 1096) with your computed figures — see Federal Tax Forms and W-2, W-3 & Electronic Filing.

Back to top

26. Multi-Currency Support

Configure currencies in Settings → Currencies. Set your base currency and add additional currencies with exchange rates. Invoices and bills can be created in foreign currencies with automatic conversion.

Back to top

27. Data Encryption

Navigate to Settings → Encryption to enable AES-256-GCM encryption for sensitive data at rest. This encrypts stored credentials (bank connections, SMTP passwords, etc.) using a master password derived with Argon2.

When encryption is enabled, employee Social Security numbers entered for payroll are also stored encrypted. Generating W-2s or the SSA e-file requires encryption to be unlocked (master password entered) so the numbers can be read — the app warns you if it can't.

This is separate from the App Password (which controls access to the app itself). Both can be used together for defense in depth.

Back to top

28. App Password Protection

Navigate to Settings → App Password to require a password each time the app is opened.

  • Password is hashed with Argon2 and stored locally — never transmitted.
  • Optional hint text for the login screen.
  • Session-based: closing the app requires re-entering the password on next launch.
  • Lock Now button to immediately lock the session.
  • Change or disable the password at any time (requires current password).

Important: There is no password recovery mechanism. If you forget the password, you must delete the database and start fresh (or restore from a backup).

Back to top

29. Licensing

Trial Period

indiAccounting includes a 30-day free trial with all features enabled. After the trial expires, the app enters read-only mode until a license is purchased.

Activating a License

  1. Go to Settings → License.
  2. Enter your license key (format: INDI-xxxx...).
  3. Click Activate License.

License validation is performed locally. No internet connection required after activation.

Back to top

30. Keyboard Shortcuts

ShortcutAction
Ctrl+K / ⌘KOpen command palette (search)
EscapeClose command palette or modal
/ Navigate command palette results
EnterSelect command palette result

Back to top

31. Installation

Linux

Download the .deb or .rpm package from the releases page, or build from source.

  • Debian / Ubuntu / Mint: sudo dpkg -i indiaccounting_*.deb
  • Fedora / RHEL: sudo rpm -i indiaccounting-*.rpm

Data is stored in ~/.local/share/indiaccounting/ following the XDG Base Directory Specification.

macOS

Download the .dmg from the releases page. Open the DMG and drag indiAccounting to your Applications folder. Data is stored in ~/Library/Application Support/IndiAccounting/.

Windows

Download the MSI installer from the releases page. Run and follow the prompts. Data is stored in %APPDATA%\IndiAccounting\.

Staying Up to Date

indiAccounting checks for a newer version when it starts. If one is available, a bar appears across the top of the window — "Update available: indiAccounting X.Y.Z is out" — with two buttons:

  • Download — opens the download page in your browser so you can grab the new installer.
  • Dismiss — hides the bar. It won't reappear for that version, but you'll be notified again when an even newer version is released.

You can also check any time from Settings → About — click Check for updates to see whether you're on the latest version.

Updating is a normal reinstall: download the new installer and run it over your existing install. Your data is never touched — it lives in a separate location (see the paths above) and stays put across updates. Nothing is downloaded or installed automatically; you're always in control.

Linux (package repository): if you installed from the Indomitus apt/dnf repository, the update bar points you to your package manager instead of a download — just run your usual update command (e.g. sudo apt update && sudo apt upgrade or sudo dnf upgrade). Users who downloaded the .deb/.rpm directly get the normal Download button.

Linux (Flatpak): if you installed from Flathub, updates come through your software center or flatpak update as usual — indiAccounting won't show the update bar, since Flathub manages that for you.

Back to top

32. Troubleshooting

App won't launch after restoring a backup

Delete the database file and restart:

  • Linux: rm ~/.local/share/indiaccounting/accounting.db
  • macOS: rm ~/Library/Application\ Support/IndiAccounting/accounting.db
  • Windows: Delete %APPDATA%\IndiAccounting\accounting.db

Blank or white window on startup (Linux)

Some GPU drivers cause WebKitGTK rendering issues. Try launching with:

WEBKIT_DISABLE_DMABUF_RENDERER=1 indiaccounting

Bank CSV import finds zero transactions

The importer reads the header row to identify your columns. It needs a header containing a date column (any header with "date" in it, including "Posting Date") and either a single signed "Amount" column or separate Debit/Credit columns. If your export uses an unusual date header, rename it to include the word "Date" and re-import. See Banking → Importing Transactions for the full list of recognized columns and accepted date/amount formats. OFX/QFX files import without any of this setup.

Pay run rejected: "must be entered in chronological order"

Within a tax year, pay runs must be created oldest-first, because each check's wage-base caps (Social Security, Additional Medicare, FUTA, SUTA) are computed from year-to-date at the moment the run is created. Enter any back-dated history first, then the current run. If you've entered prior-payroll opening balances, new runs must also be dated after the previous system's last covered pay date.

Opening balances refused: "payroll has already been processed"

Prior-payroll opening balances must be entered before any of that employee's payroll is processed for the year — already-processed checks would have been computed with the wrong wage caps. To recover: void or delete that year's processed pay runs for the employee, enter the opening balances, then re-create the runs oldest-first so each check recomputes correctly. If the original checks were already paid out to the employee, involve your accountant before voiding anything. See Switching Payroll Systems Mid-Year.

Form 941 line 16 (deposit schedule) is blank

Set your Federal Depositor Status in Settings → Company, then re-download the form. The app never guesses your deposit schedule — until the status is set, Part 2 line 16 is intentionally left blank. Your schedule is determined by IRS lookback-period rules (Notice 931); ask your accountant if you're unsure.

E-File (EFW2) warns about missing Social Security numbers

Full SSNs are required in the SSA wage file. Enter each employee's full SSN on their employee record, and if app encryption is enabled, unlock it (enter the master password) before generating the file — while encryption is locked, stored SSNs can't be read, and a file generated with placeholder values must not be uploaded. Regenerate after fixing the warnings.

Create Employee button does nothing

This was fixed — the button now shows validation errors inline if required fields are missing (First Name, Last Name, State, Hire Date, Pay Rate).

Invoice/Estimate number says "cannot be blank"

This was fixed — numbers are now auto-generated from your prefix and counter in Company Settings.

Receipt OCR not working

OCR requires Tesseract to be installed separately. See the Receipts section for installation instructions. OCR is optional — the app works without it.

Forgot app password

There is no recovery mechanism. Delete the database file (see paths above) and restart the app. You will lose all data unless you have a backup.

Need More Help?

Visit our support page to report issues or request features.

Back to top