JOB LISTINGS
LinkedIn Jobs
Search public LinkedIn job postings by keywords and location with date, job-type, remote and experience filters.
About this data
Search public LinkedIn job postings by keywords and location with date, job-type, remote and experience filters. Each job is one row: title, company, location, posting date, full description, seniority, employment type, job function, industries and applicants. No LinkedIn account needed.
From the actor’s Apify Store listing. The per-call endpoint may return a bounded subset; its own description is below.
Buy per call over x402
One endpoint at api.ssh.autos. Each call is one JSON POST, paid in USDC with no account or API key, and answered in the same HTTP response.
POST /v1/linkedin/jobs
Up to three cards from one public LinkedIn guest-job search page: job ID/link, title, company name/link/logo, location, source posting date/age and benefits where published.
One keyword/location search with an optional posted-date filter.
No detail pages, employee profiles, applicant data or pagination.
A successful empty guest fragment returns no records.
Input
Send a JSON body to POST https://api.ssh.autos/v1/linkedin/jobs.
| Field | Type | Required | Notes |
|---|---|---|---|
query | string | required | 1–150 characters |
location | string | optional | 1–150 characters; default "United States" |
datePosted | string | optional | one of any, past24h, pastWeek, pastMonth; default "any" |
maxResults | integer | optional | 1–3; default 3 |
Returned fields
The answer is JSON: records, a list of up to 3, and summary, the run status and counts. Each record has these 25 fields; a field the source does not publish comes back null.
25 fields per record
| Field | Type | Notes |
|---|---|---|
jobId | string | LinkedIn job posting id. |
url | string | Canonical job page link. |
companyName | string | — |
companyUrl | string | Company page on LinkedIn. |
companyLogo | string | — |
location | string | — |
postedAt | string | Posting date (YYYY-MM-DD) from the search card. |
postedAgo | string | Relative posting time as LinkedIn shows it, e.g. "2 weeks ago". |
salary | string | Salary text when LinkedIn shows one; null otherwise. |
benefits | string | Card badge such as "Actively Hiring" or "Be an early applicant". |
descriptionText | string | Full job description as plain text (null when details are off). |
descriptionHtml | string | Full job description HTML (null when details are off). |
seniorityLevel | string | — |
employmentType | string | — |
jobFunction | string | Job function when the public job page shows it; LinkedIn currently omits it, so usually null. |
industries | string | — |
applicantsText | string | Applicant caption, e.g. "Over 200 applicants". |
applicantsCount | integer | Number in the applicant caption ("Over 200" gives 200). |
applyType | string | offsite = apply on the company site; easyApply = apply on LinkedIn. one of offsite, easyApply |
applyUrl | string | External apply link when the public job page exposes one; usually null for signed-out visitors. |
isClosed | boolean | True when the job no longer accepts applications; null when details are off. |
searchKeywords | string | — |
searchLocation | string | — |
searchPosition | integer | Rank of the job in its search results. |
scrapedAt | string | — |
Example call
npx agentcash@latest fetch https://api.ssh.autos/v1/linkedin/jobs -m POST -b '{"query": "python developer", "location": "United States", "maxResults": 2}'
The example values come from the API spec or the actor’s own sample input. Running it is a paid call.
What is and isn’t charged
You pay the call price for
- An answer, including a definitive “not found” or an empty result.
- Confirmed no matches returns records: [] (charged: it is an answer).
Free
- Invalid input (422), busy (503), source failure (502), timeout (504) and calls whose client hung up are never charged.
- Invalid input and source failures are not charged.
Prefer a subscription? Run it on Apify
This data source is a public actor on the Apify Store: LinkedIn Jobs Scraper. Run it with your Apify account and plan for larger, scheduled or exported runs; it may offer more input options than the per-call endpoint.
How x402 payment works
- Your client sends the request. The API answers
402 Payment Requiredwith the price and where to pay. - The client pays from its own wallet: USDC on Base or Solana over x402, or over MPP on Tempo. No account, sign-up or API key.
- The client retries with the payment attached and gets the JSON answer in the same call. You are only charged for answers.
The AgentCash CLI in the example does all three steps for you and pays from your AgentCash wallet. Any x402 or MPP client works the same way.
Machine-readable: openapi.json · llms.txt