# LinkedIn Jobs Scraper — From $0.25/1k · No Cookies, No Login (`memo23/linkedin-jobs-scraper`) Actor

LinkedIn Jobs scraper — no login or cookies. Search by keyword, URL, or job IDs with expiry monitoring. Free title/employer filters, 1K-cap bypass, recruiter contacts, optional company enrichment. Salary, description, apply URL per job. From $0.25/1k. JSON or CSV.

- **URL**: https://apify.com/memo23/linkedin-jobs-scraper.md
- **Developed by:** [Muhamed Didovic](https://apify.com/memo23) (community)
- **Categories:** Jobs, AI, Agents
- **Stats:** 6 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.25 / 1,000 job results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## LinkedIn Jobs Scraper

The fastest way to turn LinkedIn Jobs into structured, spreadsheet-ready data — **without a LinkedIn account, cookies, or login**.
Start from a search URL, a keyword + location, a single job URL, or a plain list of job IDs, and get clean job rows with title, company, salary, full description, apply URL, and recruiter contacts (best-effort) — as JSON or CSV.

**From $0.25 per 1,000 jobs** on higher plans ($0.69/1k on the free plan) — pay only for the jobs that land in your dataset. Filtered, duplicate, and previously-seen jobs cost nothing.

### Why Use This Scraper?

- ✅ **No login, no cookies, no account risk** — reads only LinkedIn's public Jobs surface
- ✅ **Cheapest per-job price in its class** — $0.69/1k free plan → $0.25/1k Gold and above
- ✅ **Recruiter & hiring-team contacts** (best-effort) — name, title, profile URL of the job poster
- ✅ **Bypass LinkedIn's ~1,000-results-per-search cap** — split by city or experience level automatically
- ✅ **Job monitoring built in** — paste job IDs, get back `isExpired` / `verifiedAt` / `verificationStatus` per listing
- ✅ **Free result filters** — title include/exclude and employer blocklist run *before* billing
- ✅ **Cross-run dedup** — `onlyNewJobs` remembers what it already sent you, ideal for daily schedules
- ✅ **Optional company firmographics** — website, size, employees, HQ, industry, follower count

### Overview

The LinkedIn Jobs Scraper is built for recruiters, lead-gen teams, job-market analysts, and job-board builders who need structured job-posting data from LinkedIn without maintaining a logged-in session.

The output is always **job-shaped rows**. Whether you start from a search URL, keyword filters, a single job URL, or a list of job IDs, every dataset item is one job posting with the same ~40-field schema — so your downstream pipeline never has to branch on input type.

Cookie-based LinkedIn scrapers require you to hand over a logged-in session (which gets accounts flagged) or buy session cookies from third parties. This actor reads the same public Jobs pages any anonymous browser can see, so no account is required and none is at risk. The trade-off is honest: a few fields LinkedIn reserves for logged-in viewers (some recruiter cards, some salary ranges) are best-effort.

### Supported Inputs

#### URL types

| URL type | Pattern | What it returns |
|---|---|---|
| Search URL | `linkedin.com/jobs/search?keywords=…&location=…` | Paginated job listings, filters read from the URL |
| Single-job URL | `linkedin.com/jobs/view/4410745146/` | One enriched row per URL, no search phase |
| Slug job URL | `linkedin.com/jobs/view/data-engineer-at-netflix-4350364210` | Same as above |

#### Copy-pasteable startUrls

```json
{
  "startUrls": [
    { "url": "https://www.linkedin.com/jobs/search?keywords=Software%20Engineer&location=United%20States&geoId=103644278" },
    { "url": "https://www.linkedin.com/jobs/view/4410745146/" }
  ]
}
````

#### Job IDs mode — scrape or re-verify exact listings

Paste raw job IDs, view URLs, or any LinkedIn URL carrying `currentJobId=` into the `jobIds` field. Each entry goes straight to the job detail page. Re-run the same list on a schedule to monitor listings — every row includes `isExpired`, `verifiedAt`, and `verificationStatus` (`active` / `closed` / `removed`), so dead listings are flagged instead of silently missing.

```json
{
  "jobIds": ["4410745146", "https://www.linkedin.com/jobs/view/4406118990/"]
}
```

#### Keyword / filter mode

Leave URLs empty and let the actor build the search: keywords × locations × time range × workplace type × experience level × contract type × company names.

```json
{
  "keywords": ["Data Engineer"],
  "location": "United States",
  "timeRange": "r604800",
  "remote": ["2"],
  "experienceLevels": ["4", "5"]
}
```

#### Unsupported inputs

- ❌ URLs behind the LinkedIn login wall (Sales Navigator, Recruiter seats, private postings)
- ❌ LinkedIn profile / company-page URLs (see the dedicated actors in *Explore More Scrapers*)
- ❌ Shortened or redirect URLs (`lnkd.in/…`)

### Use Cases

| Audience | Use case |
|---|---|
| **Recruiters & sourcing teams** | Pull hiring-manager contacts from open roles and reach out before the inbox floods |
| **B2B lead-gen / HR-tech vendors** | Companies actively hiring for X are in-market for your product — build the list daily |
| **Job boards & aggregators** | Backfill listings at $0.25–0.69/1k with cross-run dedup so you only ingest new postings |
| **Market & salary analysts** | Track demand by title, region, seniority, and published salary bands |
| **Sales intelligence teams** | A competitor's job posts reveal their stack, roadmap, and the decision-makers to pitch |
| **Agencies** | Deliver client-ready hiring datasets on a schedule without writing scrapers |

### How It Works

![How It Works](https://muhamed-didovic.github.io/assets/how-it-works-linkedin-jobs.png)

1. **Input** — paste search URLs, job URLs, job IDs, or set keyword + location filters
2. **Route** — search inputs paginate the public Jobs listing; job IDs and view URLs skip straight to the detail page
3. **Filter (free)** — title include/exclude and employer blocklist drop unwanted jobs *before* they're collected or billed
4. **Collect & enrich** — every kept job gets the full ~40-field row; optional company firmographics per unique employer
5. **Output** — JSON or CSV dataset, plus a `RUN_SUMMARY` record explaining exactly how the run ended

### Input Configuration

#### Input fields

| Field | Type | Required | Notes |
|---|---|---|---|
| `startUrls` | `array<{url}>` | one input mode | Mix of search URLs and single-job view URLs |
| `jobIds` | `array<string>` | one input mode | Raw IDs, view URLs, or `currentJobId=` URLs — direct to detail page |
| `keywords` | `array<string>` | one input mode | Used when no URLs are given |
| `location` / `locations` | `string` / `array` | optional | Broad location, or several locations searched in one run |
| `geoId`, `placeIds` | `string`, `array` | optional | LinkedIn geo precision (`geoId`, `f_PP` city-level filters) |
| `timeRange` | enum | optional | `any time`, last 24h (`r86400`), week (`r604800`), month (`r2592000`) |
| `remote` / `jobTypes` | `array` enum | optional | On-site `1` / Remote `2` / Hybrid `3` |
| `experienceLevels` | `array` enum | optional | `1` intern → `6` director |
| `contractType` | `array` enum | optional | `F`/`P`/`C`/`T`/`I`/`V`/`O` |
| `companyNames` | `array<string>` | optional | Only include these employers (query-injected + name-matched) |
| `titleMustInclude` | `array<string>` | optional | Keep only titles containing at least one term — free, pre-billing |
| `titleExclude` | `array<string>` | optional | Drop titles containing any term — free, pre-billing |
| `excludeCompanies` | `array<string>` | optional | Drop these employers — free, pre-billing |
| `scrapeCompanyDetails` | `boolean` | optional | Company firmographics; billed per **unique** company |
| `onlyNewJobs` | `boolean` | optional | Cross-run dedup — only jobs not returned in previous runs |
| `autoSplit` | `boolean` | optional | Bypass ~1K cap by splitting the search across experience levels |
| `splitByLocation` + `splitCountry` | `boolean` + enum | optional | Bypass ~1K cap by fanning out across a country's major cities |
| `maxItems` | `integer` | optional | Hard cap on charged dataset rows |
| `minDelay`/`maxDelay`, `minConcurrency`/`maxConcurrency`, `maxRequestRetries` | `integer` | optional | Crawl pacing |
| `proxy` | `object` | optional | Residential recommended |

#### Common scenarios

**1. Daily new-jobs monitor (schedule this)**

```json
{
  "keywords": ["DevOps Engineer"],
  "location": "Germany",
  "timeRange": "r86400",
  "onlyNewJobs": true,
  "titleExclude": ["senior", "principal"],
  "maxItems": 200
}
```

**2. Re-verify a list of tracked listings**

```json
{
  "jobIds": ["4410745146", "4406118990", "4350364210"]
}
```

**3. Break the 1,000-result cap for a whole country**

```json
{
  "keywords": ["Nurse"],
  "splitByLocation": true,
  "splitCountry": "GB",
  "maxItems": 5000
}
```

### Output Overview

Each dataset item is one job posting containing:

- **Core fields** — `id`, `title`, `company`, `location`, `postedAt`, `jobUrl`, full `description` (+ `descriptionHtml`)
- **Compensation & criteria** — parsed `salary` (`minAmount` / `maxAmount` / `currency` / `period`), `seniorityLevel`, `employmentType`, `jobFunction`, `industries`, `benefits`
- **Application** — `applyUrl` (external careers site when exposed), `easyApply`, `numberOfApplicants` / `applicantsCount`
- **People** — `hiringTeam[]` and flat `jobPosterName` / `jobPosterTitle` / `jobPosterProfileUrl` (best-effort; empty means LinkedIn hid it from anonymous viewers)
- **Company** — `companyLinkedinUrl` always; with `scrapeCompanyDetails` also website, industry, size, employee count, HQ, logo, follower count
- **Verification** — `isExpired`, `verifiedAt`, `verificationStatus` (`active` / `closed` / `removed`) on every row
- **Provenance** — `scrapedFrom` (`search-results` / `job-view-url` / `job-id-input`), `sourceUrl`

Every run also writes a **`RUN_SUMMARY`** record to the key-value store: requested vs saved counts, pages parsed, jobs dropped per filter, expired jobs found, and a `stopReason` — so "why did I get 400 instead of 1000?" is answered by the run itself.

### Output Samples

#### Search start (trimmed real row)

```jsonc
{
  "id": "4350364210",
  "title": "Data Engineer (L5)",
  "company": "Netflix",
  "companyLinkedinUrl": "https://www.linkedin.com/company/netflix",
  "location": "United States",
  "seniorityLevel": "Not Applicable",
  "employmentType": "Full-time",
  "industries": ["Entertainment Providers"],
  "postedAt": "2026-07-02",
  "postedTimeAgo": "5 days ago",
  "numberOfApplicants": "Over 200 applicants",
  "applicantsCount": 200,
  "easyApply": false,
  "description": "At Netflix, our mission is to entertain the world. Together, we are writing the next episode…",
  "isExpired": false,
  "verifiedAt": "2026-07-08T03:58:41.120Z",
  "verificationStatus": "active",
  "jobUrl": "https://www.linkedin.com/jobs/view/data-engineer-l5-at-netflix-4350364210",
  "scrapedFrom": "search-results"
  /* …plus salary, applyUrl, hiringTeam, jobPoster*, company* fields… */
}
```

#### Job-ID start — removed listing (monitoring)

```jsonc
{
  "id": "3000000001",
  "title": null,
  "company": null,
  "jobUrl": "https://www.linkedin.com/jobs/view/3000000001/",
  "isExpired": true,
  "verifiedAt": "2026-07-08T03:57:33.319Z",
  "verificationStatus": "removed",
  "scrapedFrom": "job-id-input"
}
```

### Key Output Fields

#### Job core

- `id`, `title`, `company`, `location`, `postedAt`, `postedTimeAgo`, `jobUrl`, `sourceUrl`

#### Description & criteria

- `description`, `descriptionHtml`, `criteria[]`, `seniorityLevel`, `employmentType`, `jobFunction`, `industries[]`, `benefits[]`, `workplaceType`

#### Compensation & application

- `salary.raw`, `salary.minAmount`, `salary.maxAmount`, `salary.currency`, `salary.period`
- `applyUrl`, `easyApply`, `numberOfApplicants`, `applicantsCount`

#### Recruiter / hiring team (best-effort)

- `hiringTeam[].name`, `hiringTeam[].title`, `hiringTeam[].linkedinUrl`, `hiringTeam[].photo`
- `jobPosterName`, `jobPosterTitle`, `jobPosterProfileUrl`, `jobPosterPhoto`

#### Company (flat fields filled by `scrapeCompanyDetails`)

- `companyLinkedinUrl`, `companyLinkedinSlug`, `companyWebsite`, `companyIndustry`, `companySize`, `companyEmployeesCount`, `companyHeadquarters`, `companyFollowerCount`, `companyLogo`, `companyDetails`

#### Verification & provenance

- `isExpired`, `verifiedAt`, `verificationStatus`, `scrapedFrom`

### FAQ

#### Do I need a LinkedIn account or cookies?

No. The actor reads only the public Jobs surface that any anonymous browser can access. No login, no cookies, no account at risk.

#### Why did I get fewer jobs than `maxItems`?

Check the `RUN_SUMMARY` record in the run's key-value store — it reports pages parsed, candidates seen, how many jobs each filter dropped, and the `stopReason`. The most common causes: the search genuinely has fewer results, LinkedIn's ~1,000-per-search ceiling (enable `autoSplit` or `splitByLocation`), or your title/company filters doing their job.

#### Are the title and company filters really free?

Yes. `titleMustInclude`, `titleExclude`, and `excludeCompanies` run before a job is collected, so filtered jobs are never charged and never consume detail-page requests.

#### Are recruiter contacts always available?

No — best-effort. LinkedIn shows the hiring-team card to anonymous viewers on some jobs and hides it on others. `hiringTeam: []` means LinkedIn hid it, not that the parser failed. Same honesty applies to `salary` and `applyUrl`: they're populated when the employer published them.

#### How do I monitor jobs for expiry?

Put the job IDs (or view URLs) in `jobIds` and run on a schedule. Live listings return full rows with `verificationStatus: "active"`; closed listings are flagged `"closed"`; listings deleted from LinkedIn come back as sparse rows with `"removed"` and `isExpired: true`.

#### How do I get more than 1,000 jobs per search?

LinkedIn caps every guest search at ~1,000 results. Enable `splitByLocation` (fans the search out across a country's major cities) or `autoSplit` (splits across the six experience levels). Results are deduplicated automatically.

#### What does `onlyNewJobs` do?

It remembers the job IDs from your previous runs and skips them, so a scheduled run only returns postings it has never sent you before.

#### Can I scrape private or logged-in-only postings?

No. Anything behind the LinkedIn login wall (Sales Navigator, Recruiter, private postings) is out of scope.

### Support

Found a bug or have a feature request? Open an issue on the actor's [Issues tab](https://apify.com/memo23/linkedin-jobs-scraper/issues) or email me at muhameddidovic@gmail.com.

### Additional Services

Need a custom export shape, an extra field, or a managed daily feed delivered to your database? I do tailored work — drop me a line at muhameddidovic@gmail.com.

### Explore More Scrapers

If you found this useful, you might also like:

- [**LinkedIn Posts Scraper**](https://apify.com/memo23/linkedin-posts-scraper) — posts from profiles and company pages, no cookies
- [**LinkedIn Company Employees Scraper**](https://apify.com/memo23/linkedin-company-people-scraper) — people behind any company page
- [**LinkedIn Ads Scraper**](https://apify.com/memo23/linkedin-ads-scraper) — ad library search and details
- [**LinkedIn Profile Scraper**](https://apify.com/memo23/linkedin-profiles-cheerio) — public profile data at $1/1k

Full list at [apify.com/memo23](https://apify.com/memo23).

***

### ⚠️ Disclaimer

This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by LinkedIn Corporation or any of its subsidiaries. All trademarks mentioned are the property of their respective owners.

The scraper accesses only publicly available LinkedIn Jobs pages — no authenticated endpoints, paid features, or content behind the linkedin.com login wall. Users are responsible for ensuring their use complies with LinkedIn's Terms of Service, applicable data-protection law (GDPR, CCPA, etc.), and any contractual obligations of their own organization.

***

### SEO Keywords

linkedin jobs scraper, scrape linkedin jobs, linkedin job scraper, linkedin jobs API, linkedin job postings scraper, Apify linkedin jobs, job listings scraper, job board scraper, hiring data scraper, recruiter contact scraper, job monitoring tool, job posting verification, linkedin jobs without login, no-cookie linkedin scraper, job market analysis data, salary benchmark data, recruitment lead generation, hiring manager contacts, employment data extraction, HR tech data, talent sourcing data

# Actor input Schema

## `startUrls` (type: `array`):

Paste any mix of LinkedIn Jobs URLs. Examples: search URL <code>https://www.linkedin.com/jobs/search?keywords=…</code>, single-job URL <code>https://www.linkedin.com/jobs/view/4410745146/</code>, or slug-with-id form <code>https://www.linkedin.com/jobs/view/mobile-engineer-at-jll-4410745146</code>. Search URLs extract filters (keywords, location, geoId, f\_PP, workplace type, experience, contract type) from the URL itself. View URLs go straight to the detail page — no search step.

## `jobIds` (type: `array`):

Scrape (or re-verify) exact LinkedIn job listings — one entry per line. Accepts raw job IDs (<code>4410745146</code>), view URLs (<code>https://www.linkedin.com/jobs/view/4410745146/</code>), or any LinkedIn URL carrying <code>currentJobId=…</code>. Each entry goes straight to the job detail page — no search phase. Re-run the same list on a schedule to monitor listings: every row includes <code>isExpired</code>, <code>verifiedAt</code>, and <code>verificationStatus</code> (<code>active</code> / <code>closed</code> / <code>removed</code>), so dead listings are flagged instead of silently missing.

## `keywords` (type: `array`):

Keywords or job titles to search for in the job listings.

## `location` (type: `string`):

Broad LinkedIn search location, such as a country or region. Example: `United States`. For city-level filtering, also use `placeIds` or paste a full LinkedIn search URL above.

## `locations` (type: `array`):

Search several locations in one run. Each location is combined with every keyword above. Example: <code>United States</code>, <code>Germany</code>, <code>Remote</code>. When set, this takes precedence over the single Broad location field. Ignored when Start URLs are provided.

## `geoId` (type: `string`):

Optional LinkedIn geoId for the broad location. Example: `103644278` for United States. This usually works together with the broad location field above.

## `placeIds` (type: `array`):

Optional LinkedIn place filter IDs (`f_PP`) for city-level or sub-location filtering. Example: `104555257` for Santiago. Use one or more IDs copied from a LinkedIn Jobs URL.

## `timeRange` (type: `string`):

Time range to search for in the job listings.

## `jobTypes` (type: `array`):

Select the types of work arrangements to include in the search.

## `remote` (type: `array`):

Select the workplace type filters to include in the search.

## `experienceLevels` (type: `array`):

Select the experience levels to include in the search.

## `experienceLevel` (type: `array`):

Alias for Experience Levels; select one or more experience codes to include.

## `contractType` (type: `array`):

Select contract types to include in the search.

## `companyNames` (type: `array`):

Company names to search for in the job listings.

## `titleMustInclude` (type: `array`):

Keep only jobs whose title contains at least ONE of these terms (case-insensitive). Example: <code>senior</code>, <code>staff</code> keeps "Senior Backend Engineer" and "Staff Engineer" but drops "Junior Developer". Leave empty to keep all titles.

## `titleExclude` (type: `array`):

Drop jobs whose title contains ANY of these terms (case-insensitive). Example: <code>intern</code>, <code>junior</code>, <code>unpaid</code>. Applied after 'Title must include'.

## `excludeCompanies` (type: `array`):

Drop jobs from these companies (case-insensitive name match, so <code>Microsoft</code> also skips "Microsoft Corporation"). Useful for filtering out staffing agencies or your own company's postings.

## `scrapeCompanyDetails` (type: `boolean`):

Enrich each row with company website, industry, size, headquarters, logo, description, and follower count (best-effort, from the public company page) — surfaced as flat <code>company\*</code> fields plus a full <code>companyDetails</code> object. Adds one request per <strong>unique</strong> company (cached within a run) and is <strong>billed as a separate per-company event</strong> on top of the per-result price. Off by default — enable only when you need firmographics.

## `onlyNewJobs` (type: `boolean`):

Remember job IDs across runs and skip any job already returned in a previous run. Ideal for scheduled daily monitoring — each run only emits jobs posted since last time. Stored in the actor's key-value store.

## `autoSplit` (type: `boolean`):

LinkedIn's guest search caps each query at ~1000 results. When enabled (and no experience level is pinned), the search is split across all six experience levels and the deduplicated results are merged, returning well beyond 1000 jobs per search. This and 'Split by city' are alternative cap-busting strategies — if both are on, 'Split by city' takes precedence (it yields more unique jobs per request).

## `splitByLocation` (type: `boolean`):

LinkedIn caps each search at ~1000 results. When enabled, the search fans out across the major cities of the chosen Split country and merges the deduplicated results — typically returning many times more jobs than a single country query. Raise Max items to capture them, since each city is a separate search. Takes precedence over 'Split by experience' when both are on. Ignored when Start URLs are provided.

## `splitCountry` (type: `string`):

Country whose major cities are fanned out when 'Split by city' is enabled. Pick the country your search targets. Has no effect unless 'Split by city' is on.

## `maxItems` (type: `integer`):

Maximum number of items that will be scraped.

## `minDelay` (type: `integer`):

Minimum delay to wait before firing another request. This is useful to avoid getting blocked by Linkedin. The delay is in seconds.

## `maxDelay` (type: `integer`):

Maximum delay to wait before firing another request. This is useful to avoid getting blocked by Linkedin. The delay is in seconds.

## `maxConcurrency` (type: `integer`):

Maximum number of pages that can be processed at the same time.

## `minConcurrency` (type: `integer`):

Minimum number of pages that will be processed at the same time.

## `maxRequestRetries` (type: `integer`):

Number of times the crawler will retry a failed request before giving up.

## `proxy` (type: `object`):

Leave empty — the actor already routes all traffic through its own built-in residential proxy at no extra cost to you. Only set this if you want to use your own proxies.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.linkedin.com/jobs/search?keywords=Software%20Engineer&location=United%20States&geoId=103644278&f_PP=104555257&position=1&pageNum=0"
    },
    {
      "url": "https://www.linkedin.com/jobs/view/4410745146/"
    }
  ],
  "jobIds": [],
  "keywords": [
    "Software Engineer"
  ],
  "location": "United States",
  "locations": [
    "United States",
    "United Kingdom"
  ],
  "geoId": "103644278",
  "placeIds": [
    "104555257"
  ],
  "timeRange": "any time",
  "jobTypes": [
    "1",
    "3"
  ],
  "remote": [
    "2"
  ],
  "experienceLevels": [
    "4",
    "5",
    "6"
  ],
  "experienceLevel": [
    "5"
  ],
  "contractType": [
    "F"
  ],
  "companyNames": [
    "Microsoft"
  ],
  "titleMustInclude": [],
  "titleExclude": [],
  "excludeCompanies": [],
  "scrapeCompanyDetails": false,
  "onlyNewJobs": false,
  "autoSplit": false,
  "splitByLocation": false,
  "splitCountry": "US",
  "maxItems": 1000,
  "minDelay": 5,
  "maxDelay": 10,
  "maxConcurrency": 2,
  "minConcurrency": 1,
  "maxRequestRetries": 8
}
```

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "startUrls": [
        {
            "url": "https://www.linkedin.com/jobs/search?keywords=Software%20Engineer&location=United%20States&geoId=103644278&f_PP=104555257&position=1&pageNum=0"
        },
        {
            "url": "https://www.linkedin.com/jobs/view/4410745146/"
        }
    ],
    "keywords": [
        "Software Engineer"
    ],
    "location": "United States",
    "locations": [
        "United States",
        "United Kingdom"
    ],
    "geoId": "103644278",
    "placeIds": [
        "104555257"
    ],
    "jobTypes": [
        "1",
        "3"
    ],
    "remote": [
        "2"
    ],
    "experienceLevels": [
        "4",
        "5",
        "6"
    ],
    "experienceLevel": [
        "5"
    ],
    "contractType": [
        "F"
    ],
    "companyNames": [
        "Microsoft"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("memo23/linkedin-jobs-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "startUrls": [
        { "url": "https://www.linkedin.com/jobs/search?keywords=Software%20Engineer&location=United%20States&geoId=103644278&f_PP=104555257&position=1&pageNum=0" },
        { "url": "https://www.linkedin.com/jobs/view/4410745146/" },
    ],
    "keywords": ["Software Engineer"],
    "location": "United States",
    "locations": [
        "United States",
        "United Kingdom",
    ],
    "geoId": "103644278",
    "placeIds": ["104555257"],
    "jobTypes": [
        "1",
        "3",
    ],
    "remote": ["2"],
    "experienceLevels": [
        "4",
        "5",
        "6",
    ],
    "experienceLevel": ["5"],
    "contractType": ["F"],
    "companyNames": ["Microsoft"],
}

# Run the Actor and wait for it to finish
run = client.actor("memo23/linkedin-jobs-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "startUrls": [
    {
      "url": "https://www.linkedin.com/jobs/search?keywords=Software%20Engineer&location=United%20States&geoId=103644278&f_PP=104555257&position=1&pageNum=0"
    },
    {
      "url": "https://www.linkedin.com/jobs/view/4410745146/"
    }
  ],
  "keywords": [
    "Software Engineer"
  ],
  "location": "United States",
  "locations": [
    "United States",
    "United Kingdom"
  ],
  "geoId": "103644278",
  "placeIds": [
    "104555257"
  ],
  "jobTypes": [
    "1",
    "3"
  ],
  "remote": [
    "2"
  ],
  "experienceLevels": [
    "4",
    "5",
    "6"
  ],
  "experienceLevel": [
    "5"
  ],
  "contractType": [
    "F"
  ],
  "companyNames": [
    "Microsoft"
  ]
}' |
apify call memo23/linkedin-jobs-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=memo23/linkedin-jobs-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "LinkedIn Jobs Scraper — From $0.25/1k · No Cookies, No Login",
        "description": "LinkedIn Jobs scraper — no login or cookies. Search by keyword, URL, or job IDs with expiry monitoring. Free title/employer filters, 1K-cap bypass, recruiter contacts, optional company enrichment. Salary, description, apply URL per job. From $0.25/1k. JSON or CSV.",
        "version": "0.0",
        "x-build-id": "Zzuir7genI9fRqjdb"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/memo23~linkedin-jobs-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-memo23-linkedin-jobs-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/memo23~linkedin-jobs-scraper/runs": {
            "post": {
                "operationId": "runs-sync-memo23-linkedin-jobs-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/memo23~linkedin-jobs-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-memo23-linkedin-jobs-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "startUrls": {
                        "title": "Start URLs",
                        "type": "array",
                        "description": "Paste any mix of LinkedIn Jobs URLs. Examples: search URL <code>https://www.linkedin.com/jobs/search?keywords=…</code>, single-job URL <code>https://www.linkedin.com/jobs/view/4410745146/</code>, or slug-with-id form <code>https://www.linkedin.com/jobs/view/mobile-engineer-at-jll-4410745146</code>. Search URLs extract filters (keywords, location, geoId, f_PP, workplace type, experience, contract type) from the URL itself. View URLs go straight to the detail page — no search step.",
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "jobIds": {
                        "title": "Job IDs or job URLs (exact listings)",
                        "type": "array",
                        "description": "Scrape (or re-verify) exact LinkedIn job listings — one entry per line. Accepts raw job IDs (<code>4410745146</code>), view URLs (<code>https://www.linkedin.com/jobs/view/4410745146/</code>), or any LinkedIn URL carrying <code>currentJobId=…</code>. Each entry goes straight to the job detail page — no search phase. Re-run the same list on a schedule to monitor listings: every row includes <code>isExpired</code>, <code>verifiedAt</code>, and <code>verificationStatus</code> (<code>active</code> / <code>closed</code> / <code>removed</code>), so dead listings are flagged instead of silently missing.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "keywords": {
                        "title": "Keywords or job titles",
                        "type": "array",
                        "description": "Keywords or job titles to search for in the job listings.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "location": {
                        "title": "Broad location",
                        "type": "string",
                        "description": "Broad LinkedIn search location, such as a country or region. Example: `United States`. For city-level filtering, also use `placeIds` or paste a full LinkedIn search URL above.",
                        "default": "United States"
                    },
                    "locations": {
                        "title": "Locations (multiple)",
                        "type": "array",
                        "description": "Search several locations in one run. Each location is combined with every keyword above. Example: <code>United States</code>, <code>Germany</code>, <code>Remote</code>. When set, this takes precedence over the single Broad location field. Ignored when Start URLs are provided.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "geoId": {
                        "title": "Geo ID",
                        "type": "string",
                        "description": "Optional LinkedIn geoId for the broad location. Example: `103644278` for United States. This usually works together with the broad location field above."
                    },
                    "placeIds": {
                        "title": "Place filter IDs",
                        "type": "array",
                        "description": "Optional LinkedIn place filter IDs (`f_PP`) for city-level or sub-location filtering. Example: `104555257` for Santiago. Use one or more IDs copied from a LinkedIn Jobs URL.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "timeRange": {
                        "title": "Time range",
                        "enum": [
                            "any time",
                            "r86400",
                            "r604800",
                            "r2592000"
                        ],
                        "type": "string",
                        "description": "Time range to search for in the job listings.",
                        "default": "any time"
                    },
                    "jobTypes": {
                        "title": "Job Types",
                        "type": "array",
                        "description": "Select the types of work arrangements to include in the search.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "1",
                                "2",
                                "3"
                            ],
                            "enumTitles": [
                                "On-site",
                                "Remote",
                                "Hybrid"
                            ]
                        },
                        "default": []
                    },
                    "remote": {
                        "title": "Remote / workplace",
                        "type": "array",
                        "description": "Select the workplace type filters to include in the search.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "1",
                                "2",
                                "3"
                            ],
                            "enumTitles": [
                                "On-site",
                                "Remote",
                                "Hybrid"
                            ]
                        },
                        "default": []
                    },
                    "experienceLevels": {
                        "title": "Experience Levels",
                        "type": "array",
                        "description": "Select the experience levels to include in the search.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "1",
                                "2",
                                "3",
                                "4",
                                "5",
                                "6"
                            ],
                            "enumTitles": [
                                "Internship",
                                "Entry level",
                                "Associate",
                                "Mid-Senior level",
                                "Executive",
                                "Director"
                            ]
                        },
                        "default": []
                    },
                    "experienceLevel": {
                        "title": "Experience level",
                        "type": "array",
                        "description": "Alias for Experience Levels; select one or more experience codes to include.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "1",
                                "2",
                                "3",
                                "4",
                                "5",
                                "6"
                            ],
                            "enumTitles": [
                                "Internship",
                                "Entry level",
                                "Associate",
                                "Mid-Senior level",
                                "Executive",
                                "Director"
                            ]
                        },
                        "default": []
                    },
                    "contractType": {
                        "title": "Contract type",
                        "type": "array",
                        "description": "Select contract types to include in the search.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "F",
                                "P",
                                "C",
                                "T",
                                "I",
                                "V",
                                "O"
                            ],
                            "enumTitles": [
                                "Full-time",
                                "Part-time",
                                "Contract",
                                "Temporary",
                                "Internship",
                                "Volunteer",
                                "Other"
                            ]
                        },
                        "default": []
                    },
                    "companyNames": {
                        "title": "Company names",
                        "type": "array",
                        "description": "Company names to search for in the job listings.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "titleMustInclude": {
                        "title": "Title must include",
                        "type": "array",
                        "description": "Keep only jobs whose title contains at least ONE of these terms (case-insensitive). Example: <code>senior</code>, <code>staff</code> keeps \"Senior Backend Engineer\" and \"Staff Engineer\" but drops \"Junior Developer\". Leave empty to keep all titles.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "titleExclude": {
                        "title": "Skip titles containing",
                        "type": "array",
                        "description": "Drop jobs whose title contains ANY of these terms (case-insensitive). Example: <code>intern</code>, <code>junior</code>, <code>unpaid</code>. Applied after 'Title must include'.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "excludeCompanies": {
                        "title": "Skip employers",
                        "type": "array",
                        "description": "Drop jobs from these companies (case-insensitive name match, so <code>Microsoft</code> also skips \"Microsoft Corporation\"). Useful for filtering out staffing agencies or your own company's postings.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "scrapeCompanyDetails": {
                        "title": "Scrape company details (billed add-on)",
                        "type": "boolean",
                        "description": "Enrich each row with company website, industry, size, headquarters, logo, description, and follower count (best-effort, from the public company page) — surfaced as flat <code>company*</code> fields plus a full <code>companyDetails</code> object. Adds one request per <strong>unique</strong> company (cached within a run) and is <strong>billed as a separate per-company event</strong> on top of the per-result price. Off by default — enable only when you need firmographics.",
                        "default": false
                    },
                    "onlyNewJobs": {
                        "title": "Only new jobs (skip previously seen)",
                        "type": "boolean",
                        "description": "Remember job IDs across runs and skip any job already returned in a previous run. Ideal for scheduled daily monitoring — each run only emits jobs posted since last time. Stored in the actor's key-value store.",
                        "default": false
                    },
                    "autoSplit": {
                        "title": "Bypass 1000-result cap (split by experience)",
                        "type": "boolean",
                        "description": "LinkedIn's guest search caps each query at ~1000 results. When enabled (and no experience level is pinned), the search is split across all six experience levels and the deduplicated results are merged, returning well beyond 1000 jobs per search. This and 'Split by city' are alternative cap-busting strategies — if both are on, 'Split by city' takes precedence (it yields more unique jobs per request).",
                        "default": false
                    },
                    "splitByLocation": {
                        "title": "Bypass 1000-result cap (split by city)",
                        "type": "boolean",
                        "description": "LinkedIn caps each search at ~1000 results. When enabled, the search fans out across the major cities of the chosen Split country and merges the deduplicated results — typically returning many times more jobs than a single country query. Raise Max items to capture them, since each city is a separate search. Takes precedence over 'Split by experience' when both are on. Ignored when Start URLs are provided.",
                        "default": false
                    },
                    "splitCountry": {
                        "title": "Split country (for split by city)",
                        "enum": [
                            "US",
                            "GB",
                            "CA",
                            "AU",
                            "IE",
                            "IN",
                            "DE",
                            "FR",
                            "NL",
                            "ES",
                            "IT",
                            "PT",
                            "BE",
                            "CH",
                            "AT",
                            "SE",
                            "NO",
                            "DK",
                            "FI",
                            "PL",
                            "CZ",
                            "RO",
                            "BR",
                            "MX",
                            "AR",
                            "SG",
                            "AE",
                            "SA",
                            "ZA",
                            "NG",
                            "JP",
                            "KR",
                            "NZ",
                            "HK",
                            "MY",
                            "PH",
                            "ID",
                            "TR",
                            "IL"
                        ],
                        "type": "string",
                        "description": "Country whose major cities are fanned out when 'Split by city' is enabled. Pick the country your search targets. Has no effect unless 'Split by city' is on.",
                        "default": "US"
                    },
                    "maxItems": {
                        "title": "Max number items OR limit of results per crawl",
                        "type": "integer",
                        "description": "Maximum number of items that will be scraped.",
                        "default": 1000
                    },
                    "minDelay": {
                        "title": "Min delay for wait",
                        "type": "integer",
                        "description": "Minimum delay to wait before firing another request. This is useful to avoid getting blocked by Linkedin. The delay is in seconds.",
                        "default": 5
                    },
                    "maxDelay": {
                        "title": "Max delay for wait",
                        "type": "integer",
                        "description": "Maximum delay to wait before firing another request. This is useful to avoid getting blocked by Linkedin. The delay is in seconds.",
                        "default": 10
                    },
                    "maxConcurrency": {
                        "title": "Max Concurrency",
                        "type": "integer",
                        "description": "Maximum number of pages that can be processed at the same time.",
                        "default": 2
                    },
                    "minConcurrency": {
                        "title": "Min Concurrency",
                        "type": "integer",
                        "description": "Minimum number of pages that will be processed at the same time.",
                        "default": 1
                    },
                    "maxRequestRetries": {
                        "title": "Max Request Retries",
                        "type": "integer",
                        "description": "Number of times the crawler will retry a failed request before giving up.",
                        "default": 8
                    },
                    "proxy": {
                        "title": "Proxy configuration (optional override)",
                        "type": "object",
                        "description": "Leave empty — the actor already routes all traffic through its own built-in residential proxy at no extra cost to you. Only set this if you want to use your own proxies."
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
