Agent skill

QuickBooks Online Integration

by hewi333 in hewi333/Mom-n-Pop-Skills

Connects a small business to QuickBooks Online for customers, estimates, invoices and payments, using Intuit OAuth 2.0 with token refresh and sandbox or production setups.

MITAuto-check passedBackend & APIs

Install QuickBooks Online Integration

skills CLI
$ npx skills add hewi333/Mom-n-Pop-Skills --skill quickbooks-online -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install hewi333/Mom-n-Pop-Skills quickbooks-online --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/hewi333/Mom-n-Pop-Skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/quickbooks-online .claude/skills/quickbooks-online && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
quickbooks-online
GitHub stars
122
Token cost
~1.9k tokens
SKILL.md length
345 words
Files
4 (incl. references)
Skills in repo
13
Repo updated
First seen
Licence
MIT

At a glance

Connects a small business to QuickBooks Online for customers, estimates, invoices and payments, using Intuit OAuth 2.0 with token refresh and sandbox or production setups.

  • Works in 4 steps: User visits:… → Callback receives code + realmId → Exchange code for tokens: POST… → …
  • Creating and sending estimates in QuickBooks Online from job details
  • SKILL.md covers Overview, When to Use, Don't Use For and Authentication (OAuth 2.0), plus 5 more sections
  • Reaches appcenter.intuit.com and oauth.platform.intuit.com; needs QBO_CLIENT_SECRET

What it does

The skill is designed for agent-mediated use, where an owner texts a command and the agent calls the QuickBooks API. The listed jobs are creating and sending estimates from estimator output, converting accepted estimates into invoices, recording payments that arrive through a Stripe webhook, syncing customers between a CRM and QuickBooks, and pulling weekly figures such as AR aging, revenue and outstanding estimates.

Authentication follows Intuit's OAuth 2.0 flow, with the client ID, secret and redirect URI held in environment variables and tokens stored locally with the realm ID. Access tokens last 1 hour and refresh tokens 101 days. On a 401 the agent refreshes, retries once and forces re-authorization if the refresh fails. Reference files cover the OAuth flow, the API and field mapping. It is not meant for complex inventory, multi-currency or multi-entity accounting, or payroll and tax filing.

When your agent uses it

  • Creating and sending estimates in QuickBooks Online from job details
  • Converting a booked estimate into an invoice
  • Recording a card payment from a Stripe webhook in QuickBooks
  • Syncing CRM customers with QuickBooks customers
  • Pulling AR aging and revenue numbers for a weekly summary

Example prompts

  • “Create an estimate for the Alvarez kitchen job and email it to the customer.”
  • “Turn the accepted estimate for the Alvarez job into an invoice.”
  • “Record the Stripe payment that just came in against the open invoice.”
  • “Give me this week's AR aging and outstanding estimates.”

Requirements

  • An Intuit Developer app with a client ID, client secret and redirect URI
  • A QuickBooks Online company, either sandbox or production

Workflow steps

4 steps, taken from the first numbered list in SKILL.md.

  1. User visits: https://appcenter.intuit.com/connect/oauth2?client_id={id}&redirect_uri={uri}&scope=com.intuit.quickbooks.accounting&response_…
  2. Callback receives code + realmId
  3. Exchange code for tokens: POST https://oauth.platform.intuit.com/oauth2/v1/tokens/bearer
  4. Store tokens + realm_id

What it can do on your machine

Read from SKILL.md and the folder at commit 70a2273. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    No scripts in the folder and no shell commands in SKILL.md (its code samples are python).

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Hosts in commands or code, which the agent is likely to contact:

    • appcenter.intuit.com
    • oauth.platform.intuit.com

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names these keys or tokens, usually read from environment variables:

    • QBO_CLIENT_SECRET

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

QuickBooks Online Integration loads about 1.9k tokens when it runs, and up to ~5.2k if it reads all its reference files. Until then it costs about 47 tokens; SKILL.md has 345 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~47
When it runs · the whole SKILL.md, loaded when a task matches
~1.9k
With references · SKILL.md plus every file in references/, read only if the agent opens them
~5.2k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from hewi333/Mom-n-Pop-Skills at commit 70a2273, republished under its MIT licence (© hewi333). 345 words, ~1,903 tokens.

Download SKILL.mdSave it as .claude/skills/quickbooks-online/SKILL.md (or your agent's skills folder). This skill also uses 3 other files; get the full folder from GitHub.
name
quickbooks-online
description
Use when integrating with QuickBooks Online for invoicing, estimates, customers, and payments. Handles OAuth 2.0 auth, token refresh, and sandbox/production environments.
version
1.0.0
author
Hermes Agent
license
MIT

QuickBooks Online Integration Skill

Overview

Integrates a small business with QuickBooks Online for customer management, estimates, invoices, and payment tracking. Uses Intuit's OAuth 2.0 flow with automatic token refresh. Designed for agent-mediated use: owners text commands, agent executes QB API calls.

When to Use

  • Create/send estimates from estimator-engine output
  • Convert estimates to invoices when job is booked
  • Record payments (Stripe webhook → QB payment)
  • Sync customers between CRM and QB
  • Pull reports for weekly owner summary (AR aging, revenue, outstanding estimates)

Don't Use For

  • Complex inventory/assembly tracking
  • Multi-currency or multi-entity accounting
  • Payroll or tax filing

Authentication (OAuth 2.0)

Required Credentials (Environment Variables)
QBO_CLIENT_ID=*** From Intuit Developer Dashboard
QBO_CLIENT_SECRET= # From Intuit Developer Dashboard
QBO_REDIRECT_URI= # e.g., https://your-domain.com/qbo/callback
QBO_ENVIRONMENT= # "sandbox" or "production"
QBO_COMPANY_ID= # Realm ID (set after first auth)
Token Storage
  • Store access_token + refresh_token + realm_id in ~/.hermes/qbo_tokens.json
  • Auto-refresh: access_token expires in 1 hour; refresh_token expires in 101 days
  • On 401: refresh token, retry once, then force re-auth if refresh fails
Auth Flow
  1. User visits: https://appcenter.intuit.com/connect/oauth2?client_id={id}&redirect_uri={uri}&scope=com.intuit.quickbooks.accounting&response_type=code&state={random}
  2. Callback receives code + realmId
  3. Exchange code for tokens: POST https://oauth.platform.intuit.com/oauth2/v1/tokens/bearer
  4. Store tokens + realm_id

Core API Operations

Customers
python
# Create customer (from CRM lead)
POST /v3/company/{realmId}/customer
{
  "DisplayName": "John Smith",
  "PrimaryEmailAddr": {"Address": "john@email.com"},
  "PrimaryPhone": {"FreeFormNumber": "555-555-0123"},
  "BillAddr": {"Line1": "123 Main St", "City": "[CITY]", "CountrySubDivisionCode": "[STATE]", "PostalCode": "[ZIP]"},
  "Notes": "Lead from referral"
}

# Query customer
GET /v3/company/{realmId}/query?query=SELECT * FROM Customer WHERE DisplayName='John Smith'
Estimates
python
# Create estimate (from estimator-engine output)
POST /v3/company/{realmId}/estimate
{
  "CustomerRef": {"value": "123"},
  "TxnDate": "2026-01-15",
  "ExpirationDate": "2026-02-14",
  "Line": [
    {
      "DetailType": "SalesItemLineDetail",
      "Amount": 3125.00,
      "Description": "Service - 2500 sqft, vaulted ceilings, moderate tobacco",
      "SalesItemLineDetail": {"ItemRef": {"value": "1", "name": "Base Treatment"}, "Qty": 2500, "UnitPrice": 1.25}
    },
    {"DetailType": "SalesItemLineDetail", "Amount": 350.00, "Description": "Cigarette >5yrs extended treatment", "SalesItemLineDetail": {"ItemRef": {"value": "2"}, "Qty": 1, "UnitPrice": 350}},
    {"DetailType": "SalesItemLineDetail", "Amount": 75.00, "Description": "Travel surcharge - Premium Region", "SalesItemLineDetail": {"ItemRef": {"value": "3"}, "Qty": 1, "UnitPrice": 75}}
  ],
  "CustomerMemo": {"value": "Valid 30 days. 50% deposit to schedule."}
}

# Send estimate email
POST /v3/company/{realmId}/estimate/{estimateId}/send?sendTo={email}
Invoices
python
# Create invoice from accepted estimate
POST /v3/company/{realmId}/invoice
{
  "CustomerRef": {"value": "123"},
  "TxnDate": "2026-01-20",
  "DueDate": "2026-02-03",
  "Line": [...same line items...],
  "Deposit": 1562.50,  # 50% deposit collected via Stripe
  "CustomerMemo": {"value": "Balance due upon completion"}
}

# Get invoice PDF
GET /v3/company/{realmId}/invoice/{invoiceId}/pdf
Payments
python
# Record payment (from Stripe webhook)
POST /v3/company/{realmId}/payment
{
  "CustomerRef": {"value": "123"},
  "TotalAmt": 1562.50,
  "PaymentRefNum": "pi_3StripePaymentIntentId",
  "PaymentMethodRef": {"value": "5"},  # Credit Card
  "DepositToAccountRef": {"value": "35"},  # Undeposited Funds
  "Line": [{"Amount": 1562.50, "LinkedTxn": [{"TxnId": "456", "TxnType": "Invoice"}]}]
}
Items (Products/Services)
python
# Ensure service items exist (run once on setup)
# Base Treatment (per sqft)
# Cigarette Extended Treatment (each)
# Travel Surcharge (each)
# HVAC Duct Treatment (each)
# High Rise Surcharge (each)
# Region Surcharge (each)

Agent Integration Patterns

"Create estimate for John Smith at 123 Main St..."
python
# 1. Look up or create customer in QB
# 2. Call estimator-engine with property details
# 3. Transform estimator output → QB estimate line items
# 4. Create estimate in QB
# 5. Email PDF to customer
# 6. Create CRM estimate record (status=sent)
# 7. Create follow-up task (3 days)
"Customer accepted estimate #EST-0001-0042"
python
# 1. Update CRM estimate status=accepted
# 2. Create invoice in QB (copy line items)
# 3. Generate Stripe Payment Link for 50% deposit
# 4. Text customer deposit link
# 5. Create job scheduled task for the owner
"Record payment from Stripe webhook"
python
# 1. Verify webhook signature
# 2. Find invoice by payment_intent metadata
# 3. Create QB Payment linked to invoice
# 4. Update CRM invoice status=paid
# 5. Notify owners via Telegram

Common Pitfalls

  1. Token expiry — Always wrap API calls in try/except 401 → refresh → retry
  2. Sandbox vs production — Different base URLs, different realm IDs, different client credentials
  3. Minor version — Always send minorversion=75 header for latest API
  4. Idempotency — Use RequestId header for estimate/invoice creation to avoid duplicates
  5. Rate limits — 500 requests/minute; implement exponential backoff
  6. Custom fields — QB custom fields need definition before use; use Notes field for flexibility
  7. Tax — Many services are non-taxable; ensure items are marked non-taxable per your local tax rules

Verification Checklist

  • OAuth flow completes and stores tokens
  • Token refresh works (wait 1hr or force expiry)
  • Create customer → appears in QB UI
  • Create estimate with line items → PDF renders correctly
  • Send estimate email → customer receives it
  • Convert estimate to invoice → amounts match
  • Record payment → invoice shows paid
  • Weekly report pulls: outstanding estimates, AR aging, revenue MTD

One-Shot Recipes

"Sync new CRM lead to QuickBooks"
python
customer = qbo.upsert_customer(
    name="Jane Doe",
    email="jane@email.com",
    phone="555-555-0199",
    address="456 Palm Ave, [CITY], [STATE] [ZIP]",
    notes="Referral - Example Realty"
)
"Push estimator output to QB estimate"
python
estimate = qbo.create_estimate(
    customer_id=customer.id,
    line_items=estimator_output.line_items,  # [{desc, qty, unit_price, total}]
    txn_date="2026-01-15",
    expiration_date="2026-02-14",
    memo="Valid 30 days. 50% deposit to schedule."
)
qbo.send_estimate(estimate.id, customer.email)
"Weekly owner report data"
python
report = qbo.get_weekly_report(realm_id)
# Returns: {outstanding_estimates: [...], ar_aging: {...}, revenue_mtd: 45000, payments_this_week: [...]}

© hewi333, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 3 other files (references) in skills/quickbooks-online of hewi333/Mom-n-Pop-Skills.

  • SKILL.md
  • references/oauth2-flow.md
  • references/qbo-api.md
  • references/qbo-mapping.md

Open the folder on GitHubat commit 70a2273

Compare with similar skills

QuickBooks Online Integration next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

QuickBooks Online Integration compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
QuickBooks Online Integration this skillhewi333/Mom-n-Pop-Skills122—~1.9kAutomated safety check: PassMIT
XeroCraftOS-dev/CraftBot392—~2kAutomated safety check: PassMIT
OneCLI Gatewaynanocoai/nanoclaw31k—~856Automated safety check: PassMIT
Canva Reference Architecturejeremylongshore/tons-of-skills-marketplace2.8k—~1kAutomated safety check: PassMIT
Ramp Reference Architecturejeremylongshore/tons-of-skills-marketplace2.8k—~1.3kAutomated safety check: PassMIT
Firecrawl Build Onboardingfirecrawl/firecrawl190k1 repos~1.4kAutomated safety check: NotesISC

Similar skills

  • Xero

    CraftOS-dev/CraftBot

    Xero API integration with managed OAuth. An agent skill from CraftOS-dev/CraftBot.

    392 GitHub stars~2k tokensUpdated yesterday
    Backend & APIsAuto-check passed
  • OneCLI Gateway

    nanocoai/nanoclaw

    Explains how to call external APIs through the OneCLI proxy, which injects stored credentials into outgoing HTTPS requests so the agent never handles keys.

    31k GitHub stars~856 tokensUpdated today
    Backend & APIsAuto-check passed
  • Canva Reference Architecture

    jeremylongshore/tons-of-skills-marketplace

    Implement a Canva Connect backend reference architecture with policy, OAuth, job reconciliation, and privacy-safe operations.

    2.8k GitHub stars~1k tokensUpdated yesterday
    Backend & APIsAuto-check passed
  • Ramp Reference Architecture

    jeremylongshore/tons-of-skills-marketplace

    Design a production Ramp integration with isolated OAuth clients, typed API adapters, durable webhook ingestion, reconciliation workers, and audited financial writes.

    2.8k GitHub stars~1.3k tokensUpdated yesterday
    Backend & APIsAuto-check passed
  • Firecrawl Build Onboarding

    firecrawl/firecrawl

    Gets Firecrawl working in a project: signs you in through the browser, saves FIRECRAWL_API_KEY to .env and picks the first SDK or REST path.

    190k GitHub starsUsed in 1 repo~1.4k tokens
    Backend & APIsAuto-check: notes
  • OmniRoute Provider Management

    diegosouzapw/OmniRoute

    Manages AI provider connections, API keys, OAuth flows and connection tests through OmniRoute's REST API across its 327-provider catalog.

    75k GitHub stars~2.4k tokensUpdated today
    Backend & APIsAuto-check passed

More from hewi333/Mom-n-Pop-Skills

All 13 skills in this repo
  • Construction Business Agent

    hewi333/Mom-n-Pop-Skills

    Runs a construction company's back office by bridging Gmail, Drive and JobTread: routing email attachments to the PM system, checking project status and sending daily Telegram briefings.

    122 GitHub stars~2.3k tokensUpdated 29 days ago
    Auto-check: notes
  • Lead-to-Payment Sales Flow

    hewi333/Mom-n-Pop-Skills

    Runs a small service business lead from intake through estimate, owner approval over Telegram, Stripe payment link and customer email draft to payment tracking.

    122 GitHub stars~2.8k tokensUpdated 29 days ago
    Auto-check: notes
  • Hermes Production Gateway Operations

    hewi333/Mom-n-Pop-Skills

    Procedures for changing the model, restarting and quietly tuning a live Hermes gateway that serves end-users on messaging platforms such as Telegram.

    122 GitHub stars~2k tokensUpdated 29 days ago
    Auto-check: warnings
  • CRM Lite

    hewi333/Mom-n-Pop-Skills

    A skill your agent uses when tracking customer interactions, managing leads, or building a lightweight CRM for small businesses without dedicated CRM software.

    122 GitHub stars~1.5k tokensUpdated 29 days ago
    Auto-check passed
  • Estimator Engine

    hewi333/Mom-n-Pop-Skills

    A skill your agent uses when calculating service estimates for jobs.

    122 GitHub stars~3.1k tokensUpdated 29 days ago
    Auto-check passed
  • Mailchimp Integration

    hewi333/Mom-n-Pop-Skills

    A skill your agent uses when integrating with Mailchimp for audience management, campaigns, and automation.

    122 GitHub stars~2k tokensUpdated 29 days ago
    Auto-check passed

Questions about QuickBooks Online Integration

What does QuickBooks Online Integration do?

Connects a small business to QuickBooks Online for customers, estimates, invoices and payments, using Intuit OAuth 2.0 with token refresh and sandbox or production setups. The skill is designed for agent-mediated use, where an owner texts a command and the agent calls the QuickBooks API. The listed jobs are creating and sending estimates from estimator output, converting accepted estimates into invoices, recording payments that arrive through a Stripe webhook, syncing customers between a CRM and QuickBooks, and pulling weekly figures such as AR aging, revenue and outstanding estimates.

When should I use QuickBooks Online Integration?

QuickBooks Online Integration fits situations like: creating and sending estimates in QuickBooks Online from job details; converting a booked estimate into an invoice; recording a card payment from a Stripe webhook in QuickBooks; syncing CRM customers with QuickBooks customers.

How do I install QuickBooks Online Integration in Claude Code?

Run `npx skills add hewi333/Mom-n-Pop-Skills --skill quickbooks-online -a claude-code`. Or copy the skill folder (skills/quickbooks-online in hewi333/Mom-n-Pop-Skills) into .claude/skills/quickbooks-online in your project. Claude Code loads it when a task matches its description.

How do I install QuickBooks Online Integration in Codex?

Run `npx skills add hewi333/Mom-n-Pop-Skills --skill quickbooks-online -a codex`. Or copy the skill folder (skills/quickbooks-online in hewi333/Mom-n-Pop-Skills) into .agents/skills/quickbooks-online in your project. Codex loads it when a task matches its description.

Can I use QuickBooks Online Integration in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add hewi333/Mom-n-Pop-Skills --skill quickbooks-online -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/quickbooks-online, .gemini/skills/quickbooks-online, .github/skills/quickbooks-online and .opencode/skills/quickbooks-online in your project.

What does QuickBooks Online Integration need to run?

Going by SKILL.md and its folder, QuickBooks Online Integration needs credentials named QBO_CLIENT_SECRET. Our summary lists: An Intuit Developer app with a client ID, client secret and redirect URI; A QuickBooks Online company, either sandbox or production.

Does QuickBooks Online Integration access the network?

SKILL.md names 2 domains. In commands or code: appcenter.intuit.com and oauth.platform.intuit.com; the agent is likely to contact these when it follows the instructions. This is read from the text; nothing was executed.

Is QuickBooks Online Integration safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does QuickBooks Online Integration use?

QuickBooks Online Integration is published under the MIT licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does QuickBooks Online Integration use?

About 1.9k tokens (SKILL.md is roughly 7.6k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 3.3k tokens, read only when the agent opens those files.

What are the alternatives to QuickBooks Online Integration?

Skills that share tags, products or a category with QuickBooks Online Integration: Xero (CraftOS-dev/CraftBot, 392 stars), OneCLI Gateway (nanocoai/nanoclaw, 31k stars), Canva Reference Architecture (jeremylongshore/tons-of-skills-marketplace, 2.8k stars) and Ramp Reference Architecture (jeremylongshore/tons-of-skills-marketplace, 2.8k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains QuickBooks Online Integration?

hewi333 (a GitHub user) maintains it in hewi333/Mom-n-Pop-Skills, which has 122 GitHub stars. The repository holds 13 skills in this directory. The repository was last updated on September 11, 2026.

Source: hewi333/Mom-n-Pop-Skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.