Account research with Veezee
Build a briefing on one target account before outreach: what the company is, who matters there, and what they have been posting about. 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.
Setup (one free key, no signup)
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:
- MCP: add the server
https://mcp.veezee.io/linkedin(streamable-http;https://mcp.veezee.io/allexposes 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 withPOST https://api.veezee.io/v1/keys/mint(empty body; the key is shown once) and put it in the connection'sAuthorization: Bearerheader. - SDK:
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.resolveUrlandclient.getUsageare top-level. The client sends retries and Idempotency-Keys for you. TheveezeeCLI (npx @veezee/sdk init) mints and stores the same key.
A full account briefing (company, posts, several people) spends more than the free daily budget, so this workflow needs purchased credits. When the 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, and purchases credit the same key directly, nothing to reconfigure.
The workflow, per account
- Check the budget first:
get_usageis free, exempt from the rate limit, and works the same on a trial or paid key. - Classify the company identifier. Clean LinkedIn company URL, slug, or website domain: go straight to step 3. Dirty or ambiguous URL:
resolve_urlfirst. Only an approximate name: usesearch_peoplewith acurrent_companyfilter to resolve it, or ask the user for the URL or domain. get_companyfor the company facts: industry, employee count, headquarters, website, founding year, description, specialities. A domain identifier quotes base price plus a resolution surcharge (setmax_creditsaccordingly); known domains settle at the base price.get_postson the company (URL, slug, or website domain all work) for what the company has recently said publicly. One page is one call; follow thecursorfor older posts only if the user wants more history than the first page covers.- Find the key people the user cares about (e.g. the champion, the economic buyer):
search_peoplewithcurrent_companyset to this company andtitleorkeywordsnarrowing the role. Drop any result markedis_anonymous: true; it cannot be fetched further. - For each key person worth a closer look,
get_profilewithsections: ["experience"](overview plus the first two sections are included in the base price), and optionallyget_postson that person to see what they post about individually.
Rules that save credits and errors
- Never call
get_profileon anis_anonymous: truesearch result; it cannot be dereferenced. - Default freshness is cached (usually a few hours old) and free. Use
freshness: "realtime"only when the user needs today's data before a call happening soon; it costs extra and needs a paid key (trial keys are cached-only and reject realtime with TRIAL_CAP_EXCEEDED). - Set
max_creditson each call so a single account never silently blows the budget. - Veezee has no contact-detail lookup (no email, no phone) and no way to monitor an account over time; each run is a point-in-time snapshot. Say so if the user expects ongoing alerts.
- On KEY_REQUIRED, mint the free key and retry the same call; it is never a payment problem. On TRIAL_CAP_EXCEEDED, INSUFFICIENT_CREDITS, or BUDGET_EXHAUSTED, stop and give the error's
upgrade_urlto your human; purchases credit the account directly and the same key keeps working afterward. - A 403 NOT_ENTITLED means the key's account is not enabled for this platform; grants are explicit, write to hello@veezee.io to enable more.
Output
A one-account briefing: company facts (industry, size, headquarters, website), what the company has recently posted about, and a short list of key people with their current title and recent experience. Include total credits spent (sum the usage.credits_charged fields).
