GTM Enrichment — Deep (Sixtyfour AI Agent)

AI-agent-powered lead enrichment using Sixtyfour as primary source.

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/gtm-enrichment-deep#main ~/.claude/skills/gtm-enrichment-deep

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

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 text247 lines
gtm-enrichment-deep/SKILL.md247 lines8.5 KBpushed 96d agoRawView on GitHub

GTM Enrichment — Deep (Sixtyfour AI Agent)

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"

Enrich a lead from an email address (+ optional name) using Sixtyfour's AI agents as the primary enrichment source. Returns person data, company data, funding history, and AI/B2B classification.

Cost: ~$0.20-$0.22 per lead Latency: ~30-60s (Sixtyfour AI agents browse the web)

Input

Required:

Optional:

  • name — full name if known (improves match rate)

Workflow

Step 1: Extract Domain

Extract the domain from the email address. Example: [email protected] -> domain: acme.com

Step 2: Run Sixtyfour Enrichment (parallel)

Fire both calls simultaneously. These are the primary data sources.

Enrich Lead ($0.10):

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": {
    "email": "{email}",
    "first_name": "{first_name_if_known}",
    "last_name": "{last_name_if_known}",
    "company": "{company_name_if_known}",
    "domain": "{domain}"
  },
  "struct": {
    "full_name": "Full legal name of this person",
    "first_name": "First name",
    "last_name": "Last name",
    "title": "Current job title at their company",
    "linkedin_url": "LinkedIn profile URL (full URL starting with https://linkedin.com/in/)",
    "city": "City where the person is located",
    "state": "State or region where the person is located",
    "country": "Country where the person is located"
  }
}'

Enrich Company ($0.10):

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-company"}'
  "target_company": {
    "domain": "{domain}"
  },
  "struct": {
    "company_name": "Official company name",
    "description": "One-paragraph description of what the company does",
    "linkedin_url": "LinkedIn company page URL (full URL starting with https://linkedin.com/company/)",
    "hq_city": "Headquarters city",
    "hq_state": "Headquarters state or region",
    "hq_country": "Headquarters country",
    "employee_count": "Approximate number of employees (number only)",
    "founded_year": "Year the company was founded (number only)",
    "total_funding_amount_usd": "Total funding raised in USD (number only, no $ sign)",
    "latest_funding_date": "Date of most recent funding round (YYYY-MM-DD format)",
    "latest_funding_stage": "Stage of most recent funding round (e.g., Series A, Series B, Seed)",
    "latest_funding_amount_usd": "Amount raised in most recent round in USD (number only)",
    "is_ai_company": "true or false - does this company build or primarily use AI/ML technology?",
    "ai_evidence": "Brief explanation of why this is or is not an AI company",
    "is_b2b_saas": "true or false - is this a B2B SaaS company?",
    "b2b_evidence": "Brief explanation of why this is or is not B2B SaaS"
  }
}'

Record the status, latency, and any errors for both calls.

Step 3: Fallback — Apollo Person Match (conditional)

ONLY run if Sixtyfour /enrich-lead did NOT return 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":"apollo","path":"/api/v1/people/match"}'
  "email": "{email}",
  "reveal_personal_emails": true
}'

Cost: $0.01. Extract linkedin_url, and also grab name, title, organization as cross-reference data.

Step 4: Fallback — Apollo Organization Enrich (conditional)

ONLY run if Sixtyfour /enrich-company did NOT return funding data (total_funding_amount_usd is null/empty).

curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
  -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"api":"apollo","path":"/api/v1/organizations/enrich","query":{"domain":"{domain}"}}'

Cost: $0.01. Extract funding events, total funding, latest funding stage, and latest funding amount.

Step 5: Compile Results

Merge all data into the output format below. Apply these rules:

  1. Sixtyfour is primary — use its data first for all fields
  2. Apollo is fallback — only used to fill gaps Sixtyfour missed
  3. Source tracking — for each field, note whether it came from sixtyfour or apollo
  4. Confidence:
    • high — Sixtyfour returned the field directly
    • medium — Apollo fallback provided the field
    • low — field was inferred or partially matched

Output Format

Present the results as a JSON code block:

{
  "person": {
    "full_name": "string",
    "title": "string",
    "linkedin_url": "string",
    "location": {"city": "string", "state": "string", "country": "string"},
    "email_verified": "unknown",
    "confidence": "high | medium | low",
    "source": "sixtyfour | apollo"
  },
  "company": {
    "name": "string",
    "domain": "string",
    "linkedin_url": "string",
    "description": "string",
    "geo": {"city": "string", "state": "string", "country": "string"},
    "employee_count": "number | null",
    "founded_year": "number | null",
    "funding": {
      "total_amount": "number | null",
      "total_amount_printed": "string | null",
      "latest_round_date": "string | null",
      "latest_round_stage": "string | null",
      "latest_round_amount": "number | null",
      "rounds": [],
      "confidence": "high | medium | low"
    },
    "classification": {
      "is_ai": {"value": true, "confidence": "high | medium | low", "evidence": ["string"]},
      "is_b2b_saas": {"value": true, "confidence": "high | medium | low", "evidence": ["string"]}
    },
    "buying_signals": {
      "has_enterprise_plan": null,
      "has_self_serve": null,
      "hiring_enterprise_reps": null,
      "website_traffic_rank": null,
      "github_stars": null,
      "tech_stack": null
    },
    "confidence": "high | medium | low",
    "source": "sixtyfour | apollo | merged"
  },
  "meta": {
    "total_cost": "$0.XX",
    "api_calls": [],
    "phases_run": [1, 2],
    "enrichment_timestamp": "ISO datetime"
  }
}

Error Visibility

Track EVERY API call in the meta.api_calls array:

{
  "api": "sixtyfour",
  "endpoint": "/enrich-lead",
  "status": "success | partial | error",
  "cost": "$0.10",
  "latency_ms": 35000,
  "fields_returned": ["full_name", "title", "linkedin_url"],
  "fields_missing": ["city"],
  "error": null
}

If an API call fails, returns empty data, or times out, include it in the api_calls array with status='error' and a clear error message. Never silently skip failures.

Cost Tracking

Sum all API call costs and report in meta.total_cost:

  • Sixtyfour /enrich-lead: $0.10
  • Sixtyfour /enrich-company: $0.10
  • Apollo /api/v1/people/match: $0.01 (only if used)
  • Apollo /api/v1/organizations/enrich: $0.01 (only if used)

Example

Input: [email protected]

Expected flow:

  1. Extract domain: acme.com
  2. Fire Sixtyfour /enrich-lead and /enrich-company in parallel
  3. Check if LinkedIn URL returned — if not, call Apollo /people/match
  4. Check if funding data returned — if not, call Apollo /organizations/enrich
  5. Compile and output JSON with all fields, error visibility, and cost

Tips

  • Sixtyfour takes 30-60s per call — be patient, do NOT timeout early
  • If Sixtyfour returns partial data, still use what it returned and fill gaps with Apollo
  • AI/B2B classification comes from Sixtyfour's web research — it reads the company website
  • The struct field in Sixtyfour tells the AI agent exactly what to research — modify fields there if you need different data points
1---
2name: gtm-enrichment-deep
3description: AI-agent-powered lead enrichment using Sixtyfour as primary source. Takes an email (+ optional name) and returns comprehensive person + company data with funding, AI/B2B classification, and full error visibility. Higher cost (~$0.20/lead) but simpler architecture.
4source: orthogonal
5---
6 
7 
8# GTM Enrichment — Deep (Sixtyfour AI Agent)
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 
23Enrich a lead from an email address (+ optional name) using Sixtyfour's AI agents as the primary enrichment source. Returns person data, company data, funding history, and AI/B2B classification.
24 
25**Cost**: ~$0.20-$0.22 per lead
26**Latency**: ~30-60s (Sixtyfour AI agents browse the web)
27 
28## Input
29 
30Required:
31- **email** — the lead's email address (e.g., `[email protected]`)
32 
33Optional:
34- **name** — full name if known (improves match rate)
35 
36## Workflow
37 
38### Step 1: Extract Domain
39 
40Extract the domain from the email address. Example: `[email protected]` -> domain: `acme.com`
41 
42### Step 2: Run Sixtyfour Enrichment (parallel)
43 
44Fire both calls simultaneously. These are the primary data sources.
45 
46**Enrich Lead** ($0.10):
47 
48```bash
49curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
50 -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
51 -H "Content-Type: application/json" \
52 -d '{"api":"sixtyfour","path":"/enrich-lead"}'
53 "lead_info": {
54 "email": "{email}",
55 "first_name": "{first_name_if_known}",
56 "last_name": "{last_name_if_known}",
57 "company": "{company_name_if_known}",
58 "domain": "{domain}"
59 },
60 "struct": {
61 "full_name": "Full legal name of this person",
62 "first_name": "First name",
63 "last_name": "Last name",
64 "title": "Current job title at their company",
65 "linkedin_url": "LinkedIn profile URL (full URL starting with https://linkedin.com/in/)",
66 "city": "City where the person is located",
67 "state": "State or region where the person is located",
68 "country": "Country where the person is located"
69 }
70}'
71```
72 
73**Enrich Company** ($0.10):
74 
75```bash
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":"sixtyfour","path":"/enrich-company"}'
80 "target_company": {
81 "domain": "{domain}"
82 },
83 "struct": {
84 "company_name": "Official company name",
85 "description": "One-paragraph description of what the company does",
86 "linkedin_url": "LinkedIn company page URL (full URL starting with https://linkedin.com/company/)",
87 "hq_city": "Headquarters city",
88 "hq_state": "Headquarters state or region",
89 "hq_country": "Headquarters country",
90 "employee_count": "Approximate number of employees (number only)",
91 "founded_year": "Year the company was founded (number only)",
92 "total_funding_amount_usd": "Total funding raised in USD (number only, no $ sign)",
93 "latest_funding_date": "Date of most recent funding round (YYYY-MM-DD format)",
94 "latest_funding_stage": "Stage of most recent funding round (e.g., Series A, Series B, Seed)",
95 "latest_funding_amount_usd": "Amount raised in most recent round in USD (number only)",
96 "is_ai_company": "true or false - does this company build or primarily use AI/ML technology?",
97 "ai_evidence": "Brief explanation of why this is or is not an AI company",
98 "is_b2b_saas": "true or false - is this a B2B SaaS company?",
99 "b2b_evidence": "Brief explanation of why this is or is not B2B SaaS"
100 }
101}'
102```
103 
104Record the status, latency, and any errors for both calls.
105 
106### Step 3: Fallback — Apollo Person Match (conditional)
107 
108**ONLY run if Sixtyfour /enrich-lead did NOT return a LinkedIn URL.**
109 
110```bash
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":"apollo","path":"/api/v1/people/match"}'
115 "email": "{email}",
116 "reveal_personal_emails": true
117}'
118```
119 
120Cost: $0.01. Extract `linkedin_url`, and also grab `name`, `title`, `organization` as cross-reference data.
121 
122### Step 4: Fallback — Apollo Organization Enrich (conditional)
123 
124**ONLY run if Sixtyfour /enrich-company did NOT return funding data** (total_funding_amount_usd is null/empty).
125 
126```bash
127curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
128 -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
129 -H "Content-Type: application/json" \
130 -d '{"api":"apollo","path":"/api/v1/organizations/enrich","query":{"domain":"{domain}"}}'
131```
132 
133Cost: $0.01. Extract funding events, total funding, latest funding stage, and latest funding amount.
134 
135### Step 5: Compile Results
136 
137Merge all data into the output format below. Apply these rules:
138 
1391. **Sixtyfour is primary** — use its data first for all fields
1402. **Apollo is fallback** — only used to fill gaps Sixtyfour missed
1413. **Source tracking** — for each field, note whether it came from `sixtyfour` or `apollo`
1424. **Confidence**:
143 - `high` — Sixtyfour returned the field directly
144 - `medium` — Apollo fallback provided the field
145 - `low` — field was inferred or partially matched
146 
147## Output Format
148 
149Present the results as a JSON code block:
150 
151```json
152{
153 "person": {
154 "full_name": "string",
155 "title": "string",
156 "linkedin_url": "string",
157 "location": {"city": "string", "state": "string", "country": "string"},
158 "email_verified": "unknown",
159 "confidence": "high | medium | low",
160 "source": "sixtyfour | apollo"
161 },
162 "company": {
163 "name": "string",
164 "domain": "string",
165 "linkedin_url": "string",
166 "description": "string",
167 "geo": {"city": "string", "state": "string", "country": "string"},
168 "employee_count": "number | null",
169 "founded_year": "number | null",
170 "funding": {
171 "total_amount": "number | null",
172 "total_amount_printed": "string | null",
173 "latest_round_date": "string | null",
174 "latest_round_stage": "string | null",
175 "latest_round_amount": "number | null",
176 "rounds": [],
177 "confidence": "high | medium | low"
178 },
179 "classification": {
180 "is_ai": {"value": true, "confidence": "high | medium | low", "evidence": ["string"]},
181 "is_b2b_saas": {"value": true, "confidence": "high | medium | low", "evidence": ["string"]}
182 },
183 "buying_signals": {
184 "has_enterprise_plan": null,
185 "has_self_serve": null,
186 "hiring_enterprise_reps": null,
187 "website_traffic_rank": null,
188 "github_stars": null,
189 "tech_stack": null
190 },
191 "confidence": "high | medium | low",
192 "source": "sixtyfour | apollo | merged"
193 },
194 "meta": {
195 "total_cost": "$0.XX",
196 "api_calls": [],
197 "phases_run": [1, 2],
198 "enrichment_timestamp": "ISO datetime"
199 }
200}
201```
202 
203## Error Visibility
204 
205Track EVERY API call in the `meta.api_calls` array:
206 
207```json
208{
209 "api": "sixtyfour",
210 "endpoint": "/enrich-lead",
211 "status": "success | partial | error",
212 "cost": "$0.10",
213 "latency_ms": 35000,
214 "fields_returned": ["full_name", "title", "linkedin_url"],
215 "fields_missing": ["city"],
216 "error": null
217}
218```
219 
220**If an API call fails, returns empty data, or times out, include it in the api_calls array with status='error' and a clear error message. Never silently skip failures.**
221 
222## Cost Tracking
223 
224Sum all API call costs and report in `meta.total_cost`:
225- Sixtyfour /enrich-lead: $0.10
226- Sixtyfour /enrich-company: $0.10
227- Apollo /api/v1/people/match: $0.01 (only if used)
228- Apollo /api/v1/organizations/enrich: $0.01 (only if used)
229 
230## Example
231 
232**Input**: `[email protected]`
233 
234**Expected flow**:
2351. Extract domain: `acme.com`
2362. Fire Sixtyfour /enrich-lead and /enrich-company in parallel
2373. Check if LinkedIn URL returned — if not, call Apollo /people/match
2384. Check if funding data returned — if not, call Apollo /organizations/enrich
2395. Compile and output JSON with all fields, error visibility, and cost
240 
241## Tips
242 
243- Sixtyfour takes 30-60s per call — be patient, do NOT timeout early
244- If Sixtyfour returns partial data, still use what it returned and fill gaps with Apollo
245- AI/B2B classification comes from Sixtyfour's web research — it reads the company website
246- The `struct` field in Sixtyfour tells the AI agent exactly what to research — modify fields there if you need different data points
247 

Discussion

Alternatives

Also in Company & contact data