Find Management Consultant

Dev Tools

Use whenever the user wants to find, shortlist, vet, or enrich US management consultancies — strategy, operations, executive coaching, leadership development, org-development/change management, PMO/program management, sales/revenue operations consulting. Triggers on "find me three top strategy consultancies in California", "shortlist boutique ops-consulting firms with healthcare experience", "we need an executive coach for our new CEO", or "pull contact info for these 10 consulting firm domains", even when described indirectly (post-merger integration help, change-management partner, fractional COO). Drives the ServiceGraph API (api.servicegraph.co) — a 100k+ US firm catalog filterable by industry, services, location, size, ratings. Skip in-house strategy hires, "help me build a strategy" do-the-work asks, framework comparisons (Lean vs Agile, BCG matrix, etc.), academic/MBA-program questions, life/career coaching for individuals, non-US firms, individual freelancers.

Install

openclaw skills install find-management-consultant

find-management-consultant

Drive the ServiceGraph API (https://api.servicegraph.co) to find, shortlist, and enrich US management consulting firms via the pro_services dataset. The catalog tags firms with industry:management_consulting and a 7-tag service sub-taxonomy: strategy-consulting, operations-consulting, executive-coaching, leadership-development, organizational-development, pmo-project-management, sales-revenue-consulting.

Always pin industry:management_consulting. Sub-services are structured service_provided tags — confirm exact names via /v1/datasets/pro_services/fields?include_values=1.

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

When NOT to use this skill

  • "Help me build a strategy / write a plan / make a recommendation" — do-the-work, not procurement.
  • In-house strategy/operations hires (Chief Strategy Officer, COO).
  • Life or career coaching for an individual — the catalog's executive-coaching tag is for B2B (the firm hires the coach for their executives), not for the user themselves.
  • Framework explanations (Lean vs Agile, Porter's Five Forces).
  • MBA program questions, academic research.
  • Non-US firms / individual freelance consultants.

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.

EndpointCostUse it for
GET /v1/datasets/pro_services/fields[?include_values=1]freeConfirm management_consulting industry value and sub-tag names.
GET /v1/datasets/pro_services/check?filter=…freeValidate filter.
POST /v1/datasets/pro_services/translate-intentfree{intent} → DSL filter + sanity count.
GET /v1/datasets/pro_services/search?filter=…&limit=freeBrief firm cards + per-row unlock hint + total.
GET /v1/datasets/pro_services/:apexfreeOne row brief; detail only if unlocked.
POST /v1/datasets/pro_services/unlocks10 credits / firm{apexes:[...]} ≤100; atomic; 30-day TTL on detail.
GET /v1/me/creditsfreeBalance.

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       := ":" | "=" | ">=" | "<=" | ">" | "<"
valueOrList := value ("," value)*
value    := IDENT | NUMBER | tagAtEvidence
tagAtEvidence := IDENT "@" ("low"|"medium"|"high")
bareword := IDENT | NUMBER          # → keyword:<bareword>

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).

Management-consulting examples (validate yours with /check):

industry:management_consulting service_provided:strategy-consulting@high
industry:management_consulting service_provided:operations-consulting state:NY
industry:management_consulting service_provided:executive-coaching
industry:management_consulting (service_provided:strategy-consulting@high OR service_provided:operations-consulting@high)
industry:management_consulting service_provided:organizational-development change
industry:management_consulting service_provided:strategy-consulting@high rating>=4 has:clutch
industry:management_consulting service_provided:pmo-project-management

Sub-service tag → typical user phrasing:

User asks forTag
Strategy / strategic planningservice_provided:strategy-consulting
Operations / ops consultingservice_provided:operations-consulting
Executive coach (for senior leaders)service_provided:executive-coaching
Leadership development programsservice_provided:leadership-development
Org design / change managementservice_provided:organizational-development
PMO / program managementservice_provided:pmo-project-management
Sales/revenue opsservice_provided:sales-revenue-consulting

Identifying firms — apex

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

Recipes

A. Strategy consultancy in a state

GET /v1/datasets/pro_services/search?filter=industry:management_consulting+state:CA+service_provided:strategy-consulting@high&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. Boutique ops consulting + vertical

GET /v1/datasets/pro_services/search?filter=industry:management_consulting+service_provided:operations-consulting+healthcare+-company_size_signal:large_50plus&limit=10

C. Executive coach for a CEO

GET /v1/datasets/pro_services/search?filter=industry:management_consulting+service_provided:executive-coaching@high&limit=10

D. Indirect intent — post-merger / change

GET /v1/datasets/pro_services/search?filter=industry:management_consulting+service_provided:organizational-development+(merger OR integration)&limit=10

If thin, drop the keywords — organizational-development@high alone captures change-management work.

E. Indirect intent — "fractional COO"

GET /v1/datasets/pro_services/search?filter=industry:management_consulting+service_provided:operations-consulting+fractional&limit=10

F. Quality threshold + Big-3 alumni

GET /v1/datasets/pro_services/search?filter=industry:management_consulting+service_provided:strategy-consulting@high+rating>=4+(mckinsey OR bcg OR bain)&limit=10

The "alumni" angle isn't structured — keyword the firm names of the shops the alumni came from; many spinout consultancies advertise it in bio text.

G. BYO apex list — enrich domains

User pastes 8–20 consulting-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.

Gotchas

  • Always pin industry:management_consulting. Without it, service_provided:strategy-consulting surfaces marketing or IT firms that list "strategy" as a sub-service.
  • executive-coaching is for B2B. When a firm hires a coach for their executives, this skill applies. When an individual asks for a life coach or career coach for themselves, it's out of scope.
  • "Help me build a strategy" is do-the-work, not procurement.
  • Framework comparisons (Lean vs Agile) and MBA questions are knowledge, not procurement.
  • In-house hires (CSO, COO) are NOT procurement.
  • 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": "..."}}.

StatusCodeWhat to do
400filter_parse_errorposition included; fix and re-validate with /check.
400kind_in_filterStrip any kind: from filter.
400field_not_in_datasetDrop the disallowed field.
400invalid_apexRe-normalize.
401unauthorized / invalid_audienceRe-prompt for fresh vk_….
402insufficient_creditsneeded and balance; nothing charged.
404not_found / not_in_datasetSkip; not charged.
429rate_limitedHonor Retry-After.

End-to-end example

User: "Three top management-consulting firms in California focused on strategy, with strong third-party ratings."

GET /v1/datasets/pro_services/fields?include_values=1
GET /v1/datasets/pro_services/check?filter=industry:management_consulting+state:CA+service_provided:strategy-consulting@high+rating>=4+review_count_total>=20
GET /v1/datasets/pro_services/search?filter=...&limit=10
# Present briefs. "Unlocking 3 = 30 credits, 30-day TTL."
POST /v1/datasets/pro_services/unlocks
  { "apexes": ["firm-a.com", "firm-b.com", "firm-c.com"] }
GET /v1/me/credits