Skip to content
Marketing
Skill

/comprehensive-enrichment

Enrich any person or company from any identifier — email, name, LinkedIn URL, domain, company name, Twitter/X handle. Use when asked to enrich, look up, or research a lead, contact, person, or company.

From plugin
goose-skills
1.2k200 skills
Install
$ npx -y skills add gooseworks-ai/goose-skills --skill comprehensive-enrichment --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/comprehensive-enrichment

Context preview

The summary Claude sees to decide when to auto-load this skill.

Enrich any person or company from any identifier — email, name, LinkedIn URL, domain, company name, Twitter/X handle. Use when asked to enrich, look up, or research a lead, contact, person, or company.

SKILL.md

comprehensive-enrichment.SKILL.md
name: comprehensive-enrichment
description: Enrich any person or company from any identifier — email, name, LinkedIn URL, domain, company name, Twitter/X handle. Use when asked to enrich, look up, or research a lead, contact, person, or company.
source: orthogonal

Comprehensive Enrichment — Person & Company

Setup

Read your credentials from ~/.gooseworks/credentials.json:

export GOOSEWORKS_API_KEY=$(python3 -c "import json;print(json.load(open('$HOME/.gooseworks/credentials.json'))['api_key'])")
export GOOSEWORKS_API_BASE=$(python3 -c "import json;print(json.load(open('$HOME/.gooseworks/credentials.json')).get('api_base','https://api.gooseworks.ai'))")

If ~/.gooseworks/credentials.json does not exist, tell the user to run: `npx gooseworks login`

All endpoints use Bearer auth: `-H "Authorization: Bearer $GOOSEWORKS_API_KEY"`

Maximum data + correctness. Use ALL relevant APIs, cross-reference results, flag conflicts.

1. Identifier Detection

Detect input type, then route:

| Input | Contains | Route | |-------|----------|-------| | Email | `@` | Person + Company (extract domain) | | LinkedIn person URL | `linkedin.com/in/` | Person + Company (from results) | | LinkedIn company URL | `linkedin.com/company/` | Company only | | Domain | `*.com`, `*.io`, etc. | Company only | | Company name | No special pattern | Company only | | Name + company | "John Doe at Stripe" | Person + Company | | Twitter/X handle | `@handle` or `x.com/` | Person + Company (from results) |

**Person always cascades to company.** Once person enrichment reveals their employer (company name, domain, or LinkedIn company URL), automatically run full company enrichment too. The only time you skip company is if you truly can't identify one. **If LinkedIn person URL provided:** use full URL for Fiber calls, extract username/slug for other endpoints.

2. Person Enrichment

Run ALL of these in parallel where possible. Collect everything, then compile.

2a. Full Profile & Contact Info

**Fiber kitchen-sink** (accepts LinkedIn URL, email, or name+company):

# By LinkedIn URL:
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
  -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"api":"fiber","path":"/v1/kitchen-sink/person","body":{"profileIdentifier":"https://linkedin.com/in/johndoe"}}'

# By email:
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
  -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"api":"fiber","path":"/v1/kitchen-sink/person","body":{"emailAddress":"john@stripe.com"}}'

# By name + company:
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
  -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"api":"fiber","path":"/v1/kitchen-sink/person"}'
  "personName": {"fullName": "John Doe"},
  "companyName": {"name": "Stripe"},
  "companyDomain": {"domain": "stripe.com"}
}'

**Nyne person search** (async — deep work history, education, social):

# Step 1: POST to start search
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
  -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"api":"nyne","path":"/person/search","body":{"query":"John Doe Stripe"}}'
# Step 2: Poll with GET using request_id
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
  -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"api":"nyne","path":"/person/search","query":{"request_id":"REQUEST_ID"}}'

**Sixtyfour enrich-lead** (AI-powered — slow, ~30-60s, but finds rich context):

curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
  -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"api":"sixtyfour","path":"/enrich-lead"}'
  "lead_info": {"first_name": "John", "last_name": "Doe", "company": "Stripe", "linkedin_url": "https://linkedin.com/in/johndoe"},
  "struct": {"work_email": "Work email", "personal_email": "Personal email (Gmail, etc.)", "phone": "Phone number", "title": "Job title", "bio": "Short bio"}
}'

2b. Email — Find & Verify

Collect ALL emails — work AND personal. Many use cases (recruiting, etc.) need personal emails. Present each email with its type (work/personal) and verification status.

**Find work email** (cross-reference Hunter + Tomba):

# Hunter (returns work email)
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
  -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"api":"hunter","path":"/v2/email-finder","query":{"domain":"stripe.com","first_name":"John","last_name":"Doe"}}'

# Tomba (returns work email + sometimes personal)
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
  -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"api":"tomba","path":"/v1/email-finder","query":{"domain":"stripe.com","company":"Stripe","first_name":"John","last_name":"Doe"}}'

**Find personal email** — these sources often return personal (Gmail, etc.):

# Tomba from LinkedIn (often returns personal email)
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
  -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"api":"tomba","path":"/v1/linkedin","query":{"url":"https://linkedin.com/in/johndoe"}}'

# Tomba enrich (returns all known emails for a person)
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
  -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"api":"tomba","path":"/v1/enrich","query":{"email":"john@stripe.com"}}'

Nyne person/search and Sixtyfour enrich-lead (Section 2a) also return personal emails — check their results.

**Verify ALL found emails** (run all three verifiers per em

Read more
Ships withgoose-skills

Put your AI agent on the growth team. Research customers and competitors, analyze what is working, create the next campaign, and learn from the result.

Get the whole plugin

Other skills on goose-skills.