
Business Pulse
- 1.1k installs
- 23.3k repo stars
- Updated August 5, 2026
- anthropics/knowledge-work-plugins
business-pulse is an agent skill that builds a one-page SMB business snapshot from QuickBooks, HubSpot, PayPal, Calendar, Gmail, and Slack and names the top priority for today.
About
The business-pulse skill delivers a one-page SMB owner brief by pulling live data from every connected connector in parallel. QuickBooks supplies cash, MTD revenue, receivables, and overdue invoices; PayPal or Square cover settlements and sales trends; HubSpot shows pipeline movement; Calendar lists key meetings; Gmail and Slack surface urgent threads. Step two computes AR aging, pipeline coverage, and revenue trend with red-yellow-green thresholds from reference thresholds. Step three flags actionable risks naming specific customers, amounts, and days overdue. Step four composes output from a fixed template, cross-linking signals such as a Slack message tied to a stalled HubSpot deal. Numbers lead with deltas versus prior periods; missing connectors show n/a without blocking the pulse. After presenting once, it optionally offers file save or Slack post with explicit approval for writes.
- Parallel connector pulls across finance, sales, and comms tools.
- Red-yellow-green status on cash, pipeline, and revenue metrics.
- Actionable risk entries name customer, amount, and next step.
- Cross-connector synthesis surfaces the single top priority.
- Graceful fallbacks when QuickBooks or Gmail are unavailable.
Business Pulse by the numbers
- 1,114 all-time installs (skills.sh)
- +87 installs in the week ending Aug 4, 2026 (Skillselion tracking)
- Ranked #436 of 3,282 Productivity & Planning skills by installs in the Skillselion catalog
- Data as of Aug 5, 2026 (Skillselion catalog sync)
business-pulse capabilities & compatibility
- Capabilities
- parallel multi connector data pull · ar aging and pipeline coverage metrics · risk flagging with named records · cross connector priority synthesis · scoped variants for cash only or pipeline only
- Use cases
- planning · data analysis · email
What business-pulse says it does
One prompt, one page. Pull live data from every connected tool, synthesize it into a single scannable brief, and surface the single most important thing to act on today.
npx skills add https://github.com/anthropics/knowledge-work-plugins --skill business-pulseAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 1.1k |
|---|---|
| repo stars | ★ 23.3k |
| Last updated | August 5, 2026 |
| Repository | anthropics/knowledge-work-plugins ↗ |
How is my business doing right now across cash, pipeline, and urgent issues?
Produce a one-page cross-functional business snapshot from QuickBooks, PayPal, HubSpot, Calendar, Gmail, and Slack with the single top priority for today.
Who is it for?
SMB owners who want a Monday brief or quick snapshot without opening six separate tools.
Skip if: Skip when you need deep financial modeling or a single-connector report instead of a cross-functional pulse.
When should I use this skill?
User asks how the business is doing, wants a weekly summary, Monday brief, or says what am I missing.
What you get
A scannable one-page pulse with metric deltas, flagged risks, and the single most important action for today.
- Market signal summaries
- Competitive intelligence context
- Customer sentiment insights
By the numbers
- Listed with 1 install on skills.sh
- Ranked 7448 on skills.sh catalog
Files
Business Pulse
One prompt, one page. Pull live data from every connected tool, synthesize it into a single scannable brief, and surface the single most important thing to act on today. Do the work — don't ask the user to help find the data.
Step 1 — Pull data in parallel
Dispatch all connector calls in a single parallel batch — see reference/data_sources.md for the exact tool-to-metric mapping. Do not pull serially; latency turns a 30-second skill into a painful wait.
Connectors to attempt simultaneously:
- QuickBooks — cash balance, MTD revenue, outstanding receivables, overdue invoices
- PayPal / Square — 7-day settlements, sales trend, failed/pending transactions
- HubSpot — pipeline by stage, deals moved/closed, deals gone cold, new leads
- Google Calendar — key meetings, deadlines, events this week and next 7 days
- Gmail — threads flagged urgent, customer complaints, time-sensitive requests
- Slack / Teams — urgent internal signals, threads needing owner attention
- Intercom / Zendesk — open tickets, escalations (if connected)
- Shopify / Square — fulfillment issues (if connected)
If a connector errors or returns no data, record it internally and move on. Never block the pulse on a single bad integration.
QuickBooks fallback: if QBO returns an unexpected state (account not connected, sync pending, empty response), mark the Cash section "n/a — QuickBooks unavailable" and proceed. Do not retry or ask the user to reconnect.
Gmail fallback: Gmail auth is intermittently flaky. If the call errors, skip the Watch List section silently and note "Gmail unavailable" in the appendix — do not surface an error mid-pulse.
Step 2 — Compute metrics
Read reference/thresholds.md for red/yellow/green cutoffs. Compute:
- AR aging — open QuickBooks invoices grouped by days since due date (0–30, 31–60, 61+)
- Pipeline coverage — HubSpot weighted pipeline ÷ monthly revenue target
- Revenue trend — this month's QBO revenue vs. prior month (or 7-day PayPal/Square vs. prior 7 days)
Assign a 🟢/🟡/🔴 status to each section. If a source returned nothing, mark the metric "n/a" and note it in the appendix.
Step 3 — Flag risks proactively
Scan for actionable items. Every risk entry must name a specific record and a next step — "some overdue invoices" is useless; "$3,400 from Acme Corp, 47 days overdue, no response since Mar 12" is actionable.
- QuickBooks invoices past due > 30 days — name customer, amount, days overdue
- HubSpot deals with no activity in 7+ days, or close date in past but still open
- Gmail threads marked urgent or containing "escalation," "complaint," "cancel," "refund"
- Failed or pending PayPal/Square transactions > $500
Step 4 — Compose the output
Use the exact template in reference/output_template.md. Include only sections where real data exists — omit headers for connectors that weren't available. Adapt depth to context: a casual "how are we doing" gets a fuller report; "quick snapshot before a call" gets a tighter one.
Cross-connector synthesis is where this skill earns its keep. If a Slack message connects to a stalled HubSpot deal, surface that link in the #1 Priority section. Synthesis is what makes the pulse more useful than checking each tool separately.
Writing rules:
- Numbers lead, words follow. Never write "revenue is healthy" — write "$43k this month, ▲ 8% MoM" and let the owner judge.
- Every number carries a delta vs. the prior period where available. Absolute snapshots (cash balance) still show WoW delta.
- Names and dollars, not adjectives. "$4,200 from Acme, 23 days overdue" beats "some concerning receivables."
- No filler. If a section has nothing worth reporting, write "No material changes" and move on.
Step 5 — Export and share (once)
After presenting the pulse, offer once:
- "Want me to save this as a file?" (use Files connector if available)
- "Should I post this to your Slack?" (only if Slack is connected and the user confirms — Slack write requires explicit approval)
If they say yes, do it. If they say no or don't respond, move on — don't ask again.
Scope variants
The owner may ask for a narrower cut:
- "Just cash" / "financial check" → only Cash & Finance + AR-related risks
- "Pipeline only" / "deals check" → only Pipeline section + stalled-deal risks
- "Watch list" / "anything urgent" → only Watch List + all risks, no metric sections
- "Quick snapshot before a call" → TL;DR + #1 Priority only, no full sections
What not to do
- Do not ask permission before pulling data. If the skill was invoked, run it. Asking "should I check QuickBooks?" defeats the whole point.
- Do not invent or estimate numbers. If a source returned nothing, say "n/a" explicitly. Never fill a gap with guesswork.
- Do not skip the delta. A number without a comparison is a missed insight. If there's no prior-period baseline, say "(no prior baseline)" rather than omitting the field.
- Do not surface connector errors mid-pulse. Log them to the appendix. The pulse leads with what was delivered.
Reference files
reference/data_sources.md— exact connector tool → metric mapping with fallbacksreference/thresholds.md— 🟢/🟡/🔴 cutoffs, tunable per ownerreference/output_template.md— exact markdown structure; do not deviatereference/gotchas.md— known failure modes (QB states, Gmail auth, Slack write)
Data Sources
Exact mapping from each pulse section to the MCP tool that produces it. Dispatch all calls in a single parallel batch — do not pull serially.
Cash & Finance (QuickBooks)
| Metric | Tool | Notes |
|---|---|---|
| Cash / bank balance | cash-flow-quickbooks-account | Current balance; show delta vs. prior week if available |
| MTD revenue | profit-loss-quickbooks-account | Current month vs. prior month |
| Outstanding receivables | QuickBooks invoice list | Filter to open/unpaid |
| AR aging | QuickBooks invoice list | Group by days since due: 0–30, 31–60, 61+ |
| Overdue invoices | QuickBooks invoice list | Filter to due_date > 30 days past; name customer + amount + days overdue |
QB state handling: if cash-flow-quickbooks-account returns an error, empty response, or "not connected" state, mark the entire Cash section as "n/a — QuickBooks unavailable" and continue. Do not retry.
Revenue & Sales (PayPal / Square / Stripe)
| Metric | Tool | Notes |
|---|---|---|
| 7-day settlement total | PayPal transactions | Sum completed settlements in window |
| Sales trend | PayPal transactions | This 7 days vs. prior 7 days; compute delta |
| Failed / pending transactions | PayPal transactions | Flag any > $200 |
| Square settlements | Square (if connected) | Same as PayPal — sum + trend |
| Stripe revenue | Stripe list_invoices (if connected) | Paid invoices in window |
Use whichever payment connectors are available. If both PayPal and Square are connected, report combined and per-source.
Pipeline (HubSpot)
| Metric | Tool | Notes |
|---|---|---|
| Pipeline by stage | get_crm_objects type=deals | Group by deal stage; sum amount |
| Deals closed this week | search_crm_objects | Filter closedate in window, stage = closed-won |
| Deals gone cold | search_crm_objects | Filter hs_last_activity_date > 7 days ago, open stage |
| New leads this week | search_crm_objects | Filter createdate in window |
| Stalled/slipped deals | search_crm_objects | Open deals where closedate < today |
Commitments (Google Calendar)
| Metric | Tool | Notes |
|---|---|---|
| This week's key items | list_events | Filter to current week; surface meetings with customers, deadlines, important holds |
| Next 7 days | list_events | Forward-looking view; highlight anything with external parties |
Watch List (Gmail)
| Metric | Tool | Notes |
|---|---|---|
| Urgent threads | search_threads | Query: is:important OR is:starred in last 7 days |
| Customer escalations | search_threads | Query: terms like "escalation," "complaint," "cancel," "refund," "urgent" in last 7 days |
| Time-sensitive requests | search_threads | Query: is:unread + keywords like "deadline," "ASAP," "today" |
Gmail fallback: if the Gmail call errors (auth flaky — this is a known issue), skip Watch List silently and add "Gmail unavailable" to the appendix. Do not surface the error in the pulse body.
Internal Signals (Slack / Teams)
| Metric | Tool | Notes |
|---|---|---|
| Urgent threads | Slack search (if connected) | Threads with @mentions or urgency signals in owner-relevant channels |
| Action items | Slack search | Messages directed at the owner or tagged for follow-up |
Customer Support (Intercom / Zendesk)
| Metric | Tool | Notes |
|---|---|---|
| Open tickets | Intercom search_conversations / Zendesk | Count open; flag any > 48h unresolved |
| Escalations | Intercom search_conversations | Filter to priority or tagged escalation |
Include only if connector is available; omit section entirely if not.
Risks scan
Run these alongside the metric pulls — don't wait for metrics to finish first.
| Risk | Source | Trigger condition |
|---|---|---|
| Overdue AR | QuickBooks invoices | due_date > 30 days past, unpaid |
| Stalled deals | HubSpot | Open deal, no activity 7+ days |
| Slipped deals | HubSpot | Open deal, closedate in past |
| Urgent Gmail threads | Gmail | is:important or escalation keywords |
| Failed payments | PayPal / Square | Failed or pending > $200 |
Parallelization
All of the above should fire in a single tool-call batch. A complete pulse is typically 8–15 parallel calls. If one errors, the rest proceed normally and the failed source appears in "Sources unavailable" at the bottom of the pulse.
Gotchas
Known failure modes for the business-pulse skill. Good / Bad pairs.
---
Gotcha: QuickBooks returns unexpected state
Why it matters: QuickBooks can return empty results, a sync-in-progress state, or an auth error without throwing a hard exception. Treating silence as "no data" causes the pulse to skip Cash entirely without telling the owner — they assume their business has no QuickBooks data.
✗ Bad
Claude: [QuickBooks returns empty response]
→ skips Cash section silently
→ pulse presents no cash data; owner assumes QB isn't connectedThe owner spends 10 minutes reconnecting QuickBooks before realizing it was always connected — just in a transient state.
✓ Good
Claude: [QuickBooks returns empty response or error]
→ Cash section header present with: "n/a — QuickBooks unavailable (sync error or auth required)"
→ "Sources unavailable: QuickBooks — returned empty response" in appendixThe owner sees the gap explicitly and can decide whether to reconnect or proceed with a partial pulse.
---
Gotcha: Gmail auth failure mid-pulse
Why it matters: Gmail auth is intermittently flaky in workshop environments. Surfacing a raw auth error in the middle of the pulse looks broken and breaks the owner's trust in the skill.
✗ Bad
Claude: [Gmail auth error mid-composition]
→ "Error: Gmail authentication failed. Please re-authenticate."
→ pulse output stops or shows raw error in Watch List sectionThe owner sees a broken tool, not a useful briefing.
✓ Good
Claude: [Gmail auth error]
→ continues pulse without Watch List section
→ appendix: "Gmail — auth error; Watch List unavailable this run"
→ all other sections unaffectedThe pulse still delivers value. The owner is informed, not alarmed.
---
Gotcha: Asking permission before pulling data
Why it matters: The skill's core value is doing the work without prompting. An owner who invoked the pulse already implicitly approved the data pull. Asking "should I check QuickBooks?" or "can I read your emails?" defeats the purpose and erodes trust in the skill as an autonomous assistant.
✗ Bad
Owner: "catch me up on the business"
Claude: "Should I check QuickBooks for your cash balance? And is it okay to look at your HubSpot pipeline?"Three more round trips before anything useful is delivered.
✓ Good
Owner: "catch me up on the business"
Claude: [immediately dispatches all parallel tool calls]
→ presents pulse in one response---
Gotcha: Slack write requires explicit confirmation
Why it matters: Slack write is not tested in the standard validation path and posts to channels other people can see. Auto-posting without confirmation could embarrass the owner or spam a team.
✗ Bad
Claude: [at end of pulse]
"I've posted this to #general."Owner never asked for a Slack post; now the whole team has the financial data.
✓ Good
Claude: [at end of pulse]
"Want me to post this to Slack? If so, which channel?"Slack write only happens with a specific "yes + channel name" from the owner. Never assume.
Output Template
This is the exact structure every pulse must follow. Do not reorder sections. Omit a section only if its connector returned no data — never leave an empty header.
Variables in {{double braces}} are placeholders — replace with computed values. Arrow convention: ▲ up, ▼ down, ▬ flat (<1% change). Always show the delta value after the arrow.
---
# Business Pulse — {{Day, Month Date, Year}}
**Overall: {{🟢|🟡|🔴}} {{one-line status, e.g. "Cash healthy, one overdue invoice needs attention."}}}**
## TL;DR
- {{Most important number-backed fact, e.g. "Cash balance $84k, down $6k WoW — two large vendor payments cleared."}}
- {{Second most important, e.g. "$3,400 from Acme Corp is 47 days overdue — no response since Mar 12."}}
- {{Third, e.g. "Pipeline $128k weighted; two deals gone cold this week."}}
---
## 💰 Cash & Finance — {{🟢|🟡|🔴}}
- **Cash balance**: ${{BALANCE}} ({{▲|▼|▬}} ${{DELTA}} WoW)
- **MTD revenue**: ${{MTD}} vs. ${{PRIOR_MTD}} last month ({{▲|▼|▬}} {{PCT}}%)
- **Outstanding AR**: ${{AR_TOTAL}} across {{N}} open invoices
**AR aging**
- 0–30 days: ${{AR_0_30}}
- 31–60 days: ${{AR_31_60}} {{🟡 if nonzero}}
- 61+ days: ${{AR_61}} {{🔴 if nonzero}}
**Overdue > 30 days**
- {{customer}} — ${{amount}} ({{days}} days overdue)
- {{customer}} — ${{amount}} ({{days}} days)
---
## 📈 Revenue & Sales — {{🟢|🟡|🔴}}
- **7-day settlements**: ${{SETTLEMENTS}} ({{▲|▼|▬}} {{PCT}}% vs. prior 7 days)
- **PayPal**: ${{PAYPAL_TOTAL}} | **Square**: ${{SQUARE_TOTAL}} {{omit if not connected}}
**Unusual transactions**
- {{amount}} — {{counterparty}} — {{status: failed/pending/large}}
- {{or "No unusual transactions this week."}}
---
## 🔮 Pipeline — {{🟢|🟡|🔴}}
- **Weighted pipeline**: ${{WEIGHTED}} ({{▲|▼|▬}} ${{DELTA}} WoW)
- **Coverage vs. target**: {{RATIO}}x monthly target {{🟢|🟡|🔴}}
- **Closed-won this week**: ${{CW}} across {{N}} deals
- **New deals created**: {{N}} (${{TOTAL}})
**Deals needing attention**
- {{deal name}} — {{stage}} — {{why: gone cold / slipped / stalled}}
- {{or "No deals flagged this week."}}
---
## 📅 This Week
- {{Meeting/deadline — external party, why it matters}}
- {{Meeting/deadline}}
- {{Meeting/deadline}}
{{3–5 items max. Omit internal-only calendar noise.}}
---
## ✉️ Watch List
- {{sender / source}} — {{one-line summary of what needs attention}}
- {{sender / source}} — {{summary}}
{{Or: "No urgent threads detected." — include this explicitly so the owner knows the check ran.}}
---
## ⚠️ #1 Priority
{{One specific thing to act on today. Name amounts, people, deadlines.
Not "review cash flow" — say "The $4,200 invoice from Acme Corp is 23 days
overdue. Call Sarah Chen at 415-555-0192 today."}}
---
## Appendix
**Window**: {{date range}}
**Sources pulled**: {{list of connectors that returned data}}
**Sources unavailable**: {{list with reason, e.g. "Gmail — auth error" or "Zendesk — not connected"}}
**Thresholds used**: {{note any TODO thresholds that are still defaults}}---
Formatting rules
1. Dollar amounts: $43k for thousands, $1.2m for millions. No unnecessary decimals. 2. Percentages: one decimal for trends (e.g. "▲ 8.3%"), integers elsewhere. 3. Dates: human-readable in prose ("Apr 14"), ISO in metadata ("2026-04-14"). 4. Arrow spacing: ▲ $2k not ▲$2k. 5. Length: aim for one page. Two pages max. If a section balloons, tighten prose.
Thresholds
Red/yellow/green cutoffs for each section of the pulse. These are SMB defaults — edit them to match the owner's actual targets and plan.
Any threshold marked # TODO: confirm with owner should produce a note at the top of the first pulse output so the owner knows to tune it.
---
Cash & Finance
Cash runway
- 🟢 ≥ 6 months # TODO: confirm with owner
- 🟡 3–6 months
- 🔴 < 3 months
Revenue trend (MoM)
- 🟢 ≥ 0% (flat or growing)
- 🟡 -5% to 0%
- 🔴 < -5%
AR aging
- 🟢 No invoices past 31 days
- 🟡 Any invoice 31–60 days past due
- 🔴 Any invoice 60+ days past due OR total 61+ bucket > 10% of AR
Overdue threshold: any single invoice past due > 30 days gets named explicitly in the pulse — not just counted.
---
Revenue & Sales
7-day sales trend (vs. prior 7 days)
- 🟢 ≥ 0%
- 🟡 -10% to 0%
- 🔴 < -10%
Failed transactions
- 🟡 Any failed transaction > $200
- 🔴 Any failed transaction > $1,000, or 3+ failures in the week
---
Pipeline
Pipeline coverage (weighted pipeline ÷ monthly revenue target) # TODO: confirm target with owner
- 🟢 ≥ 2x monthly target
- 🟡 1–2x
- 🔴 < 1x
Stale deal: no activity in 7+ days → flag # TODO: owner may prefer 14 days Slipped deal: open deal with close date in past → always flag
---
Watch List
No numeric thresholds — any escalation or complaint in Gmail/Slack gets surfaced. Severity is contextual; surface and let the owner decide.
---
Overall status rollup
The pulse-level overall status is the worst section status. Override: if any individual risk names a specific customer with a dollar amount and a deadline within 7 days, roll up to 🔴 regardless of section colors.
---
When to tune
Revisit these after 4 weeks of use. The defaults are conservative starting points — a healthy business will feel like it's always 🟢. Tighten them to reflect where the owner actually wants to act.
Related skills
How it compares
Pick business-pulse for live market context inside agent sessions; use codebase research skills when the question is about repository structure rather than external market data.
FAQ
Which connectors does business-pulse try?
QuickBooks, PayPal/Square, HubSpot, Google Calendar, Gmail, Slack, and optional Intercom, Zendesk, or Shopify.
What if a connector fails?
It records the gap internally, marks the section n/a, and continues without blocking the pulse.
Does it send messages automatically?
No - it drafts the pulse and only posts to Slack or saves a file after explicit owner approval.