agentleFS
tdiminotdimino/claude-code-minoan/skills/integration-automation/linkedin-export/SKILL.md

linkedin-export

Skill41 starsChanged 7 months agoMITView on GitHub

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'.

We split this skill into the rules it gives an agent

2 rules. About 0 are common, 1 is distinctive, and 1 is very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈1

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 1

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Very specific:

    All scripts read from ~/.claude/skills/linkedin-export/data/parsed.json.

    line 29
  2. Distinctive:

    Search messages by person, keyword, date range, or combination.

    line 56

≈ “Common” is an estimate: at least 1 in 5 of the 308,232 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

LinkedIn 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

Unzip 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

Search 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

Analyze 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

Convert 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

Prepare 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):

  • messages-conversations-{a-f,g-l,m-r,s-z}.md — Conversations grouped alphabetically
  • connections-companies.md — Connections by company
  • connections-timeline.md — Connections by year
  • profile-positions-education.md — Resume data
  • endorsements-skills.md — Skills and endorsements
  • shares-reactions.md — Posts and activity
  • comments-activity.md — 548 comments with dates and links
  • projects-honors-volunteering.md — Projects, honors, volunteering, organizations
  • metadata-languages-events-follows.md — Languages, events, follows, job applications, recommendations given, inferences
  • INDEX.md — Collection metadata and counts

Data Format Reference

See references/linkedin-export-format.md for complete CSV column documentation.

Key files in the LinkedIn export ZIP (23 parsed):

CSVContents
messages.csvAll messages and InMail
Connections.csv1st-degree connections (preamble format)
Profile.csvProfile data
Positions.csvWork history
Education.csvEducation
Skills.csvListed skills
Endorsement_Received_Info.csvEndorsements received
Invitations.csvConnection requests
Recommendations_Received.csvRecommendations received
Shares.csvPosts and shares
Reactions.csvPost reactions
Certifications.csvCertifications
Comments.csvComments on posts
Projects.csvProjects (Bazaar, Dream Daimon, etc.)
Honors.csvAwards and hackathon wins
Organizations.csvClubs and groups
Volunteering.csvVolunteer roles
Languages.csvLanguage proficiencies
Events.csvLinkedIn events
Member_Follows.csvPeople/companies followed
Jobs/Job Applications*.csvJob applications (split across multiple files)
Recommendations_Given.csvRecommendations written
Inferences_about_you.csvLinkedIn's inferences

Script Selection Guide

TaskScriptExample
First-time setupli_parse.pyParse the ZIP
Find a conversationli_search.py --personSearch by person name
Find a topicli_search.py --keywordSearch by keyword
Who do I talk to most?li_search.py --list-partnersSorted partner list
Company breakdownli_network.py companiesTop companies
Network growthli_network.py timelineConnections over time
Archive messagesli_export.py messagesMarkdown per conversation
Semantic searchli_ingest.pyRLAMA collection

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.