Comprehensive Enrichment — Person & Company

Enrich any person or company from any identifier — email, name, LinkedIn URL, domain, company name, Twitter/X handle.

How to use it

  1. Hit Copy the whole skill.
  2. Claude: ⋯ → Download .md, then Customize → Skills → Add → Upload skill.
    ChatGPT: make a Project and paste it into Instructions.
    Neither? Paste it at the top of a new chat — it works for that chat.
  3. Describe your job in plain words. The AI follows the skill from there.
Claude Code — installs the whole folder, not just SKILL.md
npx degit gooseworks-ai/goose-skills/skills/lead-generation/capabilities/comprehensive-enrichment#main ~/.claude/skills/comprehensive-enrichment

For one project only, change the path to .claude/skills/comprehensive-enrichment.

Not working?
  • Check which app you pasted it into — the steps above name the right one.
  • Some skills need the paid tier of Claude or ChatGPT.
Step-by-step guide with screenshots · Ask in the forum

Paste into Claude, ChatGPT or Cursor.

Show the full text543 lines
comprehensive-enrichment/SKILL.md543 lines23.3 KBpushed 96d agoRawView on GitHub

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":"[email protected]"}}'

# 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":"[email protected]"}}'

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 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-verifier","query":{"email":"[email protected]"}}'
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-verifier","query":{"email":"[email protected]"}}'
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/validate-email/single","body":{"email":"[email protected]"}}'

Verify every email found — work and personal. Run verifiers in parallel across all emails.

2c. Phone

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":"/find-phone"}'
  "lead": {"first_name": "John", "last_name": "Doe", "company": "Stripe"}
}'

2d. Social Profiles & Activity

LinkedIn profile (Fiber):

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/linkedin-live-fetch/profile/single","body":{"identifier":"https://linkedin.com/in/johndoe"}}'

LinkedIn recent posts (Fiber):

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/linkedin-live-fetch/profile-posts","body":{"identifier":"https://linkedin.com/in/johndoe"}}'

Twitter/X activity (Nyne — async, returns tweets + engagement metrics):

# Step 1: POST with Twitter 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":"","path":"","body":{"social_media_url":"https://x.com/HANDLE"}}'
# Step 2: Poll with GET
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/newsfeed","query":{"request_id":"REQUEST_ID"}}'

2e. Open-Ended Research

curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
  -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"api":"linkup","path":"/search"}'
  "q": "John Doe Stripe VP Engineering recent news interviews talks",
  "depth": "deep",
  "outputType": "sourcedAnswer"
}'

2f. Compile Person Data

Cross-reference all API results. Merge name, title, emails (work + personal with verification status), phone, LinkedIn, Twitter, work history, education, and recent activity. When APIs disagree, keep both values with source labels. Once employer is identified, run full company enrichment (Section 3). See Section 5 for output formatting.

3. Company Enrichment

Run ALL of these in parallel where possible.

3a. Overview

Brand.dev (industry, size, description, logo):

# By domain (primary):
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
  -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"api":"brand-dev","path":"/v1/brand/retrieve","query":{"domain":"stripe.com"}}'

# By company name (if no domain):
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
  -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"api":"brand-dev","path":"/v1/brand/retrieve-by-name","query":{"name":"Stripe"}}'

# By email (extracts domain):
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
  -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"api":"brand-dev","path":"/v1/brand/retrieve-by-email","query":{"email":"[email protected]"}}'

Hunter company data:

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/domain-search","query":{"domain":"stripe.com"}}'

Fiber company data (LinkedIn-enriched):

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/company","body":{"companyDomain":{"domain":"stripe.com"}}}'

3b. Leadership & Employees

Key people by title:

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/natural-language-search/profiles","body":{"query":"CEO, CTO, CFO, COO, VP at Stripe","pageSize":10}}'

3c. Funding

Nyne funding history (async):

# Step 1: POST
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
  -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"api":"","path":"","body":{"company_name":"Stripe"}}'
# Step 2: Poll with GET
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":"/company/funding","query":{"request_id":"REQUEST_ID"}}'

Nyne investors:

curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
  -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"api":"","path":"","body":{"company_domain":"stripe.com"}}'

3d. Products & Web Presence

Products from website:

curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
  -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"api":"brand-dev","path":"/v1/brand/ai/products","body":{"domain":"stripe.com"}}'

Scrape for pricing/features:

curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
  -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"api":"scrapegraph","path":"/v1/smartscraper"}'
  "website_url": "https://stripe.com/pricing",
  "user_prompt": "Extract all products, pricing tiers, and features"
}'

Find competitors/similar companies:

curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
  -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"api":"exa","path":"/findSimilar"}'
  "url": "https://stripe.com",
  "numResults": 10,
  "contents": {"text": true}
}'

3e. Open-Ended Research

curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
  -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"api":"linkup","path":"/search"}'
  "q": "Stripe recent news funding announcements partnerships press releases",
  "depth": "deep",
  "outputType": "sourcedAnswer"
}'

3f. Compile Company Data

Cross-reference all API results. Merge overview, leadership, funding, products, competitors, news, and social presence. When APIs disagree, keep both values with source labels. See Section 5 for output formatting.

4. Full Pipeline Example — enrich [email protected]

Step 1: Detect — Email → person enrichment + extract domain stripe.com for company.

Step 2: Person enrichment (run in parallel):

# Profile (3 sources)
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":"[email protected]","companyDomain":{"domain":"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":"nyne","path":"/person/search","body":{"query":"john 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":"sixtyfour","path":"/enrich-lead","body":{"lead_info":{"email":"[email protected]","company":"Stripe"},"struct":{"work_email":"Work email","personal_email":"Personal email","phone":"Phone","title":"Title","bio":"Bio"}}}'

# Find 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/enrich","query":{"email":"[email protected]"}}'

# Verify work email (3 sources)
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-verifier","query":{"email":"[email protected]"}}'
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-verifier","query":{"email":"[email protected]"}}'
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/validate-email/single","body":{"email":"[email protected]"}}'
# Also verify any personal emails found with the same 3 verifiers

# Phone
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":"/find-phone","body":{"lead":{"email":"[email protected]","company":"Stripe"}}}'

# Research
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
  -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"api":"linkup","path":"/search","body":{"q":"john stripe.com","depth":"deep","outputType":"sourcedAnswer"}}'

Once you have the person's full name + LinkedIn from Step 2, fire off:

# LinkedIn profile + posts
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/linkedin-live-fetch/profile/single","body":{"identifier":"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/linkedin-live-fetch/profile-posts","body":{"identifier":"LINKEDIN_URL"}}'

# Twitter (if discovered)
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
  -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"api":"","path":"","body":{"social_media_url":"https://x.com/TWITTER_HANDLE"}}'

Step 3: Company enrichment (run in parallel with person):

# Overview
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
  -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"api":"brand-dev","path":"/v1/brand/retrieve","query":{"domain":"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":"hunter","path":"/v2/domain-search","query":{"domain":"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":"fiber","path":"/v1/kitchen-sink/company","body":{"companyDomain":{"domain":"stripe.com"}}}'

# Leadership
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/natural-language-search/profiles","body":{"query":"CEO, CTO, CFO, COO, VP at Stripe","pageSize":10}}'

# Funding
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
  -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"api":"","path":"","body":{"company_name":"Stripe"}}'
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
  -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"api":"","path":"","body":{"company_domain":"stripe.com"}}'

# Products & competitors
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
  -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"api":"brand-dev","path":"/v1/brand/ai/products","body":{"domain":"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":"scrapegraph","path":"/v1/smartscraper","body":{"website_url":"https://stripe.com/pricing","user_prompt":"Extract all products, pricing tiers, and features"}}'
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
  -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"api":"exa","path":"/findSimilar","body":{"url":"https://stripe.com","numResults":10}}'

# News
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
  -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"api":"linkup","path":"/search","body":{"q":"Stripe recent news funding announcements","depth":"deep","outputType":"sourcedAnswer"}}'

Step 4: Compile & Format — Merge all results, cross-reference, flag conflicts, then present using the two-tier output format (Section 5): summary card first, full details below.

5. Output Format

Always present results in two tiers: a scannable summary card on top, then full details below.

Tier 1: Summary Card

Lead with this. A sales rep should be able to scan it in 30 seconds.

For a Person (+ their company):

## 🔍 {Full Name} — {Title} at {Company}

**Contact**
- ✉️ Work: {email} ({verification status})
- ✉️ Personal: {email} ({verification status})
- 📱 {phone}
- 🔗 LinkedIn: {url}
- 𝕏 Twitter: {url}

**Bio**: {One-liner from best available source}

**Personalization Angles**
1. {Recent activity, talk, post, or news mention — with date}
2. {Another angle}
3. {Another angle}

**Company Snapshot**: {Company} · {industry} · {employee count} employees · HQ: {location}
Latest funding: {round type} — ${amount} ({date}) · Total raised: ${total} · Valuation: ${valuation}

For a Company (standalone):

## 🏢 {Company Name}

**Overview**
- 🌐 {domain}
- 🏷️ {industry}
- 👥 {employee count} employees
- 📍 HQ: {location}

**Funding**: {latest round} — ${amount} ({date}) · Total raised: ${total} · Valuation: ${valuation}

**Key Decision Makers**
| Name | Title | Email |
|------|-------|-------|
| {name} | {title} | {email} |
| ... | ... | ... |

**Recent News & Icebreakers**
1. {headline — date — source}
2. {headline — date — source}
3. {headline — date — source}

Tier 2: Full Details

Below a clear separator (---), include the complete deep-dive for those who want to dig in:

  • Person: Full work history, education, all social profiles, all LinkedIn posts, all tweets + engagement, publications, full Linkup research, all email sources + verification breakdown
  • Company: Full description, all funding rounds with dates/amounts/investors, complete leadership list, products + pricing tiers, competitor analysis, full news results, social presence stats

Present Tier 2 with clear section headers. Include source labels on every data point. Flag all conflicts between APIs.

6. Tips

  • Parallelize: Run all independent API calls concurrently — person and company enrichment can run simultaneously
  • Nyne is async: POST returns request_id, poll with GET until status is complete (5-20 seconds)
  • Conflicts: When APIs disagree, show both values with source labels — never silently pick one
  • LinkedIn URLs: Dramatically improve match rates for Fiber and Tomba — extract from any source that returns them
  • All emails matter: Always collect both work AND personal emails — recruiting and hiring use cases need personal emails. Label each as work/personal
  • Email verification: Verify every email (work + personal) with all 3 verifiers (Hunter, Tomba, Fiber) and take consensus
  • Person → Company: Person enrichment always cascades — once you identify their employer, run full company enrichment automatically
  • Linkup deep search: Best for personalization angles — recent talks, interviews, blog posts, news mentions
  • Sixtyfour enrich-lead is slow: Takes 30-60 seconds (AI web research). Fire it early, don't block on it — continue processing other API results and merge Sixtyfour data when it arrives
  • Nyne newsfeed for Twitter/X: Pass the Twitter URL to get recent tweets + engagement. Async like other Nyne endpoints
  • Adaptive: Skip APIs that don't apply (e.g., don't run email-finder if email is already known, don't run funding search for public megacorps)
  • Tomba linkedin: If you have a LinkedIn URL but no email, Tomba's LinkedIn finder is very effective
  • Company from email: Brand.dev's retrieve-by-email endpoint handles domain extraction automatically
1---
2name: comprehensive-enrichment
3description: 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.
4source: orthogonal
5---
6 
7 
8# Comprehensive Enrichment — Person & Company
9 
10## Setup
11 
12Read your credentials from ~/.gooseworks/credentials.json:
13```bash
14export GOOSEWORKS_API_KEY=$(python3 -c "import json;print(json.load(open('$HOME/.gooseworks/credentials.json'))['api_key'])")
15export GOOSEWORKS_API_BASE=$(python3 -c "import json;print(json.load(open('$HOME/.gooseworks/credentials.json')).get('api_base','https://api.gooseworks.ai'))")
16```
17 
18If ~/.gooseworks/credentials.json does not exist, tell the user to run: `npx gooseworks login`
19 
20All endpoints use Bearer auth: `-H "Authorization: Bearer $GOOSEWORKS_API_KEY"`
21 
22 
23Maximum data + correctness. Use ALL relevant APIs, cross-reference results, flag conflicts.
24 
25## 1. Identifier Detection
26 
27Detect input type, then route:
28 
29| Input | Contains | Route |
30|-------|----------|-------|
31| Email | `@` | Person + Company (extract domain) |
32| LinkedIn person URL | `linkedin.com/in/` | Person + Company (from results) |
33| LinkedIn company URL | `linkedin.com/company/` | Company only |
34| Domain | `*.com`, `*.io`, etc. | Company only |
35| Company name | No special pattern | Company only |
36| Name + company | "John Doe at Stripe" | Person + Company |
37| Twitter/X handle | `@handle` or `x.com/` | Person + Company (from results) |
38 
39**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.
40**If LinkedIn person URL provided:** use full URL for Fiber calls, extract username/slug for other endpoints.
41 
42## 2. Person Enrichment
43 
44Run ALL of these in parallel where possible. Collect everything, then compile.
45 
46### 2a. Full Profile & Contact Info
47 
48**Fiber kitchen-sink** (accepts LinkedIn URL, email, or name+company):
49```bash
50# By LinkedIn URL:
51curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
52 -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
53 -H "Content-Type: application/json" \
54 -d '{"api":"fiber","path":"/v1/kitchen-sink/person","body":{"profileIdentifier":"https://linkedin.com/in/johndoe"}}'
55 
56# By email:
57curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
58 -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
59 -H "Content-Type: application/json" \
60 -d '{"api":"fiber","path":"/v1/kitchen-sink/person","body":{"emailAddress":"[email protected]"}}'
61 
62# By name + company:
63curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
64 -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
65 -H "Content-Type: application/json" \
66 -d '{"api":"fiber","path":"/v1/kitchen-sink/person"}'
67 "personName": {"fullName": "John Doe"},
68 "companyName": {"name": "Stripe"},
69 "companyDomain": {"domain": "stripe.com"}
70}'
71```
72 
73**Nyne person search** (async — deep work history, education, social):
74```bash
75# Step 1: POST to start search
76curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
77 -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
78 -H "Content-Type: application/json" \
79 -d '{"api":"nyne","path":"/person/search","body":{"query":"John Doe Stripe"}}'
80# Step 2: Poll with GET using request_id
81curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
82 -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
83 -H "Content-Type: application/json" \
84 -d '{"api":"nyne","path":"/person/search","query":{"request_id":"REQUEST_ID"}}'
85```
86 
87**Sixtyfour enrich-lead** (AI-powered — slow, ~30-60s, but finds rich context):
88```bash
89curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
90 -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
91 -H "Content-Type: application/json" \
92 -d '{"api":"sixtyfour","path":"/enrich-lead"}'
93 "lead_info": {"first_name": "John", "last_name": "Doe", "company": "Stripe", "linkedin_url": "https://linkedin.com/in/johndoe"},
94 "struct": {"work_email": "Work email", "personal_email": "Personal email (Gmail, etc.)", "phone": "Phone number", "title": "Job title", "bio": "Short bio"}
95}'
96```
97 
98### 2b. Email — Find & Verify
99 
100Collect ALL emails — work AND personal. Many use cases (recruiting, etc.) need personal emails. Present each email with its type (work/personal) and verification status.
101 
102**Find work email** (cross-reference Hunter + Tomba):
103```bash
104# Hunter (returns work email)
105curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
106 -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
107 -H "Content-Type: application/json" \
108 -d '{"api":"hunter","path":"/v2/email-finder","query":{"domain":"stripe.com","first_name":"John","last_name":"Doe"}}'
109 
110# Tomba (returns work email + sometimes personal)
111curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
112 -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
113 -H "Content-Type: application/json" \
114 -d '{"api":"tomba","path":"/v1/email-finder","query":{"domain":"stripe.com","company":"Stripe","first_name":"John","last_name":"Doe"}}'
115```
116 
117**Find personal email** — these sources often return personal (Gmail, etc.):
118```bash
119# Tomba from LinkedIn (often returns personal email)
120curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
121 -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
122 -H "Content-Type: application/json" \
123 -d '{"api":"tomba","path":"/v1/linkedin","query":{"url":"https://linkedin.com/in/johndoe"}}'
124 
125# Tomba enrich (returns all known emails for a person)
126curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
127 -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
128 -H "Content-Type: application/json" \
129 -d '{"api":"tomba","path":"/v1/enrich","query":{"email":"[email protected]"}}'
130```
131Nyne person/search and Sixtyfour enrich-lead (Section 2a) also return personal emails — check their results.
132 
133**Verify ALL found emails** (run all three verifiers per email):
134```bash
135curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
136 -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
137 -H "Content-Type: application/json" \
138 -d '{"api":"hunter","path":"/v2/email-verifier","query":{"email":"[email protected]"}}'
139curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
140 -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
141 -H "Content-Type: application/json" \
142 -d '{"api":"tomba","path":"/v1/email-verifier","query":{"email":"[email protected]"}}'
143curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
144 -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
145 -H "Content-Type: application/json" \
146 -d '{"api":"fiber","path":"/v1/validate-email/single","body":{"email":"[email protected]"}}'
147```
148Verify every email found — work and personal. Run verifiers in parallel across all emails.
149 
150### 2c. Phone
151```bash
152curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
153 -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
154 -H "Content-Type: application/json" \
155 -d '{"api":"sixtyfour","path":"/find-phone"}'
156 "lead": {"first_name": "John", "last_name": "Doe", "company": "Stripe"}
157}'
158```
159 
160### 2d. Social Profiles & Activity
161 
162**LinkedIn profile** (Fiber):
163```bash
164curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
165 -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
166 -H "Content-Type: application/json" \
167 -d '{"api":"fiber","path":"/v1/linkedin-live-fetch/profile/single","body":{"identifier":"https://linkedin.com/in/johndoe"}}'
168```
169 
170**LinkedIn recent posts** (Fiber):
171```bash
172curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
173 -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
174 -H "Content-Type: application/json" \
175 -d '{"api":"fiber","path":"/v1/linkedin-live-fetch/profile-posts","body":{"identifier":"https://linkedin.com/in/johndoe"}}'
176```
177 
178**Twitter/X activity** (Nyne — async, returns tweets + engagement metrics):
179```bash
180# Step 1: POST with Twitter URL
181curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
182 -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
183 -H "Content-Type: application/json" \
184 -d '{"api":"","path":"","body":{"social_media_url":"https://x.com/HANDLE"}}'
185# Step 2: Poll with GET
186curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
187 -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
188 -H "Content-Type: application/json" \
189 -d '{"api":"nyne","path":"/person/newsfeed","query":{"request_id":"REQUEST_ID"}}'
190```
191 
192### 2e. Open-Ended Research
193```bash
194curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
195 -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
196 -H "Content-Type: application/json" \
197 -d '{"api":"linkup","path":"/search"}'
198 "q": "John Doe Stripe VP Engineering recent news interviews talks",
199 "depth": "deep",
200 "outputType": "sourcedAnswer"
201}'
202```
203 
204### 2f. Compile Person Data
205 
206Cross-reference all API results. Merge name, title, emails (work + personal with verification status), phone, LinkedIn, Twitter, work history, education, and recent activity. When APIs disagree, keep both values with source labels. Once employer is identified, run full company enrichment (Section 3). See **Section 5** for output formatting.
207 
208## 3. Company Enrichment
209 
210Run ALL of these in parallel where possible.
211 
212### 3a. Overview
213 
214**Brand.dev** (industry, size, description, logo):
215```bash
216# By domain (primary):
217curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
218 -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
219 -H "Content-Type: application/json" \
220 -d '{"api":"brand-dev","path":"/v1/brand/retrieve","query":{"domain":"stripe.com"}}'
221 
222# By company name (if no domain):
223curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
224 -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
225 -H "Content-Type: application/json" \
226 -d '{"api":"brand-dev","path":"/v1/brand/retrieve-by-name","query":{"name":"Stripe"}}'
227 
228# By email (extracts domain):
229curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
230 -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
231 -H "Content-Type: application/json" \
232 -d '{"api":"brand-dev","path":"/v1/brand/retrieve-by-email","query":{"email":"[email protected]"}}'
233```
234 
235**Hunter company data:**
236```bash
237curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
238 -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
239 -H "Content-Type: application/json" \
240 -d '{"api":"hunter","path":"/v2/domain-search","query":{"domain":"stripe.com"}}'
241```
242 
243**Fiber company data** (LinkedIn-enriched):
244```bash
245curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
246 -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
247 -H "Content-Type: application/json" \
248 -d '{"api":"fiber","path":"/v1/kitchen-sink/company","body":{"companyDomain":{"domain":"stripe.com"}}}'
249```
250 
251### 3b. Leadership & Employees
252 
253**Key people by title:**
254```bash
255curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
256 -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
257 -H "Content-Type: application/json" \
258 -d '{"api":"fiber","path":"/v1/natural-language-search/profiles","body":{"query":"CEO, CTO, CFO, COO, VP at Stripe","pageSize":10}}'
259```
260 
261 
262### 3c. Funding
263 
264**Nyne funding history** (async):
265```bash
266# Step 1: POST
267curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
268 -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
269 -H "Content-Type: application/json" \
270 -d '{"api":"","path":"","body":{"company_name":"Stripe"}}'
271# Step 2: Poll with GET
272curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
273 -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
274 -H "Content-Type: application/json" \
275 -d '{"api":"nyne","path":"/company/funding","query":{"request_id":"REQUEST_ID"}}'
276```
277 
278**Nyne investors:**
279```bash
280curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
281 -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
282 -H "Content-Type: application/json" \
283 -d '{"api":"","path":"","body":{"company_domain":"stripe.com"}}'
284```
285 
286### 3d. Products & Web Presence
287 
288**Products from website:**
289```bash
290curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
291 -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
292 -H "Content-Type: application/json" \
293 -d '{"api":"brand-dev","path":"/v1/brand/ai/products","body":{"domain":"stripe.com"}}'
294```
295 
296**Scrape for pricing/features:**
297```bash
298curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
299 -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
300 -H "Content-Type: application/json" \
301 -d '{"api":"scrapegraph","path":"/v1/smartscraper"}'
302 "website_url": "https://stripe.com/pricing",
303 "user_prompt": "Extract all products, pricing tiers, and features"
304}'
305```
306 
307**Find competitors/similar companies:**
308```bash
309curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
310 -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
311 -H "Content-Type: application/json" \
312 -d '{"api":"exa","path":"/findSimilar"}'
313 "url": "https://stripe.com",
314 "numResults": 10,
315 "contents": {"text": true}
316}'
317```
318 
319### 3e. Open-Ended Research
320```bash
321curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
322 -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
323 -H "Content-Type: application/json" \
324 -d '{"api":"linkup","path":"/search"}'
325 "q": "Stripe recent news funding announcements partnerships press releases",
326 "depth": "deep",
327 "outputType": "sourcedAnswer"
328}'
329```
330 
331### 3f. Compile Company Data
332 
333Cross-reference all API results. Merge overview, leadership, funding, products, competitors, news, and social presence. When APIs disagree, keep both values with source labels. See **Section 5** for output formatting.
334 
335## 4. Full Pipeline Example — `enrich [email protected]`
336 
337**Step 1: Detect** — Email → person enrichment + extract domain `stripe.com` for company.
338 
339**Step 2: Person enrichment** (run in parallel):
340```bash
341# Profile (3 sources)
342curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
343 -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
344 -H "Content-Type: application/json" \
345 -d '{"api":"fiber","path":"/v1/kitchen-sink/person","body":{"emailAddress":"[email protected]","companyDomain":{"domain":"stripe.com"}}}'
346curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
347 -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
348 -H "Content-Type: application/json" \
349 -d '{"api":"nyne","path":"/person/search","body":{"query":"john stripe.com"}}'
350curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
351 -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
352 -H "Content-Type: application/json" \
353 -d '{"api":"sixtyfour","path":"/enrich-lead","body":{"lead_info":{"email":"[email protected]","company":"Stripe"},"struct":{"work_email":"Work email","personal_email":"Personal email","phone":"Phone","title":"Title","bio":"Bio"}}}'
354 
355# Find personal email
356curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
357 -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
358 -H "Content-Type: application/json" \
359 -d '{"api":"tomba","path":"/v1/enrich","query":{"email":"[email protected]"}}'
360 
361# Verify work email (3 sources)
362curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
363 -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
364 -H "Content-Type: application/json" \
365 -d '{"api":"hunter","path":"/v2/email-verifier","query":{"email":"[email protected]"}}'
366curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
367 -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
368 -H "Content-Type: application/json" \
369 -d '{"api":"tomba","path":"/v1/email-verifier","query":{"email":"[email protected]"}}'
370curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
371 -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
372 -H "Content-Type: application/json" \
373 -d '{"api":"fiber","path":"/v1/validate-email/single","body":{"email":"[email protected]"}}'
374# Also verify any personal emails found with the same 3 verifiers
375 
376# Phone
377curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
378 -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
379 -H "Content-Type: application/json" \
380 -d '{"api":"sixtyfour","path":"/find-phone","body":{"lead":{"email":"[email protected]","company":"Stripe"}}}'
381 
382# Research
383curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
384 -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
385 -H "Content-Type: application/json" \
386 -d '{"api":"linkup","path":"/search","body":{"q":"john stripe.com","depth":"deep","outputType":"sourcedAnswer"}}'
387```
388 
389Once you have the person's full name + LinkedIn from Step 2, fire off:
390```bash
391# LinkedIn profile + posts
392curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
393 -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
394 -H "Content-Type: application/json" \
395 -d '{"api":"fiber","path":"/v1/linkedin-live-fetch/profile/single","body":{"identifier":"LINKEDIN_URL"}}'
396curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
397 -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
398 -H "Content-Type: application/json" \
399 -d '{"api":"fiber","path":"/v1/linkedin-live-fetch/profile-posts","body":{"identifier":"LINKEDIN_URL"}}'
400 
401# Twitter (if discovered)
402curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
403 -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
404 -H "Content-Type: application/json" \
405 -d '{"api":"","path":"","body":{"social_media_url":"https://x.com/TWITTER_HANDLE"}}'
406```
407 
408**Step 3: Company enrichment** (run in parallel with person):
409```bash
410# Overview
411curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
412 -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
413 -H "Content-Type: application/json" \
414 -d '{"api":"brand-dev","path":"/v1/brand/retrieve","query":{"domain":"stripe.com"}}'
415curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
416 -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
417 -H "Content-Type: application/json" \
418 -d '{"api":"hunter","path":"/v2/domain-search","query":{"domain":"stripe.com"}}'
419curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
420 -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
421 -H "Content-Type: application/json" \
422 -d '{"api":"fiber","path":"/v1/kitchen-sink/company","body":{"companyDomain":{"domain":"stripe.com"}}}'
423 
424# Leadership
425curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
426 -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
427 -H "Content-Type: application/json" \
428 -d '{"api":"fiber","path":"/v1/natural-language-search/profiles","body":{"query":"CEO, CTO, CFO, COO, VP at Stripe","pageSize":10}}'
429 
430# Funding
431curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
432 -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
433 -H "Content-Type: application/json" \
434 -d '{"api":"","path":"","body":{"company_name":"Stripe"}}'
435curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
436 -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
437 -H "Content-Type: application/json" \
438 -d '{"api":"","path":"","body":{"company_domain":"stripe.com"}}'
439 
440# Products & competitors
441curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
442 -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
443 -H "Content-Type: application/json" \
444 -d '{"api":"brand-dev","path":"/v1/brand/ai/products","body":{"domain":"stripe.com"}}'
445curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
446 -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
447 -H "Content-Type: application/json" \
448 -d '{"api":"scrapegraph","path":"/v1/smartscraper","body":{"website_url":"https://stripe.com/pricing","user_prompt":"Extract all products, pricing tiers, and features"}}'
449curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
450 -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
451 -H "Content-Type: application/json" \
452 -d '{"api":"exa","path":"/findSimilar","body":{"url":"https://stripe.com","numResults":10}}'
453 
454# News
455curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
456 -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
457 -H "Content-Type: application/json" \
458 -d '{"api":"linkup","path":"/search","body":{"q":"Stripe recent news funding announcements","depth":"deep","outputType":"sourcedAnswer"}}'
459```
460 
461**Step 4: Compile & Format** — Merge all results, cross-reference, flag conflicts, then present using the two-tier output format (Section 5): summary card first, full details below.
462 
463## 5. Output Format
464 
465**Always present results in two tiers: a scannable summary card on top, then full details below.**
466 
467### Tier 1: Summary Card
468 
469Lead with this. A sales rep should be able to scan it in 30 seconds.
470 
471**For a Person (+ their company):**
472 
473```
474## 🔍 {Full Name} — {Title} at {Company}
475 
476**Contact**
477- ✉️ Work: {email} ({verification status})
478- ✉️ Personal: {email} ({verification status})
479- 📱 {phone}
480- 🔗 LinkedIn: {url}
481- 𝕏 Twitter: {url}
482 
483**Bio**: {One-liner from best available source}
484 
485**Personalization Angles**
4861. {Recent activity, talk, post, or news mention — with date}
4872. {Another angle}
4883. {Another angle}
489 
490**Company Snapshot**: {Company} · {industry} · {employee count} employees · HQ: {location}
491Latest funding: {round type} — ${amount} ({date}) · Total raised: ${total} · Valuation: ${valuation}
492```
493 
494**For a Company (standalone):**
495 
496```
497## 🏢 {Company Name}
498 
499**Overview**
500- 🌐 {domain}
501- 🏷️ {industry}
502- 👥 {employee count} employees
503- 📍 HQ: {location}
504 
505**Funding**: {latest round} — ${amount} ({date}) · Total raised: ${total} · Valuation: ${valuation}
506 
507**Key Decision Makers**
508| Name | Title | Email |
509|------|-------|-------|
510| {name} | {title} | {email} |
511| ... | ... | ... |
512 
513**Recent News & Icebreakers**
5141. {headline — date — source}
5152. {headline — date — source}
5163. {headline — date — source}
517```
518 
519### Tier 2: Full Details
520 
521Below a clear separator (`---`), include the complete deep-dive for those who want to dig in:
522 
523- **Person**: Full work history, education, all social profiles, all LinkedIn posts, all tweets + engagement, publications, full Linkup research, all email sources + verification breakdown
524- **Company**: Full description, all funding rounds with dates/amounts/investors, complete leadership list, products + pricing tiers, competitor analysis, full news results, social presence stats
525 
526Present Tier 2 with clear section headers. Include source labels on every data point. Flag all conflicts between APIs.
527 
528## 6. Tips
529 
530- **Parallelize**: Run all independent API calls concurrently — person and company enrichment can run simultaneously
531- **Nyne is async**: POST returns `request_id`, poll with GET until status is complete (5-20 seconds)
532- **Conflicts**: When APIs disagree, show both values with source labels — never silently pick one
533- **LinkedIn URLs**: Dramatically improve match rates for Fiber and Tomba — extract from any source that returns them
534- **All emails matter**: Always collect both work AND personal emails — recruiting and hiring use cases need personal emails. Label each as work/personal
535- **Email verification**: Verify every email (work + personal) with all 3 verifiers (Hunter, Tomba, Fiber) and take consensus
536- **Person → Company**: Person enrichment always cascades — once you identify their employer, run full company enrichment automatically
537- **Linkup deep search**: Best for personalization angles — recent talks, interviews, blog posts, news mentions
538- **Sixtyfour enrich-lead is slow**: Takes 30-60 seconds (AI web research). Fire it early, don't block on it — continue processing other API results and merge Sixtyfour data when it arrives
539- **Nyne newsfeed for Twitter/X**: Pass the Twitter URL to get recent tweets + engagement. Async like other Nyne endpoints
540- **Adaptive**: Skip APIs that don't apply (e.g., don't run email-finder if email is already known, don't run funding search for public megacorps)
541- **Tomba linkedin**: If you have a LinkedIn URL but no email, Tomba's LinkedIn finder is very effective
542- **Company from email**: Brand.dev's retrieve-by-email endpoint handles domain extraction automatically
543 

Discussion