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

If your account manages multiple businesses:

Terminal window
hisaabo switch
# Renders an interactive picker — select with arrow keys and Enter

Or non-interactively:

Terminal window
hisaabo switch <business-id>
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/

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

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

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

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.


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.