How to use it
- Hit Copy the whole skill.
- 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. - 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/contact-cache#main ~/.claude/skills/contact-cacheFor one project only, change the path to .claude/skills/contact-cache.
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.
Paste into Claude, ChatGPT or Cursor.
Show the full text49 lines
Contact Cache
Track all identified/contacted people across strategies. CSV-backed contact database with dedup by LinkedIn URL or email. Prevents duplicate outreach when running strategies on a recurring cadence.
Usage
# Check if contacts are already cached
python3 skills/contact-cache/scripts/cache.py check --linkedin-urls "https://linkedin.com/in/person1,https://linkedin.com/in/person2"
python3 skills/contact-cache/scripts/cache.py check --emails "[email protected],[email protected]"
# Add a single contact
python3 skills/contact-cache/scripts/cache.py add --name "John Smith" --linkedin-url "https://linkedin.com/in/johnsmith" --email "[email protected]" --company "Acme Corp" --title "VP Finance" --strategy "2A-hiring-signal"
# Bulk import from CSV
python3 skills/contact-cache/scripts/cache.py add --csv /path/to/leads.csv --strategy "2A-hiring-signal"
# Update a contact's status
python3 skills/contact-cache/scripts/cache.py update --linkedin-url "https://linkedin.com/in/johnsmith" --status contacted --notes "Sent intro email 2026-02-24"
# Export the full cache
python3 skills/contact-cache/scripts/cache.py export --format csv
python3 skills/contact-cache/scripts/cache.py export --format json
python3 skills/contact-cache/scripts/cache.py export --status contacted
python3 skills/contact-cache/scripts/cache.py export --strategy "2A-hiring-signal"
# Print summary statistics
python3 skills/contact-cache/scripts/cache.py stats
Data
Contacts are stored in skills/contact-cache/data/contacts.csv. The file is auto-created on first use.
Dedup is by LinkedIn URL (preferred) or email. Both are normalized and hashed (SHA256, first 16 chars) to produce a stable contact_id.
Valid Statuses
new, qualified, contacted, replied, meeting_booked, converted, not_interested
| 1 | |
| 2 | name contact-cache |
| 3 | description > |
| 4 | Track all identified/contacted people across strategies. CSV-backed contact |
| 5 | database with dedup by LinkedIn URL or email. Prevents duplicate outreach |
| 6 | when running strategies on a recurring cadence. |
| 7 | tags [lead-generation] |
| 8 | |
| 9 | |
| 10 | # Contact Cache |
| 11 | |
| 12 | Track all identified/contacted people across strategies. CSV-backed contact database with dedup by LinkedIn URL or email. Prevents duplicate outreach when running strategies on a recurring cadence. |
| 13 | |
| 14 | ## Usage |
| 15 | |
| 16 | |
| 17 | # Check if contacts are already cached |
| 18 | python3 skills/contact-cache/scripts/cache.py check --linkedin-urls "https://linkedin.com/in/person1,https://linkedin.com/in/person2" |
| 19 | python3 skills/contact-cache/scripts/cache.py check --emails "[email protected],[email protected]" |
| 20 | |
| 21 | # Add a single contact |
| 22 | python3 skills/contact-cache/scripts/cache.py add --name "John Smith" --linkedin-url "https://linkedin.com/in/johnsmith" --email "[email protected]" --company "Acme Corp" --title "VP Finance" --strategy "2A-hiring-signal" |
| 23 | |
| 24 | # Bulk import from CSV |
| 25 | python3 skills/contact-cache/scripts/cache.py add --csv /path/to/leads.csv --strategy "2A-hiring-signal" |
| 26 | |
| 27 | # Update a contact's status |
| 28 | python3 skills/contact-cache/scripts/cache.py update --linkedin-url "https://linkedin.com/in/johnsmith" --status contacted --notes "Sent intro email 2026-02-24" |
| 29 | |
| 30 | # Export the full cache |
| 31 | python3 skills/contact-cache/scripts/cache.py export --format csv |
| 32 | python3 skills/contact-cache/scripts/cache.py export --format json |
| 33 | python3 skills/contact-cache/scripts/cache.py export --status contacted |
| 34 | python3 skills/contact-cache/scripts/cache.py export --strategy "2A-hiring-signal" |
| 35 | |
| 36 | # Print summary statistics |
| 37 | python3 skills/contact-cache/scripts/cache.py stats |
| 38 | |
| 39 | |
| 40 | ## Data |
| 41 | |
| 42 | Contacts are stored in `skills/contact-cache/data/contacts.csv`. The file is auto-created on first use. |
| 43 | |
| 44 | Dedup is by LinkedIn URL (preferred) or email. Both are normalized and hashed (SHA256, first 16 chars) to produce a stable `contact_id`. |
| 45 | |
| 46 | ## Valid Statuses |
| 47 | |
| 48 | `new`, `qualified`, `contacted`, `replied`, `meeting_booked`, `converted`, `not_interested` |
| 49 |
Discussion
Alternatives
Also in Company & contact dataApollo lead finderTwo-phase Apollo.io prospecting: free People Search to discover ICP-matching leads, then selective enrichment to reveal emails/phones (credits per contact). Creates Apollo lists. Deduplicates against existing contacts by LinkedIn URL.Company contact finderFind decision-makers at a specific company using Apollo, Crustdata, Fiber, and PDL people search via Gooseworks MCP. Given a company name and target titles, returns a list of contacts with name, title, LinkedIn URL, and location.Company funding searchFind company funding history, investors, and investment detailsCompany Intelligence - Comprehensive Company ReportsFull company intelligence report - overview, team, funding, products, news