Linkedin Jobs Scraper
Pricing
Pay per usage
Go to Apify Store
Linkedin Jobs Scraper
Scrape Linkedin jobs from jobs search results using search URLs or filters. Get full job details, job poster and company details.
Linkedin Jobs Scraper
Pricing
Pay per usage
Scrape Linkedin jobs from jobs search results using search URLs or filters. Get full job details, job poster and company details.
You can access the Linkedin Jobs Scraper programmatically from your own applications by using the Apify API. You can also choose the language preference from below. To use the Apify API, you’ll need an Apify account and your API token, found in API & Integrations in Apify Console.
{ "openapi": "3.0.1", "info": { "version": "1.0", "x-build-id": "XQkPLNWwv71EYXcDp" }, "servers": [ { "url": "https://api.apify.com/v2" } ], "paths": { "/acts/excitable_pickle~linkedin-jobs-scraper/run-sync-get-dataset-items": { "post": { "operationId": "run-sync-get-dataset-items-excitable_pickle-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/excitable_pickle~linkedin-jobs-scraper/runs": { "post": { "operationId": "runs-sync-excitable_pickle-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/excitable_pickle~linkedin-jobs-scraper/run-sync": { "post": { "operationId": "run-sync-excitable_pickle-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": { "urls": { "title": "Linkedin jobs search URLs", "type": "array", "description": "Go to [public linkedin jobs search page](https://www.linkedin.com/jobs/search/) on incognito window (to access public version), search with required filters and once you are done, copy the full URL from address bar and pass it here. You can pass multiple search URLs.\n\nWhen URLs are provided, the AI search filters below are ignored. Leave this empty to use the filters instead.", "default": [], "items": { "type": "string" } }, "keywords": { "title": "Keywords", "type": "string", "description": "Job title, skills, or free-text search (e.g. \"software engineer remote\"). Used only when the URLs list above is empty." }, "location": { "title": "Location", "type": "string", "description": "City, region, or country as you would type it on LinkedIn (e.g. \"United States\", \"London, United Kingdom\", \"Remote\")." }, "geoId": { "title": "Geo ID", "type": "string", "description": "Optional LinkedIn geoId for precise location targeting (found in a LinkedIn search URL as `geoId=`). Overrides free-text location when LinkedIn resolves it." }, "distance": { "title": "Distance (miles)", "minimum": 0, "type": "integer", "description": "Search radius in miles around the location. Leave empty for LinkedIn's default." }, "datePosted": { "title": "Date posted", "enum": [ "anyTime", "past24Hours", "pastWeek", "pastMonth" ], "type": "string", "description": "Only return jobs posted within this window.", "default": "anyTime" }, "companyIds": { "title": "Company IDs", "type": "array", "description": "LinkedIn numeric company IDs (from a company URL or `f_C=` in a search URL), e.g. \"1441\" for Google.", "default": [], "items": { "type": "string" } }, "under10Applicants": { "title": "Under 10 applicants", "type": "boolean", "description": "Only jobs with fewer than 10 applicants.", "default": false }, "autoConvertToAiSearch": { "title": "Auto convert old search URLs to AI search URLs (recommended)", "type": "boolean", "description": "LinkedIn is now forcing AI job search which removed many classic filters (experience, job type, workplace, salary, sort, etc.)\n\nWhen this option is enabled, the filters in old search URLs are converted to natural language and appended to search keywords. Date posted, Company, Easy apply, and Under 10 applicants stay as URL filters on AI search.", "default": true }, "scrapeCompany": { "title": "Scrape company details", "type": "boolean", "description": "This will require additional scraping requests for each job record and take longer to scrape", "default": true }, "limitPerSource": { "title": "Max jobs per search", "minimum": 1, "type": "integer", "description": "Maximum number of jobs to scrape from each input URL (or from the AI search filters when no URLs are provided). Leave empty to scrape as many as LinkedIn returns for each search (up to ~1000)." }, "splitByLocation": { "title": "Split search by city locations", "type": "boolean", "description": "Enable this to split your search by cities within a country. This helps bypass LinkedIn's 1000 job limit per search URL by creating separate searches for each city. This will overwrite the location filter in input search URLs.", "default": false }, "splitCountry": { "title": "Country to split by", "enum": [ "US", "CA", "MX", "GB", "DE", "FR", "NL", "CH", "SE", "NO", "DK", "FI", "IE", "ES", "IT", "PT", "BE", "AT", "PL", "CZ", "RO", "HU", "GR", "BG", "HR", "RS", "UA", "SK", "LT", "LV", "EE", "SI", "LU", "MT", "IS", "CY", "TR", "RU", "GE", "AM", "AZ", "BY", "BA", "XK", "MD", "ME", "MK", "AL", "MC", "AD", "LI", "SM", "VA", "IN", "CN", "JP", "KR", "SG", "HK", "TW", "TH", "VN", "ID", "MY", "PH", "BD", "PK", "LK", "NP", "MM", "KH", "KZ", "UZ", "KG", "TJ", "TM", "MN", "BN", "MV", "BT", "LA", "TL", "AF", "KP", "AE", "SA", "IL", "QA", "KW", "BH", "OM", "JO", "LB", "IQ", "IR", "PS", "SY", "YE", "AU", "NZ", "FJ", "PG", "WS", "TO", "VU", "SB", "KI", "MH", "FM", "PW", "NR", "TV", "BR", "AR", "CO", "CL", "PE", "EC", "UY", "VE", "BO", "PY", "GY", "SR", "CR", "PA", "GT", "DO", "PR", "JM", "TT", "HN", "SV", "NI", "BS", "BB", "CU", "HT", "BZ", "AG", "DM", "GD", "LC", "KN", "VC", "ZA", "NG", "KE", "EG", "MA", "GH", "ET", "TZ", "RW", "UG", "SN", "TN", "CI", "CM", "DZ", "AO", "MU", "ZM", "ZW", "MZ", "CD", "BW", "NA", "MG", "LY", "SD", "SS", "SO", "ML", "GA", "BJ", "BF", "MW", "NE", "TD", "SL", "LR", "ER", "GM", "GN", "GW", "TG", "MR", "SZ", "LS", "DJ", "CG", "CF", "BI", "CV", "KM", "GQ", "ST", "SC" ], "type": "string", "description": "Select the country whose cities will be used to split the search. Only used when 'Split search by city locations' is enabled. Required to when 'Split search by city locations' is enabled." } } }, "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 } } } } } } } } }}OpenAPI is a standard for designing and describing RESTful APIs, allowing developers to define API structure, endpoints, and data formats in a machine-readable way. It simplifies API development, integration, and documentation.
OpenAPI is effective when used with AI agents and GPTs by standardizing how these systems interact with various APIs, for reliable integrations and efficient communication.
By defining machine-readable API specifications, OpenAPI allows AI models like GPTs to understand and use varied data sources, improving accuracy. This accelerates development, reduces errors, and provides context-aware responses, making OpenAPI a core component for AI applications.
You can download the OpenAPI definitions for Linkedin Jobs Scraper from the options below:
If you’d like to learn more about how OpenAPI powers GPTs, read our blog post.
You can also check out our other API clients: