prospect-researcher — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited prospect-researcher (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Turn any LinkedIn URL into a structured research brief in two API calls. The skill returns research data — current role, recent posts, conversation hooks. Writing the actual DM is the calling agent's job, because the agent has more context than this script ever will (your tone, your product, prior messages, the user's goal).
| Variable | Purpose |
|---|---|
CONNECTSAFELY_API_KEY | Your ConnectSafely API key. Get one. |
CONNECTSAFELY_ACCOUNT_ID | Optional. Defaults to the default account on your key. |
cp ../../.env.example ../../.env # then paste your CONNECTSAFELY_API_KEY
python3 -m pip install -r requirements.txt
python3 example.py https://www.linkedin.com/in/williamhgates/The script auto-loads .env from this folder or any parent (so a single .env at the repo root covers every skill). You can also export CONNECTSAFELY_API_KEY=… directly in your shell — real environment variables always win over .env.
Pass --json to emit machine-readable output instead of Markdown:
python3 example.py https://www.linkedin.com/in/williamhgates/ --jsonWhen Claude (or any agent) invokes this skill, the workflow is:
The brief gives the agent what it can't get on its own (current role, recent activity); the agent provides what the brief can't (your tone, your product, conversation history).
A Markdown brief with these sections:
See sample-output.md for a real run.
--posts N — number of recent posts to fetch (1–20, default 5).--json — emit JSON instead of Markdown.--pretty — render the Markdown with ANSI styling (bold headers, cyan rules, italic blockquotes). Auto-disabled when stdout isn't a terminal, so pipes and redirects still produce clean Markdown.--copy — copy the brief to your system clipboard (uses pbcopy on macOS, wl-copy/xclip/xsel on Linux, clip on Windows). Combine with --pretty to see the styled version on screen while the raw Markdown lands in your clipboard.--include-skills / --include-education — pull additional sections from the profile (no extra rate-limit cost; same call).POST /linkedin/profile — fetch name, headline, experience, location. Limited to 120 unique profiles/day per LinkedIn account; cached responses do not count.POST /linkedin/posts/latest — fetch the last N posts (max 20).Both endpoints accept a profileId (the URL slug, e.g. williamhgates from linkedin.com/in/williamhgates/). The script extracts this from the URL automatically.
API access requires a paid plan ($10/month Ultimate Outreach is the entry tier). New accounts get a trial. There is no free API tier — the "free" plan on the pricing page is for the post-boosting product only. See docs/pricing.md.
CONNECTSAFELY_API_KEY → exit 2 with a link to get one.X-RateLimit-Reset.~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.