skills/accounting-reconciliation/SKILL.md
Reusable accounting and tax-prep workflow for OpenClaw that performs weekly invoice reconciliation from email, monthly Stripe income reconciliation, jurisdiction-aware tax preparation support, Supabase data persistence, external file storage with Google Drive as the recommended backend, and on-demand reporting without hardcoded business identifiers.
npx skillsauth add hollaugo/prompt-circle-skills accounting-reconciliationInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Use this skill when a user needs accounting operations automated in OpenClaw with a generic, reusable process:
Never hardcode account emails, workspace identifiers, channels, or vendor-specific IDs into this skill implementation.
Expect these to come from environment/config, not hardcoded values:
SUPABASE_URLSUPABASE_SECRET_KEYRECON_WORKSPACE_KEY (logical tenant or workspace key)RECON_TZ (IANA timezone, for example America/Toronto)RECON_NOTIFICATION_CHANNEL (slack, telegram, or email)RECON_NOTIFICATION_DESTINATION (channel id, chat id, or email destination)RECON_FILE_STORE_PROVIDER (google-drive recommended; supabase-storage supported as fallback)RECON_FILE_STORE_ROOT_PATH (top-level Drive folder name/path or provider-specific root path)RECON_FILE_STORE_PROVIDER=google-driveSUPABASE_STORAGE_BUCKET only when RECON_FILE_STORE_PROVIDER=supabase-storageUse this baseline schema so file storage and accounting records stay linked and idempotent.
Core tables:
accounting.vendors
id (uuid pk)workspace_key (text)vendor_name (text)(workspace_key, vendor_name)accounting.invoices
id (uuid pk)workspace_key, source_system, source_account, source_message_idvendor_id (fk -> accounting.vendors.id) + vendor_name (denormalized)invoice_date, currency, total_amountfile_store_provider, file_store_root_path, file_store_path, external_file_id, external_web_url, file_name, file_sha256parsed_confidence, raw_extraction(workspace_key, source_system, source_message_id, file_store_provider, file_store_path)accounting.income_events
id (uuid pk)workspace_key, source_system (stripe)stripe_invoice_id (unique per workspace)amount_gross, amount_tax, amount_net, currencypaid_at, raw_payload(workspace_key, stripe_invoice_id)accounting.report_snapshots
id (uuid pk)workspace_key, report_type, period_start, period_end, currencybody_markdown, body_jsondelivered_channel, delivered_toaccounting.job_runs
id (uuid pk)workspace_key, job_key, statusrows_inserted, rows_updated, rows_skippedreport_id (fk -> accounting.report_snapshots.id)error_message, contextTax-prep tables:
accounting.tax_profiles
accounting.tax_periods
accounting.filing_obligations
accounting.expense_allocations
accounting.asset_register
accounting.sales_tax_filings
accounting.owner_compensation_events
accounting.shareholder_loan_ledger
accounting.tax_adjustments
accounting.workpapers
Suggested views:
accounting.v_weekly_expenseaccounting.v_monthly_incomeaccounting.v_open_filing_obligationsaccounting.v_period_profitabilityStorage path convention:
${RECON_FILE_STORE_ROOT_PATH}/<yyyy>/<mm>/<source-message-id>/<filename>Recommended default:
google-drive as file storeTax and Invoices/2026/03/...Canonical SQL implementation is in:
references/supabase-schema.sqlreferences/supabase-migration-tax-prep.sql for upgrading an existing live projectTarget schedule: Friday at 11:00 PM in RECON_TZ.
Invoice) on matching messages.pdf, image, or common office docs).<file-store-root>/<yyyy>/<mm>/<source-message-id>/<filename>accounting.job_runs.accounting.report_snapshots.Target schedule: monthly (usually day 1 at 11:00 PM in RECON_TZ).
accounting.income_events keyed by Stripe invoice id plus workspace key.accounting.job_runs.accounting.report_snapshots.Support these report families using Supabase as source of truth:
For each on-demand request:
invoices, income_events, optional adjustments).json) and narrative (markdown) forms.accounting.report_snapshots and optionally deliver.Use the reconciliation data as the evidence layer, then add tax-specific classification and review state before any filing output is treated as ready.
accounting.tax_profiles.accounting.filing_obligations.accounting.expense_allocations for mixed-use costs such as home office, internet, software bundles, meals, and travel.accounting.asset_register instead of forcing them into period expenses.accounting.workpapers.needs_review or equivalent status.Use this when the user is one or more years behind on taxes or bookkeeping.
accounting.tax_periods for each missing year.accounting.filing_obligations rows before any reconstruction begins.accounting.workpapers.accounting.expense_allocations with needs_review status.Use isolated cron sessions and make delivery explicit.
Weekly invoice reconciliation (Friday 11 PM):
openclaw cron add \
--name "Weekly Invoice Reconciliation" \
--cron "0 23 * * 5" \
--tz "${RECON_TZ}" \
--session isolated \
--announce \
--channel "${RECON_NOTIFICATION_CHANNEL}" \
--to "${RECON_NOTIFICATION_DESTINATION}" \
--message "Run weekly invoice reconciliation: fetch new invoice emails, ensure Invoice label, extract vendor/amount/date, upload files to the configured external file store with Google Drive preferred, upsert Supabase records, and deliver accountant-style weekly expense summary."
Monthly income reconciliation (day 1 at 11 PM):
openclaw cron add \
--name "Monthly Income Reconciliation" \
--cron "0 23 1 * *" \
--tz "${RECON_TZ}" \
--session isolated \
--announce \
--channel "${RECON_NOTIFICATION_CHANNEL}" \
--to "${RECON_NOTIFICATION_DESTINATION}" \
--message "Run monthly Stripe income reconciliation: pull paid invoices, upsert income records in Supabase, and deliver accountant-style monthly income report."
references/supabase-schema.sqlreferences/supabase-migration-tax-prep.sqlreferences/supabase-migration-external-file-store.sqlreferences/setup-playbook.mdreferences/report-templates.mdtools
Create, recreate, redesign, publish, and operate websites managed from Notion, including blogs, CMS-driven sections, widgets, filtering/search interactions, SEO/AEO/GEO improvements, and lightweight deployment workflows. Use when a user wants one skill that can both build and manage a website over time, with OpenClaw-friendly automation but no hard dependency on OpenClaw-specific tooling.
tools
Connect OpenClaw to the Shopify Admin API and run agent-driven store workflows. Covers authentication setup (client credentials grant), token management, and eight ready-to-run use cases: PDP rewrite, weekly store digest, competitive intelligence, abandoned cart recovery, flash sale planner, low stock alert, customer VIP report, and product launch prep. Use this skill when the user asks about connecting OpenClaw to Shopify, automating any Shopify store task, setting up Shopify API credentials, or running any of the eight use cases.
testing
Deploy, harden, and operate OpenClaw across local and hosted environments (Fly.io, Render, Railway, Hetzner, GCP) with secure defaults, channel setup guidance, integration onboarding, and troubleshooting workflows grounded in official OpenClaw documentation. Use when users need install/deploy help, migration support, runtime hardening, memory/agent operations tuning, or incident response.
tools
Build new MCP Apps (MCP servers with React UI output) using @modelcontextprotocol/ext-apps and the MCP SDK. Use when asked to scaffold or implement MCP App servers, add UI-rendering tools/resources, or migrate a standard MCP server to an MCP App with Vite single-file UI bundles.