Skip to content

CLI Tool

The Hisaabo CLI (hisaabo) brings your entire business management workflow to the terminal. Built with Ink 5 (React for the terminal) and Commander.js, it renders rich interactive tables, colored status badges, and INR-formatted numbers directly in your shell.

It is useful for three things: quick lookups without opening a browser, automation scripts and cron jobs, and AI agent workflows that execute shell commands as part of a broader pipeline.

By default, commands render a pretty table with color. Pass --json to get clean JSON output for piping into jq or other tools.


Terminal window
npm install -g @hisaabo/cli

Or use without installing:

Terminal window
npx @hisaabo/cli <command>

Verify the installation:

Terminal window
hisaabo --version

Generate an API key in the Hisaabo web app under Settings → API Keys (available on paid plans), then:

Terminal window
hisaabo login --token hisaabo_key_xxxxxxxxxxxxxxxxxx

The CLI validates the key, resolves your user and business context, and stores it in ~/.config/hisaabo/config.json. API keys do not expire unless you set an expiry date during creation.

To specify a self-hosted instance:

Terminal window
hisaabo login --token hisaabo_key_xxx --api-url https://your-instance.com
Section titled “Environment variables (recommended for automation)”

For cron jobs and CI/CD pipelines, set credentials as environment variables instead of logging in:

Terminal window
export HISAABO_API_URL=https://your-hisaabo-instance.com
export HISAABO_API_KEY=hisaabo_key_xxxxxxxxxxxxxxxxxx
export HISAABO_BUSINESS_ID=your-business-uuid

Create a new business or switch between existing ones:

Terminal window
# List all businesses on your account
hisaabo business list
# Create a new business (interactive prompts for name, GSTIN, address)
hisaabo business create
# Switch the active business (interactive picker — arrow keys + Enter)
hisaabo switch
# Switch non-interactively
hisaabo switch <business-id>

Switching updates the stored businessId in ~/.config/hisaabo/config.json. All subsequent commands operate on the newly selected business. To override the active business for a single command without switching, pass --business <id>.

Web app: Tap the business name in the sidebar to open a popover that lists all your businesses and includes a “Create New Business” option. Selecting a business reloads all data for that context.

Mobile app: Tap the business name on the home dashboard to open a bottom sheet with the same business list and create option.

Terminal window
# Register a new account
hisaabo auth register --email you@example.com --name "Your Name"
# Complete profile setup after an invite-based registration
hisaabo auth complete-profile --name "Your Name"
# Update your display name
hisaabo auth update-name --name "New Name"
# Sign out of all active sessions (useful after a credential change)
hisaabo auth logout-all

Display key business metrics.

Terminal window
hisaabo dashboard
hisaabo dashboard --period today
hisaabo dashboard --period this-week
hisaabo dashboard --period this-month
hisaabo dashboard --period last-month
hisaabo dashboard --period this-year
hisaabo dashboard --from 2026-01-01 --to 2026-03-31
FlagDescription
--periodtoday, this-week, this-month, last-month, this-year
--from / --toCustom date range (ISO 8601)
--jsonRaw JSON output

Example output:

Business Dashboard — March 2026
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Revenue: ₹4,82,500
Expenses: ₹1,23,400
Net Profit: ₹3,59,100
Outstanding: ₹78,250 (6 overdue invoices)
Top customers this month:
Gupta Enterprises ₹1,42,000
Sharma Traders ₹98,500
Vinod & Sons ₹67,000
Low stock alerts: 3 items

Terminal window
hisaabo invoice list
hisaabo invoice list --status overdue
hisaabo invoice list --status paid
hisaabo invoice list --party "Sharma Traders"
hisaabo invoice list --from 2026-03-01 --to 2026-03-31
hisaabo invoice list --status overdue --sort oldest-first
hisaabo invoice list --type purchase
hisaabo invoice list --json
FlagDescription
--statusdraft, sent, paid, overdue, cancelled
--typesale (default) or purchase
--partyParty name or ID
--from / --toDate range
--sortnewest-first (default), oldest-first, amount-asc, amount-desc
--limitMax results (default 50, max 100)
--jsonRaw JSON output
Terminal window
hisaabo invoice get BB-12948
hisaabo invoice get inv_xxxxxxxxxx --json

Interactive wizard when run without flags. Or pass flags for scripting:

Terminal window
hisaabo invoice create \
--party "Montu Arora" \
--item "Spinach" --quantity 7.3 --unit kg --price 65 \
--item "Tomato" --quantity 5 --unit kg --price 40 \
--date 2026-03-26 \
--due-date 2026-04-10

For complex invoices with many line items, pass a JSON file:

Terminal window
hisaabo invoice create --from-file invoice.json

Where invoice.json follows the format:

{
"party": "Gupta Enterprises",
"date": "2026-03-26",
"dueDate": "2026-04-10",
"items": [
{ "item": "Basmati Rice 25kg", "quantity": 10, "unit": "bag", "price": "1250.00" },
{ "item": "Mustard Oil 15L", "quantity": 5, "unit": "can", "price": "2100.00" }
],
"notes": "Delivery to warehouse on 28th"
}
Terminal window
# Download PDF to current directory
hisaabo invoice pdf BB-12948
# Specify output path
hisaabo invoice pdf BB-12948 --output /tmp/invoices/
# Thermal (58mm) format
hisaabo invoice pdf BB-12948 --format thermal

Update fields on an existing invoice. Only draft invoices can be fully edited; sent or paid invoices accept a limited set of changes.

Terminal window
hisaabo invoice update BB-12948 \
--notes "Updated payment terms: 30 days net" \
--due-date 2026-04-30

Pass --from-file invoice.json to replace the full invoice body from a JSON file (same format as invoice create).

Terminal window
hisaabo invoice delete BB-12948

Only draft invoices can be deleted. Sent or paid invoices must be cancelled via status update.


Terminal window
hisaabo party list
hisaabo party list --type customer
hisaabo party list --type supplier
hisaabo party list --search "sharma"
hisaabo party list --outstanding # only parties with unpaid balance
hisaabo party list --json
Terminal window
hisaabo party get "Sharma Traders"
hisaabo party get party_xxxxxxxxxx --ledger
hisaabo party get "Gupta Enterprises" --ledger --from 2026-01-01
Terminal window
hisaabo party create \
--name "Mehta & Sons" \
--type customer \
--phone 9876543210 \
--gstin 27AABCU9603R1ZX \
--city Mumbai \
--state Maharashtra

Full ledger report with opening balance, all transactions, and closing balance for a date range:

Terminal window
hisaabo party ledger-report --party "Gupta Enterprises" --from 2026-04-01 --to 2026-03-31
hisaabo party ledger-report --party party_xxxxxxxxxx --json

Aggregate transaction statistics (total sales, purchases, payments) for a party:

Terminal window
hisaabo party stats party_xxxxxxxxxx
hisaabo party stats "Sharma Traders" --json

Items most frequently bought from or sold to a party, ranked by quantity or value:

Terminal window
hisaabo party top-items party_xxxxxxxxxx
hisaabo party top-items "Gupta Enterprises" --limit 10 --json

Merge two duplicate party records. All invoices, payments, and ledger entries are reassigned to the target party and the source is deleted.

Terminal window
hisaabo party merge --source party_xxxxxxxxxx --target party_yyyyyyyyyy
Terminal window
hisaabo party delete party_xxxxxxxxxx

Fails if the party has any invoices or payments on record.


Terminal window
hisaabo item list
hisaabo item list --low-stock
hisaabo item list --search "rice"
hisaabo item list --category "Grains"
hisaabo item list --json
Terminal window
hisaabo item get "Basmati Rice 25kg"
hisaabo item get item_xxxxxxxxxx --json
Terminal window
hisaabo item create \
--name "Mustard Oil 15L" \
--unit can \
--price 2100 \
--hsn 1514 \
--gst 5 \
--category "Oils & Ghee" \
--opening-stock 20 \
--low-stock-threshold 5
Terminal window
hisaabo item delete item_xxxxxxxxxx

Fails if the item appears on any invoice.

Adjust stock quantity:

Terminal window
# Add stock (positive adjustment)
hisaabo item stock "Basmati Rice 25kg" --adjustment +50 --reason "Purchase from supplier"
# Remove stock (negative adjustment)
hisaabo item stock "Mustard Oil 15L" --adjustment -3 --reason "Damaged in transit"

Full log of every stock adjustment ever made on an item:

Terminal window
hisaabo item stock-history "Basmati Rice 25kg"
hisaabo item stock-history item_xxxxxxxxxx --from 2026-01-01 --json

Every stock movement including invoice deductions, purchase additions, and manual adjustments:

Terminal window
hisaabo item stock-movements "Mustard Oil 15L"
hisaabo item stock-movements item_xxxxxxxxxx --json

Quick count of items currently at or below their low-stock threshold:

Terminal window
hisaabo item low-stock-count

Historical sale price changes for an item:

Terminal window
hisaabo item price-history "Basmati Rice 25kg"
hisaabo item price-history item_xxxxxxxxxx --json

Total units sold and revenue for an item over a period:

Terminal window
hisaabo item sales-stats "Basmati Rice 25kg" --from 2026-04-01 --to 2026-03-31
hisaabo item sales-stats item_xxxxxxxxxx --json

Manage variants (size, grade, colour, etc.) for an item that has multiple options at different prices or units.

Terminal window
# List variants
hisaabo item variants list item_xxxxxxxxxx
# Add a variant
hisaabo item variants create \
--item item_xxxxxxxxxx \
--name "500g Pack" \
--price 120 \
--unit pack
# Update a variant
hisaabo item variants update variant_xxxxxxxxxx --price 130
# Delete a variant
hisaabo item variants delete variant_xxxxxxxxxx

Merge two duplicate item records. All line items and stock history are reassigned to the target and the source is deleted.

Terminal window
hisaabo item merge --source item_xxxxxxxxxx --target item_yyyyyyyyyy

Change the base unit of measurement for an item (e.g. kg to g). Provide the conversion factor.

Terminal window
hisaabo item switch-base-unit item_xxxxxxxxxx --new-unit g --factor 1000

Rename a unit on an item without changing any quantities (e.g. rename pcs to pieces):

Terminal window
hisaabo item rename-unit item_xxxxxxxxxx --from pcs --to pieces

Terminal window
hisaabo payment list
hisaabo payment list --party "Sharma Traders"
hisaabo payment list --from 2026-03-01 --to 2026-03-31
hisaabo payment list --mode upi
hisaabo payment list --json
Terminal window
# Payment received from customer
hisaabo payment create \
--party "Sharma Traders" \
--amount 25000 \
--mode upi \
--date 2026-03-26 \
--reference "UTR123456789" \
--allocate BB-12800 BB-12801
# Bulk payment (no specific invoice allocation)
hisaabo payment create \
--party "Gupta Enterprises" \
--amount 50000 \
--mode bank \
--reference "NEFT20260326"
Terminal window
hisaabo payment delete pay_xxxxxxxxxx

List invoices that still have an outstanding balance — useful before recording a payment to see what to allocate:

Terminal window
hisaabo payment unpaid-invoices
hisaabo payment unpaid-invoices --party "Sharma Traders" --json

Payments that were recorded but have not been linked to any invoice:

Terminal window
hisaabo payment untracked
hisaabo payment untracked --json

Show the bank account that is currently set as the default for incoming payments:

Terminal window
hisaabo payment default-account

Assign a bank account to an existing payment record:

Terminal window
hisaabo payment assign-account --payment pay_xxxxxxxxxx --account account_xxxxxxxxxx

Terminal window
hisaabo expense list
hisaabo expense list --category "Transport"
hisaabo expense list --from 2026-03-01 --to 2026-03-31
hisaabo expense list --json
Terminal window
hisaabo expense create \
--amount 1500 \
--category "Transport" \
--date 2026-03-26 \
--description "Delivery to Sector 15 warehouse"
Terminal window
hisaabo expense delete exp_xxxxxxxxxx

Get GSTR-1 data (outward supplies):

Terminal window
hisaabo gst r1 --month 3 --year 2026
hisaabo gst r1 --month 3 --year 2026 --json
hisaabo gst r1 --month 3 --year 2026 --csv --output /var/gst-reports/

Get GSTR-3B summary (monthly return):

Terminal window
hisaabo gst r3b --month 3 --year 2026
hisaabo gst r3b --month 3 --year 2026 --csv --output /var/gst-reports/

Manage recurring invoice templates that auto-generate invoices on a schedule.

Terminal window
hisaabo automated-invoice list [--status active|paused|completed|expired] [--json]

Lists all recurring invoice templates with name, party, frequency, status, next run date, and run count.

Terminal window
hisaabo automated-invoice get <template-id> [--json]

Shows full template details including line items and execution history.

Terminal window
hisaabo automated-invoice create \
--name "Monthly Rent to Gupta Ji" \
--party-id <uuid> \
--type sale \
--frequency monthly \
--start-date 2026-04-01T00:00:00Z \
--line-items '[{"description":"Office Rent","quantity":"1","unitPrice":"25000.00","taxPercent":"18"}]' \
[--end-date 2027-03-31T00:00:00Z] \
[--max-runs 12] \
[--notes "Annual rent agreement"] \
[--json]
Terminal window
hisaabo automated-invoice pause <template-id> [--json]

Pauses an active template. No invoices will be generated until resumed.

Terminal window
hisaabo automated-invoice resume <template-id> [--json]

Resumes a paused template. Next run date is recalculated from now.

Terminal window
hisaabo automated-invoice run-now <template-id> [--json]

Manually trigger immediate invoice generation from a template.

Terminal window
hisaabo automated-invoice delete <template-id> [-y] [--json]

Permanently deletes a template and all its execution history.


Terminal window
hisaabo shipment list
hisaabo shipment list --status in_transit
hisaabo shipment list --from 2026-03-01 --json
Terminal window
hisaabo shipment get ship_xxxxxxxxxx

Shows full tracking event history.

Terminal window
hisaabo shipment create \
--invoice BB-14821 \
--mode "Delhivery" \
--tracking "DEL9876543210" \
--dispatch-date 2026-03-27
Terminal window
hisaabo shipment update ship_xxxxxxxxxx \
--status delivered \
--notes "Delivered to reception, signed by Ramesh"

Terminal window
hisaabo bank list
hisaabo bank list --json

Shows all bank accounts and cash accounts with current balances.

Terminal window
hisaabo bank get account_xxxxxxxxxx
hisaabo bank get "SBI Current" --transactions --from 2026-03-01
Terminal window
hisaabo bank create \
--name "HDFC Current Account" \
--type bank \
--account-number "1234567890" \
--ifsc "HDFC0001234" \
--opening-balance 50000
Terminal window
hisaabo bank transfer \
--from "SBI Current" \
--to "Petty Cash" \
--amount 5000 \
--date 2026-03-26 \
--notes "Weekly petty cash replenishment"
Terminal window
hisaabo bank transactions "HDFC Current Account"
hisaabo bank transactions account_xxxxxxxxxx --from 2026-03-01 --to 2026-03-31 --json

View the gateway configuration (charge rates, settlement account) for a payment gateway account.

Terminal window
hisaabo bank gateway-config <accountId>
hisaabo bank gateway-config <accountId> --json

Update gateway charge rates or settlement account.

Terminal window
hisaabo bank update-gateway <accountId> --charge-credit-card 2.5 --charge-upi 0
hisaabo bank update-gateway <accountId> --settlement-account <bankAccountId>

Charge values are percentages by default. Use flat:20 for a flat ₹20 charge.


All transactions for a date range, ordered by date:

Terminal window
hisaabo report daybook --from 2026-03-01 --to 2026-03-31
hisaabo report daybook --from 2026-03-26 --to 2026-03-26 --json

Receivables and payables with aging buckets:

Terminal window
hisaabo report outstanding
hisaabo report outstanding --type receivable
hisaabo report outstanding --json

Taxable turnover and GST by rate for a period:

Terminal window
hisaabo report tax-summary --from 2026-01-01 --to 2026-03-31
hisaabo report tax-summary --from 2026-04-01 --to 2026-03-31 --json

Top items by sales quantity and revenue:

Terminal window
hisaabo report item-sales --period this-month
hisaabo report item-sales --from 2026-04-01 --to 2026-03-31 --json

Current stock value and opening/closing comparison:

Terminal window
hisaabo report stock
hisaabo report stock --json

Terminal window
hisaabo target list
hisaabo target list --period monthly --json
Terminal window
hisaabo target create \
--name "Q1 Revenue Target" \
--type order_value \
--value 500000 \
--period monthly

Show targets assigned to you (useful for sales team members):

Terminal window
hisaabo target my
hisaabo target my --json

Terminal window
# From CSV
hisaabo import parties --file parties.csv --format csv
# From JSON
hisaabo import parties --file parties.json --format json
# Preview without importing
hisaabo import parties --file parties.csv --dry-run
Terminal window
hisaabo import items --file catalog.csv --format csv
hisaabo import items --file catalog.json --dry-run

Download a full tenant backup as a .tar.gz archive. This is a tenant-level operation — it does not require a business to be selected.

Terminal window
# Export by tenant slug
hisaabo export --tenant my-company -o backup.tar.gz
# Export by tenant UUID
hisaabo export --tenant 550e8400-e29b-41d4-a716-446655440000 -o /tmp/backup.tar.gz
FlagDescription
--tenantTenant slug or UUID to export (required)
-o, --outputOutput file path (required)

On success, prints the file size, SHA256 hash, and download time.

Exit codeMeaning
0Success
1Not authenticated or insufficient permissions
2Rate limit reached (max 2 exports per day)
5Server or network error

Upload a .tar.gz backup archive into an empty tenant. The target tenant must have zero businesses.

Terminal window
# Restore by tenant slug (interactive confirmation)
hisaabo restore --tenant my-company -i backup.tar.gz
# Skip confirmation prompt
hisaabo restore --tenant my-company -i backup.tar.gz --yes
# Restore by tenant UUID
hisaabo restore --tenant 550e8400-e29b-41d4-a716-446655440000 -i backup.tar.gz -y
FlagDescription
--tenantTarget tenant slug or UUID — must be empty (required)
-i, --inputInput backup file path (required)
-y, --yesSkip confirmation prompt

On success, prints rows inserted per table, skipped rows, warnings, and upload time.

Exit codeMeaning
0Success
1Not authenticated or insufficient permissions
3Target tenant is not empty
4Input file missing, unreadable, or empty
5Server or network error

Terminal window
hisaabo store settings
hisaabo store settings --json
Terminal window
hisaabo store orders
hisaabo store orders --status pending
hisaabo store orders --from 2026-03-01 --json

Mark a pending store order as confirmed and begin fulfillment:

Terminal window
hisaabo store order confirm order_xxxxxxxxxx

Cancel a store order:

Terminal window
hisaabo store order cancel order_xxxxxxxxxx --reason "Out of stock"

Check whether a URL slug is available before updating your store URL:

Terminal window
hisaabo store check-slug my-store-name

List items currently shown in your online store:

Terminal window
hisaabo store items
hisaabo store items --json

Bulk enable or disable items in the store without editing each one individually:

Terminal window
# Enable multiple items
hisaabo store items toggle --enable item_aaa item_bbb item_ccc
# Disable multiple items
hisaabo store items toggle --disable item_ddd item_eee

Manage the tenant (organisation) that owns your businesses. Most users operate within a single tenant and never need these commands. They are most relevant to agency operators who manage multiple tenants.

Terminal window
hisaabo tenant list
hisaabo tenant list --json

Switch the active tenant. All subsequent commands operate in the context of the selected tenant.

Terminal window
hisaabo tenant select tenant_xxxxxxxxxx

List members of the current tenant:

Terminal window
hisaabo tenant members
hisaabo tenant members --json

Invite a new member by email:

Terminal window
hisaabo tenant invite --email colleague@example.com --role member

Available roles: owner, admin, member.

Remove a member from the tenant:

Terminal window
hisaabo tenant remove user_xxxxxxxxxx

Update a member’s role:

Terminal window
hisaabo tenant role user_xxxxxxxxxx --role admin

List pending invitations for the current tenant.

Terminal window
hisaabo tenant invitations
hisaabo tenant invitations --json

Revoke a pending invitation.

Terminal window
hisaabo tenant revoke-invitation <invitationId>

Beyond standard invoices, Hisaabo supports six additional document types. Each type has the same five operations: list, get, create, status, and delete.

Terminal window
hisaabo quotation list
hisaabo quotation list --party "Gupta Enterprises" --json
hisaabo quotation get quot_xxxxxxxxxx
hisaabo quotation create \
--party "Mehta & Sons" \
--item "Basmati Rice 25kg" --quantity 50 --unit bag --price 1250 \
--valid-until 2026-04-30
hisaabo quotation status quot_xxxxxxxxxx accepted
hisaabo quotation delete quot_xxxxxxxxxx
Terminal window
hisaabo credit-note list
hisaabo credit-note get cn_xxxxxxxxxx
hisaabo credit-note create --party "Sharma Traders" --invoice BB-12948 --reason "Goods returned"
hisaabo credit-note status cn_xxxxxxxxxx issued
hisaabo credit-note delete cn_xxxxxxxxxx
Terminal window
hisaabo debit-note list
hisaabo debit-note get dn_xxxxxxxxxx
hisaabo debit-note create --party "Vinod & Sons" --invoice BB-12900 --reason "Short supply"
hisaabo debit-note status dn_xxxxxxxxxx issued
hisaabo debit-note delete dn_xxxxxxxxxx
Terminal window
hisaabo challan list
hisaabo challan get dc_xxxxxxxxxx
hisaabo challan create \
--party "Gupta Enterprises" \
--item "Mustard Oil 15L" --quantity 10 --unit can
hisaabo challan status dc_xxxxxxxxxx delivered
hisaabo challan delete dc_xxxxxxxxxx
Terminal window
hisaabo proforma list
hisaabo proforma get pf_xxxxxxxxxx
hisaabo proforma create \
--party "Mehta & Sons" \
--item "Toor Dal 50kg" --quantity 5 --unit bag --price 4200
hisaabo proforma status pf_xxxxxxxxxx approved
hisaabo proforma delete pf_xxxxxxxxxx
Terminal window
hisaabo sales-return list
hisaabo sales-return get sr_xxxxxxxxxx
hisaabo sales-return create --party "Sharma Traders" --invoice BB-12948
hisaabo sales-return status sr_xxxxxxxxxx processed
hisaabo sales-return delete sr_xxxxxxxxxx
Terminal window
hisaabo purchase-return list
hisaabo purchase-return get pr_xxxxxxxxxx
hisaabo purchase-return create --party "Vinod & Sons" --invoice BB-12900
hisaabo purchase-return status pr_xxxxxxxxxx processed
hisaabo purchase-return delete pr_xxxxxxxxxx

Convert one document type to another. The most common use case is converting a delivery challan into a tax invoice after goods are delivered.

Terminal window
# Convert a delivery challan to a sale invoice
hisaabo document convert \
--from dc_xxxxxxxxxx \
--from-type delivery_challan \
--to-type invoice

The --skip-stock-adjustment flag is available when converting a challan to an invoice to avoid double-deducting stock that was already deducted when the challan was created.


Manage active sessions across devices.

List all active sessions for the current user.

Terminal window
hisaabo session list
hisaabo session list --expired
hisaabo session list --json

Shows device/browser, IP address, last activity time, creation date, and marks the current session.

Terminate a specific session by ID.

Terminal window
hisaabo session revoke <sessionId>

The revoked session is immediately invalidated. The user on that device will be redirected to the login page.

Sign out from all devices (including the current one).

Terminal window
hisaabo session revoke-all

Generate and manage API keys for automation scripts, CI/CD pipelines, and third-party integrations.

Terminal window
hisaabo api-key list
hisaabo api-key list --json

Shows key name, creation date, expiry date, and last-used timestamp. The key secret is only shown once at creation time.

Terminal window
hisaabo api-key create --name "CI Pipeline" --expires 2027-04-01
hisaabo api-key create --name "Read-only export script"

Copy the returned key immediately — it is not shown again.

Terminal window
hisaabo api-key revoke apikey_xxxxxxxxxx

Revoked keys stop working instantly.


These flags work on every command:

FlagDescription
--jsonOutput raw JSON instead of formatted tables
--business <id>Override the active business for this command
--api-url <url>Override the API URL for this command
--quietSuppress all output except errors
--no-colorDisable color output (useful for log files)
--helpShow help for any command

Terminal window
hisaabo dashboard --period today

Or with the full picture:

#!/bin/bash
echo "=== $(date +"%d %b %Y") ==="
hisaabo dashboard --period today
echo ""
echo "--- Overdue invoices ---"
hisaabo invoice list --status overdue --sort oldest-first --limit 10
echo ""
echo "--- Low stock ---"
hisaabo item list --low-stock
Terminal window
hisaabo invoice create \
--party "Gupta Enterprises" \
--item "Basmati Rice 25kg" --quantity 20 --unit bag --price 1250 \
--item "Toor Dal 50kg" --quantity 5 --unit bag --price 4200 \
--due-date 2026-04-10

Then immediately get the PDF:

Terminal window
INVOICE_ID=$(hisaabo invoice create \
--party "Gupta Enterprises" \
--item "Basmati Rice 25kg" --quantity 20 --unit bag --price 1250 \
--json | jq -r '.id')
hisaabo invoice pdf "$INVOICE_ID" --output /tmp/
echo "PDF saved: /tmp/${INVOICE_ID}.pdf"
Terminal window
# Human-readable table
hisaabo invoice list --status overdue --sort oldest-first
# Pipe to jq for custom formatting
hisaabo invoice list --status overdue --json | jq -r \
'.[] | "\(.invoiceNumber) \(.party.name) ₹\(.totalAmount) \(.daysOverdue) days overdue"'
# Total amount overdue
hisaabo invoice list --status overdue --json | \
jq '[.[].totalAmount | tonumber] | add'
#!/bin/bash
MONTH=3
YEAR=2026
OUTPUT_DIR="/var/gst-reports/${YEAR}-${MONTH}"
mkdir -p "$OUTPUT_DIR"
# Human-readable summary
hisaabo gst r1 --month "$MONTH" --year "$YEAR"
# Export CSV for CA or GST portal upload
hisaabo gst r1 --month "$MONTH" --year "$YEAR" \
--csv --output "$OUTPUT_DIR/gstr1-${YEAR}-${MONTH}.csv"
hisaabo gst r3b --month "$MONTH" --year "$YEAR" \
--csv --output "$OUTPUT_DIR/gstr3b-${YEAR}-${MONTH}.csv"
echo "GST exports ready in $OUTPUT_DIR"
Terminal window
# Top 5 customers by outstanding balance
hisaabo party list --outstanding --json | \
jq 'sort_by(.outstandingBalance | tonumber) | reverse | .[0:5] |
.[] | "\(.name): ₹\(.outstandingBalance)"'
# Items needing reorder with suggested quantity
hisaabo item list --low-stock --json | jq -r \
'.[] | "REORDER \(.name): have \(.stockQuantity) \(.unit), min \(.lowStockThreshold) \(.unit)"'
# Monthly revenue from dashboard
hisaabo dashboard --period this-month --json | jq -r '.totalSales'
# Count invoices by status
hisaabo invoice list --json | jq 'group_by(.status) | .[] | {status: .[0].status, count: length}'

Morning brief with overdue and low-stock checks

Section titled “Morning brief with overdue and low-stock checks”
#!/bin/bash
# morning-brief.sh — add to cron: 0 8 * * *
DASH=$(hisaabo dashboard --period today --json)
OVERDUE=$(hisaabo invoice list --status overdue --sort oldest-first --limit 5 --json)
LOW=$(hisaabo item list --low-stock --json)
echo "=== MORNING BRIEF — $(date +"%d %b %Y") ==="
echo ""
echo "Revenue today: $(echo $DASH | jq -r '.totalSales')"
echo "Outstanding: $(echo $DASH | jq -r '.receivable')"
echo ""
OVERDUE_COUNT=$(echo $OVERDUE | jq 'length')
if [ "$OVERDUE_COUNT" -gt 0 ]; then
echo "OVERDUE ($OVERDUE_COUNT):"
echo $OVERDUE | jq -r \
'.[] | " \(.invoiceNumber) — \(.party.name) — ₹\(.totalAmount) (\(.daysOverdue) days)"'
echo ""
fi
LOW_COUNT=$(echo $LOW | jq 'length')
if [ "$LOW_COUNT" -gt 0 ]; then
echo "LOW STOCK ($LOW_COUNT):"
echo $LOW | jq -r '.[] | " \(.name): \(.stockQuantity) \(.unit) left"'
fi
#!/bin/bash
# gst-filing-prep.sh — cron: 0 8 28 * *
MONTH=$(date +%m)
YEAR=$(date +%Y)
CA_EMAIL="ca@yourca.com"
OUTPUT_DIR="/var/gst-reports/${YEAR}-${MONTH}"
mkdir -p "$OUTPUT_DIR"
hisaabo gst r1 --month "$MONTH" --year "$YEAR" \
--csv --output "$OUTPUT_DIR/gstr1.csv"
hisaabo gst r3b --month "$MONTH" --year "$YEAR" \
--csv --output "$OUTPUT_DIR/gstr3b.csv"
SUMMARY=$(hisaabo gst r3b --month "$MONTH" --year "$YEAR")
{
echo "GST data for ${YEAR}-${MONTH} attached."
echo ""
echo "$SUMMARY"
echo ""
echo "Please file before the 11th."
} | mail -s "GST Data ${YEAR}-${MONTH}" \
-a "$OUTPUT_DIR/gstr1.csv" \
-a "$OUTPUT_DIR/gstr3b.csv" \
"$CA_EMAIL"
#!/bin/bash
# aging-report.sh — cron: 0 9 * * 1
hisaabo report outstanding --json | jq -r '
"RECEIVABLES AGING — " + (now | strftime("%d %b %Y")) + "\n" +
"0–30 days: ₹\(.aging."0_30")\n" +
"31–60 days: ₹\(.aging."31_60")\n" +
"61–90 days: ₹\(.aging."61_90")\n" +
"90+ days: ₹\(.aging."90_plus")\n"
' | mail -s "Weekly Aging Report" owner@yourbusiness.com

ScenarioUse CLIUse MCP
Cron jobs and scheduled automationYesNo
AI assistants in conversation (Claude Desktop, etc.)NoYes
Shell pipeline data processingYesNo
OpenClaw agents that take actionsNoYes
CI/CD pipelines and deployment scriptsYesNo
Natural-language business queriesNoYes
Bulk data export and reportingYesNo
tools/hisaabo-cli.ts
export const hisaaboCLI = {
name: "hisaabo_cli",
description:
"Run a hisaabo CLI command and return the JSON output. " +
"Available subcommands: dashboard, " +
"invoice list/get/create/update/pdf/delete, " +
"party list/get/create/delete/ledger/ledger-report/stats/top-items/merge, " +
"item list/get/create/delete/stock/stock-history/stock-movements/low-stock-count/price-history/sales-stats/variants/merge/switch-base-unit/rename-unit, " +
"payment list/create/delete/unpaid-invoices/untracked/default-account/assign-account, " +
"expense list/create/delete, " +
"gst r1/r3b, shipment list/get/create/update, " +
"bank list/get/create/transfer/transactions, " +
"report daybook/outstanding/tax-summary/item-sales/stock, " +
"target list/create/my, import parties/items, " +
"store settings/orders/order-confirm/order-cancel/check-slug/items/items-toggle, " +
"tenant list/select/members/invite/remove/role, " +
"quotation list/get/create/status/delete, " +
"credit-note list/get/create/status/delete, " +
"debit-note list/get/create/status/delete, " +
"challan list/get/create/status/delete, " +
"proforma list/get/create/status/delete, " +
"sales-return list/get/create/status/delete, " +
"purchase-return list/get/create/status/delete, " +
"document convert, " +
"api-key list/create/revoke",
parameters: {
type: "object",
properties: {
command: {
type: "string",
description: "The hisaabo subcommand to run, e.g. 'invoice list --status overdue --json'",
},
},
required: ["command"],
},
execute: async ({ command }: { command: string }) => {
const { stdout, stderr } = await exec(`hisaabo ${command}`);
if (stderr) throw new Error(stderr);
return JSON.parse(stdout);
},
};

/etc/cron.d/hisaabo
HISAABO_API_URL=https://your-hisaabo-instance.com
HISAABO_API_KEY=hisaabo_key_xxxxxxxxxxxxxxxxxx
HISAABO_BUSINESS_ID=business-uuid-here
# Daily summary at 8:00 AM
0 8 * * * root hisaabo dashboard --period today --json | \
jq -r '"Revenue: ₹\(.totalSales)\nOutstanding: ₹\(.receivable)"' | \
mail -s "Daily Summary" owner@yourbusiness.com
# Overdue invoice alert at 9:00 AM
0 9 * * * root /opt/hisaabo-scripts/morning-brief.sh
# Stock check twice daily
0 9,17 * * * root /opt/hisaabo-scripts/low-stock-check.sh
# Monthly GST export on the 28th at 8 AM
0 8 28 * * root /opt/hisaabo-scripts/gst-filing-prep.sh
# Weekly aging report every Monday
0 9 * * 1 root /opt/hisaabo-scripts/aging-report.sh

The CLI reads from ~/.config/hisaabo/config.json, created automatically on first hisaabo login:

{
"apiUrl": "https://your-hisaabo-instance.com",
"token": "hisaabo_key_xxxxxxxxxxxxxxxxxx",
"tenantId": "tenant-uuid-here",
"businessId": "business-uuid-here",
"output": {
"format": "table",
"color": true
}
}

Priority order (highest to lowest): command-line flags → environment variables → config file.