Claude-code-minoan linkedin-export
Parse, search, analyze, and ingest LinkedIn GDPR data exports into structured JSON or RLAMA for semantic search. Covers messages, connections, profile data, and Markdown export. Requires a LinkedIn GDPR ZIP file. Triggers on 'LinkedIn data', 'search messages', 'analyze connections', 'LinkedIn export', 'GDPR download'.
git clone https://github.com/tdimino/claude-code-minoan
T=$(mktemp -d) && git clone --depth=1 https://github.com/tdimino/claude-code-minoan "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/integration-automation/linkedin-export" ~/.claude/skills/tdimino-claude-code-minoan-linkedin-export && rm -rf "$T"
skills/integration-automation/linkedin-export/SKILL.mdLinkedIn Export Skill
Parse LinkedIn GDPR data exports into structured JSON, then search messages, analyze connections, export to Markdown, and ingest into RLAMA for semantic search.
Prerequisites
- Python 3.10+ via
uv - LinkedIn GDPR export ZIP — Request at: LinkedIn → Settings → Data Privacy → Get a copy of your data
- RLAMA + Ollama (optional, for semantic search ingestion)
Quick Start
# 1. Parse the export ZIP (run once) uv run ~/.claude/skills/linkedin-export/scripts/li_parse.py ~/Downloads/Basic_LinkedInDataExport_*.zip # 2. Search, analyze, export, or ingest uv run ~/.claude/skills/linkedin-export/scripts/li_search.py --list-partners uv run ~/.claude/skills/linkedin-export/scripts/li_network.py summary uv run ~/.claude/skills/linkedin-export/scripts/li_export.py all --output ~/linkedin-archive/ uv run ~/.claude/skills/linkedin-export/scripts/li_ingest.py
All scripts read from
~/.claude/skills/linkedin-export/data/parsed.json. Parse once, query many times.
Parse — li_parse.py
li_parse.pyUnzip and parse all CSVs from the LinkedIn GDPR export into structured JSON.
uv run ~/.claude/skills/linkedin-export/scripts/li_parse.py <linkedin-export.zip> uv run ~/.claude/skills/linkedin-export/scripts/li_parse.py <zip> --output /custom/path.json
Output:
~/.claude/skills/linkedin-export/data/parsed.json
Parses 23 CSV types:
Core: messages, connections, profile, positions, education, skills, endorsements, invitations, recommendations, shares, reactions, certifications
Extended: comments (548), projects (3), honors (2), organizations (3), volunteering (1), languages (9), events (12), member_follows (828), job_applications (443, merged from multiple files), recommendations_given (3), inferences (4)
Auto-detects CSV column names (case-insensitive), handles LinkedIn's preamble format (Connections.csv), and merges split files (Job Applications).
Search Messages — li_search.py
li_search.pySearch messages by person, keyword, date range, or combination.
# Search by person uv run ~/.claude/skills/linkedin-export/scripts/li_search.py --person "Jane Doe" # Search by keyword uv run ~/.claude/skills/linkedin-export/scripts/li_search.py --keyword "project proposal" # Date range uv run ~/.claude/skills/linkedin-export/scripts/li_search.py --after 2025-01-01 --before 2025-06-01 # Combined filters uv run ~/.claude/skills/linkedin-export/scripts/li_search.py --person "Jane" --keyword "meeting" --after 2025-06-01 # Full conversation by ID uv run ~/.claude/skills/linkedin-export/scripts/li_search.py --conversation "CONVERSATION_ID" # List all conversation partners (sorted by message count) uv run ~/.claude/skills/linkedin-export/scripts/li_search.py --list-partners # Show context around matches uv run ~/.claude/skills/linkedin-export/scripts/li_search.py --keyword "AI" --context 3 # Full message content + JSON output uv run ~/.claude/skills/linkedin-export/scripts/li_search.py --keyword "proposal" --full --json
Flags:
--person, --keyword, --after, --before, --conversation, --list-partners, --context N, --full, --limit N, --json
Network Analysis — li_network.py
li_network.pyAnalyze the connection graph — companies, roles, timeline.
# Summary stats uv run ~/.claude/skills/linkedin-export/scripts/li_network.py summary # Top companies by connection count uv run ~/.claude/skills/linkedin-export/scripts/li_network.py companies --top 20 # Connection timeline uv run ~/.claude/skills/linkedin-export/scripts/li_network.py timeline --by year uv run ~/.claude/skills/linkedin-export/scripts/li_network.py timeline --by month # Role/title distribution uv run ~/.claude/skills/linkedin-export/scripts/li_network.py roles --top 20 # Search connections uv run ~/.claude/skills/linkedin-export/scripts/li_network.py search "Anthropic" # Export connections to CSV or JSON uv run ~/.claude/skills/linkedin-export/scripts/li_network.py export --format csv uv run ~/.claude/skills/linkedin-export/scripts/li_network.py export --format json
Subcommands:
summary, companies, timeline, roles, search, export
Export to Markdown — li_export.py
li_export.pyConvert parsed data to clean Markdown files.
# Export messages (one file per conversation) uv run ~/.claude/skills/linkedin-export/scripts/li_export.py messages --output ~/linkedin-archive/messages/ # Export connections as Markdown table uv run ~/.claude/skills/linkedin-export/scripts/li_export.py connections --output ~/linkedin-archive/connections.md # Export everything uv run ~/.claude/skills/linkedin-export/scripts/li_export.py all --output ~/linkedin-archive/ # Export RLAMA-optimized documents uv run ~/.claude/skills/linkedin-export/scripts/li_export.py rlama --output ~/linkedin-archive/rlama/
Subcommands:
messages, connections, all, rlama
RLAMA Ingestion — li_ingest.py
li_ingest.pyPrepare RLAMA-optimized documents and create a semantic search collection.
# Full pipeline: prepare docs + create RLAMA collection uv run ~/.claude/skills/linkedin-export/scripts/li_ingest.py # Prepare docs only (no RLAMA required) uv run ~/.claude/skills/linkedin-export/scripts/li_ingest.py --prepare-only # Rebuild existing collection uv run ~/.claude/skills/linkedin-export/scripts/li_ingest.py --rebuild
Collection:
linkedin-tdimino (fixed/600/100 chunking, reranker enabled, 13 docs, 2.14 MB)
Query (default: retrieve-only, Claude synthesizes):
# Retrieve raw chunks — Claude reads and synthesizes (best quality) python3 ~/.claude/skills/rlama/scripts/rlama_retrieve.py linkedin-tdimino "What projects has Tom built?" -k 10 # Fallback: local LLM answers (only without Claude) rlama run linkedin-tdimino --query "Who works at Google?"
RLAMA document structure (13 files):
— Conversations grouped alphabeticallymessages-conversations-{a-f,g-l,m-r,s-z}.md
— Connections by companyconnections-companies.md
— Connections by yearconnections-timeline.md
— Resume dataprofile-positions-education.md
— Skills and endorsementsendorsements-skills.md
— Posts and activityshares-reactions.md
— 548 comments with dates and linkscomments-activity.md
— Projects, honors, volunteering, organizationsprojects-honors-volunteering.md
— Languages, events, follows, job applications, recommendations given, inferencesmetadata-languages-events-follows.md
— Collection metadata and countsINDEX.md
Data Format Reference
See
references/linkedin-export-format.md for complete CSV column documentation.
Key files in the LinkedIn export ZIP (23 parsed):
| CSV | Contents |
|---|---|
| All messages and InMail |
| 1st-degree connections (preamble format) |
| Profile data |
| Work history |
| Education |
| Listed skills |
| Endorsements received |
| Connection requests |
| Recommendations received |
| Posts and shares |
| Post reactions |
| Certifications |
| Comments on posts |
| Projects (Bazaar, Dream Daimon, etc.) |
| Awards and hackathon wins |
| Clubs and groups |
| Volunteer roles |
| Language proficiencies |
| LinkedIn events |
| People/companies followed |
| Job applications (split across multiple files) |
| Recommendations written |
| LinkedIn's inferences |
Script Selection Guide
| Task | Script | Example |
|---|---|---|
| First-time setup | | Parse the ZIP |
| Find a conversation | | Search by person name |
| Find a topic | | Search by keyword |
| Who do I talk to most? | | Sorted partner list |
| Company breakdown | | Top companies |
| Network growth | | Connections over time |
| Archive messages | | Markdown per conversation |
| Semantic search | | RLAMA collection |