LinkedIn Jobs Scraper & API - No Login, Salary, Company
Pricing
from $11.54 / 1,000 results
LinkedIn Jobs Scraper & API - No Login, Salary, Company
Scrape public LinkedIn job postings by keyword, location or search URL, no login and no API key. Get title, company, logo, salary, seniority, employment type, job function, industries, applicant count, apply link and full description. Filter by date, remote, experience. Export JSON, CSV, Excel.
Pricing
from $11.54 / 1,000 results
Rating
5.0
(1)
Developer
Scrapers Lat
Maintained by CommunityActor stats
0
Bookmarked
17
Total users
0
Monthly active users
5 days ago
Last modified
Categories
Share
LinkedIn Jobs Scraper & API - No Login, Salary, Company Data
Scrape public LinkedIn job postings by keyword, location, or pasted search URL, with no login and no API key. This LinkedIn jobs scraper reads the public LinkedIn guest jobs pages over plain HTTP and returns one clean, normalized record per posting: title, company, company logo, location, posting date, structured salary, seniority, employment type, job function, industries, applicant count, apply link, and the full job description in text and HTML.
Built for recruiters, talent sourcing, job boards, market and salary research, and anyone who needs LinkedIn job listings data at scale without a browser, without an account, and without a LinkedIn API key.
Here is one real record from a live run, with every field the actor returns (description trimmed with an explicit note; all values are real):
{"imageUrl": "https://media.licdn.com/dms/image/v2/C4E0BAQHdArq26Tw7eQ/company-logo_100_100/company-logo_100_100/0/1631311971066/osohq_logo","title": "Software Engineer","company": "Oso","location": "New York, NY","remote": null,"postedAt": "2026-01-17","postedText": "7 months ago","jobId": "4363726700","url": "https://www.linkedin.com/jobs/view/software-engineer-at-oso-4363726700","companyUrl": "https://www.linkedin.com/company/osohq","companySlug": "osohq","salary": null,"benefits": null,"activelyHiring": false,"description": "Old problem, new $25B+ market. Companies like AWS, Stripe, and Twilio have ...[trimmed]","descriptionHtml": "<strong>Old problem, new $25B+ market</strong> ...[trimmed HTML]","applyType": "offsite","easyApply": false,"applyUrl": "https://www.linkedin.com/signup/cold-join?session_redirect=https://www.linkedin.com/jobs/view/software-engineer-at-oso-4363726700","seniority": "Not Applicable","employmentType": "Full-time","jobFunction": "Engineering and Information Technology","jobFunctions": ["Engineering", "Information Technology"],"industries": "Software Development","industriesList": ["Software Development"],"applicants": "Over 200 applicants","applicantsCount": 200,"postedTimeAgo": "7 months ago","companyLinkedinUrl": "https://www.linkedin.com/company/osohq","salaryMin": null,"salaryMax": null,"salaryCurrency": null,"salaryPeriod": null,"observedAt": "2026-09-06T06:05:00.973Z","error": null}
📥 Input · 📤 Output · 💰 Pricing · ▶️ Examples
Table of contents
- What it does
- Why this scraper
- Quickstart
- Input reference
- Output reference
- How it compares
- Run via API and CLI
- Fetch results
- Billing and limits
- FAQ and troubleshooting
What it does
The actor searches the public LinkedIn guest jobs listing with the keywords, location, and filters you pass (or the LinkedIn search URLs you paste), paginates through the results, and writes one normalized record per posting to the run dataset. When withDetails is on, it opens each posting to add the full description, seniority level, employment type, job function, industries, apply route, and applicant count. Salary text is parsed into numeric salaryMin and salaryMax with currency and period, dates are normalized to YYYY-MM-DD, and any missing source value is returned as null.
Data comes only from LinkedIn job pages that are publicly available without a login. It does not read anything behind a LinkedIn account and it does not return recruiter contact details, because the public guest pages do not expose them.
Why this scraper
- No login, no API key, no browser. Pure HTTP against the public guest endpoints. Nothing to authenticate, nothing to maintain.
- Every public field, mapped. Title, company, logo, location, dates, structured salary, seniority, employment type, job function, industries, apply route and link, Easy Apply flag, and applicant count when LinkedIn shows it.
- Search the way you want. Structured filters or pasted LinkedIn search URLs, or both in one run.
- Clean, typed output. Numeric salary fields, arrays for functions and industries, ISO timestamps, honest
nullwhere LinkedIn has no value. No fabricated fields. - Global. Any country and language LinkedIn serves publicly.
Quickstart
Open the actor, paste this into the input, and press Run. It returns up to 10 software engineer jobs in the United States with full detail.
{"keywords": "software engineer","location": "United States","maxJobs": 10,"withDetails": true}
keywords is required unless you provide one or more startUrls. Every other input is optional; leave any filter empty or unset to skip it.
Input reference
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
keywords | string | yes* | software engineer | Job search keywords, for example product manager. Required unless startUrls is set. |
location | string | no | United States | Location name to search in, for example London or Remote. |
maxJobs | integer | no | 10 | Maximum postings to collect. Free Apify plans are capped at 10 per run. |
withDetails | boolean | no | true | When on, open each posting for full description, seniority, employment type, job function, industries, apply route, and applicant count. |
timePosted | enum | no | (any) | How recently posted: r86400 (24 hours), r604800 (week), r2592000 (month). |
workplaceType | enum | no | (any) | 1 on-site, 2 remote, 3 hybrid. |
experienceLevel | enum | no | (any) | 1 internship through 6 executive. |
jobType | enum | no | (any) | F full-time, P part-time, C contract, T temporary, I internship, V volunteer, O other. |
salaryRange | enum | no | (any) | Minimum posted pay bucket, 1 (40k+) through 9 (200k+). |
easyApplyOnly | boolean | no | false | Only return jobs offering LinkedIn Easy Apply. |
sortBy | enum | no | R | R most relevant, DD most recent. |
startUrls | array | no | (empty) | Paste one or more LinkedIn public job search URLs. Every filter in the URL is read automatically and run alongside the fields above. |
companyIds | string | no | (empty) | Restrict to LinkedIn numeric company IDs, comma separated, for example 1035,1441. |
geoId | string | no | (empty) | LinkedIn numeric geo ID for exact location targeting. Overrides location when set. |
distance | integer | no | (none) | Search radius in miles around the location (0 to 100). |
industryIds | string | no | (empty) | Restrict to LinkedIn numeric industry IDs, comma separated. |
jobFunctionIds | string | no | (empty) | Restrict to LinkedIn function codes, comma separated, for example eng,it. |
titleInclude | array | no | (empty) | Keep only jobs whose title contains one of these phrases (case insensitive). |
titleExclude | array | no | (empty) | Drop jobs whose title contains any of these phrases (case insensitive). |
skipJobIds | array | no | (empty) | LinkedIn job IDs to exclude, useful for incremental runs. |
under10Applicants | boolean | no | false | Keep only jobs with fewer than 10 applicants. Needs withDetails on. |
proxy | object | no | residential | Proxy used to reach LinkedIn. Defaults to Apify residential proxy, the most reliable option. |
Filters combine with logical AND.
Output reference
One dataset item per posting. Types: string, integer, boolean, string[], or null when the source value is absent.
| Field | Type | Description |
|---|---|---|
imageUrl | string | Company logo image URL. |
title | string | Job title. |
company | string | Company name. |
location | string | Posting location text. |
remote | boolean | true when the role is remote (from filter or location text), false for on-site/hybrid, null when unknown. |
postedAt | string | Posting date (YYYY-MM-DD), or null. |
postedText | string | Human-readable posting age from the search card, for example 7 months ago. |
jobId | string | LinkedIn job ID (unique per posting). |
url | string | Public LinkedIn job view URL (canonical). |
companyUrl | string | LinkedIn company page URL from the search card. |
companySlug | string | Company slug parsed from the company URL. |
salary | string | Raw salary text as shown, or null. |
benefits | string | Benefits summary text, or null. |
activelyHiring | boolean | true when the card is flagged actively hiring. |
description | string | Full job description as plain text (only when withDetails). |
descriptionHtml | string | Full job description as HTML (only when withDetails). |
applyType | string | offsite (external ATS) or onsite (LinkedIn Easy Apply), or null. |
easyApply | boolean | true for LinkedIn Easy Apply, false for offsite apply, null when unknown. |
applyUrl | string | Direct apply URL, or null. |
seniority | string | Seniority level, for example Mid-Senior level, or null. |
employmentType | string | Employment type, for example Full-time, or null. |
jobFunction | string | Job function label as one string, or null. |
jobFunctions | string[] | Job function labels split into an array. |
industries | string | Industries label as one string, or null. |
industriesList | string[] | Industry labels split into an array. |
applicants | string | Applicant count text as shown, for example Over 200 applicants, or null. |
applicantsCount | integer | Parsed numeric applicant count, or null. |
postedTimeAgo | string | Posting age from the detail page, or null. |
companyLinkedinUrl | string | Company LinkedIn URL from the detail page, or null. |
salaryMin | integer | Parsed minimum salary, or null. |
salaryMax | integer | Parsed maximum salary, or null. |
salaryCurrency | string | Salary currency code, for example USD, or null. |
salaryPeriod | string | Salary period, for example year, or null. |
observedAt | string | ISO 8601 timestamp of when the record was collected. |
error | string | null on success. On a failed run, a single item with a populated error field is written instead. |
How it compares
This actor is a strict superset of the public guest data other LinkedIn jobs scrapers expose, and it accepts the same inputs, while being honest about what a login-only or browser-based tool can additionally reach.
| Capability | This actor (guest, no login) | Login or browser based competitors |
|---|---|---|
| Keywords, location, geoId, distance | Yes | Yes |
| Date, workplace, experience, job type, salary, Easy Apply filters | Yes | Yes |
| Company / industry / job function IDs | Yes | Some |
Paste LinkedIn search URLs (startUrls) | Yes | Some |
| Title include / exclude, skip IDs, under 10 applicants | Yes | Some |
| Full description (text + HTML) | Yes | Yes |
| Seniority, employment type, function, industries | Yes | Yes |
| Structured salary (min, max, currency, period) | Yes | Some |
| Company logo + LinkedIn URL | Yes | Yes |
| Applicant count | Yes, when LinkedIn shows it (often bucketed, e.g. Over 200) | Sometimes exact when logged in |
| Recruiter / job poster name, photo, profile | No, login only | Yes |
| Company employee and follower counts, website, description | No, job data only | Some |
| No login, no API key, HTTP only | Yes | Often browser based |
Honest note: recruiter and job-poster fields and deep company-profile enrichment require a logged-in LinkedIn session or an extra company-page crawl. The public guest pages do not expose them, so this actor returns honest null rather than fabricating those fields. Applicant counts are returned exactly as LinkedIn shows them publicly, which is often a bucket such as Over 200 applicants.
Run via API and CLI
Start a run and read the dataset. Replace <TOKEN> with your Apify API token.
Run synchronously and get dataset items in one call:
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~linkedin-jobs-scraper/run-sync-get-dataset-items?token=<TOKEN>" \-H "Content-Type: application/json" \-d '{"keywords":"software engineer","location":"United States","maxJobs":25,"withDetails":true}'
Start a run asynchronously:
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~linkedin-jobs-scraper/runs?token=<TOKEN>" \-H "Content-Type: application/json" \-d '{"keywords":"data scientist","workplaceType":"2","timePosted":"r604800","maxJobs":100}'
Apify CLI:
apify call scrapers_lat/linkedin-jobs-scraper \--input '{"keywords":"product manager","location":"London"}'
Fetch results
Every run writes to a dataset. Fetch items as JSON, CSV, or Excel by changing format:
# JSONcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=json"# CSVcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=csv"# Paginate large datasetscurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&offset=1000&limit=1000"
<DATASET_ID> is returned as defaultDatasetId in the run object. Use offset and limit to page through large result sets. clean=true drops empty and internal fields.
Billing and limits
- Pay per result. You are charged per posting returned (
resultevent). See the pricing tab for the current per-result price. - Details add-on. When
withDetailsis on, adetailsevent is charged only for paid plans and only when a per-job detail fetch genuinely succeeds. Failed detail fetches stay onresultonly. - No charge on failure. If a run errors, the actor writes a single item with a populated
errorfield and does not charge for it. Empty runs cost nothing. - Spend cap respected. Set
maxTotalChargeUsdon the run; once reached, the actor stops emitting and charging further billable results. - Free Apify plans are capped at 10 postings per run. Upgrade for higher limits.
FAQ and troubleshooting
Does this need a LinkedIn login or API key? No. It reads only the public LinkedIn guest job pages, which are visible without an account. No login, no cookies, no LinkedIn API key.
A run returned 0 records. Why?
Your keyword and filter combination matched nothing, or LinkedIn served no public results for that query. Loosen filters (drop salaryRange, experienceLevel, or widen location). Zero-result runs are not charged.
Some runs are slower or return fewer rows. Why? LinkedIn rate-limits its guest endpoints. The actor uses Apify residential proxy and paces requests with retries to stay reliable, but during heavy throttling a large run can slow down or stop early. Re-run or narrow the query if that happens.
Why is remote null?
remote is set from the workplaceType filter and from the location text. When neither indicates remote, the field stays null because the public card does not always label workplace type.
How do I get the full job description and seniority?
Keep withDetails on (the default). Those fields come from opening each posting.
Can I target exact locations, companies, or a saved search?
Yes. Use geoId for an exact LinkedIn location, companyIds for specific companies, industryIds or jobFunctionIds for precise segments, or paste your LinkedIn search URLs into startUrls.
Does this return recruiter or contact emails from LinkedIn? No. The public guest pages do not expose recruiter or job-poster contact details, so the actor does not return them.
Is this an official LinkedIn tool? No. This actor is independent and has no affiliation with LinkedIn. It reads only job postings that are publicly available without a login.
Related scrapers
- Indeed Jobs Scraper: Public job postings from Indeed.
- Glassdoor Scraper: Company reviews, ratings, and salary data from Glassdoor.
- Lever Job Postings & Careers Scraper: Public postings from companies on the Lever ATS.
- Greenhouse Jobs Scraper: Public postings from companies on the Greenhouse ATS.
- Dice Jobs Scraper: Public tech job postings from Dice.
More scrapers at scrapers.lat
Built and maintained by scrapers.lat, where we publish scrapers for US and Latin American public platforms: company registries, government data, finance, e-commerce and more. Browse the catalog or request a custom scraper at scrapers.lat.
Independent tool, not affiliated with LinkedIn. Accesses only publicly available job postings that do not require a login.
Scraper de Empleos de LinkedIn y API - Sin Login, Salario y Datos de Empresa
Extrae ofertas de empleo publicas de LinkedIn por palabra clave, ubicacion o URL de busqueda pegada, sin login y sin clave de API. Este scraper de empleos de LinkedIn lee las paginas publicas de empleos de invitado de LinkedIn por HTTP simple y devuelve un registro limpio y normalizado por oferta: titulo, empresa, logo de la empresa, ubicacion, fecha de publicacion, salario estructurado, nivel de experiencia, tipo de empleo, funcion laboral, sectores, numero de candidatos, enlace para postular y la descripcion completa del puesto en texto y HTML.
Creado para reclutadores, busqueda de talento, portales de empleo, estudios de mercado y salarios, y para cualquiera que necesite datos de ofertas de empleo de LinkedIn a escala sin navegador, sin cuenta y sin clave de API de LinkedIn.
Aqui hay un registro real de una ejecucion en vivo, con todos los campos que devuelve el actor (descripcion recortada con una nota explicita; todos los valores son reales):
{"imageUrl": "https://media.licdn.com/dms/image/v2/C4E0BAQHdArq26Tw7eQ/company-logo_100_100/company-logo_100_100/0/1631311971066/osohq_logo","title": "Software Engineer","company": "Oso","location": "New York, NY","remote": null,"postedAt": "2026-01-17","postedText": "7 months ago","jobId": "4363726700","url": "https://www.linkedin.com/jobs/view/software-engineer-at-oso-4363726700","companyUrl": "https://www.linkedin.com/company/osohq","companySlug": "osohq","salary": null,"benefits": null,"activelyHiring": false,"description": "Old problem, new $25B+ market. Companies like AWS, Stripe, and Twilio have ...[recortado]","descriptionHtml": "<strong>Old problem, new $25B+ market</strong> ...[HTML recortado]","applyType": "offsite","easyApply": false,"applyUrl": "https://www.linkedin.com/signup/cold-join?session_redirect=https://www.linkedin.com/jobs/view/software-engineer-at-oso-4363726700","seniority": "Not Applicable","employmentType": "Full-time","jobFunction": "Engineering and Information Technology","jobFunctions": ["Engineering", "Information Technology"],"industries": "Software Development","industriesList": ["Software Development"],"applicants": "Over 200 applicants","applicantsCount": 200,"postedTimeAgo": "7 months ago","companyLinkedinUrl": "https://www.linkedin.com/company/osohq","salaryMin": null,"salaryMax": null,"salaryCurrency": null,"salaryPeriod": null,"observedAt": "2026-09-06T06:05:00.973Z","error": null}
📥 Entrada · 📤 Salida · 💰 Precios · ▶️ Ejemplos
Tabla de contenido
- Que hace
- Por que este scraper
- Inicio rapido
- Referencia de entrada
- Referencia de salida
- Como se compara
- Uso por API y CLI
- Obtener resultados
- Facturacion y limites
- Preguntas frecuentes
Que hace
El actor busca en el listado publico de empleos de invitado de LinkedIn con las palabras clave, la ubicacion y los filtros que indiques (o las URL de busqueda de LinkedIn que pegues), pagina por los resultados y escribe un registro normalizado por oferta en el dataset de la ejecucion. Cuando withDetails esta activo, abre cada oferta para agregar la descripcion completa, el nivel de experiencia, el tipo de empleo, la funcion laboral, los sectores, la ruta para postular y el numero de candidatos. El texto de salario se convierte en salaryMin y salaryMax numericos con moneda y periodo, las fechas se normalizan a YYYY-MM-DD y cualquier valor ausente se devuelve como null.
Los datos provienen solo de paginas de empleo de LinkedIn que estan disponibles publicamente sin login. No lee nada detras de una cuenta de LinkedIn y no devuelve datos de contacto de reclutadores, porque las paginas publicas de invitado no los exponen.
Por que este scraper
- Sin login, sin clave de API, sin navegador. HTTP puro contra los endpoints publicos de invitado. Nada que autenticar, nada que mantener.
- Todos los campos publicos, mapeados. Titulo, empresa, logo, ubicacion, fechas, salario estructurado, nivel, tipo de empleo, funcion laboral, sectores, ruta y enlace para postular, indicador de Easy Apply y numero de candidatos cuando LinkedIn lo muestra.
- Busca como quieras. Filtros estructurados o URL de busqueda de LinkedIn pegadas, o ambos en una sola ejecucion.
- Salida limpia y tipada. Campos de salario numericos, arreglos para funciones y sectores, marcas de tiempo ISO y
nullhonesto cuando LinkedIn no tiene valor. Sin campos inventados. - Global. Cualquier pais e idioma que LinkedIn sirva publicamente.
Inicio rapido
Abre el actor, pega esto en la entrada y presiona Run. Devuelve hasta 10 empleos de software engineer en Estados Unidos con detalle completo.
{"keywords": "software engineer","location": "United States","maxJobs": 10,"withDetails": true}
keywords es obligatorio salvo que indiques uno o mas startUrls. El resto de las entradas es opcional; deja cualquier filtro vacio o sin definir para omitirlo.
Referencia de entrada
| Campo | Tipo | Obligatorio | Predeterminado | Descripcion |
|---|---|---|---|---|
keywords | string | si* | software engineer | Palabras clave de busqueda, por ejemplo product manager. Obligatorio salvo que uses startUrls. |
location | string | no | United States | Ubicacion a buscar, por ejemplo London o Remote. |
maxJobs | integer | no | 10 | Maximo de ofertas a recolectar. Los planes gratuitos de Apify tienen tope de 10 por ejecucion. |
withDetails | boolean | no | true | Si esta activo, abre cada oferta para descripcion completa, nivel, tipo de empleo, funcion, sectores, ruta de postulacion y candidatos. |
timePosted | enum | no | (cualquiera) | Que tan reciente: r86400 (24 horas), r604800 (semana), r2592000 (mes). |
workplaceType | enum | no | (cualquiera) | 1 presencial, 2 remoto, 3 hibrido. |
experienceLevel | enum | no | (cualquiera) | 1 practicas hasta 6 ejecutivo. |
jobType | enum | no | (cualquiera) | F tiempo completo, P medio tiempo, C contrato, T temporal, I practicas, V voluntariado, O otro. |
salaryRange | enum | no | (cualquiera) | Rango minimo de pago publicado, 1 (40k+) hasta 9 (200k+). |
easyApplyOnly | boolean | no | false | Solo devolver empleos con LinkedIn Easy Apply. |
sortBy | enum | no | R | R mas relevante, DD mas reciente. |
startUrls | array | no | (vacio) | Pega una o mas URL publicas de busqueda de empleo de LinkedIn. Cada filtro de la URL se lee automaticamente junto con los campos de arriba. |
companyIds | string | no | (vacio) | Restringir a IDs numericos de empresa de LinkedIn, separados por coma, por ejemplo 1035,1441. |
geoId | string | no | (vacio) | ID geografico numerico de LinkedIn para ubicacion exacta. Sustituye a location cuando se define. |
distance | integer | no | (ninguno) | Radio de busqueda en millas alrededor de la ubicacion (0 a 100). |
industryIds | string | no | (vacio) | Restringir a IDs numericos de sector de LinkedIn, separados por coma. |
jobFunctionIds | string | no | (vacio) | Restringir a codigos de funcion de LinkedIn, separados por coma, por ejemplo eng,it. |
titleInclude | array | no | (vacio) | Conservar solo empleos cuyo titulo contenga una de estas frases (sin distinguir mayusculas). |
titleExclude | array | no | (vacio) | Descartar empleos cuyo titulo contenga alguna de estas frases (sin distinguir mayusculas). |
skipJobIds | array | no | (vacio) | IDs de empleo de LinkedIn a excluir, util para ejecuciones incrementales. |
under10Applicants | boolean | no | false | Conservar solo empleos con menos de 10 candidatos. Requiere withDetails activo. |
proxy | object | no | residencial | Proxy usado para llegar a LinkedIn. Por defecto usa proxy residencial de Apify, la opcion mas confiable. |
Los filtros se combinan con AND logico.
Referencia de salida
Un elemento de dataset por oferta. Tipos: string, integer, boolean, string[], o null cuando el valor de origen esta ausente.
| Campo | Tipo | Descripcion |
|---|---|---|
imageUrl | string | URL del logo de la empresa. |
title | string | Titulo del puesto. |
company | string | Nombre de la empresa. |
location | string | Texto de ubicacion de la oferta. |
remote | boolean | true si el puesto es remoto (por filtro o texto de ubicacion), false si es presencial o hibrido, null si se desconoce. |
postedAt | string | Fecha de publicacion (YYYY-MM-DD), o null. |
postedText | string | Antiguedad legible de la tarjeta de busqueda, por ejemplo 7 months ago. |
jobId | string | ID de empleo de LinkedIn (unico por oferta). |
url | string | URL publica de la oferta en LinkedIn (canonica). |
companyUrl | string | URL de la pagina de empresa desde la tarjeta de busqueda. |
companySlug | string | Slug de la empresa extraido de la URL. |
salary | string | Texto de salario tal como aparece, o null. |
benefits | string | Resumen de beneficios, o null. |
activelyHiring | boolean | true cuando la tarjeta esta marcada como contratando activamente. |
description | string | Descripcion completa en texto plano (solo con withDetails). |
descriptionHtml | string | Descripcion completa en HTML (solo con withDetails). |
applyType | string | offsite (ATS externo) u onsite (LinkedIn Easy Apply), o null. |
easyApply | boolean | true para LinkedIn Easy Apply, false para postulacion externa, null si se desconoce. |
applyUrl | string | URL directa de postulacion, o null. |
seniority | string | Nivel de experiencia, por ejemplo Mid-Senior level, o null. |
employmentType | string | Tipo de empleo, por ejemplo Full-time, o null. |
jobFunction | string | Etiqueta de funcion laboral como una cadena, o null. |
jobFunctions | string[] | Etiquetas de funcion laboral en un arreglo. |
industries | string | Etiqueta de sectores como una cadena, o null. |
industriesList | string[] | Etiquetas de sector en un arreglo. |
applicants | string | Texto de numero de candidatos, por ejemplo Over 200 applicants, o null. |
applicantsCount | integer | Numero de candidatos analizado, o null. |
postedTimeAgo | string | Antiguedad de la publicacion desde la pagina de detalle, o null. |
companyLinkedinUrl | string | URL de LinkedIn de la empresa desde la pagina de detalle, o null. |
salaryMin | integer | Salario minimo analizado, o null. |
salaryMax | integer | Salario maximo analizado, o null. |
salaryCurrency | string | Codigo de moneda del salario, por ejemplo USD, o null. |
salaryPeriod | string | Periodo del salario, por ejemplo year, o null. |
observedAt | string | Marca de tiempo ISO 8601 de cuando se recolecto el registro. |
error | string | null en exito. En una ejecucion fallida se escribe un solo elemento con el campo error poblado. |
Como se compara
Este actor es un superconjunto estricto de los datos publicos de invitado que exponen otros scrapers de empleos de LinkedIn, y acepta las mismas entradas, siendo honesto sobre lo que una herramienta con login o basada en navegador puede alcanzar adicionalmente.
| Capacidad | Este actor (invitado, sin login) | Competidores con login o navegador |
|---|---|---|
| Palabras clave, ubicacion, geoId, distancia | Si | Si |
| Filtros de fecha, modalidad, experiencia, tipo de empleo, salario, Easy Apply | Si | Si |
| IDs de empresa / sector / funcion laboral | Si | Algunos |
Pegar URL de busqueda de LinkedIn (startUrls) | Si | Algunos |
| Incluir / excluir por titulo, omitir IDs, menos de 10 candidatos | Si | Algunos |
| Descripcion completa (texto + HTML) | Si | Si |
| Nivel, tipo de empleo, funcion, sectores | Si | Si |
| Salario estructurado (min, max, moneda, periodo) | Si | Algunos |
| Logo de empresa + URL de LinkedIn | Si | Si |
| Numero de candidatos | Si, cuando LinkedIn lo muestra (a menudo en rango, ej. Over 200) | A veces exacto con login |
| Nombre, foto y perfil del reclutador | No, solo con login | Si |
| Numero de empleados y seguidores, sitio web y descripcion de la empresa | No, solo datos del empleo | Algunos |
| Sin login, sin clave de API, solo HTTP | Si | A menudo basado en navegador |
Nota honesta: los campos del reclutador y del publicador del empleo y la informacion profunda del perfil de empresa requieren una sesion con login en LinkedIn o un rastreo extra de la pagina de empresa. Las paginas publicas de invitado no los exponen, por lo que este actor devuelve null honesto en lugar de inventar esos campos. El numero de candidatos se devuelve tal como LinkedIn lo muestra publicamente, que a menudo es un rango como Over 200 applicants.
Uso por API y CLI
Inicia una ejecucion y lee el dataset. Reemplaza <TOKEN> con tu token de API de Apify.
Ejecucion sincrona y obtener elementos en una sola llamada:
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~linkedin-jobs-scraper/run-sync-get-dataset-items?token=<TOKEN>" \-H "Content-Type: application/json" \-d '{"keywords":"software engineer","location":"United States","maxJobs":25,"withDetails":true}'
Iniciar una ejecucion asincrona:
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~linkedin-jobs-scraper/runs?token=<TOKEN>" \-H "Content-Type: application/json" \-d '{"keywords":"data scientist","workplaceType":"2","timePosted":"r604800","maxJobs":100}'
CLI de Apify:
apify call scrapers_lat/linkedin-jobs-scraper \--input '{"keywords":"product manager","location":"London"}'
Obtener resultados
Cada ejecucion escribe en un dataset. Obten los elementos en JSON, CSV o Excel cambiando format:
# JSONcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=json"# CSVcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=csv"# Paginar datasets grandescurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&offset=1000&limit=1000"
<DATASET_ID> se devuelve como defaultDatasetId en el objeto de la ejecucion. Usa offset y limit para paginar. clean=true elimina campos vacios e internos.
Facturacion y limites
- Pago por resultado. Se cobra por oferta devuelta (evento
result). Consulta la pestana de precios para el precio actual por resultado. - Add-on de detalles. Con
withDetailsactivo, el eventodetailsse cobra solo en planes de pago y solo cuando la obtencion del detalle de la oferta tiene exito real. Las obtenciones fallidas se quedan solo enresult. - Sin cargo por fallo. Si una ejecucion falla, el actor escribe un solo elemento con el campo
errorpoblado y no cobra por el. Las ejecuciones vacias no cuestan nada. - Tope de gasto respetado. Define
maxTotalChargeUsden la ejecucion; al alcanzarlo, el actor deja de emitir y cobrar mas resultados facturables. - Los planes gratuitos de Apify tienen tope de 10 ofertas por ejecucion. Mejora tu plan para limites mayores.
Preguntas frecuentes
Necesita login o clave de API de LinkedIn? No. Lee solo las paginas publicas de empleos de invitado de LinkedIn, visibles sin cuenta. Sin login, sin cookies, sin clave de API de LinkedIn.
Una ejecucion devolvio 0 registros. Por que?
Tu combinacion de palabra clave y filtros no coincidio con nada, o LinkedIn no sirvio resultados publicos para esa consulta. Afloja filtros (quita salaryRange, experienceLevel, o amplia location). Las ejecuciones sin resultados no se cobran.
Algunas ejecuciones son mas lentas o devuelven menos filas. Por que? LinkedIn limita la tasa de sus endpoints de invitado. El actor usa proxy residencial de Apify y regula las peticiones con reintentos para mantenerse confiable, pero con limitacion intensa una ejecucion grande puede ralentizarse o detenerse antes. Vuelve a ejecutar o acota la consulta si eso ocurre.
Por que remote es null?
remote se define desde el filtro workplaceType y desde el texto de ubicacion. Cuando ninguno indica remoto, el campo queda en null porque la tarjeta publica no siempre etiqueta la modalidad.
Como obtengo la descripcion completa y el nivel?
Manten withDetails activo (predeterminado). Esos campos vienen de abrir cada oferta.
Puedo apuntar a ubicaciones, empresas exactas o una busqueda guardada?
Si. Usa geoId para una ubicacion exacta, companyIds para empresas especificas, industryIds o jobFunctionIds para segmentos precisos, o pega tus URL de busqueda de LinkedIn en startUrls.
Devuelve correos de reclutadores o contactos de LinkedIn? No. Las paginas publicas de invitado no exponen datos de contacto de reclutadores ni del publicador, por lo que el actor no los devuelve.
Es una herramienta oficial de LinkedIn? No. Este actor es independiente y no tiene afiliacion con LinkedIn. Lee solo ofertas de empleo disponibles publicamente sin login.
Scrapers relacionados
- Indeed Jobs Scraper: Ofertas publicas de Indeed.
- Glassdoor Scraper: Resenas, calificaciones y salarios de Glassdoor.
- Lever Job Postings & Careers Scraper: Ofertas publicas de empresas en el ATS Lever.
- Greenhouse Jobs Scraper: Ofertas publicas de empresas en el ATS Greenhouse.
- Dice Jobs Scraper: Ofertas tecnicas publicas de Dice.
Mas scrapers en scrapers.lat
Creado y mantenido por scrapers.lat, donde publicamos scrapers para plataformas publicas de Estados Unidos y America Latina: registros de empresas, datos de gobierno, finanzas, e-commerce y mas. Explora el catalogo o solicita un scraper a medida en scrapers.lat.
Herramienta independiente, sin afiliacion con LinkedIn. Accede solo a ofertas de empleo disponibles publicamente que no requieren login.
