← 返回 Skills 市场
nostrband

Find Cpa Firm

作者 nostrband · GitHub ↗ · v1.0.1 · MIT-0
cross-platform ✓ 安全检测通过
68
总下载
1
收藏
1
当前安装
2
版本数
在 OpenClaw 中安装
/install find-cpa-firm
功能描述
Use whenever the user wants to find, shortlist, vet, or enrich US accounting and tax firms (CPA firms) — financial-statement audit, SOC 1/2 audit, corporate...
使用说明 (SKILL.md)

find-cpa-firm

Drive the ServiceGraph API (https://api.servicegraph.co) to find, shortlist, and enrich US business-to-business accounting and tax firms (CPA firms) via the pro_services dataset.

The catalog is B2B-only. Personal tax prep (individual 1040s, retirement planning, individual estate planning, personal bookkeeping for freelancers) is out of scope — those firms were filtered during the catalog audit.

Always pin industry:accounting_tax. Sub-services (audit, tax, bookkeeping, advisory, M&A diligence, 409A, R&D credits, etc.) are NOT separate tags — industry:accounting_tax is the most specific structured level — so practice-area specialization is a keyword substring search on firm text.

Any HTTP client works (curl, fetch, requests). Examples below use curl.

When NOT to use this skill

  • Personal/individual tax matters: 1040 prep, IRA/Roth conversions, personal estate planning, "what should I do with my refund".
  • Bookkeeping for a freelancer or solo creator's personal income.
  • In-house finance hires (Controller, CFO, Accountant).
  • DIY tax/accounting questions ("how do I claim X", "explain depreciation").
  • Accounting-software comparisons (QuickBooks, Xero, NetSuite).
  • Non-US firms / individual freelance bookkeepers.

MCP server (preferred for authed calls)

If your harness has the ServiceGraph MCP server loaded (tools containing servicegraph), prefer those — OAuth 2.1 + PKCE keeps the token in the harness sandbox. Otherwise use the REST flow below.

API surface (dataset id: pro_services)

Every endpoint requires the bearer (Authorization: Bearer vk_…). No anonymous tier.

Endpoint Cost Use it for
GET /v1/datasets/pro_services/fields[?include_values=1] free Confirm accounting_tax is in the industry value list.
GET /v1/datasets/pro_services/check?filter=… free Validate filter.
POST /v1/datasets/pro_services/translate-intent free {intent} → DSL filter + sanity count.
GET /v1/datasets/pro_services/search?filter=…&limit= free Brief firm cards + per-row unlock hint + total.
GET /v1/datasets/pro_services/:apex free One row brief; detail only if unlocked.
POST /v1/datasets/pro_services/unlocks 10 credits / firm {apexes:[...]} ≤100; atomic; 30-day TTL on detail.
GET /v1/me/credits free Balance.

Cost model. Discovery / validation / search / brief reads are free. Detail (url, phone, email, social, address, full platforms map) costs 10 credits per firm and lasts 30 days.

Auth

vk_* API keys minted in the dashboard. Keep the token out of the LLM context — never read .env* into your context; dispatch via shell.

  1. Try the call first through a shell wrapper that sources .env.local:

    ( set -a; [ -f .env.local ] && . ./.env.local; set +a;
      curl -sS -H "Authorization: Bearer $SERVICEGRAPH_API_KEY" \
           'https://api.servicegraph.co/v1/datasets/pro_services/fields' )
    
  2. On 401 prompt the user:

    "Open https://servicegraph.co/profile/api-keys, create a key, and add SERVICEGRAPH_API_KEY=vk_… to .env.local here (or export it). Tell me when done. Please don't paste the key into chat."

  3. Retry after the user signals ready.

Filter DSL

GitHub-search-style.

filter   := orExpr
orExpr   := andExpr ("OR" andExpr)*
andExpr  := notExpr (("AND")? notExpr)*    # whitespace = implicit AND
notExpr  := ("NOT" | "-") notExpr | atom
atom     := "(" filter ")" | predicate
predicate:= IDENT op valueOrList | bareword
op       := ":" | "=" | ">=" | "\x3C=" | ">" | "\x3C"
valueOrList := value ("," value)*
value    := IDENT | NUMBER | tagAtEvidence
tagAtEvidence := IDENT "@" ("low"|"medium"|"high")
bareword := IDENT | NUMBER          # → keyword:\x3Cbareword>

Four rules that bite: AND binds tighter than OR (use parens); comma list = OR within one predicate; negation is -x or NOT x; bareword = keyword search (quote multi-word phrases).

Accounting-flavored examples (validate yours with /check):

industry:accounting_tax state:CA audit saas
industry:accounting_tax cpa state:DE,NY
industry:accounting_tax "m&a" diligence
industry:accounting_tax tax 409a
industry:accounting_tax "fractional cfo"
industry:accounting_tax "r&d" tax
industry:accounting_tax "soc 2"
industry:accounting_tax -company_size_signal:solo rating>=4

Practice area → keyword mapping:

User asks for Add as keyword(s)
Audit / financial-statement audit audit
SOC 1 / SOC 2 audit "soc 2"
Corporate tax / 1120 tax, "corporate tax", 1120
Bookkeeping (for a business) bookkeeping
Advisory / fractional CFO "fractional cfo", advisory
M&A diligence m&a, diligence
409A valuation 409a
R&D tax credits "r&d", "r&d tax"
IPO readiness ipo, readiness
Sales-and-use tax "sales tax", "sales and use"
International tax / transfer pricing "international tax", "transfer pricing"

Identifying firms — apex

Firms are identified by their apex domain (pwc.com, not www.pwc.com/about).

Recipes

A. CPA firm for a Delaware C-corp audit

User: "CPA firm for our delaware c-corp series A audit, under 50 ppl."

GET /v1/datasets/pro_services/search?filter=industry:accounting_tax+audit+state:DE,NY,CA+-company_size_signal:large_50plus&limit=10
# Present, get pick of 3. "Unlocking 3 = 30 credits, 30-day TTL."
POST /v1/datasets/pro_services/unlocks
  { "apexes": ["firm-a.com", "firm-b.com", "firm-c.com"] }

B. SaaS-experienced audit firms

GET /v1/datasets/pro_services/search?filter=industry:accounting_tax+audit+saas&limit=10

C. M&A diligence

User: "Tax advisor for our M&A — Series-B-stage tech company."

GET /v1/datasets/pro_services/search?filter=industry:accounting_tax+"m&a"+diligence+tech&limit=10

D. Fractional CFO (indirect intent)

User: "Fractional CFO to help us through a Series-A close."

GET /v1/datasets/pro_services/search?filter=industry:accounting_tax+"fractional cfo"&limit=10

If thin, drop the cfo qualifier — fractional alone catches fractional finance leaders broadly.

E. R&D tax credits

User: "R&D tax credit specialists for biotech."

GET /v1/datasets/pro_services/search?filter=industry:accounting_tax+"r&d"+biotech&limit=10

F. Multi-state DTC sales tax

User: "Outside accountant for state and local tax filings — multi-state DTC business."

GET /v1/datasets/pro_services/search?filter=industry:accounting_tax+("sales tax" OR salt)+multi-state&limit=10

If barely any results, drop multi-state and surface the dimension from the unlocked detail later.

G. BYO apex list — enrich domains

User pastes 8–20 accounting-firm domains:

  1. GET /v1/datasets/pro_services/:apex per domain — free brief (404 = not in catalog, no charge).
  2. User picks N to fully enrich. POST /unlocks = 10×N credits, atomic, detail returned.
  3. Re-runs within 30-day TTL are free.

A 404 here often means the firm focuses on personal tax prep and was filtered out of the B2B catalog.

Gotchas

  • Always pin industry:accounting_tax. Without it, "tax" / "audit" / "cfo" as keywords match management consulting and other industries.
  • Refuse personal-tax asks. 1040 prep, IRA conversion strategy, personal estate planning, "should I use QuickBooks Self-Employed?" — not in catalog. Tell the user the catalog is B2B-only.
  • industry:accounting_tax is the only structured handle. Practice areas (audit, tax, M&A, 409A, R&D credits) are keyword-only. Multi-word areas split into ANDed barewords unless quoted ("r&d tax credits" → one phrase).
  • In-house finance hires (Controller, CFO, Accountant) are NOT procurement. Recruiting an employee is out of scope.
  • Accounting-software comparisons (QuickBooks vs Xero vs NetSuite) are NOT procurement either.
  • Briefs DO include apex, name, location, ratings. They DON'T include url, phone_primary, email_primary, legal_name, address_full, full platforms — those require an unlock.
  • not_found / not_in_dataset 404 = not in pro_services. Skip; not charged.
  • Unlock is atomic. N apexes either all charge (up to 10×N credits) or none on 402.
  • Within-TTL re-views are free (was_cached:true).

Errors

JSON envelope: {"error": {"code": "...", "message": "..."}}.

Status Code What to do
400 filter_parse_error position included; fix and re-validate with /check.
400 kind_in_filter Strip any kind: from filter — URL is authoritative.
400 field_not_in_dataset Drop the disallowed field.
400 invalid_apex Re-normalize.
401 unauthorized / invalid_audience Re-prompt for fresh vk_….
402 insufficient_credits needed and balance in payload; nothing charged.
404 not_found / not_in_dataset Skip; not charged.
429 rate_limited Honor Retry-After.

End-to-end example

User: "CPA firm for our delaware c-corp series A audit, recommend 5 options under 50 ppl, ideally with SaaS experience and 4-star ratings."

GET /v1/datasets/pro_services/fields?include_values=1
GET /v1/datasets/pro_services/check?filter=industry:accounting_tax+audit+saas+rating>=4+-company_size_signal:large_50plus
GET /v1/datasets/pro_services/search?filter=...&limit=10
# Present briefs. "Unlocking 5 = 50 credits, 30-day TTL."
POST /v1/datasets/pro_services/unlocks
  { "apexes": ["firm-a.com", "firm-b.com", "firm-c.com", "firm-d.com", "firm-e.com"] }
GET /v1/me/credits
安全使用建议
Install only if you intend to use ServiceGraph. Keep SERVICEGRAPH_API_KEY in your local environment rather than chat, and confirm before running paid unlock calls because they spend ServiceGraph credits.
能力标签
requires-oauth-tokenrequires-sensitive-credentials
能力评估
Purpose & Capability
The skill's instructions match its stated purpose: query the ServiceGraph pro_services dataset for B2B accounting and tax firms, filter results, and optionally unlock firm details.
Instruction Scope
It asks agents to use authenticated REST or MCP calls and notes that unlocks cost credits; examples generally present results and get user picks before paid unlocks.
Install Mechanism
The artifact contains only one markdown SKILL.md file, no executable scripts, and no declared dependency packages.
Credentials
Network access and a ServiceGraph API key are expected for the advertised integration; the skill explicitly tells agents not to put the key in chat or LLM context.
Persistence & Privilege
No local persistence, background workers, privilege escalation, destructive actions, or broad local file indexing are requested; server-side unlock TTL is disclosed as part of the API behavior.
如何使用
  1. 确保已安装 OpenClaw(本地或 Docker 部署)
  2. 在对话框中输入安装命令:/install find-cpa-firm
  3. 安装完成后,直接呼叫该 Skill 的名称或使用 /find-cpa-firm 触发
  4. 根据 Skill 的参数说明提供必要输入,即可获得结构化输出
版本历史
v1.0.1
Publish from servicegraph repo (verified source)
v1.0.0
- Initial release of the find-cpa-firm skill. - Enables finding, shortlisting, and enriching US business-focused accounting and tax (CPA) firms. - Supports filters for industry, services, specialization, US state, company size, and ratings. - Excludes personal/consumer tax, non-US firms, DIY, in-house hires, and software comparisons. - Integrates with the ServiceGraph API for access to a 100k+ US firm directory. - Detailed instructions for authentication, API usage, and example queries for common B2B accounting needs.
元数据
Slug find-cpa-firm
版本 1.0.1
许可证 MIT-0
累计安装 1
当前安装数 1
历史版本数 2
常见问题

Find Cpa Firm 是什么?

Use whenever the user wants to find, shortlist, vet, or enrich US accounting and tax firms (CPA firms) — financial-statement audit, SOC 1/2 audit, corporate... 它是一个面向 Claude Code / OpenClaw 的 AI Agent Skill 插件,目前累计下载 68 次。

如何安装 Find Cpa Firm?

在 OpenClaw 或 Claude Code 对话框中运行命令「/install find-cpa-firm」即可一键安装,无需额外配置。

Find Cpa Firm 是免费的吗?

是的,Find Cpa Firm 完全免费,采用 MIT-0 许可证,可自由下载、安装和使用。

Find Cpa Firm 支持哪些平台?

Find Cpa Firm 跨平台运行,可在任意部署了 OpenClaw / Claude Code 的环境中使用(cross-platform)。

谁开发了 Find Cpa Firm?

由 nostrband(@nostrband)开发并维护,当前版本 v1.0.1。

💬 留言讨论