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 Non-profit. This affects payroll calculations (e.g., S-Corp shareholder health insurance rules), and choosing Non-profit changes the wording of your statements and screens — see Non-Profit Organizations. Changing entity type asks for confirmation first and is recorded in the audit log.
  • 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.

A company can also be a review-only copy of somebody else's books, opened from a file they sent you — it's marked with an Accountant's copy badge in the list. See Accountant's Copy. To let several people work in one company at the same time, see Multi-User.

Back to top

4. Non-Profit Organizations

Set Entity Type to Non-profit (in Settings → Company, or during first-time setup) and indiAccounting speaks your language:

  • Statement of Financial Position rather than Balance Sheet.
  • Statement of Activities rather than Profit & Loss.
  • Change in Net Assets rather than Net Income, and Net Assets rather than Equity.
  • Donors rather than Customers, throughout the screens and reports.

These aren't cosmetic preferences — they're what a non-profit's statements are actually called, and what your board and auditor expect at the top of a report. Only the wording changes; the figures are identical. One deliberate exception: invoices are not renamed to pledges. An invoice is a request for payment whoever sends it; a pledge is a promise to give — a different document — and renaming one to the other would misdescribe your books.

The Non-Profit Chart of Accounts

With Entity Type set to Non-profit, Settings → Company offers to apply a non-profit starting chart (it's also offered during first-time setup). It:

  • Renames Owner Capital to Net Assets Without Donor Restrictions, Sales Revenue to Contributions, and Service Revenue to Program Service Revenue.
  • Adds Net Assets With Donor Restrictions, Grants, Fundraising Events, In-Kind Contributions, and Membership Dues.
  • Hides the trading accounts a charity doesn't use — Cost of Goods Sold, Inventory Asset, Sales Tax Payable, Freight Income.
  • Creates Program Services, Management & General, and Fundraising as classes, not accounts — one salary is often split across all three, which classes can express and accounts can't.

It's safe to apply on books you already have: anything you've actually used is left exactly as it is, and the app reports what it renamed, added, hid, and what it left alone. Every part of it is something you could do by hand, so every part can be undone the same way. It's a starting point, not accounting advice.

Changing entity type asks first. The confirmation lists what will be renamed and notes that reports you've already printed keep their old titles — so a copy in a board pack won't match one produced afterwards. The change is written to the audit log, so anyone comparing two copies later can see exactly when the wording moved.

Tracking donor-restricted funds — recording that a gift was given for a purpose, how much of it remains, and releasing restrictions — is designed and planned for a future release. Until then, classes cover program tracking (see Classes & Locations).

Back to top

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

6. 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.
  • Create Payment Link — Mint a secure card-payment link via Stripe; see Getting Paid Online.
  • Void — Zeroes out the invoice and marks it void. Preserves the invoice number for audit trail. Voiding a paid invoice refunds each payment back out of the bank account it was received into, so every account involved stays reconcilable.

Freight & Shipping

An invoice (and a sales order) can carry a Ship Via method and a freight charge below the line items. Freight is posted to its own income account (Freight Income), kept apart from sales revenue so you can compare what you billed for shipping against what shipping actually cost you. Whether freight is taxable depends on the jurisdiction — set that per jurisdiction in Sales Tax; it defaults to not taxed.

Credit & Correction Lines

A line can carry a negative price — for a correction or an agreed reduction on the same invoice (e.g. -521.00 for a freight adjustment). Put the minus on the price and leave the quantity positive: quantity stays non-negative on purpose, so a pricing correction never moves goods back into stock. For crediting an invoice that's already issued, use a credit note instead.

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

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

8. Sales Orders

Track confirmed orders before they're invoiced from Sales → Sales Orders. A sales order records what a customer has committed to buy — useful when there's a gap between taking the order and shipping or billing it.

  • Select a customer and add line items from your Products and Services catalogs, or as free text. Line items can carry labelled attributes (size, color, style — whatever your source data uses).
  • Record Ship Via and a freight charge on the order — both carry through to the invoice raised from it.
  • Track status as the order progresses, with quantities invoiced tracked per line.

Invoicing a Sales Order

Raise an invoice from the order and the lines carry across — including the product or service each line came from, so revenue posts to that item's income account (see Services and Inventory & Products). The invoice's due date comes from the customer's payment terms, counted from the invoice date.

Sales orders can also be brought in from another system in bulk — see Importing Sales & Purchase Orders.

Back to top

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

10. Getting Paid Online

Let customers pay invoices by card. indiAccounting integrates with Stripe — you use your own Stripe account, and the money goes straight to you (indiAccounting is never in the middle of it).

Setup

  1. Create a Stripe account (or use your existing one) and find your API keys in the Stripe Dashboard under Developers → API keys.
  2. In indiAccounting, open Settings and find Online Payment Settings. Enable Stripe Payments and enter your Publishable Key and Secret Key. The secret key is stored encrypted.
  3. Choose Deposit Stripe Payouts To — the bank account Stripe actually pays out to. Card payments are recorded into that account, so it reconciles cleanly against the settlements that arrive in it. Left unset, payments go to the default cash account.

Payment Links

On an invoice, click Create Payment Link to mint a secure card-payment page for that invoice's balance. The link is included automatically when you email or print the invoice, and you can copy it anywhere.

Payment Confirmation Is Automatic

When you open an invoice, indiAccounting checks with Stripe and — if the link has been paid — records the payment on the spot: marked "Paid online via Stripe", with Stripe's payment reference attached, deposited to your chosen payout account. If a customer pays while you're not looking, nothing is lost; the payment is recorded the next time you open that invoice.

No webhook needed. Stripe's dashboard offers "webhooks" — a way for Stripe to push events to a server. indiAccounting runs on your computer, not on a server, so there is nothing to configure in Stripe's webhook section and no endpoint URL to provide. Confirmation works as described above, with nothing to set up on Stripe's side beyond the API keys.

Back to top

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

Early-Payment Discounts (2/10 Net 30)

If a vendor offers a discount for paying early — "2/10 net 30" means 2% off if paid within 10 days — set the discount percent and discount days on the vendor's record (the two numeric fields, not the free-text terms box). When you pay one of that vendor's bills within the window — from the bill's own page or from the bills list — the discount is offered on the payment. A discount taken is recorded on the payment and posted to Purchase Discounts, reducing your cost of goods rather than inventing income. The bill still posts at its full amount; the discount belongs to the moment you pay, which is when you earn it.

Back to top

12. Credits & Refunds

Customer Credits

Issue a credit note when a customer is owed money — defective goods, an overcharge, a goodwill adjustment. A credit posts to your ledger when issued, and can then be applied to one or more of that customer's invoices, reducing what the invoice owes.

An invoice can be settled by cash, by credits, or both: apply a $150 credit to a $1,000 invoice and record an $850 payment, and the invoice is fully settled. Credits and payments are tracked together, so recording a later payment never disturbs a credit already applied.

Vendor Credits

The mirror image for money a supplier owes you. Record a vendor credit, then either apply it against that vendor's bills, or — if the supplier actually sends money back — record it as a refund into the bank account the money arrived in, on the date it arrived.

Back to top

13. 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, plus early-payment discount terms (percent and days) — see Early-Payment Discounts.

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

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

15. 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. The income account is honored when the product is sold: its revenue posts there rather than to the default sales account.
  • 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

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

The income account is honored on every sale. A line sold from a service (or product) posts its revenue to the income account that item names, falling back to the default sales account only when the item doesn't name one. Set up separate income accounts for your revenue streams and your Profit & Loss shows them as separate lines automatically.

Back to top

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

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

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

20. 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. The chart also includes Freight Income, Purchase Discounts, and Foreign Exchange Gain (Loss), which the app posts to automatically when you use freight, early-payment discounts, or foreign currencies.

Renumbering & Renaming the Chart

Every account can be renamed and renumbered — built-in or not. If you've come from another package with your own numbering scheme (1-1000, 2-1000, and so on), renumber the entire chart to match: the app records what each built-in account is used for separately from its number, and every automatic posting and report finds it that way, so everything keeps working. If a number is already taken, the app tells you which account has it, by name.

The one thing fixed on a built-in account is its type (Cash and Bank, Accounts Receivable, and so on) — that's what decides which section of your statements the account appears in, so it's a matter of what the account is rather than what it's called.

Hiding Accounts You Don't Use

A built-in account that has never been used can be hidden — it drops out of the account pickers and stops cluttering the chart. A service business can hide Inventory Asset and Cost of Goods Sold; a non-profit can hide Sales Tax Payable. Two deliberate rules:

  • An account with a balance or any posting history can't be hidden — that would be a decision about your books, not a tidying of a list. Nothing that has been posted to can ever be deleted, so prior-period reports keep producing the same figures.
  • If a hidden account is ever actually needed, indiAccounting brings it back rather than refusing to post. Tidying up can never break your bookkeeping.

Classes & Locations

Two optional dimensions for slicing your books without multiplying accounts:

  • Classes — departments, programs, or lines of business. A class can be set on invoice lines, bill lines, journal entry lines, and time entries; employees can carry a default class, and payroll can split one salary across several. For a non-profit, classes are the functional classification — Program Services, Management & General, Fundraising (see Non-Profit Organizations).
  • Locations — physical sites or job locations, usable alongside classes (a transaction can carry both). Locations also serve prevailing-wage work-site reporting and employee assignment.

The Custom Report Builder can filter and group by class and location, which is how you get a per-program or per-site view of income and expense.

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

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

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

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

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

25. 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.
  • Invoice revenue is shown as a single total on the cash basis. On accrual, revenue is broken out by the income account each product or service names (see Services); the cash view summarizes invoice revenue into the sales account.
  • 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

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

Jurisdictions vs. Tax Rates — Which Does What

Two things sound alike and do different jobs. A Tax Jurisdiction is where you file — a state or locality with its own return. A Tax Rate is what you charge, and it points at a jurisdiction. Only tax rates appear in the dropdown on an invoice line or a customer.

The rate field on the jurisdiction screen is labelled Published Rate because that's what it is: a reference figure for what that jurisdiction publishes, with staleness tracking — it is not what gets charged. To charge tax for a jurisdiction, create a Tax Rate that points at it. The jurisdiction list flags any jurisdiction that no tax rate points at, so a half-finished setup can't sit silent.

Watching an Economic-Nexus Threshold (0% Jurisdictions)

Selling into a state where you're below its economic-nexus threshold? You charge no tax there — but you need to watch what you sell there, because crossing the threshold starts the obligation. Set up the jurisdiction, add a Tax Rate of 0% pointing at it, and use that rate on the relevant lines or customers. Sales accumulate against the jurisdiction on the Sales Tax Report with $0.00 tax — the number you need to watch, in the place you'd look for it. Genuinely non-taxable sales (no rate at all) stay out of the report entirely.

Freight Taxability

Whether a delivery charge is taxable varies by state, and several states' rules depend on facts no invoice records — so this is a setting, per jurisdiction, not a rule the app guesses at. It defaults to not taxed; turn it on for jurisdictions that tax freight, and confirm the treatment with your accountant. See Freight & Shipping on invoices.

Back to top

27. Importing Data

Migrate from other accounting software via Settings → Import Data.

The fuller reference — which of the three importers a question is about, the order importer's matching rules, what "re-importing is safe" depends on, and troubleshooting — is the importing guide in the repository.

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 — and since every account can be renumbered, your existing numbering scheme comes across as-is)
  • 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)
  • Sales Orders and Purchase Orders — through their own importer; see below

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

Importing Sales & Purchase Orders

Settings → Order Import brings whole sales orders and purchase orders across from another system — a multi-row CSV where several rows share an order number and become one document with its line items. The importer:

  • Maps your columns once and saves the mapping as a profile you reuse on every later file. Save under the same name to update a profile.
  • Matches customers and vendors by name, and can create missing vendors as it goes (importing your vendor list first is still the better order — the created records carry only what the order rows happen to contain).
  • Optionally creates missing products, keyed by SKU, as non-inventory items — an opt-in, so a typo in a SKU column can't quietly mint catalog entries unless you asked for that.
  • Carries labelled line attributes (size, color, style…), expected date, and Ship Via.

Re-importing is safe. Each imported document records the source system's own identifier, so importing the same file twice doesn't create duplicates — repeats are skipped and counted separately from failures (nothing went wrong; there was simply nothing to do). It's judged per document, so an incremental export mixing already-imported and new orders brings in just the new ones. This matters most on a first migration, which is never one clean pass: fix a mapping, re-run the corrected file, and only what changed comes in. The identifier is the value in the column you chose under Group rows by, so that column must be unique to each order — usually the order number. The preview marks a repeat "Already imported on an earlier run"; if you see that for an order you know is new, see Troubleshooting.

Command-Line Imports (Unattended)

For imports on a schedule or fed by another system, the indiaccounting-cli tool installs alongside the app (on Linux it's on your PATH; on Windows it sits next to the executable). It runs an order import unattended, using a mapping profile you've already saved in the app:

indiaccounting-cli import --profile "Daily Orders" --file /path/to/orders.csv
  • --company <id> — which company to import into (list them with indiaccounting-cli companies).
  • --dry-run — report what would be imported and change nothing.
  • --json — machine-readable output for scripts.
  • Exit codes distinguish "could not run" (bad arguments, unknown profile, unreadable file) from "ran, with failures" — so whatever calls it can tell the difference.

The CLI uses the same importer and the same posting rules as the screen — a document it creates posts identically to one typed by hand. It reports missing columns before importing rather than after, since nobody is watching, and the same duplicate protection applies, so a re-run of yesterday's file imports nothing twice.

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

28. 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 is verified first — if the file is damaged, is not a database, or is not an indiAccounting backup, the restore is refused with a message saying which of those it is, and your current data is left untouched. (If a refused backup is your only copy of those books, don't delete it — contact support.)
  5. Restart the app to complete the restore. A verified backup is staged, and the swap happens as the app starts — before the database is opened. Your books don't change until that restart.

Restoring this way is deliberate (as of 1.9.2): a database that's in use can't be safely replaced underneath itself, so the restore waits for the one moment nothing has the file open. Two things follow that are worth knowing:

  • Your previous database is kept, not destroyed. After the restart it sits beside the restored one as accounting.db.pre-restore — because a restore is exactly the moment you're least sure which copy of your books is the right one. Once you've confirmed the restored books are what you wanted, it's safe to delete.
  • Older backups upgrade automatically. A backup made under an earlier version has migrations applied as the app starts, the same way an update does.

Moving Between Machines or Install Formats

Moving your books to a new computer, or between packaging formats on Linux (Flatpak ↔ .deb ↔ .rpm)? Use Create Backup on the old install and Restore Backup on the new one. Never copy the database file out of the app's data folder by hand: the live database keeps recent changes in a separate write-ahead log file beside it, and a copy taken without that log — or taken while the app is open — is not a complete database. It opens, it looks fine, and it fails later on whichever page happens to touch the damaged part. The app's own backup is complete by construction, and it's verified before it's ever restored.

Database Health & Repair

Your books live in a single file, and files can be damaged by things no app controls — a copy taken while the app was running, a disk failing mid-write, a folder moved by hand. indiAccounting checks the file every time it starts and shows a banner if something is wrong, instead of leaving damage to surface weeks later as one feature mysteriously failing.

The Database Health section on this screen has the full toolkit:

  • Run Check — a thorough integrity check with a plain-language report of exactly what, if anything, is damaged.
  • Repair — when damage is confined to the indexes, they're rebuilt in place with nothing lost.
  • Rebuild — for deeper damage, everything still readable is salvaged into a fresh, sound file, table by table. The report names precisely what could not be recovered, so nothing goes missing quietly. You then restore from the rebuilt file.

Take a backup first. Before running a repair, create a backup from this same screen — and if you have any older copies of your data anywhere, keep them. Repair never needs your old file destroyed.

Need to give your accountant the books rather than a backup? A backup carries everything — your license, passwords, and employees' personal details included — so don't send one. Use an Accountant's Copy instead, which carries the books and nothing else.

Back to top

29. Multi-User

Multi-user lets several people work in the same company at the same time. It works the way FileMaker does rather than the way cloud software does: one copy of indiAccounting hosts the company file, and the other machines in the office connect to it over your own network, over an encrypted connection. There is no server to install and no cloud in the middle. The machine that owns the file opens it exactly as it always has; hosting simply lets the other machines in.

Multi-user is a separate one-time upgrade ($399), alongside the base license and the payroll tiers, and it is included in the 30-day trial like everything else. What it licenses is hosting. Connecting to a company somebody else hosts never requires it — see Licensing.

Hosting a Company

Everything lives in Settings → Multi-User on the machine that owns the file.

  1. Start Hosting. The app listens on port 46600. The screen shows two things to read out to whoever is connecting: this machine's network address (e.g. 192.168.1.20) and the certificate fingerprint. The hosting machine must stay on and awake for others to work.
  2. Add users under Users & Permissions — one for each person who will sign in (see below).
  3. Pair each machine. Click Show Pairing Code. A nine-digit code appears, good for ten minutes and three wrong tries; one code pairs exactly one machine. Type it on the machine being added.

Firewall. Starting to host opens a listening port, and both Windows and macOS ask once whether to allow it. It's an easy prompt to dismiss — if other machines can't reach you, allow indiAccounting to accept incoming connections on the hosting machine and try again.

Every machine ever paired stays in the Paired Machines list, including revoked ones, and can be renamed or revoked at any time. Recent Activity shows who has reached this host — pairings, sign-ins, sign-outs, and refused attempts, with the machine and the address — kept for 180 days.

Connecting from Another Machine

On the connecting copy: Settings → Multi-User → Connect to a Host.

  • Pairing happens once per machine. Enter the host's address and the pairing code. From then on the host's certificate fingerprint is pinned on this machine: a later connection presenting a different certificate is refused before a single byte of data — or anyone's password — leaves the machine. If the host is ever rebuilt, simply pair again.
  • Signing in happens every time, with the login and password the host's administrator created for you. The connect screen shows the pinned fingerprint so a careful person can compare it with the host's screen.
  • Reconnect to Last Host from the company menu at the bottom of the sidebar takes a returning person straight to the password prompt.

While connected, a strip across the top says whose books you're in and as whom. Everything you do travels to the host; nothing is written to the connecting machine's own file.

Two credentials, two questions. The machine's pairing answers "was this machine deliberately added to the office?"; the login and password answer "who is sitting at it?" Keeping them separate is what makes the everyday levers safe: a stolen laptop is revoked on the host and nobody changes a password; a person leaving is deactivated and no machine has to re-pair.

Users & Permissions

Each person has a display name (shown on edits, refusals, and stamps — "Ida Roth is editing this customer"), a sign-in name, and a password. Each is either an administrator — sees everything, manages users, can close the books for maintenance — or holds access by area:

  • Sales — customers, estimates, orders, invoices, payments in.
  • Purchasing — vendors, purchase orders, bills, payments out.
  • Banking — bank accounts, imported transactions, reconciliation.
  • Payroll — employees, pay runs, payroll taxes.
  • Books — chart of accounts, journal entries, reports, catalog.

Each area is no access, can look, or can change. Reports follow the data they expose — the payroll summary needs the Payroll grant. Every refusal is a plain sentence naming what's missing, never a code.

Working Together Without Stepping on Each Other

  • Edit holds. Opening a record for editing holds it. Anyone else who opens the same record is told — by name, and before the typing — "Ida Roth is editing this customer," and can look but not save. The hold lets go the moment the edit is saved or cancelled.
  • Screens refresh themselves within five seconds of a change made on another machine.
  • Every record shows who wrote it, on the host's own screens as well as on connected ones.
  • Maintenance mode. An administrator can close the books — everyone else can look but not change, told by one sentence naming who closed them — for period close, restores, and repairs. Any administrator can reopen, and a crash can never leave the closed sign up.

Some things stay on the host on purpose. Employees' Social Security numbers and direct-deposit details can only be entered at the hosting machine, where the encryption key lives — a connected machine is told so plainly rather than silently ignored. Backups, restores, and repairs are likewise done at the host.

Reaching the Host from Outside the Office

Hosting is built for the office, and indiAccounting runs no server of its own in the path — our promise is that we don't have your data, and a relay we operated would break it even if it only carried encrypted traffic. The way out of the building is therefore your own private network, and the app knows how to point at it.

Tailscale. Install Tailscale on the hosting machine and sign in. The hosting screen notices: the Connect to card gains a second address, labelled from outside the office. Then:

  • Someone in your own Tailscale account — a bookkeeper working from home, a second office — installs Tailscale on their machine and pairs and signs in with that address exactly as they would in the office.
  • Someone outside it — your accountant — needs the hosting machine shared with them. In the Tailscale admin console, share the hosting machine with the accountant's Tailscale account; they accept, and can reach only that machine, not the rest of your network. When the engagement ends, revoke the share in the console and revoke their paired machine in indiAccounting.

Everything that protects the host in the office protects it here, because it is the same door: the nine-digit pairing code, the pinned certificate, the login and password, the throttling of failed sign-ins, connection ceilings, and the access log. The host still has to be on, awake, and hosting. For a period-end review that doesn't need a live connection at all, see the Accountant's Copy.

When Pairing Doesn't Work

  • "Could not reach a host at …" — nothing accepted the connection. Check the address, that the other machine is still hosting, and the hosting machine's firewall (see above). This answers within ten seconds; it never hangs.
  • "The host accepted the connection but did not answer" — you reached it and it went quiet, usually because it stopped hosting between showing the code and your typing it. Show a fresh code and try again.
  • The code was refused — a pairing code stands for ten minutes and three wrong tries; the third wrong guess closes the window. Show a new code on the host rather than retrying.

Back to top

30. Accountant's Copy

For the period-end, review-only relationship with an outside accountant, a live connection is usually the wrong shape: it needs your machine awake on the accountant's Saturday, and the accountant is reading, not writing. Settings → Accountant's Copy makes the other thing — a sealed, review-only copy of the books that your accountant opens in their own indiAccounting. No network, no open port, no machine left running, and nothing of ours in between.

Sending a Copy

  1. The screen suggests a passphrase — four groups of five characters, readable over the phone — or takes one of your own of at least twelve characters.
  2. Click Create Accountant's Copy and choose where to save the .indiaccountant file.
  3. Send the file however you already send files — email, a shared folder, a USB stick. Give the passphrase by phone or in a separate message, never in the same email as the file.

What crosses the internet is ciphertext (AES-256-GCM, under a key derived from the passphrase with Argon2). The only thing readable without the passphrase is a small header naming the company and the export time, so the accountant can see what they were sent before typing anything.

What Is in It, and What Is Not

The books, byte-faithful — the copy is a snapshot of the company file, so every report reconciles to the cent. Everything else the file carries is scrubbed before sealing:

  • Your license key.
  • The app password.
  • The users, paired machines, and access history of a hosted office.
  • Email, payment-processor, and bank-feed credentials.
  • The encryption vault, and employees' Social Security numbers and bank details (the last four digits stay).

The file is compacted after the scrub so the removed data is gone from it, not merely unreferenced — a deleted row otherwise lives on in a database's slack. Our release checks prove the absence against the file's bytes, not just its rows.

Opening a Copy Sent to You

  1. Go to Settings → Accountant's Copy (or Settings → Companies → Open an accountant's copy) and choose the file. The screen shows whose books it is and when it was exported.
  2. Enter the passphrase and click Open as a New Company. indiAccounting restarts into it.

The copy becomes a company of its own in your installation, under your own license, marked review-only inside the file. A strip across the top names whose books these are; every save is refused with the same sentence — "This is an accountant's copy of Maple Street LLC. It can be reviewed but not changed." — and Settings → Companies shows it with an Accountant's copy badge. Switch back to your own books from the company card in the sidebar.

There is no merge-back. Adjustments the accountant proposes are entered in the business's own books, as they would be from a printed list. A copy made by a newer indiAccounting than yours is refused with "update indiAccounting" rather than left to fail — update, then open it again.

Back to top

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

32. Multi-Currency Support

Invoice and bill in a currency other than your own, while your ledger stays in your own currency, always. Configure currencies and exchange rates in Settings → Currencies.

How It Works

  • Documents keep their currency. An invoice billed in euros is stored — and printed — in euros. Customers and vendors can carry a default currency, so their documents pre-select it.
  • Rates are stored with the document. Each foreign-currency document records the exchange rate as at its own date, so what it posted can always be reproduced, even after the rate moves. Enter rates in Settings → Currencies; the rate in effect on the document's date is used.
  • The ledger converts on the way in. Every amount posts to your books in your home currency at the document's rate.
  • Gains and losses are real and automatic. The receivable is carried at the invoice-date rate; the cash arrives at the payment-date rate. The difference is a realized exchange gain or loss, posted automatically to Foreign Exchange Gain (Loss) — a credit balance there is a net gain for the period, a debit balance a net loss. Payables mirror this on the purchase side.

No rate, no posting. An invoice in a currency with no exchange rate on file is refused rather than posted at 1:1 — posting at parity because nothing was found would quietly misstate the books. Enter the rate first.

Current Limits, Stated Plainly

  • Bank accounts are in your home currency, so a foreign invoice settles into a home-currency account.
  • Open balances aren't revalued at period end. Gains and losses are recognized when a document is settled, not while it sits outstanding.

If everything you do is in one currency, none of this changes anything — a home-currency document posts exactly as it always has.

Back to top

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

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

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

The Multi-User Upgrade

Multi-user is a separate one-time upgrade ($399), alongside the base license and the payroll tiers. It licenses hosting a company for other machines; connecting to a company somebody else hosts never requires it, and the trial includes it like everything else.

One add-on covers the whole office. Multi-User is licensed on one machine only — the one that hosts the books. Every other machine connects for free, with no seats to count: the connecting copies need no license of their own, and the host's license governs everything they do.

  • Buy it from inside the app: Settings → Multi-User → Add Multi-User. Checkout is priced for your specific license, and a replacement key with multi-user added arrives by email.
  • Activate the replacement key under Settings → License. Your tier, employee cap, and tax-table date carry over unchanged.
  • Keys issued before version 2.0 keep activating exactly as they always have, with multi-user off until you add it.

Back to top

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

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

38. Troubleshooting

"Database error: database disk image is malformed"

This error — appearing under any button, often one that worked yesterday — means the data file is damaged, not that the feature is broken. The most common cause is a database file that was copied by hand (between machines, or between Flatpak and .deb/.rpm installs) without its write-ahead log, or while the app was open. Don't delete anything. Go to Settings → Export & Backup → Database Health, run the check, create a backup, and use the repair it offers — index-level damage repairs in place with nothing lost, and deeper damage is salvaged into a fresh file with a report naming exactly what couldn't be read. See Database Health & Repair, and use Create Backup / Restore Backup for any future moves between machines.

App won't launch after restoring a backup

An in-app restore verifies the backup twice — when you pick it, and again at the restart that completes the swap — and keeps your previous database beside the restored one as accounting.db.pre-restore, so renaming that back to accounting.db (with the app closed) returns you to where you were. A file restored by hand, outside the app, skips all of that — if that's what happened, check the file with the Database Health check if the app opens far enough to reach Settings. As a last resort, move the database file aside (rename rather than delete, so nothing is lost) and restart:

  • Linux: mv ~/.local/share/indiaccounting/accounting.db ~/accounting.db.damaged
  • macOS: mv ~/Library/Application\ Support/IndiAccounting/accounting.db ~/accounting.db.damaged
  • Windows: Rename %APPDATA%\IndiAccounting\accounting.db to accounting.db.damaged

Then restore a known-good backup from inside the app — and keep the renamed file until you're sure nothing is missing.

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.

Order import says "0 imported" with no error

The import isn't failing — the documents are being skipped as already imported. indiAccounting remembers each order it brings in by the value in the column you chose under Group rows by, and leaves alone any later document with the same value, so re-importing a file never creates duplicates. If your export has one order per file and you grouped by a column that holds the same value in every file (an order type, a date, a customer), every file after the first looks like a repeat. Preview the file and compare the Key column with the first file you imported: if they match, that's it. Group by a column that is unique to each order — usually the order number — and preview again. In releases after 1.9.6 the preview marks these documents "Already imported on an earlier run" and the result says how many were skipped and which, so this no longer arrives as a bare zero.

An imported order has fewer lines than the file, or the preview finds no documents

Rows with nothing in the grouping column belong to no document and are left out. Many exports put the order number on the first row of each order and leave it blank beneath, which imports as a one-line order. Either fill the column on every row, or group by a column that is populated on every line. Releases after 1.9.6 count these rows on the preview and name the column.

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.

An online payment isn't showing as paid

Payment confirmations happen when you open the invoice — the app checks with Stripe at that moment and records the payment if the link has been paid. If it still doesn't appear, confirm your Stripe keys are entered under Online Payment Settings. There is no webhook to configure — see Getting Paid Online.

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.

Another machine can't reach the host: "Could not reach a host at …"

Nothing accepted the connection. Almost always it's the hosting machine's firewall — starting to host opens a listening port, and Windows and macOS each ask once whether to allow it, a prompt that's easy to dismiss. Allow indiAccounting to accept incoming connections on the host and try again. Also check the address (the host's screen shows it) and that the host is still hosting. See Multi-User.

"That passphrase doesn't open this copy"

The passphrase is wrong, or the file didn't arrive whole — the two look the same from the outside, on purpose. Confirm the passphrase with the person who sent the copy (read it over the phone; the suggested ones avoid look-alike characters for exactly this reason), and if it still refuses, ask for the copy to be exported again. See Accountant's Copy.

"This copy was made by a newer indiAccounting than this one"

The person who sent the copy is on a newer version than you. Update indiAccounting (see Staying Up to Date) and open the copy again — nothing was changed by the refusal.

Every save says "This is an accountant's copy of …"

You're working in a review-only copy of somebody else's books, which is what it's for. Your own company is still there — switch to it from the company card at the bottom of the sidebar or under Settings → Companies, where the copy is marked with an Accountant's copy badge.

Need More Help?

Visit our support page to report issues or request features.

Back to top