Generate a Markdown and PDF CV from a LinkedIn data export
Project description
linkedin-export-cv
Generate a Markdown and PDF CV from a LinkedIn data export, reading the zip's CSVs directly.
Why
LinkedIn is already the single source of truth for your professional history. Keeping a CV by hand in two formats — plain text for job boards that only accept text, and a PDF for everything else — means editing both every time something changes, and they drift out of sync. linkedin-export-cv re-derives both from the export instead: a clean cv.md straight from the relevant CSVs, and a styled PDF rendered from that same file.
Getting the export
- Go to your LinkedIn profile and open Settings & Privacy.
- Go to Data privacy.
- Click Download your data.
- Select "Download larger data archive, including connections, verifications, contacts, account history, and information we infer about you based on your profile and activity."
- Click Request archive.
LinkedIn emails you a download link once the archive is ready. Use the "larger" archive specifically: it's the one that includes messages.csv, needed to infer your own profile URL for the Contact section.
Install
pipx install linkedin-export-cv
Or pip install linkedin-export-cv inside a virtual environment.
[!NOTE]
cv-to-pdfdepends on WeasyPrint, which needs native libraries (Pango and its dependencies) beyond what pip/pipx installs. On Windows this usually means installing them via MSYS2; some Linux distributions also need system packages. See WeasyPrint's installation guide ifcv-to-pdffails to import.
Usage
zip-to-cv Complete_LinkedInDataExport.zip
# review cv.md by hand: LinkedIn exports some locations in Russian
# (a known bug in their own export, not in this tool)
cv-to-pdf cv.md
zip-to-cv and cv-to-pdf are deliberately separate steps: you're expected to review and fix cv.md by hand in between.
Both commands take an optional -o/--output to pick a different path; by default zip-to-cv writes cv.md and cv-to-pdf writes a PDF next to its input with the same name (cv.md -> cv.pdf).
What the CV includes
Profile, Experience, Education, Certifications, Projects, Skills, Languages — in that order, each section sorted newest-first where it applies. Experience shows each role's tenure duration (e.g. "5 years 8 months"), calculated the same way LinkedIn itself does. Contact info is your email and your LinkedIn profile link (inferred from messages.csv) — no phone number, it's too invasive for a CV that might end up pasted into a plain-text job board form. Anything from LinkedIn that isn't relevant to a CV (Member Since, Birth Date, Connections, endorsements, recommendations, etc.) is left out.
cv-to-pdf uses weasyprint + markdown to render an A4 page with a full-height dark sidebar (Contact, Skills, Languages, Certifications) and a main column (Summary, Experience, Education, Projects), inspired by LinkedIn's own native profile PDF export — the one you get from your profile page by clicking Resources → Save to PDF.
Development
git clone https://github.com/AlexisDx13/linkedin-export-cv
cd linkedin-export-cv
pip install -e ".[dev]"
pytest
License
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file linkedin_export_cv-0.1.2.tar.gz.
File metadata
- Download URL: linkedin_export_cv-0.1.2.tar.gz
- Upload date:
- Size: 20.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2a8aba62a688eb25b564599f0e8a964e44b2e02a1bd29301efd1cbee4a016e6b
|
|
| MD5 |
733235788e4a456f39f7d6a3881634f9
|
|
| BLAKE2b-256 |
5f63579fc2080f8b015fa7355ce869e7d083fae12bcc472114d4a63be5d164a3
|
Provenance
The following attestation bundles were made for linkedin_export_cv-0.1.2.tar.gz:
Publisher:
publish.yml on AlexisDx13/linkedin-export-cv
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
linkedin_export_cv-0.1.2.tar.gz -
Subject digest:
2a8aba62a688eb25b564599f0e8a964e44b2e02a1bd29301efd1cbee4a016e6b - Sigstore transparency entry: 2138593223
- Sigstore integration time:
-
Permalink:
AlexisDx13/linkedin-export-cv@0849d87610afdef20c7144ac120a71891cf8dd76 -
Branch / Tag:
refs/tags/v0.1.2 - Owner: https://github.com/AlexisDx13
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@0849d87610afdef20c7144ac120a71891cf8dd76 -
Trigger Event:
release
-
Statement type:
File details
Details for the file linkedin_export_cv-0.1.2-py3-none-any.whl.
File metadata
- Download URL: linkedin_export_cv-0.1.2-py3-none-any.whl
- Upload date:
- Size: 18.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c762858af1de19427fa3251e91dce0d04169af6886777dd579b798f8ef2381a0
|
|
| MD5 |
d1eba30fe8bd6c5736c1bea342b8fd7a
|
|
| BLAKE2b-256 |
515d5be94391972c183a82c701989ae52dd78dc670b310492233b83e638a3f1d
|
Provenance
The following attestation bundles were made for linkedin_export_cv-0.1.2-py3-none-any.whl:
Publisher:
publish.yml on AlexisDx13/linkedin-export-cv
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
linkedin_export_cv-0.1.2-py3-none-any.whl -
Subject digest:
c762858af1de19427fa3251e91dce0d04169af6886777dd579b798f8ef2381a0 - Sigstore transparency entry: 2138593235
- Sigstore integration time:
-
Permalink:
AlexisDx13/linkedin-export-cv@0849d87610afdef20c7144ac120a71891cf8dd76 -
Branch / Tag:
refs/tags/v0.1.2 - Owner: https://github.com/AlexisDx13
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@0849d87610afdef20c7144ac120a71891cf8dd76 -
Trigger Event:
release
-
Statement type: