This project provides a single Val Town HTTP val that reads your LinkedIn DMA (Member Data Portability) snapshot and exports it into several developer‑friendly CV formats. It is designed as a stateless adapter: LinkedIn is the only data source, and all outputs are pure transformations of the exported snapshot.
- MAC (Manfred Awesomic CV): JSON format mapped to
aboutMe,experience(jobs, volunteering, projects), andknowledge(skills, studies, certifications, publications, awards, languages). MAC format repository - JSON Resume: Standardized JSON schema for resumes. Fully populates
basics,work,volunteer,education,awards,publications,skills,languages,projects, andcertificates. JSON Resume schema - RenderCV: Generates a valid YAML structure compatible with the RenderCV
CLI and forces a file download (
rendercv.yaml). RenderCV documentation - Debug APIs: Endpoints to dump the raw LinkedIn
memberSnapshotDataarrays for inspection.
This val uses LinkedIn’s Member Data Portability (DMA) APIs
(memberSnapshotData endpoint).
- Official Documentation: Microsoft Learn - Member Data Portability
- Supported Domains List: Snapshot Domains
- Geographic Eligibility: The DMA Member Data Portability APIs are designed to comply with the EU Digital Markets Act. They are available only to members located in the European Economic Area (EEA) and Switzerland.
- Monolingual Export: The API typically exports profile data in one primary language only. If you maintain multiple localized versions of your profile in the UI, only the primary language might appear in the snapshot.
- Structural Differences: The data returned does not replicate the LinkedIn UI exactly. Missing cross-domain relationships (e.g., skills linked to specific jobs) or empty sections might occur depending on your privacy settings.
The Val Town script acts as a single HTTP handler:
- Token Extraction: Expects an access token via the
Authorization: Bearer <token>header, a?token=query parameter, or a Val Town environment variable (token). - Optimized Aggregation (
LIFullProfile): To minimize HTTP calls, CV generation endpoints use a single, paginated API request without specifying a domain. This automatically fetches all available snapshot data at once, saving time and rate limits. - Format Mappers: Transforms the aggregated model into MAC, JSON Resume, or RenderCV models without relying on third-party schemas for the internal state.
Returns the aggregated LIFullProfile JSON object containing all fetched
domains. Useful for quick diagnostics.
Returns a JSON object strictly mapped to the Manfred Awesomic CV format.
Includes extracted profile images from RICH_MEDIA.
Returns a JSON Resume compatible object.
Downloads a generated rendercv.yaml file. The output is converted from JSON to
a valid YAML structure using the standard yaml package and is served with a
Content-Disposition: attachment header.
Allows inspection of the raw, unmapped data structures returned by LinkedIn.
GET /debug: Returns an HTTP 400 error (requires a query parameter).GET /debug?analyzeDomains: Scans your entire snapshot and returns a summary counting the number of items found inside each domain.GET /debug?domains: Fetches all available domains for your account in a single optimized request and returns the full JSON.GET /debug?domains=PROJECTS: Fetches exactly 1 domain using a directdomain=PROJECTSAPI call.GET /debug?domains=PROJECTS,SKILLS: Fetches all data using the optimized single-request algorithm, then filters and returns only the requested domains locally.
- Create a new HTTP val on Val Town.
- Paste the provided TypeScript code.
- Add your LinkedIn DMA access token as a
tokenenvironment variable in the Val settings (or pass it in your requests). - Visit your val's URL with the desired endpoint appended (e.g.,
https://<your-val>.web.val.run/rendercv).