Install
openclaw skills install @veezee-build/veezee-candidate-sourcingFind LinkedIn candidates matching a role spec, shortlist them, and enrich the shortlist with current role and experience. Use when the user wants to source, find, or search for candidates, talent, or people matching criteria like title, school, or current/past employer (e.g. "engineers at Shopify who used to work at Amazon").
openclaw skills install @veezee-build/veezee-candidate-sourcingTurn a role spec (title, company, school, or keywords) into a ranked shortlist with enriched profiles. LinkedIn only; this skill covers no other platform. Veezee returns no emails or phone numbers; if the user needs contact details, tell them plainly that this skill cannot provide them.
Every call needs an API key. Minting one is free and human-free: no signup, no card. A call without a key fails with KEY_REQUIRED (401) carrying mint_url; the fix is the free mint below, never a payment. A fresh vz_trial_ key runs under a free per-IP daily budget of 200 credits, cached data only, first page only on any cursor sequence. Two equivalent surfaces; pick whichever your environment has:
https://mcp.veezee.io/linkedin (streamable-http; https://mcp.veezee.io/all exposes every tool). Hosts that support MCP authorization (Claude Code, claude.ai) open a Veezee sign-in on connect (email code, no password): that is the whole auth step. Other hosts: mint a key with POST https://api.veezee.io/v1/keys/mint (empty body; the key is shown once) and put it in the connection's Authorization: Bearer header.import { VeezeeClient } from "@veezee/sdk"; const client = new VeezeeClient(); await client.mint(); mints and stores the free key the first time and reuses it on later runs. Platform methods live on the namespace (client.linkedin.getProfile/searchPeople/getCompany/getPosts); client.resolveUrl and client.getUsage are top-level. The client sends retries and Idempotency-Keys for you. The veezee CLI (npx @veezee/sdk init) mints and stores the same key.When the free budget or a trial cap runs out (TRIAL_CAP_EXCEEDED, INSUFFICIENT_CREDITS, BUDGET_EXHAUSTED), the error carries upgrade_url (https://veezee.io/upgrade) and a machine-readable offer. Hand that link to your human; purchases credit the same key directly and it keeps working unchanged. Note: one search plus a couple of profile fetches makes a real dent in the free daily budget, so sourcing runs at any real volume need purchased credits.
get_usage is free, exempt from the rate limit, and works the same on a trial or paid key. Do not start a search you cannot afford to enrich.search_people filters: keywords (free text), plus title, current_company, past_company, school as the spec supplies them. "Engineers at Shopify who used to work at Amazon" becomes title: "engineer", current_company: "Shopify", past_company: "Amazon".limit once and prefer it over paginating: a single call at a larger limit is cheaper than several smaller pages. A current_company name is matched by LinkedIn natively (fuzzy, typo-tolerant) and works at any limit; a past_company NAME or a company URL is resolved server-side and caps the limit, so keep the limit modest with those or pass the company's numeric id or URN (from get_company). Ids and URNs also filter exactly, where names are fuzzy.is_anonymous: true from the enrichment list; it is a private profile that cannot be fetched further. Keep it in the shortlist as "match found, profile private" if the user wants a count.get_profile for each with sections: ["experience"]. The overview plus the first two sections are included in the base price.resolve_url first. Skip it for clean slugs or URNs; it only spends credits for nothing there.get_profile on an is_anonymous: true search result; it cannot be dereferenced. Treat it as a confirmed match and move on.max_credits on each call in a large batch; a call whose quote exceeds it is rejected with nothing charged, so you can keep going instead of overspending.freshness: "realtime" costs extra and needs a paid key (trial keys are cached-only and reject realtime with TRIAL_CAP_EXCEEDED); reach for it only when the user needs today's data.upgrade_url to your human; purchases credit the account directly and the same key keeps working afterward.Report a shortlist ranked by fit: name, current title, current company, and the two most recent experience entries per candidate. Note any candidates skipped because their profile was private. Include total credits spent (sum the usage.credits_charged fields) so the human can budget the next search.