Lightweight bookkeeping and expense tracking for startups and small businesses. Use whenever the user tracks expenses, logs income, records invoices, manages payables/receivables,
npx clawhub@latest install startup-bookkeeperA conversational bookkeeping skill that lets startup founders and small business owners track expenses, income, payables, and receivables without needing a paid subscription to accounting software. Data persists across sessions using artifact storage.
window.storage inside React artifacts,
keyed so it survives across sessions.{ "id": "txn_<timestamp>_<random4>", "date": "YYYY-MM-DD", "type": "expense | income | payable | receivable", "amount": 120.00, "currency": "USD", "original_amount": null, "original_currency": null, "category": "<see categories below>", "vendor_or_client": "Amazon Web Services", "description": "Monthly EC2 + S3 charges", "status": "paid | unpaid | partial | overdue", "invoice_number": null, "due_date": null, "tags": ["infrastructure"], "notes": "", "recurring_id": null, "source": "manual | csv_import | receipt_ocr | recurring_auto" }When a transaction originates from a foreign currency, store the user-entered amount in
original_amount/original_currencyand the converted amount inamount/currency(the user's base currency). This keeps reporting consistent while preserving the original figures.
{
"id": "rec_<random8>",
"vendor_or_client": "Notion",
"amount": 29.00,
"currency": "USD",
"category": "SaaS & Software",
"description": "Monthly subscription",
"type": "expense",
"frequency": "monthly | weekly | quarterly | yearly",
"next_due": "YYYY-MM-DD",
"day_of_month": 15,
"auto_log": true,
"active": true
}
{
"month": "YYYY-MM",
"budgets": {
"SaaS & Software": { "limit": 500, "currency": "USD" },
"Marketing & Ads": { "limit": 1000, "currency": "USD" }
}
}
{
"id": "alert_<random8>",
"type": "overdue_invoice | budget_exceeded | budget_warning | recurring_upcoming | recurring_failed",
"severity": "critical | warning | info",
"message": "Invoice #2045 to DataVista Corp ($8,500) is 5 days overdue",
"related_id": "txn_xxx or rec_xxx",
"created_at": "YYYY-MM-DD",
"dismissed": false
}
Use these standard categories. If a transaction doesn't fit, create a new one and inform the user.
| Category | Examples |
|---|---|
| SaaS & Software | AWS, GitHub, Figma, Slack, domain renewals |
| Payroll & Contractors | Salaries, freelancer payments, stipends |
| Marketing & Ads | Google Ads, social media, sponsorships |
| Travel & Transport | Flights, hotels, Uber, gas |
| Office & Equipment | Laptops, monitors, furniture, co-working |
| Legal & Professional | Attorney fees, CPA, trademark filings |
| Meals & Entertainment | Team meals, client dinners |
| Insurance | Business insurance, health insurance |
| Taxes & Fees | State fees, franchise tax, licenses |
| Utilities & Telecom | Internet, phone, electricity |
| Miscellaneous | Anything that doesn't fit above |
For income and receivable transactions, use these instead of expense categories:
| Category | Examples |
|---|---|
| Product Revenue | SaaS subscriptions, license fees |
| Consulting & Services | Hourly/project billing, retainers |
| Grants & Awards | Government grants, accelerator awards |
| Interest & Investments | Bank interest, investment returns |
| Refunds | Vendor refunds, credit card cashback |
| Other Income | Miscellaneous income |
When the user describes a transaction in natural language:
Batch logging: When a user logs multiple transactions in one message, parse all of them and present a numbered summary for confirmation. Example:
When the user uploads a CSV, Excel, or similar file:
When the user uploads an image (photo of a receipt, screenshot of an invoice, or a PDF invoice):
Edge cases to handle:
The user may ask questions like:
Answer these with a clear text summary first. If the answer involves multiple items or a broad view, also generate or update the dashboard artifact.
Confirm destructive changes (deletes). For updates, apply and confirm.
When the user says "show me my dashboard", "how's my spending", "financial overview",
or similar — generate the React dashboard artifact.
See references/dashboard-spec.md for the full dashboard specification.
Users can set up recurring transactions so subscriptions and regular expenses don't need to be logged manually each month.
Setting up a recurring transaction:
How recurring works in the dashboard:
bk:recurring on loadnext_due <= today and auto_log = true generate a
transaction automatically, then advance next_due to the next cycleFrequency calculations:
Edge cases:
active: false but
keep the rule for historical referenceStore budget data and reflect it in the dashboard as budget-vs-actual bars.
When the user asks for a P&L, profit/loss statement, or monthly financial summary:
PROFIT & LOSS STATEMENT [Company Name] — [Month Year] ================================ REVENUE Product Revenue $X,XXX.XX Consulting & Services $X,XXX.XX Other Income $X,XXX.XX ───────────────────────────────── TOTAL REVENUE $XX,XXX.XX EXPENSES SaaS & Software $X,XXX.XX Payroll & Contractors $X,XXX.XX Marketing & Ads $X,XXX.XX [... other categories with non-zero amounts] ───────────────────────────────── TOTAL EXPENSES $XX,XXX.XX ═════════════════════════════════ NET INCOME $XX,XXX.XX ═════════════════════════════════ NOTES - Largest expense category: [category] ([%] of total) - vs. previous month: expenses [up/down] [%] - Outstanding receivables: $X,XXX ([count] invoices) - Outstanding payables: $X,XXX ([count] bills)
- Also offer a comparison to the previous month if data exists
- If the user asks for a specific format (CSV, Excel), generate that instead
- Footer: "This is an informational summary, not a GAAP-compliant statement."
The bookkeeper proactively surfaces important financial events. Alerts are checked and generated whenever the dashboard loads or the user interacts with the skill.
Alert triggers:
| Trigger | Severity | Message |
|---|---|---|
| Invoice past due_date, status != paid | critical | "Invoice {#} to {client} (${amount}) is {N} days overdue" |
| Category spend > budget limit | critical | "{Category} spending exceeded your ${limit} budget by ${over}" |
| Category spend > 80% of budget | warning | "{Category} spending is at {pct}% of your ${limit} budget" |
| Recurring charge due in next 3 days | info | "Upcoming: {vendor} ${amount} due on {date}" |
How alerts appear:
Overdue auto-detection:
When loading transactions, scan all payables and receivables. If due_date < today
and status is still "unpaid" or "partial", automatically update status to
"overdue" and generate an alert.
For startups operating internationally or paying for services in foreign currencies.
Base currency: Stored in bk:settings as base_currency (default: "USD").
The user can change this: "Set my base currency to EUR".
Logging foreign currency transactions:
Exchange rate handling:
Supported currency symbols for parsing: $, €, £, ¥, ₹, ₩, A$, C$, CHF, SEK, NOK, DKK, and 3-letter ISO codes
Use these keys in window.storage (personal, shared=false):
| Key | Value | Description |
|---|---|---|
bk:transactions |
JSON array of all transactions | Main data store |
bk:budgets |
JSON object of monthly budgets | Budget targets |
bk:categories |
JSON array of custom categories | User-added categories |
bk:settings |
JSON object | Currency, fiscal year start, company name |
bk:recurring |
JSON array of recurring rules | Subscription tracking |
bk:alerts |
JSON array of alert objects | Active/dismissed alerts |
Important: Batch related data into single storage keys to minimize API calls. Load all data on mount, save after changes.
If there's no existing data in storage (the user has never used the skill before):
For the full dashboard layout, design guidelines, and component details,
read references/dashboard-spec.md.
npx clawhub@latest install startup-bookkeepernpx clawhub@latest install startup-bookkeeper리뷰를 작성하려면 로그인
아직 리뷰가 없습니다. 첫 번째로 경험을 공유해 보세요!