gooseworks-ai/contact-finder-contactout
Find emails, phone numbers, and enrich profiles using ContactOut. LinkedIn enrichment, people search, company enrichment, and batch operations.
npx skills add https://github.com/gooseworks-ai/goose-skills --skill contact-finder-contactout
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"
Sales and recruitment intelligence platform. Find anyone's email and phone number, enrich LinkedIn profiles, look up people from email or multiple signals, and get company info from domains.
Get full profile details (email, phone, work history, education, skills) from a 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":"contactout","path":"/v1/linkedin/enrich","query":{"profile":"https://www.linkedin.com/in/williamhgates"}}'
<details>
<summary>curl equivalent</summary>
curl -X POST "https://api.orth.sh/v1/run" \
-H "Content-Type: application/json" \
-d '{"api":"contactout","path":"/v1/linkedin/enrich","query":{"profile":"https://www.linkedin.com/in/williamhgates"}}'
</details>
Parameters:
Returns: Full profile with emails, phones, work history, education, skills, company info, seniority, job function.
Get just contact details (emails, phones) for a LinkedIn profile. Lighter than full enrichment.
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
-H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"api":"contactout","path":"/v1/people/linkedin","query":{"profile":"https://www.linkedin.com/in/williamhgates","include_phone":"true"}}'
<details>
<summary>curl equivalent</summary>
curl -X POST "https://api.orth.sh/v1/run" \
-H "Content-Type: application/json" \
-d '{"api":"contactout","path":"/v1/people/linkedin","query":{"profile":"https://www.linkedin.com/in/williamhgates","include_phone":"true"}}'
</details>
Parameters:
personal, work, personal,work, or nonecurl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
-H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"api":"contactout","path":"/v1/people/linkedin/batch","body":{"profiles":["https://linkedin.com/in/person1","https://linkedin.com/in/person2"]}}'
Parameters:
Get profile details from an email address. Personal emails have higher match rates.
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
-H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"api":"contactout","path":"/v1/email/enrich","query":{"email":"[email protected]","include":"work_email"}}'
Parameters:
work_email to include work email in responseEnrich a person using multiple data points. Needs at least one primary identifier (linkedin_url, email, or phone) or 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":"contactout","path":"/v1/people/enrich"}'
"full_name": "Patrick Collison",
"company": ["Stripe"],
"company_domain": ["stripe.com"],
"include": ["work_email", "personal_email", "phone"]
}'
Parameters:
work_email, personal_email, phoneNote: Name-only searches need at least one secondary param (company, domain, education, location, or job_title).
Get company information from domain names.
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
-H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"api":"contactout","path":"/v1/domain/enrich","body":{"domains":["stripe.com","google.com"]}}'
Parameters:
Returns: Company details including name, industry, size, revenue, funding, headquarters, LinkedIn URL, specialties.
Count matching profiles without returning data. Use to estimate results before searching.
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
-H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"api":"contactout","path":"/v1/people/count","body":{"domain":["stripe.com"],"seniority":["VP","CXO","Director"]}}'
Parameters: Same search filters as People Search (name, job_title, company, domain, location, industry, seniority). Returns only total_results.
Cost: Free, no credits consumed.
Owner / Founder, CXO, Partner, VP, Head, Director, Manager, Senior, Entry, Intern
Operations, Business Development, Sales, Education, Engineering, Healthcare Services, Information Technology, Administrative, Arts and Design, Customer Success and Support, Finance, Community and Social Services, Media and Communication, Accounting, Marketing, Human Resources, Research, Program and Project Management, Legal, Military and Protective Services, Consulting, Entrepreneurship, Real Estate, Quality Assurance, Purchasing, Product Management, Leadership
1_10, 11_50, 51_200, 201_500, 501_1000, 1001_5000, 5001_10000, 10001
Computer Software, Internet, Financial Services, Hospital & Health Care, Marketing and Advertising, Information Technology and Services, Telecommunications, Management Consulting, Real Estate, Retail, and many more. Full list: https://docs.google.com/spreadsheets/d/14drLUuDLgxPflIsPNgV_w05N6guY4GtCCCd36zT4vg0
"Get Bill Gates' 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":"contactout","path":"/v1/linkedin/enrich","query":{"profile":"https://www.linkedin.com/in/williamhgates"}}'
"Look up who this email belongs to"
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
-H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"api":"contactout","path":"/v1/email/enrich","query":{"email":"[email protected]"}}'
"Find Patrick Collison's contact info"
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
-H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"api":"contactout","path":"/v1/people/enrich","body":{"full_name":"Patrick Collison","company":["Stripe"],"include":["work_email","personal_email","phone"]}}'
"Get company info for stripe.com"
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
-H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"api":"contactout","path":"/v1/domain/enrich","body":{"domains":["stripe.com"]}}'
"How many CTOs are there at fintech companies in SF?"
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
-H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"api":"contactout","path":"/v1/people/count","body":{"job_title":["CTO"],"industry":["Financial Services"],"location":["San Francisco"]}}'
"Get contact details for these 3 LinkedIn profiles"
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
-H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"api":"contactout","path":"/v1/people/linkedin/batch","body":{"profiles":["https://linkedin.com/in/person1","https://linkedin.com/in/person2","https://linkedin.com/in/person3"]}}'
/v1/people/count first (free) to estimate results before committing to paid callsTake gooseworks-ai/contact-finder-contactout from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.
The instructions reference npx.
Without those the skill loads but fails at the first command.