Business Pulse
AnthropicOfficialPublished by Anthropic
- Skill
- Content generator
- Business and productivity
- Apache-2.0
- No issues found
AutoGineer summary
Written by AutoGineer from the skill’s own files, not by the author
Business Pulse is an automated workflow designed to provide SMB owners with a comprehensive, scannable summary of their business health. By pulling data in parallel from various connected platforms—including accounting software, payment processors, CRM systems, and communication tools—it synthesizes disparate metrics into a single, actionable one-page brief. The skill proactively identifies risks, calculates performance metrics against defined thresholds, and highlights the most critical item requiring attention, ensuring owners can make informed decisions without manually aggregating data.
What it does
- Aggregates financial, sales, pipeline, and communication data into a single report.
- Calculates key performance metrics and assigns status indicators (green, yellow, red).
- Identifies and flags urgent risks, such as overdue invoices or stalled deals.
- Synthesizes information across tools to surface high-priority action items.
- Delivers the pulse in a visual format, with options for file-based exports.
- Adapts content depth based on the user's specific request or context.
When to use it
- When you need a quick, daily, or weekly overview of your business's current state.
- When you want to identify urgent tasks or risks across multiple platforms simultaneously.
- At the start of the week to review upcoming commitments and priorities.
- At the end of the week to recap performance and pipeline movement.
- When you need to prepare for a meeting and require a concise snapshot of business health.
Advantages
- Saves time by automating the collection and synthesis of data from multiple sources.
- Provides a unified view of business health rather than fragmented tool-specific reports.
- Proactively surfaces actionable insights and risks that might otherwise be missed.
- Gracefully handles missing data by scoping to available connectors without blocking.
- Supports various output formats to suit different reporting preferences.
Usage examples
- “Catch me up on the business.”
- The agent pulls data from all connected tools and generates a comprehensive one-page pulse report, highlighting key metrics and the top priority for the day.
- “What am I missing today?”
- The agent scans urgent emails, Slack messages, and overdue tasks to surface the most critical items requiring immediate attention.
- “Give me a quick snapshot before my call.”
- The agent provides a concise TL;DR summary focusing only on the most critical business metrics and the single highest priority item.
- “What is my current pipeline status?”
- The agent generates a focused report detailing pipeline movement, deal stages, and any stalled deals that need attention.
Install
Download the skill as a ZIP:
https://autogineer.com/agent-skills/anthropics/business-pulse/downloadUnzip it into the cross-client skills folder of your project:
mkdir -p .agents/skills && unzip business-pulse.zip -d .agents/skills
Documentation by Anthropic
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
Xero — same ledger read for Xero shops: cash position, receivables, P&L trend
Zoho Books — same ledger read for Zoho shops: bank balances, invoiced revenue, overdue invoices (no P&L endpoint, so the revenue line is invoiced revenue and says so)
PayPal / Square — 7-day settlements, sales trend, failed/pending transactions
Stripe — settlements and sales trend, failed payments, and any new disputes — a fresh dispute goes straight to the watch list (if connected)
Ramp — company card spend for the week and the account balance, read-only (if connected)
Gusto — next payroll run date and amount, the week's biggest cash commitment (if connected)
TikTok Ads — last week's ad spend, results, and cost per result, so paid spend shows up next to the sales it claims to drive (if connected)
Expensify — last week's card spend and any expenses missing receipts, read-only, so spending surprises surface before the month-end scramble (if connected)
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 or Microsoft 365 — threads flagged urgent, customer complaints, time-sensitive requests
Slack / Teams — urgent internal signals, threads needing owner attention
RingEx Chat — the same internal-signal read for RingEx shops: urgent team-chat posts needing the owner (if connected)
DocuSign — envelopes sitting unsigned, flagged once they are more than a few days old — money waiting on a signature (if connected)
Zoho Desk — open tickets, escalations (if connected)
Shopify — orders, revenue, sales trend, and fulfillment issues, so a commerce business sees its actual day (if connected)
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.
Nothing connected at all is a supported path, not a failure. If every connector is unavailable, don't stop and don't tell the owner to go connect things. Ask once, in one short message, for the handful of numbers that carry the pulse:
Cash in the bank right now, and roughly what it was a week ago
Anything overdue — invoices owed to them, bills they owe
Sales this week versus a normal week, even roughly
Anything already worrying them this week
Build the same one-page pulse from those answers, label the source line "owner-supplied, not pulled," and skip any section they had no number for. If they'd rather not type numbers, point them at the siblings that run off a file export instead — cash-flow-snapshot and report-builder both take a CSV — and say plainly that gives a partial picture, not the full one.
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; "USD 3,400 from Acme Corp, 47 days overdue, no response since Mar 12" is actionable.
Ledger 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
Mail threads marked urgent or containing "escalation," "complaint," "cancel," "refund"
Failed or pending PayPal/Square/Stripe transactions above the threshold in
reference/thresholds.md(200 in the business's currency)
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 "USD 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. "USD 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 — Deliver the pulse page
Alongside the chat pulse — never instead of it — deliver the full pulse per
the owner's stored output preference — never default to a markdown file.
Check the ## Business context block's Output preference (shared style
guide rule, ../../shared/artifact-style.md):
Visual artifact (the default): render the pulse as an HTML page in the house style. Cash balance, MTD revenue, and weighted pipeline are stat tiles with their deltas as context lines; each section's 🟢/🟡/🔴 becomes a status pill (good, warn, critical); the watch-list risks are a table with tabular-nums amount columns; the #1 Priority gets its own panel at the top; unavailable connectors go in one quiet appendix line.
docx / md / notion / canva preference: deliver the same content in that form — a DOCX or markdown file, a Notion page created via the connector (named destination, never overwriting), or a Canva Doc created via the Canva connector (a new design each run, named with the date; tables become lists); fall back to the visual artifact if Notion or Canva is not connected — and say that is why.
Best for skill: use the visual artifact — a pulse is scanned, not filed.
Step 6 — Export and share (once)
After presenting the pulse, offer once:
"Want me to save this as a file?" (use Files connector if available — this means a copy in their drive, not a second HTML download beside the artifact)
"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.
After the run
Close with one line on what the pulse covered, then the single most relevant next step and at most two others nearby:
If cash or AR flagged red: "who owes me money" runs
invoice-chase.If growth questions dominate: "is my marketing working" runs
growth-pulse.To make this recurring: "Monday brief" runs
/monday-briefevery week.
Max three offers. Never repeat an offer the owner declined this session.
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.
Do not trust a QuickBooks summary object. Expenses, margin, and AP aging buckets come from the rows or the detail call (
../../shared/quickbooks-report-traps.md).
More sources, and scheduled presets
Read reference/v2_sources.md for the mapping:
Shopify — orders, revenue, and fulfillment status, so a commerce business sees its actual day in the pulse
Any ledger — MYOB, NetSuite, QuickBooks, Xero, or Zoho Books feed the Cash & Finance section; they are peers (
../../shared/connector-neutrality.md). With two connected, the owner names one as the source of record for totals
The pulse still builds from whatever is connected and degrades gracefully — one connector gives a partial pulse, the full stack gives the full picture.
Scheduled presets
This skill is schedulable, and the preset decides the shape:
| Preset | When | Shape |
|---|---|---|
| Monday | Start of week | Full pulse, forward-looking. What's coming and what needs attention |
| Friday | End of week | Recap. What moved, what closed, what slipped |
Scheduling is a property of this skill, not a reason for a separate command.
Offer a cadence once, after a pulse the owner found useful. Don't ask twice.
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)
Using a tool that isn't listed
The connectors named in this skill are the tested paths, not a wall. If the owner wants this flow to use a tool that isn't connected or listed, offer build-connector — it checks the connector directory first and connects through Zapier otherwise, never hand-building against a raw API. Once the connection exists, the tool joins this skill like any other optional connector, under the same approval gates.
Files
- ATTRIBUTION.mdAdded by AutoGineer909 B
- LICENSELicence file added by AutoGineer11.3 KiB
- SKILL.md11.8 KiB
- reference/data_sources.md9.4 KiB
- reference/gotchas.md3.1 KiB
- reference/output_template.md4.0 KiB
- reference/thresholds.md2.2 KiB
- reference/v2_sources.md3.3 KiB
reference/data_sources.md
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 (the ledger)
Whichever ledger is connected feeds this section — MYOB, NetSuite, QuickBooks, Xero, or Zoho Books, as peers (../../../shared/connector-neutrality.md). The QuickBooks table is first only because it is the longest; the Xero, NetSuite, MYOB, and Zoho Books tables below map the same metrics. Amounts carry the business's currency code (../../../shared/currency-and-locale.md); thresholds are in that currency.
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. Read income and expenses from the report rows or monthlyBreakdown; the response's top-level totalExpenses, grossProfit, and grossProfitMargin report 0 / 100% against real rows (a defect in the response shape), so never read them |
| 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 |
Ledger state handling: if the ledger's cash read returns an error, empty response, or "not connected" state, mark the entire Cash section as "n/a — ledger unavailable" (naming which) and continue. Do not retry.
Xero
| Metric | Tool | Notes |
|---|---|---|
| Cash / bank balance | get_cash_position | Same role as the QuickBooks cash read |
| MTD revenue, P&L trend | get_profit_and_loss | Current month vs. prior |
| Receivables, AR aging, overdue | get_aged_receivables | Name customer + amount + days overdue. (get_contacts_and_receivables is deprecated in the Xero server; do not call it) |
NetSuite
| Metric | Tool | Notes |
|---|---|---|
| Cash, receivables, P&L | ns_runReport / ns_runCustomSuiteQL | Same metrics, same section |
MYOB
| Metric | Tool | Notes |
|---|---|---|
| MTD revenue, P&L trend | myob_get_profit_loss | Resolve the financial year first with myob_get_financial_year_dates |
| Receivables, overdue | myob_get_outstanding_customer_balances | No cash balance exists in MYOB; leave the cash line as "not available from MYOB" |
Zoho Books
Every call takes organization_id from list_organizations.
| Metric | Tool | Notes |
|---|---|---|
| Cash / bank balance | list_bank_accounts with filter_by=Status.Active | Sum current_balance across bank and cash accounts (bcy_balance is the same figure in base currency). No history endpoint, so the WoW delta needs the prior pulse's stored figure or is omitted |
| MTD revenue | list_invoices with date_start/date_end for the month and response_option=3 | Returns the count and the summed total; invoiced revenue, not a P&L — say so. Zoho Books exposes no P&L report endpoint |
| Outstanding receivables | list_invoices with status=unpaid and response_option=3 | Summed balance |
| AR aging, overdue invoices | list_invoices with status=overdue, sorted by due_date | Each carries due_days ("Overdue by 323 days"), customer_name, balance, email; bucket by due date yourself |
Zoho Desk is a separate connector and a separate organisation ID; it feeds the support section below, not this one.
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 (business currency; thresholds.md) |
| Square settlements | Square (if connected) | Same as PayPal — sum + trend |
| Stripe revenue | Stripe list_invoices (if connected) | Paid invoices in window |
| Stripe failed payments | Stripe API read — charges/payment intents (if connected) | Failed charges in window; flag any > 200 (business currency) |
| Stripe disputes | Stripe API read — disputes (if connected) | Any dispute opened in window goes to the watch list, named |
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 | search_crm_objects type=deals (get_crm_objects needs explicit IDs; see ../../../shared/connector-call-shapes.md) | 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 notes_last_updated > 7 days ago, open stage. That is HubSpot's "Last Activity Date" on deals — there is no hs_last_activity_date or hs_lastactivitydate property |
| 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 or Microsoft 365)
| 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), 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 |
Every section below this point follows the same rule: include only if the connector is available; omit the section entirely if not.
Commerce (Shopify, if connected)
| Metric | Tool | Notes |
|---|---|---|
| Orders, revenue, sales trend | list-orders, run-analytics-query | This 7 days vs. prior 7 |
| Fulfillment issues | list-orders filtered to unfulfilled past promise | Named orders to the watch list |
Fulfillment (Square, if connected)
| Metric | Tool | Notes |
|---|---|---|
| Fulfillment issues | Square orders API via make_api_request | Same watch-list treatment as Shopify |
Payroll (Gusto, if connected)
| Metric | Tool | Notes |
|---|---|---|
| Next payroll run | list_payrolls / list_pay_periods | Date and expected amount — the week's biggest cash commitment |
Ads (TikTok Ads, if connected)
| Metric | Tool | Notes |
|---|---|---|
| Ad spend, results, cost per result | TikTok reporting (report_integrated_get) | Last 7 days vs. prior 7; sits beside the sales trend |
Card spend (Ramp / Expensify, if connected)
| Metric | Tool | Notes |
|---|---|---|
| Week's card spend | Ramp ramp_get_transactions | Sum for window; call out any single transaction > 500 (business currency) |
| Account balance | Ramp ramp_get_ramp_business_account_balance | Read-only |
| Card spend + missing receipts | Expensify Search | Read-only; count expenses without receipts |
Signatures (DocuSign, if connected)
| Metric | Tool | Notes |
|---|---|---|
| Unsigned envelopes | getEnvelopes filtered to sent status | Flag any sitting unsigned > 3 days, named |
Internal signals (RingEx Chat, if connected)
| Metric | Tool | Notes |
|---|---|---|
| Urgent team-chat posts | read_team_chat | Same role as Slack: escalation keywords, threads needing the owner. Chat only — no call data exists here |
Customer Support (Zoho Desk, if connected)
| Metric | Tool | Notes |
|---|---|---|
| Open tickets, escalations | getTickets (status, priority, sortBy=recentThread) / getTicketsMetrics | Count open; flag any > 48h unresolved and any priority High, named. getTickets rejects an include parameter — request extra fields with fields |
Risks scan
Run these alongside the metric pulls — don't wait for metrics to finish first.
| Risk | Source | Trigger condition |
|---|---|---|
| Overdue AR | Ledger invoices / aged receivables | due_date > 30 days past, unpaid |
| Stalled deals | HubSpot | Open deal, no activity 7+ days |
| Slipped deals | HubSpot | Open deal, closedate in past |
| Urgent mail threads | Gmail or Microsoft 365 | is:important or escalation keywords |
| Failed payments | PayPal / Square / Stripe | Failed or pending > 200 (business currency) |
| New dispute | Stripe / PayPal | Any dispute opened in window — always a watch-list item |
| Stale unsigned envelope | DocuSign | Sent envelope unsigned > 3 days |
| Missing receipts piling up | Expensify | 5+ expenses without receipts in window |
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.
Requirements and compatibility
Written for: Claude Code, Claude apps
Works with: Claude Code, Claude apps, OpenAI Codex, GitHub Copilot, Cursor, Gemini CLI, Kiro, OpenCode, Goose, Amp, Roo Code, JetBrains Junie, Factory Droid, Devin (ex-Windsurf), Mistral Vibe, OpenHands, Letta
“Works with” means the tool reads the open Agent Skills format; a skill written for one tool may use features others lack.
Needs: Declares allowed tools
Security
No issues found by our static scan· No issues found
A static scan is not a guarantee. Skills are third-party content: review a skill before you let an agent use it.
Attribution and licence
- Published by
- Anthropic
- Publisher
- Anthropic (Official)
- Source
- anthropics/knowledge-work-plugins · small-business/skills/business-pulse · commit e050c2e
- Licence
- Apache License 2.0 (redistribution allowed)
- LICENSE (added by AutoGineer from LICENSE)
- ATTRIBUTION.md (written by AutoGineer)
- Synced
AutoGineer is not affiliated with or endorsed by Anthropic or Anthropic.
Download ZIP
The ZIP holds the skill’s files, its licence files and an ATTRIBUTION.md. Download business-pulse.zip