Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
mvanhorn avatar

Pp Contact Goat

  • 651 installs
  • 1.9k repo stars
  • Updated August 4, 2026
  • mvanhorn/printing-press-library

Contact Goat is an agent skill that searches, enriches, and maps warm-intro paths across LinkedIn, Happenstance, and Deepline directly from the terminal.

About

Contact Goat is a terminal-native enrichment skill that lets solo builders search, enrich, and map professional networks across LinkedIn, Happenstance, and Deepline without leaving the CLI. It answers questions such as who you already know at a target company, which warm introduction paths exist, and which prospects to prioritize. The skill intelligently waterfalls across free cookie-based quotas and paid API credits, returning clean structured dossiers, network diffs, and prospect lists. Ideal when you need fast, accurate sales intelligence while staying inside your coding environment.

  • Combines LinkedIn MCP, Happenstance (cookie + API), and Deepline for waterfall enrichment
  • Answers 'who do I know at this company' and 'how do I get a warm intro' in one command
  • Produces network diffs, prospect lists, and enriched contact dossiers
  • Two Happenstance auth modes: free Chrome-cookie quota and paid bearer API key
  • Go binary with zero extra runtime dependencies after install

Pp Contact Goat by the numbers

  • 651 all-time installs (skills.sh)
  • +14 installs in the week ending Aug 4, 2026 (Skillselion tracking)
  • Ranked #138 of 853 Sales & Marketing skills by installs in the Skillselion catalog
  • Security screen: HIGH risk (skills.sh audit)
  • Data as of Aug 5, 2026 (Skillselion catalog sync)
npx skills add https://github.com/mvanhorn/printing-press-library --skill pp-contact-goat

Add your badge

Show developers this skill is listed on Skillselion. Paste this into your README.

Listed on Skillselion
Installs651
repo stars1.9k
Security audit1 / 3 scanners passed
Last updatedAugust 4, 2026
Repositorymvanhorn/printing-press-library

What it does

Quickly surface warm intros, decision-maker maps, and cross-network enrichment directly from the terminal when qualifying prospects or mapping go-to-market paths.

Who is it for?

Best when you're mapping early customers, validating demand, or building outbound pipelines and want network intelligence inside your terminal workflow.

Skip if: Skip if you need enterprise compliance features, users without any LinkedIn presence, or situations where a full CRM replacement is required.

When should I use this skill?

Use when the user asks who they know at a company, how to get a warm intro, who to prospect, or wants cross-source dossiers, network diffs, or waterfall enrichment.

What you get

You receive a structured contact dossier or prospect list with ranked warm paths that can be handed directly to an outreach agent or used to refine your go-to-market plan.

  • structured contact dossier
  • ranked warm-intro paths
  • network diff report

By the numbers

  • 3 enrichment sources (LinkedIn, Happenstance, Deepline)
  • 2 Happenstance auth surfaces (cookie session and bearer API)

Files

SKILL.mdMarkdownGitHub ↗

<!-- GENERATED FILE — DO NOT EDIT. This file is a verbatim mirror of library/sales-and-crm/contact-goat/SKILL.md, regenerated post-merge by tools/generate-skills/. Hand-edits here are silently overwritten on the next regen. Edit the library/ source instead. See the repository agent guide, section "Generated artifacts: registry.json, cli-skills/". -->

Contact Goat - Printing Press CLI

Prerequisites: Install the CLI

This skill drives the contact-goat-pp-cli binary. You must verify the CLI is installed before invoking any command from this skill. If it is missing, install it first:

1. Install via the Printing Press installer. It defaults binaries to $HOME/.local/bin on macOS/Linux and %LOCALAPPDATA%\Programs\PrintingPress\bin on Windows:

   npx -y @mvanhorn/printing-press-library install contact-goat --cli-only

2. Verify: contact-goat-pp-cli --version 3. Ensure the reported install directory is on $PATH for the agent/runtime that will invoke this skill.

If the npx install fails (no Node, offline, etc.), fall back to a direct Go install (requires Go 1.26.4 or newer):

go install github.com/mvanhorn/printing-press-library/library/sales-and-crm/contact-goat/cmd/contact-goat-pp-cli@latest

If --version reports "command not found" after install, the runtime cannot see the binary directory on $PATH. Do not proceed with skill commands until verification succeeds.

When to Use This CLI

Reach for this when the user wants:

  • coverage of a company (who you already know there, ranked by relationship strength)
  • a warm-intro path to a target person (mutual connections across sources)
  • prospecting (fan-out search with cross-source dedupe)
  • a unified dossier (LinkedIn profile + Happenstance research + optional Deepline enrichment)
  • network diffs over time (what's new in your graph in the last N days)
  • waterfall enrichment that walks free sources before paid ones

Skip it when the user has a workflow that lives entirely inside LinkedIn Sales Navigator, or when they only need raw LinkedIn scraping with no Happenstance or Deepline overlay (use the LinkedIn MCP directly in that case).

Two Auth Surfaces

Happenstance has two parallel auth paths and the CLI uses both:

SurfaceAuthCostDefault?
Cookie web appChrome session cookiesFree monthly allocationYES (auto-prefer)
Public REST APIHAPPENSTANCE_API_KEY (Bearer)2 credits/search, 1 credit/researchFallback only

The auto router prefers cookies until quota is exhausted, then falls back to bearer with an explicit "cost spent" log line on stderr. Use --source api on coverage, hp people, prospect, or warm-intro to opt into bearer explicitly (e.g. for the richer research schema or scoped group searches). Use --source hp to force the cookie surface.

The api hpn * subcommands always use the bearer surface and always cost credits. Provision and rotate keys at https://happenstance.ai/settings/api-keys.

Argument Parsing

Parse $ARGUMENTS:

1. Empty, help, or --help -> run contact-goat-pp-cli --help 2. Starts with install and ends with mcp -> MCP installation (see below) 3. Starts with install -> CLI installation (see below) 4. Anything else -> Direct Use (map the request to the best command and run it)

MCP Server Installation

1. Install the MCP server:

   go install github.com/mvanhorn/printing-press-library/library/sales-and-crm/contact-goat/cmd/contact-goat-pp-mcp@latest

2. Register with Claude Code:

   claude mcp add -e DEEPLINE_API_KEY=value -e HAPPENSTANCE_API_KEY=value contact-goat-pp-mcp -- contact-goat-pp-mcp

Ask the user for actual values of required API keys before running. 3. Verify: claude mcp list.

The MCP server exposes 16 tools. The four bearer-API tools added in this release are:

  • api_search - Run a Happenstance public-API search (costs 2 credits)
  • api_research - Run a deep-research dossier (costs 1 credit on completion)
  • api_groups_list - List Happenstance groups for the caller (free)
  • api_usage - Show live credit balance and usage history (free)

The other 12 tools cover the cookie surface (search, friends, feed, notifications, dossier, etc.) and the LinkedIn / Deepline integrations.

Direct Use

1. Check if installed: which contact-goat-pp-cli. If not found, offer CLI installation (above). 2. Discover commands: contact-goat-pp-cli --help. Drill into subcommand help with contact-goat-pp-cli <command> --help or contact-goat-pp-cli api hpn <subcommand> --help. 3. Match the user query to the best command (see Notable Commands below). 4. Execute with the --agent flag for structured, token-efficient output:

   contact-goat-pp-cli <command> [args] --agent

5. The --agent flag sets --json --compact --no-input --no-color --yes.

Source routing (cookie vs bearer) is automatic. The auto router prefers the free cookie surface and falls back to the paid bearer surface only when cookie quota is exhausted, logging a "cost spent" notice on stderr. Pass --source api to opt into bearer explicitly (richer schema, group-scoped searches), or --source hp to force cookies.

Enrichment Preflight (read this before running any enrichment command)

These commands spend Deepline credits and REQUIRE DEEPLINE_API_KEY or a BYOK setup:

  • waterfall (unless you pass --byok and have BYOK providers configured)
  • dossier --enrich-email
  • deepline find-email / enrich-person / email-find / phone-find
  • deepline search-people / search-companies / enrich-company

Before invoking any of these, verify auth by running doctor first:

contact-goat-pp-cli doctor --agent | grep -i deepline

deepline_env shows the resolution source:

  • set (env)DEEPLINE_API_KEY exported in the current shell
  • set (flag)--deepline-key passed on the command line
  • set (file:~/.local/deepline/<host>/.env) — auto-discovered from the official Deepline CLI's persisted key (the user authenticated with deepline auth register or deepline auth status; no shell export needed)
  • not set — none of the above. Ask the user for a key, or for a BYOK Hunter/Apollo key

The auto-discovery path means a user who has the Deepline CLI installed and authenticated does NOT need to re-export the key into their shell — contact-goat reads ~/.local/deepline/code-deepline-com/.env directly (mode 0600, owned by the user). Don't ask the user to re-export when set (file:...) is reported. If deepline_discovery_skipped is also reported, those are candidate files the resolver rejected for a security reason (wrong mode, missing prefix); surface them so the user can fix the underlying issue.

Provider chain by target kind (waterfall):

TargetPrimaryFallback 1Fallback 2
LinkedIn URLapollo_people_matchhunter_people_findcontactout_enrich_person
Emailapollo_people_matchhunter_people_find-
Name + --companydropleads_email_finderhunter_email_finderdatagma_find_email

Notes:

  • Name targets MUST pass --company <domain> (or set CONTACT_GOAT_COMPANY env).
  • Apollo returns personal_emails[] when available; treat email_status: "unavailable" as "no verified work email on file" (the personal email is still usable).
  • Dropleads returns status: "catch_all" for domains on Google Workspace; the email is a pattern guess, not a verified mailbox.
  • Provider-level 403s are surfaced as "Provider not connected" rather than "Check DEEPLINE_API_KEY"; they do not abort the chain. The next provider is tried automatically.

Notable Commands

CommandWhat it does
coverage <company>Who you know at a company across LinkedIn + Happenstance, ranked by relationship strength
coverage --location <city>Who you know in a city. Bearer-only (cookie surface has no city-search); use --source api.
hp people <query>Happenstance graph people-search (1st / 2nd / 3rd degree). --csv emits flat CSV with semicolon-joined bridges.
prospect <query>Fan-out search across LinkedIn + Happenstance (+ opt-in Deepline), deduped
warm-intro <target>Mutual connections across sources who could intro you to a target
waterfall <target> [--company X]Free-sources-first enrichment, falls through to Deepline provider chain. Requires DEEPLINE_API_KEY or --byok. Bare-name targets need --company
dossier <target> [--enrich-email]Unified LinkedIn + Happenstance + (optional) Deepline dossier. --enrich-email requires DEEPLINE_API_KEY
deepline find-email "<name>" --company <domain>Single-call work-email lookup via dropleads_email_finder
deepline enrich-person <linkedin-url>Full person record via apollo_people_match (includes personal_emails[])
api hpn search <text>Bearer-API search (costs 2 credits, async with poll). --first-degree-only keeps only 1st-degree matches; --min-score N drops weak signals (see docs/scoring.md); --all --max-results N auto-paginates.
api hpn research <description>Bearer-API deep dossier (costs 1 credit on completion)
api hpn usageLive credit balance, purchases, recent usage events (free)
doctorCheck CLI health, both Happenstance surfaces, LinkedIn, and Deepline. Reports happenstance_graph_status (ok / stale / very_stale) on the LinkedIn upload age.

Run any command with --help for full flag documentation.

Agent Mode

Add --agent to any command. Expands to: --json --compact --no-input --no-color --yes.

  • Pipeable — JSON on stdout, errors on stderr
  • Filterable--select keeps a subset of fields, with dotted-path support (see below)
  • Previewable--dry-run shows the request without sending
  • Cacheable — GET responses cached for 5 minutes, bypass with --no-cache
  • Non-interactive — never prompts, every input is a flag

Filtering output

--select accepts dotted paths to descend into nested responses; arrays traverse element-wise:

contact-goat-pp-cli <command> --agent --select id,name
contact-goat-pp-cli <command> --agent --select items.id,items.owner.name

Use this to narrow huge payloads to the fields you actually need — critical for deeply nested API responses.

Response envelope

Data-layer commands wrap output in {"meta": {...}, "results": <data>}. Parse .results for data and .meta.source to know whether it's live or local. The N results (live) summary is printed to stderr only when stdout is a TTY; piped/agent consumers see pure JSON on stdout.

Exit Codes

CodeMeaning
0Success
2Usage error (wrong arguments)
3Resource not found
4Authentication required
5API error (upstream issue, including bearer 402 out-of-credits)
7Rate limited (cookie 429 or bearer 429; auto-fallback may apply)

Related skills

How it compares

Use instead of jumping between multiple browser-based sales tools or manual spreadsheet enrichment.

FAQ

Who is Contact Goat for?

Contact Goat is for developers and founders who need fast, accurate professional network intelligence without leaving their terminal or coding environment.

When should I use Contact Goat?

Use it when deciding which companies to target, identifying warm intros before outreach, building prospect lists for a new product, comparing your network against a competitor's customers, or enriching leads during customer discovery and early sales.

Is Contact Goat safe to install?

Users should review the Security Audits panel on this page before installing. The skill requires access to LinkedIn cookies or an API key and runs as a local Go binary.

Sales & Marketingpricingecommerce

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.