A complete QuickBooks Online direct API integration skill for OpenClaw providing full access to accounting, invoicing, customer management, inventory, payments, and financial reporting through the Intuit QuickBooks API.
Overview
This skill enables OpenClaw to interact with QuickBooks Online for:
Customer & Vendor Management: Create and manage business relationships
Invoicing: Generate, send, and track invoices
Payments: Record and reconcile payments
Inventory: Manage products, services, and stock levels
Execute multiple operations in a single batch request.
Parameters:
operations (required): Array of batch operations
Example:
{"operations":[{"bId":"bid1","operation":"create","entity":"Customer","data":{"DisplayName":"Customer 1"}},{"bId":"bid2","operation":"query","query":"SELECT * FROM Invoice WHERE Balance > 0"}]}
Usage Examples
Create and Send an Invoice Workflow
1. First, create or find a customer:
"Find customer with name 'Acme Corp' using qb_query_customers"
2. Create an invoice:
"Create an invoice for customer ID 123 with consulting services
for 10 hours at $150/hour, due in 30 days"
3. Send the invoice:
"Send invoice 456 to billing@acme.com"
Financial Reporting Workflow
1. Get month-end reports:
"Show me the profit and loss for January 2026"
2. Check cash flow:
"What's the cash flow for last quarter?"
3. Review outstanding receivables:
"Show me the aged receivables report"
Inventory Management Workflow
1. Check low stock items:
"Query items where quantity on hand is less than 10"
2. Create reorder purchase order:
"Create a purchase order for vendor 789 to reorder low stock items"
3. Update item prices:
"Update the price of item 'Widget Pro' to $299.99"
SQL Query Syntax
QuickBooks uses a SQL-like query language:
Basic Query
SELECT*FROM Customer WHERE Active =true
With Conditions
SELECT*FROM Invoice WHERE Balance >0AND DueDate <'2026-03-01'
Pattern Matching
SELECT*FROM Customer WHERE DisplayName LIKE'%Corp%'
Ordering Results
SELECT*FROM Invoice ORDERBY TxnDate DESC
Limiting Results
SELECT*, MAXRESULTS 50FROM Customer
Multiple Conditions
SELECT*FROM Item WHERE Type ='Inventory'AND QtyOnHand <10
Error Handling
The skill provides detailed error messages:
Authentication Errors: "Not authenticated. Please run qb_authenticate first."
API Errors: Full QuickBooks error details with status codes
Validation Errors: Missing required fields or invalid data
Rate Limit Errors: "Too Many Requests - retry after delay"
Configuration
All configuration is stored in config.json. This file contains both your app credentials (Client ID and Secret) and the OAuth tokens that are saved after authentication.
API Environment
The skill supports both Sandbox and Production environments via the api_environment setting in config.json:
sandbox (default): QuickBooks Sandbox API for development and testing
production: QuickBooks Production API for live company data (requires app verification)
To switch environments, update config.json:
{"api_environment":"sandbox"// or "production"}
Important: Production mode requires your app to be verified by Intuit. Start with sandbox for development.
Security Considerations
⚠️ Credential Storage: This skill stores OAuth tokens and client secrets in plaintext in config.json on your local filesystem. To enhance security:
Set restrictive file permissions on config.json (read/write for owner only)
Never commit config.json to version control (included in .gitignore)
Store the skill directory in a secure location
Regularly rotate your client secrets in the QuickBooks Developer Portal
Consider encrypting your disk or using a secure secret management solution
Do not enable autoStart until you've verified the skill behaves as expected
Rate Limits
Sandbox: 500 requests/minute per app
Production: Varies by subscription (500-1000/minute)
The skill automatically handles rate limiting with proper error messages.
Security
OAuth2 authentication (no password storage)
Tokens stored in config.json (excluded from git)
Automatic token refresh
Secure HTTPS API communication
No credentials in code
Troubleshooting
"Not authenticated" Error
Run qb_authenticate with your credentials.
"Token refresh failed"
Delete config.json and re-authenticate.
"Invalid redirect URI"
Ensure redirect URI in config matches your QuickBooks app settings.
Port 3000 Already in Use
Change port in code or kill the process using port 3000.