test
Business KPI monitoring with threshold-based alerts. Connects to QuickBooks Online, Google Sheets, and CSV exports to track AR aging, cash runway, revenue gr...
Like a lobster shell, security has layers — review code before you run it.
License
SKILL.md
KPI Alert System Skill
Automated KPI monitoring with threshold alerts for business financial health. Pulls data from QBO, Google Sheets, or CSV exports, evaluates rules, and fires alerts to Telegram/Slack/email.
Supported KPIs
| KPI | Description | Typical Alert Threshold |
|---|---|---|
| AR Aging (30/60/90+) | Outstanding receivables by age bucket | >$X in 90+ days, or >30% of AR |
| Cash Runway | Months of runway at current burn | <3 months = red, <6 months = yellow |
| Monthly Burn Rate | Net cash outflow per month | >$X/month or >Y% above budget |
| Revenue Growth (MoM/QoQ) | Revenue trend vs prior period | <0% = alert, <5% = warning |
| Gross Margin % | (Revenue - COGS) / Revenue | <X% below target |
| Net Income / Loss | P&L bottom line | Negative for N consecutive months |
| DSO (Days Sales Outstanding) | AR / (Revenue / 30) | >45 days = yellow, >60 = red |
| Current Ratio | Current Assets / Current Liabilities | <1.2 = alert |
| Quick Ratio | (Cash + AR) / Current Liabilities | <1.0 = alert |
| Payroll % of Revenue | Payroll costs as % of top line | >X% = alert |
Setup Steps
1. Define Your KPI Config
Create a YAML config file for the client or firm:
# kpi-config-clientname.yaml
client: "Acme Corp"
alert_channels:
- type: telegram
target: "@irfan_dm" # or channel ID
- type: slack
webhook: "https://hooks.slack.com/services/..."
- type: email
to: "imussa@precisionledger.io"
kpis:
ar_aging_90plus:
label: "AR 90+ Days"
source: qbo # or sheets, csv
threshold_red: 15000
threshold_yellow: 8000
message: "AR aging 90+ days is ${value} — collections action needed"
cash_runway_months:
label: "Cash Runway"
source: qbo
threshold_red: 3
threshold_yellow: 6
direction: below # alert when BELOW threshold (default: above)
message: "Cash runway is {value} months — review burn rate immediately"
revenue_growth_mom:
label: "MoM Revenue Growth"
source: sheets
sheet_id: "1BxiM..."
tab: "P&L Summary"
cell_range: "C5"
threshold_red: -5
threshold_yellow: 0
direction: below
message: "Revenue growth is {value}% MoM — investigate pipeline"
gross_margin_pct:
label: "Gross Margin %"
source: qbo
threshold_red: 30
threshold_yellow: 40
direction: below
message: "Gross margin at {value}% — below target of 40%"
2. Data Source Integration
QuickBooks Online (via QBO Automation skill)
# Pull P&L summary for current month
qbo report pl --period this-month --format json > /tmp/pl-current.json
# Pull AR aging
qbo report ar-aging --format json > /tmp/ar-aging.json
# Pull balance sheet for liquidity ratios
qbo report balance-sheet --period this-month --format json > /tmp/bs-current.json
Google Sheets (via gog skill)
# Read a named range
gog sheets read --id SHEET_ID --range "KPI Dashboard!B2:C20"
CSV / Excel Export
Place exports at a consistent path and reference in config:
source: csv
file: "/tmp/monthly-export-2026-03.csv"
column: "AR_90plus"
row_filter: "Month=March"
3. KPI Evaluation Logic
Core algorithm (Python pseudocode for reference):
def evaluate_kpi(config, value):
direction = config.get("direction", "above")
if direction == "above":
if value >= config["threshold_red"]:
return "RED", config["message"].format(value=value)
elif value >= config["threshold_yellow"]:
return "YELLOW", config["message"].format(value=value)
else: # below
if value <= config["threshold_red"]:
return "RED", config["message"].format(value=value)
elif value <= config["threshold_yellow"]:
return "YELLOW", config["message"].format(value=value)
return "GREEN", None
def run_kpi_check(config_path):
config = load_yaml(config_path)
alerts = []
for kpi_id, kpi_config in config["kpis"].items():
value = fetch_kpi_value(kpi_config) # pulls from QBO/Sheets/CSV
status, message = evaluate_kpi(kpi_config, value)
if status in ["RED", "YELLOW"]:
alerts.append({
"kpi": kpi_config["label"],
"status": status,
"value": value,
"message": message
})
return alerts
4. Alert Formatting
Telegram message format:
🚨 KPI ALERT — Acme Corp
Date: March 15, 2026
🔴 AR 90+ Days: $18,500
→ Collections action needed immediately
🟡 Gross Margin: 38%
→ Below 40% target — review COGS
✅ Cash Runway: 8.2 months
✅ Revenue Growth: +4.2% MoM
Run by: Sam Ledger / PrecisionLedger
Slack format (with attachments):
{
"attachments": [
{
"color": "#ff0000",
"title": "🔴 AR 90+ Days — $18,500",
"text": "Collections action needed. 90+ day bucket exceeds $15,000 threshold.",
"footer": "KPI Alert System | PrecisionLedger",
"ts": 1742076000
}
]
}
5. Scheduling with OpenClaw Cron
Monthly KPI check (1st of month, 9 AM CST):
{
"name": "Monthly KPI Check — Acme Corp",
"schedule": {
"kind": "cron",
"expr": "0 9 1 * *",
"tz": "America/Chicago"
},
"payload": {
"kind": "agentTurn",
"message": "Run KPI alert check for Acme Corp using kpi-config-acme.yaml. Pull QBO AR aging and P&L, evaluate thresholds, and send alerts to the configured channels."
},
"sessionTarget": "isolated",
"delivery": {
"mode": "announce"
}
}
Weekly cash runway check (every Monday, 8 AM CST):
{
"name": "Weekly Cash Runway Check",
"schedule": {
"kind": "cron",
"expr": "0 8 * * 1",
"tz": "America/Chicago"
},
"payload": {
"kind": "agentTurn",
"message": "Check cash runway and burn rate for all active clients. Alert if any client is below 6 months runway."
},
"sessionTarget": "isolated"
}
Example Prompts
Setup
"Set up KPI alerts for my client TechStartup LLC. Alert me on Telegram when AR aging hits 90 days, burn rate exceeds $40k/month, or runway drops below 4 months."
Manual Check
"Run a KPI check on Acme Corp right now and tell me which thresholds are breached."
Threshold Adjustment
"Update the gross margin alert for TechStartup to yellow at 45% and red at 35%."
Report Generation
"Generate a weekly KPI summary for all active clients and post to the #weekly-metrics Telegram channel."
KPI Calculation Reference
Cash Runway
Runway (months) = Current Cash Balance / Average Monthly Burn Rate
Average Monthly Burn = (Cash 3 months ago - Cash today) / 3
Days Sales Outstanding (DSO)
DSO = (Accounts Receivable / Revenue) × 30
Burn Rate
Net Burn = Total Cash Outflows - Total Cash Inflows (monthly)
Gross Burn = Total Cash Outflows only (monthly)
Current Ratio
Current Ratio = Current Assets / Current Liabilities
AR Aging Concentration Risk
90+ Day Concentration = AR 90+ days / Total AR × 100
Alert when concentration > 20%
Multi-Client Monitoring Pattern
For firms managing multiple clients:
# master-kpi-config.yaml
clients:
- name: "Acme Corp"
config: "./clients/acme/kpi-config.yaml"
qbo_realm: "123456789"
- name: "TechStartup LLC"
config: "./clients/techstartup/kpi-config.yaml"
qbo_realm: "987654321"
- name: "Retail Co"
config: "./clients/retailco/kpi-config.yaml"
data_source: csv
csv_path: "/data/retailco/monthly-export.csv"
Loop pattern:
"Check KPI thresholds for all clients in master-kpi-config.yaml. Consolidate alerts into one Telegram message grouped by client."
Negative Boundaries — When NOT to Use This Skill
- Real-time stock/crypto price alerts → use defi-position-tracker or a dedicated market data feed
- Live BI dashboards (charts, drill-downs) → use Power BI, Looker, or Metabase
- ERP systems (SAP, Oracle, NetSuite) → requires dedicated API connectors, not this skill
- Sub-minute alerting (high-frequency trading signals) → wrong latency class
- PTIN-regulated tax analysis → use qbo-to-tax-bridge (Moltlaunch service only)
- Client-facing automated reports → requires Irfan approval before sending externally
- Write operations to QBO → read-only by default; journal entries need explicit approval
Integration Stack
| Layer | Tool |
|---|---|
| Data Pull (QBO) | qbo-automation skill |
| Data Pull (Sheets) | gog skill |
| Alerting (Telegram) | message tool (channel=telegram) |
| Scheduling | cron tool |
| Storage | workspace/clients/<name>/kpi-data/ |
| Config Format | YAML (kpi-config-<client>.yaml) |
Alert Severity Guide
| Color | Meaning | Response Time |
|---|---|---|
| 🔴 RED | Threshold critically breached — action required | Same day |
| 🟡 YELLOW | Warning zone — monitor closely | Within 48 hours |
| ✅ GREEN | Within acceptable range | No action needed |
KPI Alert System — PrecisionLedger Skill v1.0.0
Files
1 totalComments
Loading comments…
