Posify / Docs / Introduction

Posify User Guide

Complete documentation for Posify - your point-of-sale and retail management system. This guide covers licensing, daily shop operations, inventory, purchases, customers, accounting, and desktop setup. After install, follow Business Initialization to set up accounts, products, and opening balances. Latest version: 1.0.18 - see Release Notes for what changed. New: Database Setup for local or shared database (multi-counter).

Posify requires a license
Posify is paid software for your shop. Choose a plan (trial, monthly, or yearly), then activate your license key. One license is required per shop computer.

Quick links

Download Posify → View plans & purchase →

Download: github.com/nekores/posify-download · Plans: appfolio.lemonsqueezy.com

Point of Sale

Fast checkout, barcode scanning, held carts, receipts

Inventory

Stock tracking, adjustments, low-stock alerts

Purchases

Vendor bills, stock receiving, returns

Customers

Balances, credit limits, collections

Employees

Staff records, monthly salary, bulk pay

Accounting

Double-entry ledger, cash flow, reports

Desktop App

Offline-ready, native printing, auto-updates

Who is this guide for?
Shop owners, managers, and counter staff - no technical background needed. Start with Download, then Plans & License, then Install & Set Up Shop and Database Setup.

Download Posify

Download the latest Posify installer for your shop computer from our official releases page on GitHub. Posify works on Windows and Mac.

Download from GitHub Releases →

Releases page: https://github.com/nekores/posify-download

System requirements

SupportedNot supported
Windows 10 or 11 (64-bit)Windows 8.1, 8, or 7
Mac with Intel or Apple Silicon (M1/M2/M3)32-bit Windows
PostgreSQL 14+ (on the database host PC only - see Database Setup)Tablets/phones as the main Posify app (desktop only)
Windows 8.1 and older
Posify does not run on Windows 8.1, 8, or 7. The desktop app uses modern technology that requires Windows 10 or 11. If your shop PC is on Windows 8.1, upgrade to Windows 10/11 or use a newer computer for Posify. You can still use a second, newer PC as an extra counter connected to the same database - see Database Setup.

Which file do I download?

Your computerDownload this file
Windows 10 / 11 (64-bit)Posify-Setup-1.0.12.exe (installer)
Mac with Apple Silicon (M1/M2/M3)Posify-1.0.12-arm64.dmg
Mac with Intel processorPosify-1.0.12-x64.dmg

x.x.x is the version number on the releases page - as of this guide, the latest is 1.0.12. Always pick the newest release.

Download steps

  1. Open GitHub Releases.
  2. Click the latest release at the top.
  3. Under Assets, click the installer for your operating system.
  4. Wait for the download to finish, then follow Install & Set Up Shop.
Need a license first?
You can download and install Posify before buying. The app will ask for a license key when you sign in. See Plans & License to choose trial, monthly, or yearly.

Plans & License

Posify is not free. After installing the app, you need a valid license key to use POS, inventory, reports, and all other features. Without an active license, the app stops at the Activate License screen.

One license per shop computer
Each installation on a shop PC needs its own license. Keep your license key safe - it is sent to your email after purchase.

Available plans

Choose the plan that fits your shop on our store page. Plans and current prices are listed here:

View plans & subscribe →

Store: https://appfolio.lemonsqueezy.com/

PlanBest forWhat happens
Trial Trying Posify before committing Limited-time access. When trial ends, purchase monthly or yearly to continue.
Monthly Shops that prefer pay-as-you-go Renews every month. License key sent by email after each purchase/renewal.
Yearly Shops wanting best value One payment for 12 months. License key valid for the subscription period.

Exact prices and trial length are shown on the store page when you subscribe.

How to purchase

  1. Open appfolio.lemonsqueezy.com.
  2. Select your plan: Trial, Monthly, or Yearly.
  3. Complete checkout (secure payment via Lemon Squeezy).
  4. Check your email for the license key and receipt.
  5. Copy the license key - you will enter it in Posify on the Activate License screen.
After you pay
Lemon Squeezy emails your license key automatically. Save the email. If you lose the key, use the customer portal link in the same email to retrieve it.

Activate your license in Posify

Only the shop Administrator or Manager can enter a license key. Counter staff cannot.

  1. Download and install Posify on your shop computer.
  2. Open Posify and sign in with your Administrator or Manager username and password.
  3. On the Activate License screen, paste your license key from the email.
  4. Click Activate license.
  5. When successful, you reach the Dashboard and can start setting up your shop.

You can also view license status or enter a new key under Settings → Activation.

Renewal & expired licenses

When a monthly or yearly plan expires, or a trial ends, Posify shows a renewal screen. You can:

  • Subscribe again - Go to the store and purchase or renew
  • Enter a new key - If you already received a new license key by email
  • Contact support - For billing or activation help

Who can purchase and activate?

Staff roleCan buy a plan onlineCan enter license key
Administrator
Manager
Counter staff-- (ask your manager)
License must be activated before daily use
Until a license is active, counter staff cannot use POS. Your Administrator or Manager must activate the license first.

Install & Set Up Shop

Posify runs on your shop computer as a desktop app. Once installed, daily sales work without internet. Internet is needed to download updates and validate your license.

Recommended order for new shops

  1. Download - Get the installer from GitHub Releases.
  2. Install - Run the installer (see below for Windows/Mac).
  3. First launch - Follow the on-screen setup wizard if shown.
  4. Sign in - Use the Administrator account your provider gave you.
  5. Activate license - Enter your key from your plan purchase.
  6. Set up your shop - Store name, logo, printers, products, and stock (steps below).

Install on Windows

  1. Double-click Posify-Setup-x.x.x.exe.
  2. Follow the installation wizard (Next → Install → Finish).
  3. PostgreSQL is not required on this PC to run the installer - database connection is configured on first launch (see Database Setup).
  4. Open Posify from the Start menu or desktop shortcut.

Install on Mac

  1. Open the downloaded .dmg file.
  2. Drag Posify into the Applications folder.
  3. Open Posify from Applications (allow if macOS asks for permission).
  4. On first launch, complete Database Setup if prompted.
Second counter / extra PC
Install Posify on the new computer only. You do not need PostgreSQL on that PC if it connects to the database on your main computer. Use the main PC's IP address as the database host - see Database Setup.

Set up your shop (after license is active)

For the full step-by-step guide - chart of accounts, products, opening stock, cash, banks, and customer/vendor balances - see Business Initialization.

  1. Store details - Settings → Store Info: shop name, logo, address, phone, currency, receipt header/footer.
  2. Feature modules - Settings → Feature Modules: enable Bank, Tax, Credit Sales, Returns, etc.
  3. Accounts - Settings → System Setup: click Create All Required Accounts (one-time).
  4. Printers - Settings → Printer Management: assign receipt printer and run a test print.
  5. Products - Add products under Products → List Products (SKU, prices, barcode).
  6. Stock & opening balances - Follow Business Initialization for opening stock, cash, banks, and dues.
  7. Staff - Users → System Users: create accounts for counter staff.
Recording opening stock
For stock you already have on shelves, use Inventory → Stock Adjustment with reason Opening stock (enter unit cost). For stock received from suppliers with bills, use Purchases → New Purchase. See Business Initialization for which method to use.

Staff login accounts

Your shop Administrator creates usernames and passwords for each staff member under Settings → User Management. Ask your manager if you do not have login details.

Change passwords regularly. Do not share Administrator passwords with counter staff.

Database Setup

Posify stores all shop data (products, sales, customers, accounts) in a PostgreSQL database. You choose where that database runs - on the same PC or on another computer on your network.

PostgreSQL is not forced on every PC
The Posify installer does not require PostgreSQL on each counter computer. Only the machine that hosts the database needs PostgreSQL installed (or use a remote/cloud PostgreSQL server). Other PCs install Posify only and connect to that shared database.

When Database Setup appears

  • First launch after installing Posify on a new PC
  • Configure Database on the splash screen if the saved connection fails
  • After changing database server or credentials (Admin/Manager workflow via support)

Database Setup fields

FieldMain PC (database on this computer)Second counter (shared database)
Host127.0.0.1IP address of the main PC (e.g. 192.168.1.10)
Port5432 (default)5432 (same as main PC)
Database nameposifyposify (same database)
Usernamepostgres (or your DB user)Same as main PC
PasswordYour PostgreSQL passwordSame as main PC
  1. Enter host, port, database name, username, and password.
  2. Click Test connection.
  3. Click Save & continue when the test succeeds.
  4. Wait for the loading screen, then sign in.

Typical shop layouts

LayoutWhere PostgreSQL runsHost on each Posify PC
Single counterSame PC as Posify127.0.0.1
Two or more counters, one databaseMain PC onlyMain: 127.0.0.1 · Others: main PC IP
Remote / cloud databaseYour server or hosting providerServer hostname or IP

Main PC - allow other counters to connect

If a second counter cannot connect, the database on the main PC is usually not reachable on the network yet. Your IT person or support provider should check:

  • PostgreSQL is installed and the service is running on the main PC
  • PostgreSQL accepts network connections (listen_addresses in postgresql.conf)
  • pg_hba.conf allows your shop LAN (e.g. 192.168.1.0/24)
  • Windows Firewall on the main PC allows inbound TCP port 5432 from other shop PCs
  • The main PC uses a fixed LAN IP (or hostname) so other counters do not break when the IP changes

Find the main PC IP: on that computer, open Command Prompt and run ipconfig - use the IPv4 Address (e.g. 192.168.1.10).

First database on the main PC

  1. Install PostgreSQL 14+ on the main shop computer and start the service.
  2. Install Posify on that same PC.
  3. On first launch, Database Setup: host 127.0.0.1, port 5432, database posify, postgres user and password.
  4. Posify creates the posify database automatically if it does not exist (when the user has permission).
  5. Complete license activation and shop setup on this PC first.
  6. Install Posify on additional counters and point them at the main PC IP - see table above.
Same database = shared stock and customers
All counters using the same database see the same products, stock levels, and customer balances in real time when each sale completes. See Multi-Counter Sales. Each counter needs its own Posify license and staff login. For receipt printing on multiple counters, see Printer Setup → Multiple counters.

Changing the connection later

If Posify cannot connect at startup, use Configure Database on the error screen, update the settings, test, and save. The app restarts with the new connection.

First Login

  1. Open Posify and sign in with your username and password.
  2. If no license is active, you will see Activate License. Choose a plan at appfolio.lemonsqueezy.com if you do not have a key yet. Only Administrator or Manager can activate.
  3. After activation, managers see the Dashboard. Counter staff go directly to POS.
  4. Set up your receipt printer under Settings → Printer Management before your first sale.
  5. Complete Business Initialization - accounts, products, stock, and opening balances - before going live on POS.

Business Initialization

Set up your business inside Posify after installation and license activation. This guide covers chart of accounts, products, opening stock, cash, banks, customer dues, and vendor payables. It does not cover installing the app or database setup - see Install & Set Up Shop and Database Setup.

Who is this for?
Existing business - you already have products on shelves, customers who owe you, vendors you owe, cash, and bank balances. New business - you are starting fresh with owner capital and will purchase stock to sell. Both paths use the same foundation; the difference is how much opening data you enter before your first live sale.
Amounts in this guide
Example figures use plain numbers only (no currency symbol). In Posify, all amounts display in your store currency - set it under Settings → Store Info (symbol, code, and formatting apply across POS, receipts, and reports).

Recommended order (both scenarios)

  1. Settings → Store Info - shop name, logo, address, phone, email, currency.
  2. Settings → Feature Modules - enable Bank Management, Tax, Credit Sales, Returns, etc.
  3. Settings → System Setup - click Create All Required Accounts (do this before stock, journals, or purchases).
  4. Settings → Printer Management - receipt layout and test print.
  5. Products → Manage Categories and Manage Brands.
  6. Products → List Products - add manually or Import from CSV/Excel (sample template in import dialog).
  7. Opening balances - cash, banks, stock, customers, vendors (see below).
  8. Users → System Users - create counter logins.
  9. Reports → Finance - confirm trial balance and account balances.
  10. POS - start selling.

Step 1 - Chart of accounts

Menu: Settings → System Setup → Create All Required Accounts

CodeAccountTypeUsed for
1001Cash in HandAssetCounter cash, cash sales, cash expenses
1002Bank AccountAssetTemplate; each bank you add gets its own account
1003Accounts ReceivableAssetCustomer credit / money owed to you
1004InventoryAssetStock value on hand
2001Accounts PayableLiabilityVendor credit / money you owe suppliers
2002Tax PayableLiabilitySales/purchase tax (if tax module enabled)
2003Loans PayableLiabilityBusiness loans
3001Owner's CapitalEquityOwner investment; default offset for opening balances
3002Retained EarningsEquityAccumulated profit (builds over time)
4001Sales RevenueIncomePOS and sales income
4003Inventory Adjustment GainIncomeStock found during counts
5001Cost of Goods SoldExpenseCost when items are sold
5200Inventory Loss / ShrinkageExpenseLoss, damage, theft, count shortages
5100–5199Various expensesExpenseRent, salaries, utilities, etc.

Most opening entries use Owner's Capital (3001) as the other side to keep books balanced while bringing real balances into Posify.

Step 2 - Products

Add products manually from Products → List Products, or bulk-import via Import using the sample CSV/Excel template (see Products).

For each product, set at minimum: Name, SKU (required), barcode (optional), category, brand, cost price, and sale price.

Stock quantity is not set on the product form - record it with Opening stock or Purchases (Step 3).

Step 3 - Inventory (stock on hand)

Option A - Opening stock (existing inventory)

Use when: You already have products on hand and do not need purchase invoice history in Posify.

Menu: Inventory → + Stock Adjustment

FieldWhat to enter
ProductThe item
TypeAdd
ReasonOpening stock
QuantityUnits currently on shelf
Unit costCost per unit (required; updates weighted average cost)

Accounting: Debit Inventory (1004) · Credit Owner's Capital (3001)

Option B - Purchases (vendor bills)

Use when: Stock came from suppliers and you want vendor history and payment tracking.

Menu: Purchases → New Purchase

  1. Select Vendor and add product lines (quantity, unit cost, freight, tax if applicable).
  2. Choose payment: Cash (Cash in Hand 1001), Bank, or Credit / unpaid (Accounts Payable 2001).

Accounting (simplified): Stock received: Dr Inventory (1004) · Cr AP (2001). If paid immediately: Dr AP · Cr Cash or Bank.

Your situationUse
Existing shop, stock already paid forOpening stock
New shop, buying stock now with cash/bankPurchases (paid)
Buying on credit from vendorPurchases (unpaid / partial pay)
Mix of old stock + new purchasesOpening stock for old items + Purchases for new receipts
Do not double-count stock
Do not enter the same physical stock twice (opening stock and a purchase for the same units).

Step 4 - Opening money balances

Cash in hand

Menu: Accounts → Journal Entry → mode Cash → direction Credit → contra Owner's Capital (3001).

Entry: Debit Cash in Hand (1001) · Credit Owner's Capital (3001).

Bank accounts

Menu: Banks → Manage → Add Bank - enter name and opening balance.

Entry: Debit Bank account · Credit Owner's Capital (3001). Set default bank and POS/purchase visibility as needed.

Banks with transaction history must be archived, not deleted. Banks with a balance cannot be archived or deleted until the balance is transferred out.

Customers who owe you

Menu: Users → Customers → Add Customer - set Opening Balance.

Entry: Debit Accounts Receivable (1003) · Credit Owner's Capital (3001).

Vendors you owe

Menu: Accounts → Journal Entry → mode Single Entry:

  • Debit Owner's Capital (3001)
  • Credit Accounts Payable (2001)

Then create the vendor under Users → Vendors and track future purchases normally.

Scenario A - Existing business

You have real stock, cash, banks, customer dues, and vendor payables today.

  • Store Info and Feature Modules configured
  • Create All Required Accounts
  • Categories, brands, and all sellable products added
  • Opening stock (with unit cost) or purchases for inventory
  • Cash in Hand journal entry for drawer cash
  • Each bank added with correct opening balance
  • Each customer with dues - opening balance set
  • Each vendor you owe - journal entry + vendor record
  • Finance report reviewed; test sale on POS
Real-world itemExampleHow to record
Stock on shelves8,500,000Opening stock adjustments → Inventory (1004)
Cash in drawer50,000Journal: Cash · Credit Owner's Capital
Bank balance450,000Banks → Add Bank, opening balance
Customers owe you120,000Customers → opening balance per customer
You owe vendors80,000Journal: Dr Owner's Capital · Cr AP; create vendors

Scenario B - New business

You have capital to invest and will purchase products to sell.

  • Create All Required Accounts
  • Record owner capital (cash journal + bank opening balances)
  • Add categories, brands, and products
  • Buy initial stock via Purchases (paid) or Opening stock (owner-funded)
  • Add customers and vendors as needed (opening balances usually zero)
  • Create counter users; test purchase and test sale
  • Go live on POS
StepAction
1Owner invests 2,000,000 in bank → Add bank with opening balance
2Owner keeps 100,000 cash → Journal into Cash in Hand
3Buy 1,500,000 stock on credit → New Purchase, unpaid
4Pay vendor later → Suppliers → Pay
5Sell on POS → revenue, COGS, and cash/bank update automatically

Verification before going live

Use Reports → Finance and confirm:

  1. Trial balance - total debits equal total credits.
  2. Inventory (1004) - close to physical stock value (qty × average cost).
  3. Cash in Hand (1001) - matches counter cash you expect.
  4. Bank accounts - match real bank balances.
  5. Accounts Receivable (1003) - matches customer dues.
  6. Accounts Payable (2001) - matches vendor payables.
  7. Run one test sale and one test purchase; verify stock and ledger.

Opening entry cheat sheet

What you are recordingMenu pathDebitCredit
Cash in drawerAccounts → Journal Entry (Cash · Credit)Cash in Hand 1001Owner's Capital 3001
Bank balanceBanks → Add BankBank accountOwner's Capital 3001
Stock (no purchase)Inventory → Opening stockInventory 1004Owner's Capital 3001
Customer owes youCustomers → Opening BalanceAccounts Receivable 1003Owner's Capital 3001
You owe vendorAccounts → Journal EntryOwner's Capital 3001Accounts Payable 2001
Buy stock on creditPurchases → New Purchase (unpaid)Inventory 1004Accounts Payable 2001
Pay vendorSuppliers → PayAccounts Payable 2001Cash 1001 or Bank

Common mistakes

  • Skipping Create All Required Accounts - opening stock, purchases, and journals will fail.
  • Entering stock twice - opening stock plus purchase for the same units.
  • Products without stock - POS shows zero quantity until opening stock or purchase.
  • Opening stock without unit cost - unit cost is required for opening stock.
  • Deleting banks with history - archive inactive banks instead.
  • Expecting product import - use Products → Import with the sample file; stock still needs opening stock or purchases.
Also available as Markdown
The same guide is in the project root as initialization.md for printing or sharing offline.

Staff Roles & Permissions

FeatureUserManagerAdministrator
POS checkout
Customers (view/add)
Sales (own counter, counter staff)
Dashboard & back office-
Products, inventory, purchases-
Reports & accounts-
User management-*
Revert collections & manual transactions--
Recalculate customer balances-
See cash/bank balances on refunds-
Employees & payroll-
Bank & counter settlements-
License activation-
Bypass return time limit-

* Manager cannot create or manage Administrator accounts.
† With a confirmation warning.

Point of Sale (POS)

The POS screen is the main checkout interface for daily sales.

Completing a sale

  1. Search products by name, SKU, or barcode and add to cart.
  2. Adjust quantity, apply line discount, or change price (if Cart Price Change module is enabled).
  3. Select a customer (Walk-in is default) or leave as walk-in.
  4. Choose payment type: Cash, Card, Bank, or partial Credit.
  5. Enter amount received. For credit sales, enter partial payment; remainder becomes customer due.
  6. Optionally collect payment toward customer's previous balance (after current bill is fully paid).
  7. Click Complete Sale (or Sale Now on some layouts). Receipt prints automatically if enabled.

Previous balance & store credit on screen

When you select a registered customer:

  • Positive balance (customer owes you) shows as Previous Balance.
  • Negative balance (you owe the customer / store credit) shows as Store Credit and reduces what they pay on the current bill.
  • POS totals are rounded to 2 decimal places for display and checkout.
Balance is re-checked on Complete Sale
The amount shown when you pick a customer is a snapshot. When you click Complete Sale, the server reads the customer's live balance, enforces the credit limit, and posts the correct due. If another counter changed the balance meanwhile, the final balance will match the database - not necessarily the on-screen preview. See Multi-Counter Sales.

Payment types

TypeDescription
CashPaid from Cash in Hand. Full or partial payment.
CardRecorded as card payment (same cash flow as cash unless configured otherwise).
BankRequires selecting a bank account. Creates an unsettled bank payment until manager verifies.
CreditRemaining amount added to customer balance. Requires Credit Sale module and registered customer.

Hold cart

Click Hold to save the current cart locally. Resume it later from the held carts list. Useful when a customer steps away mid-checkout.

Walk-in customers

No credit for walk-in
Walk-in customers must pay in full. Credit sales and balance collection require a registered customer.

Multi-Counter Sales (Stock & Customers)

When several staff use POS at the same time, Posify validates stock and customer balances on the server when each sale is completed - not when items are added to the cart. For multiple counters to share stock and customers, each PC must connect to the same PostgreSQL database - see Database Setup.

Adding a second counter (summary)

  1. PostgreSQL stays on the main PC only (unless you use a remote server).
  2. Install Posify on the second PC - no local PostgreSQL required.
  3. On first launch, Database Setup: host = main PC IP, same port, database, user, and password as the main setup.
  4. Create a staff login under Settings → User Management.
  5. Set up the receipt printer on that PC - see Printer Setup → Multiple counters.

Receipt printing on each counter

Sales data is shared through the database, but printing always happens on the PC where the sale was completed - to the printer plugged into (or installed on) that computer.

  • Counter A completes a sale → receipt prints on Counter A's printer.
  • Counter B completes a sale → receipt prints on Counter B's printer.
  • Reprints from Recent Sales print on the PC where you click reprint.

Printer settings are saved in the shared database (store name, paper width, receipt layout). The printer name saved in Settings is matched against printers installed on that PC. See Multiple counters for the recommended setup when each counter has different hardware.

Same product, low stock (e.g. only 1 left)

  • Adding to cart does not reserve stock. Each counter sees stock from when POS loaded the product list.
  • Both counters can add the same item to their carts.
  • On Complete Sale, the server checks real inventory. The first completed sale wins.
  • The second counter gets an error such as Insufficient stock - Available: 0, Requested: 1. No silent overselling.

Same customer, two counters

  • Counter A may show Previous balance 82 from when the customer was selected.
  • If Counter B completes a credit sale or collection first, the live balance changes.
  • When Counter A clicks Complete Sale, credit limit and collection rules use the current database balance.
  • The sale is blocked if credit limit would be exceeded, or if collection exceeds outstanding balance.
  • Otherwise the sale succeeds and the customer balance is updated correctly - the on-screen "new balance" preview may have been stale.
Tip
Re-select the customer or refresh POS if you need an up-to-date balance display before completing a large credit sale.

Returns & Exchanges

Requires the Refund/Exchange feature module to be enabled.

Processing a return

  1. On POS, click Return / Exchange.
  2. Enter the original invoice number and look up the sale.
  3. Select items and quantities to return (cannot exceed originally sold qty).
  4. Choose Refund only or Exchange.
  5. Select refund method: Cash in Hand or a Bank account (same as sales).
  6. Complete the return. Stock is restored automatically.

Refund payment (cash vs bank)

Cash refunds come from Cash in Hand. Bank refunds come from the bank account you select. Posify checks that the chosen account has enough balance before completing the refund.

  • Administrator / Manager see available Cash in Hand and bank balances in the return dialog.
  • Counter staff (User) do not see account balances. If funds are insufficient, they see a generic message: Balance is less than the refund amount.

Return settlement rules

  • Cash-paid original sale → Customer receives cash/bank refund. Customer balance is NOT credited again.
  • Credit original sale → Customer balance is reduced (AR credit). No cash refund unless a cash portion was originally paid.
  • Partial credit sale → Refund is split proportionally between cash refund and balance credit.

Exchange

Return items from the original invoice, then apply return credit to a new sale. Settlement order:

  1. Return credit is applied to the customer's previous balance first (clears old debt).
  2. Any remaining credit goes toward the new sale total.
  3. Customer pays any difference in cash/bank, or receives a cash/bank refund if return value exceeds the new sale.

Receipts for returns, exchanges & refunds

  • Receipts show correct labels: REFUND, EXCHANGE, return credit, balance cleared, and refund amount - not a credit sale.
  • Refund-only transactions print merchant and customer copies with item details.
  • Exchange receipts show return credit, old balance cleared, cash refund (if any), and link to the original invoice.

Accounting (returns & exchanges)

Cash/bank refund: Dr Accounts Receivable (or sales return adjustment) Cr Cash in Hand / Bank account selected Exchange - old balance cleared: Dr Accounts Receivable (customer owed less) Cr applied via customer balance (store credit on new sale) Exchange - cash refund to customer: Cr Cash in Hand / Bank

Return time limit

Configurable in Settings → System (default 30 days). Admin/Manager can override with a warning.

Dashboard - Counter Cash

Admin and Manager see Counter Cash on the main Dashboard - the sum of unsettled cash at all cashier counters (since each staff member's last settlement). This is not the same as the full ledger Cash in Hand balance while counters are still open.

  • When counters are still open, this is the total cash still attributed to staff shifts.
  • After you settle all counters, this shows 0; the subtitle then shows the ledger Cash in Hand balance (total shop cash in the books).
  • Counter staff (User) do not see the main Dashboard - they see only their own counter cash on Recent Sales.

Sales (Counter Staff)

Available to all roles from the sidebar: Sales. Counter staff (User) see only their own counter sales and summary cards scoped to their station.

Shows the logged-in user's sales, expenses, and cash summary since their last counter settlement. Used by counter staff to review their shift activity.

Admin/Manager settle counters from Accounts → Counter Collection. See Counter Collection.

Sales History

Back-office view of all sales at Sales menu (Admin/Manager).

  • Filter by today, week, month, or custom date range
  • View sale details, profit, payment type
  • Print receipt, export to CSV/PDF/Excel
  • Distinguish forward sales from returns
  • Bulk delete (Administrator)

Products

Manage your product catalog at Products or via sidebar shortcuts.

Importing products (CSV / Excel)

Bulk-add products from Products → List Products → Import. Upload a .csv or .xlsx file using the same column layout as the sample files.

Sample files
Download from the import dialog, or use these templates bundled with Posify:
  • ../samples/products-import-sample.csv
  • ../samples/products-import-sample.xlsx
(Also in the app at /samples/products-import-sample.csv when Posify is running.)
ColumnRequiredNotes
NameYesDisplay name on POS
SKUYesMust be unique
BarcodeNoAuto-generated from SKU if empty; duplicate barcodes are skipped
CategoryNoMatched by name; created if missing
BrandNoMatched by name; created if missing
CostNoCost price (default 0)
PriceNoSale price (default 0)
Min stockNoLow-stock alert level
Tax %No0–100 for product-wise tax
DescriptionNoOptional
Stock is not imported
Product import creates catalog rows only. After import, record quantities with Inventory → Stock Adjustment → Opening stock or Purchases → New Purchase. See Business Initialization.
  1. Go to Products → List Products and click Import.
  2. Download the sample CSV or Excel file and fill in your products using the same columns.
  3. Upload your file, review the preview, and click Import.
  4. Review the Import Results screen - successful and failed rows are listed separately.
  5. Fix any failed rows (duplicate SKU/barcode, missing name, etc.) and re-import those rows if needed.
  6. Add opening stock from Inventory before selling on POS.

Creating a product (manual)

  • Name - Display name on POS and receipts
  • SKU - Unique stock code (required)
  • Barcode - For scanner; auto-generate available
  • Category / Brand / Unit - Organization
  • Cost Price - Used for profit and COGS calculations
  • Sale Price - Default POS price
  • Pack Price / Pack Size - Optional bulk pricing
  • Min Stock - Low-stock alert threshold
  • Tax Rate - Per-product tax when tax mode is product-wise

Barcode labels

Print barcode or QR labels from the product list. Layout controlled in Settings → Printer Management → Barcode Labels.

Inventory

View stock levels and movement history at Inventory.

Stock movements

EventStockNotes
PurchaseIncreases ↑Updates cost price (weighted average)
SaleDecreases ↓-
Sale returnIncreases ↑-
Purchase returnDecreases ↓Sent back to vendor
Manual adjustment±Add/subtract with reason note
Opening stockSets initialNo purchase record; see accounting note

Manual adjustment

Use Inventory → Stock Adjustment to add or subtract stock. Each manual adjustment also posts a matching journal entry so stock and accounts stay aligned.

  1. Go to Inventory and click + Stock Adjustment.
  2. Select product, Add or Subtract, and a reason.
  3. Enter quantity and notes (required for loss/theft).
  4. Confirm - stock updates and a ledger entry is posted automatically.
ReasonStockLedger entry
Loss / damage / theftSubtractDebit Inventory Loss · Credit Inventory
Stock count - shortSubtractDebit Inventory Loss · Credit Inventory
Stock count - found extraAddDebit Inventory · Credit Inventory Adjustment Gain
Opening stockAddDebit Inventory · Credit Owner's Capital (enter unit cost)

Unit cost uses the product weighted average cost (same as sale COGS), except opening stock where you enter cost per unit. On Inventory → Adjustment History, use the filter: Manual (opening stock, loss, count - affects accounts) vs From deleted sales (stock put back when a sale was deleted - does not use Loss/Gain accounts). Footer totals follow the active filter. Deleting a manual row reverts stock and the linked ledger entry. System rows from deleted sales cannot be deleted here.

Required accounts
Ensure Inventory (1004), Inventory Loss / Shrinkage (5200), Inventory Adjustment Gain (4003), and Owner's Capital (3001) exist - run Settings → Create All Required Accounts if missing.

Low stock alerts

Triggered when quantity ≤ product's minStock or global threshold in System Settings. Notifications appear in the bell icon.

Categories & Brands

Organize products under Settings → Categories and Settings → Brands.

  • Categories support parent/child hierarchy
  • Inactive categories/brands are hidden from selection
  • Customer types can have automatic discount percentages applied at POS

Purchases

Record stock received from vendors at Purchases → New Purchase.

Creating a purchase

  1. Select vendor.
  2. Add line items: product, quantity, unit price, freight-in, tax.
  3. Enter discount and payment: cash, bank, or credit (unpaid portion).
  4. Save. Stock increases; vendor balance increases if amount is due.

Accounting entry (purchase)

Dr Inventory (goods received) Cr Accounts Payable (amount owed to vendor) If paid immediately: Dr Accounts Payable Cr Cash / Bank

Deleting a purchase

Stock guard on delete
A purchase can only be deleted if current stock ≥ purchased quantity for every product on that bill. If items were sold, deletion is blocked to prevent negative inventory.

Example: You had 10 units from before, purchased 3 (total 13), sold 11 (2 left). Delete is blocked because 2 < 3.

Purchase Returns

Return goods to a vendor at Purchases → Purchase Return.

Return types

Payment typeVendor balanceCash/Bank
Credit (no cash refund)Reduced - vendor creditNo movement
Cash / Bank refundUnchangedRefund received

Cannot return more quantity than currently in stock. Inventory and Accounts Payable are reversed on return.

Vendors

Manage suppliers at Vendors.

  • View vendor balance (positive = you owe them)
  • View purchase history and ledger
  • Cannot delete vendor with outstanding balance

Vendor Payments

Pay vendors at Vendors → Pay Vendor or from vendor detail page.

  1. Select vendor and enter payment amount (cannot exceed balance).
  2. Choose cash or bank source.
  3. Confirm. Balance reduces; payment allocates to oldest open purchase invoices (FIFO).

Employees & Payroll

Manage staff at Employees (Administrator and Manager only).

Employee records

  • Add employees with name, CNIC, phone, address, and base salary.
  • Active/inactive status - inactive employees stay in history but are excluded from bulk pay.
  • Search, filter, export (CSV, Excel, PDF), and customize columns on the employee list.

Recording salary

Open an employee’s detail page to record monthly salary:

  1. Click Record Salary.
  2. Enter amount and paid date (salary month is taken from the paid date).
  3. Posify posts an expense automatically (Dr Salary Expense, Cr Cash in Hand or bank).

Salary history appears on the employee page with full export support. Removing a salary record reverts its expense and ledger entries - history is kept as reversal rows, not deleted.

Pay all salaries

On the main Employees page, click Pay Salaries to pay the base salary for every active employee with a base salary set. Choose paid date and optional notes. Each employee gets one salary record and expense entry for that month.

Salaries vs manual expenses
Salary paid through Employees posts to the salary expense account automatically. Use the Expenses page only for other operating costs (rent, utilities, etc.).

Customer Management

Manage customers at Customers.

Customer fields

  • Name, phone, business name, CNIC, region
  • Customer type - Auto discount at POS
  • Credit limit - 0 = unlimited; blocks sale if exceeded
  • Opening balance - Amount customer owed before using Posify

Walk-in customer

System default customer for anonymous sales. Cannot receive credit. Always pays in full.

Customer detail page

View balance, full ledger (including reversal rows when a collection is reverted), sales history, and record collections.

Administrator and Manager see Recalculate Balance on the customer page to rebuild balance from remaining sales and collections. See Recalculate Balance.

Deleting sales (Administrator)

When a sale or return is deleted from Sales, Posify:

  • Restores inventory
  • Removes payments and customer ledger rows linked to that sale
  • Reverses general ledger entries
  • Recalculates the customer balance so credit from a deleted sale does not remain

Recalculate Customer Balance

Administrator and Manager can fix customer balances that look wrong after deleting sales, returns, or collections - especially on databases upgraded from older versions.

Where to find it

  • Customers page → Recalculate Balances (all customers)
  • Customer detail page → Recalculate Balance (one customer)
  • Opening a customer's Ledger tab also runs the same repair automatically

What it does

Rebuilds each customer's balance from:

Opening balance + unpaid sale dues (credit sales) − return credits (standalone returns) − collection payments (cash/bank collections) − exchange old-balance credits (linked to existing sales)

It also cleans up stale data:

  • Orphan ledger rows - customer ledger entries pointing to sales that were already deleted
  • Stale collections - collection ledger rows whose payment record is missing (fixes "Active" collections that cannot be deleted)
  • GL/collection mismatches - collections reverted in accounts but not on customer side

What it does NOT remove

  • Valid sales still on file
  • Active collections that still have a payment record (use Cash Collections → Revert to undo those)
  • Opening balance you entered when creating the customer
Negative balance = store credit
A negative customer balance means the shop owes the customer (store credit), usually from over-collection, exchange credit, or stale data. Recalculate fixes incorrect negatives; legitimate store credit from a completed exchange should remain until used on a new sale.

Collections

Recording payment toward a customer's previous balance (not the current sale).

Two ways to collect

  • At POS - After current bill is fully paid, enter collection amount from excess cash received.
  • Standalone - Customer detail page or Customers → Cash Collections; cash or bank deposit.

Cash Collections list

At Customers → Cash Collections, see all collection payments with Active or Reverted status. Reverted collections show a strikethrough amount and cannot be reverted again.

Reverting a collection

Administrator can Revert a collection (from the list or customer ledger). This:

  • Reverses the general ledger entry on the same account used when collecting:
    • Cash collection → reduces Cash in Hand
    • Bank collection → reduces that bank account
  • Posts: Dr Accounts Receivable · Cr Cash in Hand (or Bank) - opposite of the original collection
  • Adds a matching reversal row on the customer ledger - the original collection row stays for audit
  • Recalculates the customer balance (customer owes you that amount again)

If you collected 500 into HBL ten days ago, that 500 has been sitting in the HBL account balance in your books. Reverting the collection removes 500 from HBL and restores the customer's outstanding balance - it does not automatically pick Cash in Hand unless that is where the money was recorded.

Reversal entries use today's date. Original collection date stays visible in history.

Collection rules
  • Current bill must be fully paid before applying payment to old balance (at POS).
  • Collection cannot exceed customer's outstanding balance.
  • Posts: Dr Cash/Bank, Cr Accounts Receivable.

Credit Sales & Limits

Requires Credit Sale module enabled.

  • Customer must be registered (not walk-in)
  • Partial or full payment allowed; remainder becomes due
  • Due amount increases customer balance
  • Credit limit checked at sale time using live balance (inside transaction)
  • Previous balance shown on POS is a snapshot; server re-validates on Complete Sale
  • Ledger: Dr Accounts Receivable, Cr Sales Revenue

Expenses

Track operating costs at Expenses - rent, utilities, salaries, supplies, and other day-to-day costs you pay from cash or bank.

Expenses vs COGS
This page is for manually recorded expenses. Cost of Goods Sold (COGS) from product sales is posted automatically when you sell inventory and will not appear here. See Reports → Finance for the full income statement.

Recording an expense

  1. Click + Add Expense.
  2. Select an Expense account (required) - e.g. Rent Expense, Utilities Expense, Miscellaneous Expense.
  3. Optionally pick a Category for filtering (Rent, Utilities, etc.) - categories are labels only and do not change the ledger account.
  4. Enter Amount, description, and reference (invoice/receipt number).
  5. Choose Payment Type:
    • Cash - paid from Cash in Hand (your main counter cash account, code 1001). This represents all cash at the counter.
    • Bank - select which bank account from your bank list. The expense is deducted from that bank's balance.

Payment types

Payment typePaid fromNotes
CashCash in Hand (1001)Uses your single main counter cash account. Insufficient cash balance blocks the save.
BankSelected bank accountYou must choose a bank from Banks. Insufficient bank balance blocks the save.

Categories

Use Manage Category to add, edit, or delete expense categories. Categories with existing expenses cannot be edited or deleted until those expenses are removed or recategorized.

Filters & list

  • Filter by date (Today, This Week, custom range, etc.)
  • Filter by category, payment type (Cash / Bank), or expense account
  • Search by description, category, or reference

Accounting entries

Expense paid in cash: Dr Expense account (selected) Cr Cash in Hand Expense paid from bank: Dr Expense account (selected) Cr Bank account (selected)
  • Editing an expense reverses the old ledger entry and reposts with the updated details.
  • Reverting (deleting) an expense posts reversal entries - bank or Cash in Hand is restored; original rows stay in the ledger for audit.
  • Amount and required fields are validated when you click Create or Update.

Transactions

At Accounts → Transactions - view all manual and system-linked journal activity in a searchable grid.

List features

  • Tabs: All, Manual, Linked (from sales, purchases, expenses, etc.)
  • Search, column visibility, density, and export (CSV, Excel, PDF)
  • Summary cards: total entries, manual count, linked count, and net movement
  • Debit and credit columns with a visual arrow between them

Revert (not delete)

Posify keeps full accounting history. Manual entries can be Reverted - this posts equal and opposite reversal lines and marks the original as reverted. Linked entries must be reverted from their source (e.g. revert an expense on the Expenses page, or a collection on Cash Collections).

Audit trail
Reverted transactions remain visible with a Reverted status. Nothing is permanently removed from the ledger.

Banks & Settlements

Requires Bank Management module.

Manage Banks

  • Add bank accounts with opening balance
  • Set default bank; show/hide in POS and Purchases
  • Deposit to Bank - move cash from Cash in Hand into a selected bank account (ledger: Dr Bank, Cr Cash in Hand)

Deposit to Bank

At Banks → Manage Banks → Deposit to Bank, enter the amount physically taken from the counter to the bank. Available amount is the Cash in Hand ledger balance. This is a guided transfer - not the same as a manual journal entry, but posts the same accounting movement. A pending item appears under Settlements until a manager verifies it.

Cash in Hand is one ledger account for all counter cash. Individual cashier totals are tracked separately until you settle their shift under Counter Collection.

Settlements

At Banks → Settlements, managers verify:

  • Counter deposits - Cash moved from counter to bank (Deposit to Bank)
  • POS bank payments - Bank sales awaiting verification

Close a staff member's shift (counter settlement) at Accounts → Counter Collection.

Counter settlement vs bank deposit
Counter settlement closes a staff member's shift report. It does not automatically move cash to the bank - use Deposit to Bank separately for that.

Accounts & Ledger

Posify uses double-entry bookkeeping. Every financial transaction has equal debit and credit entries.

Default chart of accounts

CodeAccountType
1001Cash in HandAsset - single account for all counter cash in the ledger
1002Cash at BankAsset
1003Accounts ReceivableAsset
1004InventoryAsset
2001Accounts PayableLiability
2002Tax PayableLiability
3001Owner's CapitalEquity
4001Sales RevenueIncome
5001Cost of Goods SoldExpense

Pages

  • Primary Accounts - Reference guide to account types
  • Secondary Accounts - Full chart with balances
  • Ledger - All journal entries
  • Transactions - View, search, export, and revert manual entries (see Transactions)
  • Journal Entry - Manual cash receipt/payment, transfer, single entry
  • Counter Collection - Review unsettled cash per counter and settle staff shifts (see below)

Counter Collection

At Accounts → Counter Collection (Admin/Manager only).

Use this to close a cashier's shift and reset their counter reporting period. This is not the same as depositing cash to the bank.

What you see

A table of all active cashier (User) accounts with unsettled activity since their last settlement:

  • Cash sales, collections, expenses, returns
  • Cash in hand for that counter
  • Period start date

Settle

  1. Review the counter row.
  2. Click Settle to close that staff member's current period.
  3. Their counter totals reset to zero for reporting; a new period starts.
Settlement vs bank deposit
  • Counter Collection → Settle - closes shift reporting only. Does not move money in the ledger.
  • Banks → Deposit to Bank - moves Cash in Hand to a bank account in the books.

After all counters are settled, the main Dashboard counter cash total shows 0; the subtitle shows ledger Cash in Hand if cash remains in the shop.

How Money Flows

Sale (cash)

Dr Cash in Hand Cr Sales Revenue Cr Tax Payable (if tax) Dr Cost of Goods Sold Cr Inventory

Sale (credit)

Dr Accounts Receivable Cr Sales Revenue (Customer balance increases by due amount)

Customer collection

Dr Cash in Hand / Bank (account chosen at collection) Cr Accounts Receivable (Customer balance decreases) Revert collection: Dr Accounts Receivable Cr Cash in Hand / Bank (same account as original)

Exchange refund (cash/bank to customer)

Dr Sales return / AR adjustment Cr Cash in Hand / Bank (account selected on return dialog)

Purchase (credit from vendor)

Dr Inventory Cr Accounts Payable (Vendor balance increases by due amount)

Vendor payment

Dr Accounts Payable Cr Cash / Bank (Vendor balance decreases; allocates to open invoices)

Deposit counter cash to bank

Dr Bank account (selected) Cr Cash in Hand (Physical cash moved to bank; manager verifies under Banks → Settlements)

Expense (operating cost)

Dr Expense account (e.g. Rent, Utilities) Cr Cash in Hand - if paid in cash Dr Expense account Cr Bank account - if paid from bank

Loans

Requires Loan Management module.

  • Record borrowed funds (principal, lender, received into cash/bank)
  • Track repayments (principal + interest)
  • Posts to Loan Payable liability and Interest Expense

Reports

Overview (/reports)

Sales, purchases, inventory, expenses summary with charts. Filter by date range. Export available.

Cash Flow (/reports/cashflow)

Cash in/out summary, POS cash details, counter activity.

Finance (/reports/finance)

Trial balance, income statement, and balance sheet from ledger data.

Tax Management

Requires Tax Management module.

Tax calculation mode set in Settings → System:

  • Product-wise - Each product's tax rate applied per line
  • Sale total - Store tax rate applied to sale subtotal

Tax Management page shows tax collected by period with daily/monthly breakdown.

Settings

TabWhat you configure
Store InfoName, logo, address, phone, currency, receipt header/footer
Printer ManagementReceipt, barcode, default printers; label layout
Categories / BrandsProduct organization
User ManagementStaff accounts and roles
SystemTax, date format, theme, auto-print, sounds, low stock threshold, return days (counter settlement is under Accounts → Counter Collection)
Feature ModulesEnable/disable Tax, Bank, Loan, Credit Sale, Cart Price Change, Returns
Backup & RestoreDatabase backup and restore
ActivationLicense key and status
UpdatesCheck and install software updates (desktop)
SetupInitialize chart of accounts

Printer Setup

Configure at Settings → Printer Management.

Receipt printer

  • Select your system printer (the desktop app lists all installed printers).
  • Customize header, footer, logo, and which store fields appear on the receipt under Settings → Receipt Customization.
  • Assign the printer and run a Test print from Settings → Printer Management.
  • Thermal receipt printers (Epson TM series, Star, Bixolon, etc.) are supported via silent print in the desktop app.
  • Receipts print automatically after Complete Sale when auto-print is enabled in System settings.

Receipt paper width

Under Printer Management → Receipt paper, choose the roll width that matches your printer:

PresetTypical use
58 mmNarrow portable / mobile thermal printers
70 mmSome wide compact models
80 mmEpson TM-T88 and most shop counter thermals (most common)

The paper width in Posify must match the width set in your printer driver. On Windows, open Devices and Printers → your receipt printer → Printing preferences and set paper size to the same width (often 80 mm). Set driver margins to 0 or minimum if the driver allows it.

Receipt print quality settings

  • Print density - Light, Normal, or Dark. Use Dark if text looks faint on your thermal paper.
  • Top spacing trim (mm) - If the receipt starts too far down the roll (blank space at the top), increase this in 0.5 mm steps. Try 2–4 mm on Windows Epson and similar thermals. The live preview in Receipt Customization updates after you save.

Long receipts (many items)

Posify sizes each receipt to fit all line items, totals, and footer - including sales with many products (50+ lines). The full receipt should print on one continuous roll without the bottom being cut off. If an older build cropped long receipts, update to the latest version.

Barcode / label printer

  • Configure label size, orientation, gap, content (price, SKU, name)
  • Zebra ZPL raw printing supported in desktop app
  • Print from product list or barcode preview
Receipt layout tips
  • Posify sets page margins to zero in the app. Some thermal drivers still add a small top feed - use Top spacing trim to compensate.
  • Match roll width in Posify and in the Windows/Mac printer driver.
  • Use Test print after changing paper width or top trim.
  • Reprint a past sale from Recent Sales to verify a long receipt after setup.

Multiple counters (different printers)

When two or more PCs share one database, each counter usually has its own physical receipt printer. On Complete Sale, Posify prints silently to the receipt printer selected in Settings → Printer Management, using the printers installed on that PC.

How it works

WhatShared (database)Local (each PC)
Products, stock, sales Same for all counters-
Receipt layout, paper width, store logo Same settings-
Printer name in Settings One saved nameMatched to local Windows/Mac printers
Physical print on sale- Prints on the PC that completed the sale

Recommended setup (different printer models)

You do not need to keep changing the printer name in Posify every time you switch counters. Use the same Windows printer name on each computer, then select that name once in Posify:

  1. On Counter 1, open Windows Devices and Printers and rename the receipt printer to e.g. Posify Receipt.
  2. On Counter 2, rename its receipt printer to the same name: Posify Receipt (even if the hardware is different - Epson on one desk, Star on another).
  3. In Posify on either counter: Settings → Printer Management → Receipt Printer → choose Posify ReceiptTest print on each PC.
  4. Enable auto-print under Settings → System if you want receipts after each sale.

When Counter 1 completes a sale, Windows sends the job to Counter 1's Posify Receipt queue. When Counter 2 completes a sale, it uses Counter 2's local Posify Receipt queue. Same name in Posify; different physical printers on each desk.

Avoid saving different printer names per counter
Printer Management settings are stored in the shared database. If Counter 1 saves EPSON TM-T88 and Counter 2 later saves Star TSP100, the last save applies to both - Counter 1 may fail to print or print to the wrong queue. Use the same printer queue name on each PC instead.

If print fails on one counter

  • Run Test print on that PC from Printer Management.
  • Confirm the receipt printer is online and the name matches what is saved in Settings.
  • Check the printer appears in Windows Devices and Printers on that PC only.

Backup & Restore

At Settings → Backup & Restore.

  1. Create backup - Saves database snapshot to local backup folder.
  2. Restore - Select a backup file to restore. App restarts after restore.
  3. Upload restore - Restore from a backup file copied from another machine.
Backup regularly
Take daily backups before closing shop. Store copies on external drive or cloud storage.

Feature Modules

Toggle optional features at Settings → Feature Modules.

ModuleWhen enabled
Tax ManagementTax settings + Tax Management page
Bank ManagementBanks menu, bank payments at POS, settlements
Loan ManagementLoans menu
Credit SalePartial/full credit sales at POS
Cart Price ChangeEdit unit price on POS cart
Refund / ExchangeReturn and exchange on POS

Release Notes

Summary of changes by version. Download installers from GitHub Releases.

Version 1.0.18 Latest

Database setup on first launch - local or shared network database; PostgreSQL no longer required at Windows install time.

Database & installation

  • Windows installer no longer blocks if PostgreSQL is missing on the PC - configure the database on first launch.
  • Database Setup supports local (127.0.0.1) or remote host (main PC IP, server, or cloud).
  • Multi-counter: install Posify on extra PCs without local PostgreSQL; point them at the same database on the main computer.
  • Configure Database on the splash screen if the connection fails later.

Version 1.0.12

Returns & exchanges accounting, customer balance repair, collection fixes, refund receipts, and POS improvements.

Returns, exchanges & refunds

  • Cash refunds post from Cash in Hand; bank refunds from the bank account you select (with balance check).
  • Exchange settlement applies return credit to previous customer balance first, then new sale, then cash/bank refund.
  • Refund and exchange receipts show correct labels (REFUND / EXCHANGE), return credit, balance cleared, and original invoice - not "credit sale".
  • Refund-only prints merchant + customer copies with line items.
  • Counter staff cannot see cash/bank balances on refund dialog; Manager/Admin can.
  • POS shows Store Credit when customer balance is negative.

Customer balances & collections

  • New Recalculate Balance button on customer detail page and Recalculate Balances on Customers list (Admin/Manager).
  • Fixes orphan ledger rows after deleted sales, stale collections, and incorrect negative balances.
  • Deleting a sale now fully recalculates customer balance - credit from deleted sales should not stick.
  • Collection revert fixed when payment record is missing (common after upgrades).
  • Collection delete/revert always hits the original cash or bank account recorded at collection time.

Accounting & reports

  • Exchange return and old-balance credit posting corrections in general ledger.
  • Sales reports exclude return invoices from forward sales totals.
  • Counter cash totals include exchange cash refunds.
  • POS totals rounded to 2 decimals (fixes tiny float differences on screen).

Updates & database

  • Desktop app runs database migrations on startup - schema updates apply without wiping shop data.
  • Settings and transactions are preserved when updating to a new version.

Version 1.0.2

Employees & payroll, ledger history, expenses, counter cash, collections, printing, and desktop updates.

Employees & payroll

  • New Employees module - staff records with CNIC, contact details, and base salary.
  • Record Salary on each employee - posts salary expense and updates cash/bank automatically.
  • Pay Salaries - bulk pay base salary for all active employees in one step.
  • Salary history grid with search, export, and revert (reversal entries, not deletion).

Ledger history & revert

  • Financial corrections use Revert everywhere - sales, purchases, expenses, salaries, collections, loans, and manual journal entries.
  • Reversal rows are posted; originals are marked reverted - full audit trail is preserved.
  • Accounts → Transactions redesigned: tabs (All / Manual / Linked), search, export, equal stat cards, Revert action for manual entries.
  • Collection revert syncs customer ledger and balance (cash and bank collections).
  • Cash Collections shows Active / Reverted status; reverted amounts are struck through.
  • Customer balance recalculation includes bank collections - list balance matches ledger.

Expenses

  • New Expenses module under the main menu - record rent, utilities, salaries, supplies, and other operating costs.
  • Payment types: Cash (from Cash in Hand) or Bank (select a bank account). Card payment removed.
  • Expense account required on every entry; Category optional for filtering.
  • Manage Category - add, edit, or delete expense categories.
  • Edit and revert reverse the ledger entry and restore bank or Cash in Hand balances.
  • Bank and cash payments validate sufficient balance before saving.

Counter cash & settlement

  • Counter Collection moved to Accounts → Counter Collection (no longer under Settings → System).
  • Dashboard (Admin/Manager): Counter Cash shows the sum of unsettled cashier counters; shows 0 when all counters are settled.
  • Deposit to Bank at Banks → Manage Banks - moves cash from Cash in Hand to a bank (Dr Bank, Cr Cash in Hand).
  • Counter staff see only their own counter on POS → Recent Sales.

Accounting & business rules

  • Sale returns: correct customer balance and general ledger for cash vs credit originals.
  • Purchase returns: supplier balance, inventory, and accounts payable handled correctly.
  • Vendor payments allocate to purchase paid/due amounts.
  • Customer collections capped at outstanding balance; credit limit enforced at Complete Sale.
  • Multi-counter: stock checked on Complete Sale (first sale wins); customer balance re-read live at checkout.

Receipt printing (Windows & Mac desktop)

  • Long receipts (50+ line items) print in full - totals and footer no longer cut off.
  • Improved top spacing - zero page margins; use Top spacing trim in Printer Management if your thermal driver adds blank space.
  • Match roll width (58 / 70 / 80 mm) in Posify and in the printer driver.

Software updates (desktop app)

  • Settings → Updates shows clearer errors when install fails (including Mac code signing issues).
  • Warning if Posify is not running from the Mac Applications folder.
  • Manual download dialog when automatic install cannot finish.
  • Mac in-app updates require every release to use the same Apple Developer ID signature - if update fails, install the DMG manually from GitHub.

Version 1.0.0

  • Initial public release - POS, inventory, purchases, customers, banks, loans, accounts, reports, license activation, backup & restore, printer management, and automatic updates.

About the App

Posify is installed on your shop computer and keeps all your sales and inventory data locally - your data stays in your shop. Current release: v1.0.12.

  • Works offline - Daily sales do not need internet
  • Receipt printing - Connects to your thermal or regular printer
  • Barcode scanning - Use a USB barcode scanner at POS
  • Automatic updates - New versions available from Settings → Updates
  • Backup - Save your shop data from Settings → Backup & Restore

Supported computers

Windows 10 or 11 (64-bit) and Mac (Intel and Apple Silicon). Windows 8.1 and older are not supported. See Download Posify → System requirements.

Software Updates

Current release: 1.0.12. You can update Posify in two ways:

Option 1 - Inside the app (recommended)

  1. Go to Settings → Updates.
  2. Confirm Current version at the top of the panel.
  3. Click Check for updates.
  4. If an update is available, click Download and wait.
  5. Click Install update, then Restart now in the dialog.

On Mac, keep Posify in your Applications folder. If the Updates tab shows a warning that Posify is not in Applications, move the app there first.

If an error appears in red on the Updates tab, read the message - common Mac issues include code signing mismatch (install the DMG manually) or needing to quit fully with Cmd+Q before retrying.

Mac in-app updates use a signed .zip file. Every release must be built with the same Developer ID Application certificate and notarized. If signatures do not match, macOS shows a code signing error and the version number will not change - install the DMG manually instead.

Option 2 - Download latest installer

If in-app update fails, download the newest version from GitHub Releases and install over your existing Posify. Your shop data is preserved.

Data preserved on update
Installing a newer version over an existing install keeps your products, sales, customers, and accounts. Database schema updates run automatically on first launch after update.
  • Windows: run Posify-Setup-1.0.12.exe (or latest version) and finish the installer.
  • Mac: open Posify-1.0.12-arm64.dmg or Posify-1.0.12-x64.dmg, drag Posify into Applications, and replace the existing app.

Important Business Rules

RuleDetail
Walk-in creditWalk-in customers cannot buy on credit
Collection orderCurrent bill must be fully paid before collecting old balance
Return settlementCash refund vs balance credit based on original payment split
Purchase deleteBlocked if current stock < purchased quantity per line
Purchase returnCannot return more than available stock
Vendor paymentCannot exceed vendor outstanding balance
Collection capCannot exceed customer outstanding balance
Credit limitEnforced at Complete Sale; 0 = unlimited
Multi-counter stockStock checked on Complete Sale; first sale wins if only one left
Multi-counter customerLive balance and credit limit on Complete Sale; UI preview may be stale
Sale deleteRecalculates customer balance; removes linked ledger and payments
Balance recalculateAdmin/Manager: rebuilds balance from sales + collections; removes orphan ledger
Collection revert accountReverses same Cash in Hand or bank account used at collection
Refund accountCash refund from Cash in Hand; bank refund from selected bank
Negative customer balanceStore credit (shop owes customer) - shown on POS as Store Credit
Expense paymentCash or Bank only; bank account required for bank; revert posts reversal entries
Ledger correctionsRevert only - reversal rows posted; originals kept for audit
Collection revertRestores customer balance and cash/bank; original ledger rows kept
Salary revertReverses expense and ledger; salary record marked reversed, not deleted
Counter settlementAccounts → Counter Collection; does not move cash to bank
Dashboard counter cashSum of unsettled cashier counters (Admin/Manager)
Opening stockAdjusts quantity only; use Purchases for full accounting
Bank POS salesStart unsettled until manager verifies in Settlements

Troubleshooting

App won't start or shows database error

  • Restart the computer and open Posify again.
  • Click Configure Database on the splash/error screen (or complete Database Setup on first launch).
  • Main PC: confirm PostgreSQL service is running; host is usually 127.0.0.1.
  • Second counter: confirm host is the main PC IP, not 127.0.0.1, and the main PC is on and reachable on the shop network.
  • Check username, password, database name (posify), and port (5432).
  • On the main PC, ensure firewall allows port 5432 from other shop computers if using multiple counters.
  • See Database Setup for full steps.
  • Contact your Posify support provider if the problem continues.

Second counter cannot connect to database

  • You do not need to install PostgreSQL on the second PC - only Posify.
  • Host must be the IP of the computer where PostgreSQL runs (run ipconfig on that PC).
  • Both PCs must be on the same shop network (same Wi‑Fi/LAN).
  • PostgreSQL on the main PC must allow remote connections - see Database Setup → Main PC.
  • Use Test connection in Database Setup before saving.

Receipt not printing

  • Check a receipt printer is assigned in Settings → Printer Management.
  • Run Test print from Printer Management.
  • Ensure the printer is online, has paper, and is not paused in Windows.
  • Confirm auto-print is enabled under Settings → System if receipts should print after each sale.
  • Use the desktop app for silent printing - browser mode opens the system print dialog instead.

Receipt has too much blank space at the top

  • In Settings → Printer Management, increase Top spacing trim by 0.5 mm at a time (try 2–4 mm on Windows Epson / Star thermals).
  • On Windows, set the printer driver paper size to match Posify (usually 80 mm) and margins to minimum.
  • Save settings, run Test print, and adjust trim until the receipt starts at the top of the roll.

Receipt is cut off or missing items at the bottom

  • Update to the latest Posify version - long receipts (many line items) need current print sizing.
  • Confirm paper width in Posify matches the driver (wrong width can cause layout issues).
  • Reprint from Recent Sales to test after updating.
  • If only part of the receipt prints, check the driver is not set to a fixed short page length.

Update failed or stuck

  • Check your internet connection.
  • On Mac, Posify must be in the Applications folder - not Downloads, Desktop, or opened from a DMG. Drag Posify.app into Applications, quit completely (Posify menu → Quit or Cmd+Q), then open from Applications.
  • If you see "Restarting to install update" but nothing happens, wait 15 seconds - Posify may show a manual download dialog. Otherwise quit with Cmd+Q and install manually.
  • Download the latest installer from GitHub Releases: Posify-Setup-x.x.x.exe on Windows, or Posify-x.x.x-arm64.dmg (Apple Silicon) / Posify-x.x.x-x64.dmg (Intel) on Mac. Install over the existing app - your shop data is kept.

Mac update: "code signature" or "code requirement" error

This means macOS rejected the downloaded update because it is not signed the same way as your installed copy. Restarting Posify will not fix it.

  1. Quit Posify completely (Cmd+Q).
  2. Download the DMG for your Mac from GitHub Releases (arm64 for Apple Silicon, x64 for Intel).
  3. Open the DMG, drag Posify into Applications, and replace the existing app.
  4. Open Posify from Applications only.

If Gatekeeper blocks the app: in Terminal run xattr -cr /Applications/Posify.app, then open again from Applications.

For shop owners: ask whoever publishes Posify releases to rebuild and upload using the same Apple Developer ID certificate for every version. Developers: run npm run clean && npm run electron:publish:mac with CSC_* and APPLE_* env vars set.

Insufficient stock at Complete Sale

  • Another counter may have sold the last unit - reduce quantity or remove the item.
  • Refresh POS or search the product again for updated stock.

Negative stock warning

  • Review recent sales and adjustments in Inventory history
  • Use Inventory → Adjust to correct count with a note

Customer balance wrong after deleting sales

  • Go to Customers → open the customer → click Recalculate Balance.
  • Or use Recalculate Balances on the Customers list for all customers.
  • Check Cash Collections for Active collections that were not reverted - delete/revert those if needed.
  • Deleting sales should auto-fix balance on current versions; recalculate fixes older databases upgraded mid-stream.

Collection shows Active but won't delete

  • Update to the latest version (1.0.12+), then try revert again.
  • Or run Recalculate Balance on that customer - stale collection rows are repaired automatically.

Account balances don't match

  • Run Finance report for trial balance
  • Ensure opening stock was recorded via Purchases or journal entry
  • Check unsettled bank payments in Settlements

Frequently Asked Questions

What version of Posify is current?

The latest release is 1.0.12. Check Settings → Updates in the desktop app or GitHub Releases. See Release Notes for changes in each version.

Where do I download Posify?

From our official releases page: github.com/nekores/posify-download. See Download Posify.

Can I use Posify on Windows 8.1?

No. Posify requires Windows 10 or 11 (64-bit). Windows 8.1, 8, and 7 are not supported and the app may not install or may crash. Upgrade the PC or use a newer computer; see System requirements.

Each counter has a different printer - will receipts print correctly?

Yes, if you set it up correctly. Printing always happens on the PC that completed the sale, using that PC's installed printers. Use the same Windows printer name (e.g. Posify Receipt) on each counter, then select that name once in Settings → Printer Management. Do not save a different printer name on each PC - settings are shared in the database. Full steps: Printer Setup → Multiple counters.

Do I need PostgreSQL on every counter computer?

No. PostgreSQL is required only on the PC that hosts the database (usually your main counter). Additional counters install Posify only and connect to that PC using its network IP. See Database Setup.

Can I use Posify without internet?

Yes for daily sales. Internet is needed to download the app, purchase or renew a license, and install updates.

How do I buy a license? What plans are available?

Visit appfolio.lemonsqueezy.com to choose Trial, Monthly, or Yearly plans. Your license key arrives by email. See Plans & License.

Is Posify free?

No. A license (trial, monthly, or yearly) is required for each shop computer.

Can I delete a purchase after selling some items?

Only if current stock is still at least equal to the purchased quantity for each product. Otherwise deletion is blocked.

What's the difference between counter settlement and bank deposit?

Counter settlement (Accounts → Counter Collection) closes a staff member's shift report. Bank deposit (Banks → Deposit to Bank) physically moves cash from the counter to a bank account in the ledger.

Where do I settle a cashier counter?

Accounts → Counter Collection. Select the counter and click Settle. This is no longer under Settings.

Two counters added the same product but only one is in stock - what happens?

Both can add it to cart. When each clicks Complete Sale, the server checks real stock. The first sale succeeds; the second gets an insufficient stock error.

Customer balance on POS looks wrong after another counter made a sale

The balance shown when you select a customer is a snapshot. Clicking Complete Sale uses the live balance from the database, so the books stay correct. Re-select the customer to refresh the display.

Receipt has blank space at the top or cuts off at the bottom

Match paper width in Posify and your printer driver (usually 80 mm on Windows). Use Top spacing trim in Printer Management for extra blank space at the top. For long sales, update to the latest app version so the full receipt prints. See Printer Setup and Troubleshooting.

What happens when I revert a collection or expense?

Posify does not remove ledger rows. A Revert posts opposite entries and marks the original as reverted. For collections, cash or bank is reduced on the same account used when money was received (Cash in Hand or the bank you chose). Customer balance increases by the reverted amount. You can still see both the original and reversal in the ledger and on Cash Collections (Active / Reverted status).

Which account is affected when I delete a collection?

The account you selected when recording the collection: Cash in Hand for cash collections, or the specific bank account for bank collections. Money collected ten days ago has been in that account's balance since collection day; reverting removes it from that same account today.

Customer balance still wrong after deleting all sales

Standalone Cash Collections are separate from sales - deleting sales does not remove them. Revert active collections or use Recalculate Balance (Admin/Manager). See Recalculate Balance.

What is Cash in Hand for expenses?

When you record an expense as Cash, it is paid from your main Cash in Hand account (counter cash). Posify uses one Cash in Hand account for all counter cash - not separate tills in the ledger. Choose Bank if the expense was paid by bank transfer or cheque from a specific bank account.

How do I give a customer credit?

Enable Credit Sale module, register the customer, set a credit limit if needed, then at POS pay less than the total - the remainder becomes due on their balance.

Can multiple staff use Posify at once?

Yes. Each user logs in with their own account. User role staff see only their counter period data; Admin/Manager see everything.