feat(linkedin): add recommended jobs adapter with GraphQL pagination support#51
Open
RickSanchez88E wants to merge 1 commit intonashsu:mainfrom
Open
feat(linkedin): add recommended jobs adapter with GraphQL pagination support#51RickSanchez88E wants to merge 1 commit intonashsu:mainfrom
RickSanchez88E wants to merge 1 commit intonashsu:mainfrom
Conversation
Adds `linkedin recommended` adapter for crawling LinkedIn JYMBII algorithm recommended jobs via GraphQL API. Supports automatic pagination, Easy Apply detection via footerItems EASY_APPLY_TEXT, workplace type parsing, and unlimited mode (--limit 0). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
Adds a new
linkedin recommendedcommand that crawls LinkedIn's personalized job recommendation feed (JYMBII algorithm, at/jobs/collections/recommended/). Unlike the existinglinkedin searchadapter (REST Voyager API), this endpoint uses GraphQL (/voyager/api/graphql) and requires a browser session.File:
adapters/linkedin/recommended.yamlTechnical Details
voyagerJobsDashJobCards.*(version-hashed, discovered dynamically via Performance API)strategy: headerwith CSRF token extracted fromJSESSIONIDcookiestartoffset--limit 0crawls until no more items (limit > 0 ? limit - fetched : BATCHloop)footerItems[].type === "EASY_APPLY_TEXT"(noteasyApplyUrlwhich doesn't exist in this API)secondaryDescription.textparentheses, e.g."London (Hybrid)"→workplace_type: "Hybrid"Output Columns
rank,title,company,location,workplace_type,salary,posted_time,applicant_count,easy_apply,urlUsage
How to Test
Prerequisites: Chrome must be open with LinkedIn signed in, and the AutoCLI Chrome extension must be installed.
Known Quirks / Pitfalls
:) and parentheses to remain raw (not URL-encoded) in GraphQL variables. FullencodeURIComponentcauses HTTP 400. The adapter uses a partial-encode-then-decode approach.totalCountfield.--limit 0fetches incrementally until the server returns an empty batch.applicant_count: Unlike the REST search API, this GraphQL endpoint'sjobPostingCarddoesn't include applicant count. Column is preserved but always returns"N/A".easyApplyUrlfield: Easy Apply detection usesfooterItemstype — verified via 200-job crawl with ~30% Easy Apply rate.performance.getEntriesByType('resource'), so no hardcoded ID to maintain.On-site/Hybrid/Remoteand strips it from the location field.