# LinkedIn Jobs Scraper API

> LinkedIn Jobs Scraper API is a paid API for AI agents from api.scrapeforagents.tech, paid per call via x402, $0.025/call, status unknown (last checked 2026-10-02).

Scrapes structured job listing data from public LinkedIn job search pages by keyword, location, and filters

## Facts

- Endpoint: POST https://api.scrapeforagents.tech/v1/linkedin-jobs?utm_source=zero.xyz
- Price: $0.025/call
- Payment: x402
- Status: unknown
- Last checked: 2026-10-02
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/linkedin-jobs-scraper-api-78d5bafa
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_aUqcu2zogpOoWBpb8eVU7

Status and success rate cover calls made through Zero and Zero's own probes. Third-party monitors may report differently.

## How to call it through Zero

Zero handles the 402 payment challenge and records the run. With the Zero CLI installed (`npm i -g @zeroxyz/cli`):

```sh
zero fetch --capability linkedin-jobs-scraper-api-78d5bafa -d '<json body>'
```

Example prompt: Search LinkedIn for software engineer jobs in Austin, TX posted in the past week — filter for Easy Apply only and give me up to 50 results including company names and links.

## When to prefer this

Choose this endpoint when you need structured, machine-readable LinkedIn job listing data at scale without managing browser automation or LinkedIn API credentials. Ideal for recruiting tools, job aggregators, market research pipelines, or agent workflows that need fresh job data across multiple locations or companies. The pay-per-successful-call model is cost-efficient for irregular or exploratory searches.

## Known failure modes

- Empty results if LinkedIn search returns no matching jobs — not charged
- Rate limiting or blocking by LinkedIn's anti-scraping systems may cause partial results
- Invalid geoId or companyId values may return zero results
- Malformed LinkedIn search URLs in the urls array may be skipped
- Overly broad searches may hit maxItems or limitPerSource caps before full coverage

## How this service works

Pay-per-call structured web data. Failed or empty runs are not charged.

## Output

Returns a JSON object with a count of results and an array of job listing items, each containing the job ID, title, direct LinkedIn link, location, company ID, company name, company LinkedIn URL, and company logo URL. Optionally includes company description, website, and employee count if scrapeCompany is enabled.

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "properties": {
  "urls": {
   "type": "array",
   "default": [],
   "description": "Public LinkedIn jobs search URLs. When set, structured search fields are ignored."
  },
  "geoId": {
   "type": "string",
   "description": "Optional geographic ID copied from a public search URL."
  },
  "distance": {
   "type": "integer",
   "minimum": 0,
   "description": "Search radius around the location in miles."
  },
  "keywords": {
   "type": "string",
   "description": "Job title, skills, or free text for a public jobs search."
  },
  "location": {
   "type": "string",
   "description": "City, region, or country for a structured search."
  },
  "maxItems": {
   "type": "integer",
   "default": 100,
   "minimum": 0,
   "description": "Hard limit across all searches. Zero means no total cap."
  },
  "easyApply": {
   "type": "boolean",
   "default": false,
   "description": "Request the public Easy Apply search filter."
  },
  "locations": {
   "type": "array",
   "default": [],
   "description": "Optional locations searched separately with the same keywords and filters. Helps divide broad searches into smaller result sets."
  },
  "companyIds": {
   "type": "array",
   "default": [],
   "description": "Numeric company IDs used by the public search filter."
  },
  "datePosted": {
   "enum": [
    "anyTime",
    "past24Hours",
    "pastWeek",
    "pastMonth"
   ],
   "type": "string",
   "default": "anyTime",
   "description": "Limit results by posting age."
  },
  "scrapeCompany": {
   "type": "boolean",
   "default": false,
   "description": "Visit public company profile pages for description, website, and employee count. Adds requests and run time."
  },
  "limitPerSource": {
   "type": "integer",
   "default": 100,
   "minimum": 1,
   "description": "Maximum unique jobs collected from each search URL or location."
  },
  "under10Applicants": {
   "type": "boolean",
   "default": false,
   "description": "Request the public low applicant count search filter."
  }
 }
}
```

## Response schema (JSON Schema)

```json
{
 "type": "json",
 "example": {
  "count": 1,
  "items": [
   {
    "id": null,
    "link": null,
    "title": null,
    "location": null,
    "companyId": null,
    "companyLogo": null,
    "companyName": null,
    "companyLinkedinUrl": null
   }
  ],
  "product": "linkedin-jobs"
 }
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/linkedin-jobs-scraper-api-78d5bafa/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from api.scrapeforagents.tech](https://www.zero.xyz/host/api.scrapeforagents.tech/llms.txt)
