- Install flow now assumes one admin-distributed service account JSON shared across the team. Each user creates their own Google Sheet and shares it with the SA email; per-user GCP project setup is gone. - DEPLOY.md: a step-by-step walkthrough for non-technical users following along with an AI agent (Terminal basics, screenshots-worth of expected output, common-error table). - scripts/append_row.py: sheet_id field accepts either a bare ID or a full Google Sheets URL; normalize_sheet_id() extracts the ID via regex. - scripts/setup.md: rewritten as an admin guide (one-time GCP setup, key rotation) plus a troubleshooting reference. - LICENSE: MIT (previously "private — internal use"). README license sections updated to match. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
AutoACCT for OpenClaw
English | 简体中文
An OpenClaw skill that turns a receipt image (optionally with a caption) into a structured row in a Google Sheet, with automatic HKD conversion.
Intended to be invoked manually inside OpenClaw today, and wired up to a WhatsApp webhook later.
What it does
- Reads a receipt / invoice / payment-screenshot image via vision.
- Extracts: date, merchant, category, amount, currency, payment method, line items, raw OCR, caption note.
- Converts the amount to HKD at that day's ECB reference rate via frankfurter.app (free, no API key).
- Appends one row to a configured Google Sheet (14 columns — see
schema.md). - Replies with the row and flags any field it had to guess.
Install (end users)
Your admin will have given you two things: a service-account JSON key file (e.g. autoacct-sa.json) and a service-account email (e.g. autoacct@your-project.iam.gserviceaccount.com). If you don't have them, ask your admin first.
Follow the 4 steps below. Takes ~5 minutes.
Not comfortable with the terminal? Use
DEPLOY.mdinstead — same install, but written for non-technical users with an AI agent walking them through.
Step 1 — Clone the skill and install Python deps
git clone https://git.deepknow.site/Knowit/AutoACCT.git ~/.openclaw/workspace/skills/AutoACCT
pip install google-api-python-client google-auth
Step 2 — Drop the admin's JSON key into ~/.config/gcp/
mkdir -p ~/.config/gcp
mv ~/Downloads/autoacct-sa.json ~/.config/gcp/autoacct-sa.json
chmod 600 ~/.config/gcp/autoacct-sa.json
(Replace ~/Downloads/autoacct-sa.json with wherever you saved the file your admin sent.)
Step 3 — Create your Google Sheet and share it with the service account
- Open https://sheets.new (creates a fresh blank sheet).
- Title it (e.g.
My AutoACCT Expenses). - Note the tab name at the bottom-left —
Sheet1(English UI) or工作表1(Chinese UI). You'll paste it intoconfig.jsonin Step 4. - Click cell A1, then paste this one line (the tabs split the headers across A–N automatically):
Date Merchant Category Amount Currency Amount (HKD) FX Rate FX Date Payment Method Line Items Raw OCR Note Receipt Logged At - Click Share (top right) → paste the service-account email your admin gave you → role Editor → Send (you can uncheck "Notify people").
- Copy the full URL from your browser's address bar. Something like:
https://docs.google.com/spreadsheets/d/1abc...xyz/edit#gid=0(The script extracts the sheet ID for you — either the full URL or just the bare ID works.)
Step 4 — Write config.json
cd ~/.openclaw/workspace/skills/AutoACCT
cp config.example.json config.json
Open config.json and fill in sheet_id (paste the URL from Step 3.6) and worksheet (the tab name from Step 3.3):
{
"sheet_id": "https://docs.google.com/spreadsheets/d/1abc...xyz/edit",
"worksheet": "Sheet1",
"service_account_path": "~/.config/gcp/autoacct-sa.json",
"hkd_fx_provider": "frankfurter"
}
Common pitfall: if your Google Sheets UI is in Chinese, the default tab is named
工作表1(notSheet1). Put"worksheet": "工作表1"exactly. A mismatched tab name throwsHTTP 400: Unable to parse range.
Sanity check
echo '{"date":"2026-04-20","merchant":"TEST","category":"Other","amount":1,"currency":"HKD","amount_hkd":1,"fx_rate":1,"fx_date":"2026-04-20"}' | python3 ~/.openclaw/workspace/skills/AutoACCT/scripts/append_row.py
Success looks like: OK 'Sheet1'!A2:N2 and a new row appears in your sheet. Delete the TEST row when you're done.
If you hit an error, see scripts/setup.md for troubleshooting.
Admin setup (one time, done by you before distributing)
Before users can run the steps above, you (the admin) create one shared service account and distribute the JSON to users. See scripts/setup.md for the full admin guide — short version:
- Create a GCP project, enable Sheets API, create a service account, download the JSON key.
- Distribute the JSON file + the service-account email to your users via a secure channel (1Password / Bitwarden / encrypted email — never commit to git).
- Tell users to follow the 4 steps above.
Use
In an OpenClaw session, drop a receipt image in and say "log this" (or similar). The skill auto-triggers on receipt-image requests — no slash command needed.
Caption is optional; use it to add context (payment method, split, category hint, free-text note).
Files
| File | Purpose |
|---|---|
SKILL.md |
Entry — OpenClaw reads this to invoke the skill |
categories.md |
Fixed category list (14 categories) |
schema.md |
Google Sheet column order (A–N) |
config.example.json |
Template → copy to config.json (gitignored) |
scripts/fx_convert.py |
Currency → HKD via frankfurter.app |
scripts/append_row.py |
Writes one row to Google Sheets |
scripts/setup.md |
Admin setup guide + troubleshooting |
DEPLOY.md |
Step-by-step install guide for non-technical users |
License
MIT © 2026 Knowit