Indeed no tiene una API de búsqueda de empleo, y una solicitud simple recibe una comprobación de seguridad, no ofertas. Web Unlocker abre la búsqueda en un navegador real y devuelve la página con 50 ofertas, salario y valoración incluidos, cobrada como una página: 1000 ofertas por 2 centavos.
1000 solicitudes gratis · Solo pagas si funciona · 195+ países · Listo para Claude
Las páginas de Indeed tardan de 10 a 30 segundos. Sigue en proceso, no hace falta volver a hacer clic.
¿Listo para tus propias búsquedas? Obtén una clave de API o reserva una demo.
Cuéntanos un poco sobre tu equipo y recibe:
Una página de búsqueda de Indeed trae 50 ofertas con salario, valoración de la empresa y fecha de publicación, y Web Unlocker la cobra como una página. Los scrapers de Indeed en Apify y Bright Data cobran cada oferta como un registro aparte.
Una página, 50 ofertas.
Veinte páginas, 1000 ofertas.
¿Necesitas la descripción completa? La página de cada oferta es una solicitud más, así que 1000 ofertas con descripción salen por $1.00. Divide un mercado por fecha, radio, salario o trabajo remoto: cada división es una página más de 50.
Lo que cuestan 1000 ofertas de Indeed con descripción completa
20 páginas de búsqueda y 1000 páginas de ofertas, a precios publicados
Bright Data, el Indeed Scraper de Apify y el Indeed Job Scraper en Apify cobran cada oferta como un registro: 1000 registros a precios de pago por uso y del plan Free.
Cien páginas de Indeed pedidas una tras otra, sin reintentos: búsquedas de empleo en 40 ciudades, páginas de ofertas, de empresas, de opiniones y cuatro sitios de otros países. Esto es lo que vuelve, y con qué rapidez.
Una página que no vuelve cuesta $0.
Pagas por páginas, no por intentos.
Ordena una búsqueda por fecha o limítala a las últimas 24 horas, y las ofertas más nuevas quedan arriba. Tu script pide esa página tan a menudo como quieras: una comprobación cada hora son 24 páginas al día, $0.71 al mes.
Los conjuntos de datos de empleo se actualizan cada mes.
Tu página es la de hoy.
Scraping de Indeed sin analizar HTML: el JSON propio de Indeed va dentro de cada página de búsqueda, con 50 ofertas con puesto, empresa, salario, valoración y fecha de publicación. La página de una oferta trae su descripción completa de la misma forma.
Rellena el formulario de arriba. La clave llega por correo en un día hábil.
Una búsqueda con limit=50 para 50 ofertas, la página de una oferta para su descripción, o la pestaña de ofertas de una empresa, página a página.
Extrae el array de resultados de la página y tienes cada campo que muestra Indeed, del salario a la fecha de publicación.
pip install requestsGOLOGIN_SCRAPING_API_KEY=your_key python indeed_jobs.pyhttps://parsing.webunlocker.gologin.com/v1/scrapeimport json
import os
import time
from urllib.parse import urlencode
import requests
query = "marketing manager"
where = "Austin, TX"
def scrape(url):
for attempt in range(3):
response = requests.get(
"https://parsing.webunlocker.gologin.com/v1/scrape",
params={"url": url, "geo": "us", "format": "json"},
headers={"apikey": os.environ["GOLOGIN_SCRAPING_API_KEY"]},
timeout=90,
)
page = response.json().get("data", {}).get("html", "") if response.ok else ""
if '"results":[{' in page:
return page
time.sleep(5)
raise RuntimeError("No jobs came back, try again later")
def embedded(page, marker):
start = page.index(marker) + len(marker) - 1
value, _ = json.JSONDecoder().raw_decode(page[start:])
return value
search = "https://www.indeed.com/jobs?" + urlencode({"q": query, "l": where, "limit": 50})
page = scrape(search)
jobs = [
{
"title": job["title"],
"company": job["company"],
"location": job["formattedLocation"],
"salary": (job.get("salarySnippet") or {}).get("text"),
"rating": job.get("companyRating") or None,
"posted": job.get("formattedRelativeTime"),
"sponsored": job.get("sponsored", False),
"url": "https://www.indeed.com/viewjob?jk=" + job["jobkey"],
}
for job in embedded(page, '"results":[')
]
print(json.dumps({"query": query, "where": where, "jobs_on_page": len(jobs), "jobs": jobs}, indent=2, ensure_ascii=False))GOLOGIN_SCRAPING_API_KEY=your_key node indeed-descriptions.mjshttps://parsing.webunlocker.gologin.com/v1/scrapeconst search = 'https://www.indeed.com/jobs?q=registered+nurse&l=Remote&limit=50';
const wanted = 5;
async function scrape(url, marker) {
for (let attempt = 1; attempt <= 3; attempt++) {
const params = new URLSearchParams({ url, geo: 'us', format: 'json' });
const response = await fetch(`https://parsing.webunlocker.gologin.com/v1/scrape?${params}`, {
headers: { apikey: process.env.GOLOGIN_SCRAPING_API_KEY },
});
const page = response.ok ? (await response.json()).data?.html : '';
if (page?.includes(marker)) return page;
await new Promise((resolve) => setTimeout(resolve, 5000));
}
throw new Error(`Nothing came back for ${url}, try again later`);
}
const field = (page, name) => JSON.parse(page.match(new RegExp(`"${name}":("(?:[^"\\\\]|\\\\.)*")`))?.[1] ?? '""');
const text = (markup) => markup.replace(/<[^>]+>/g, ' ').replace(/&/g, '&').replace(/ /g, ' ').replace(/\s+/g, ' ').trim();
const listing = await scrape(search, '"results":[{');
const keys = [...new Set([...listing.matchAll(/"jobkey":"([0-9a-f]{16})"/g)].map((match) => match[1]))];
console.log(`${keys.length} jobs on the search page, reading the first ${wanted} in full`);
for (const key of keys.slice(0, wanted)) {
const job = await scrape(`https://www.indeed.com/m/viewjob?jk=${key}`, '"sanitizedJobDescription"');
const description = text(field(job, 'sanitizedJobDescription'));
console.log(`\n${field(job, 'jobTitle')} at ${field(job, 'companyName')}, ${field(job, 'formattedLocation')} (${description.length} characters)`);
console.log(`${description.slice(0, 280)}...`);
}GOLOGIN_SCRAPING_API_KEY=your_key node indeed-company.mjshttps://parsing.webunlocker.gologin.com/v1/scrapeconst company = 'Amazon.com';
const pages = 5;
async function scrape(url) {
for (let attempt = 1; attempt <= 3; attempt++) {
const params = new URLSearchParams({ url, geo: 'us', format: 'json' });
const response = await fetch(`https://parsing.webunlocker.gologin.com/v1/scrape?${params}`, {
headers: { apikey: process.env.GOLOGIN_SCRAPING_API_KEY },
});
const page = response.ok ? (await response.json()).data?.html : '';
if (page?.includes('"results":[{')) return page;
await new Promise((resolve) => setTimeout(resolve, 5000));
}
throw new Error(`No jobs came back for ${url}, try again later`);
}
function embedded(page, marker) {
const start = page.indexOf(marker) + marker.length - 1;
const token = /"(?:[^"\\]|\\.)*"|[[\]{}]/g;
token.lastIndex = start;
let depth = 0;
for (let match = token.exec(page); match; match = token.exec(page)) {
depth += '[{'.includes(match[0]) ? 1 : ']}'.includes(match[0]) ? -1 : 0;
if (depth === 0) return JSON.parse(page.slice(start, match.index + 1));
}
return [];
}
const jobs = new Map();
for (let start = 0; start < pages * 20; start += 20) {
const page = await scrape(`https://www.indeed.com/cmp/${company}/jobs?start=${start}`);
const fresh = embedded(page, '"results":[').filter((job) => !jobs.has(job.jobkey));
if (fresh.length === 0) break;
for (const job of fresh) {
jobs.set(job.jobkey, { title: job.title, location: job.formattedLocation, salary: job.salarySnippet?.text ?? null, posted: job.formattedRelativeTime });
}
console.log(`page ${start / 20 + 1}: ${fresh.length} new jobs, ${jobs.size} so far`);
}
console.table([...jobs.values()].slice(0, 10));¿Listo para ejecutarlo con tus propias búsquedas? Obtén tu clave de API y solicitudes gratis.
Indeed no tiene una API de búsqueda de empleo para tu app, y cada scraper de Indeed ya hecho cobra cada oferta. Esto es lo que exige cada vía a los datos de empleo de Indeed para las mismas 1000 ofertas.
| Lo que necesitas | Indeed API | Apify | Bright Data | |
|---|---|---|---|---|
| Datos de búsqueda de empleo para tu app | Sí | No | Sí | Sí |
| Pagas por | Una página | Sin API | Cada oferta | Cada registro |
| 1000 ofertas con descripción | $1.00 | Ninguno | De $0.10 a $6 | $1.50 |
| Ofertas en una solicitud | 50 | Ninguna | Hasta 1000 por ejecución | Un registro |
| Página 2 y siguientes | Desde tu cuenta | Ninguna | Sí | Sí |
| Opiniones y salarios de empresas | Sí | No | No | Sí |
| La página completa en HTML o Markdown | Sí | No | No | No |
| Inicio gratis para empresas | Sí | No | Sí | Sí |
¿Haces scraping de algo más que Indeed? Web Unlocker devuelve cualquier página de la misma forma y al mismo precio.
Web Unlocker devuelve una página por solicitud, e Indeed muestra a un visitante una página de ofertas antes de pedirle que inicie sesión. Añade Cloud Browser para el resto: inicia sesión una vez en tu cuenta de Indeed y mantiene esa sesión activa, así que la página 2, la 20 y la 50 se abren igual que la 1, en el mismo dispositivo y con la misma IP residencial.
Tu sesión es un navegador que sigue en marcha, no un archivo que restauraste. Cierra tu script esta noche, ábrelo mañana, e Indeed ve al mismo visitante con la sesión iniciada.
El perfil conserva sus cookies y su IP residencial de una ejecución a otra, así que Indeed ve a una persona en una laptop, no a un visitante nuevo en cada página.
Manéjalo desde Playwright, Puppeteer o Claude: abre la búsqueda, haz clic en siguiente, lee las ofertas y repite. IP residenciales incluidas.
Ejecútalo desde Playwright, Puppeteer o Claude. Ver Cloud Browser.
Una cuenta, una red de proxies, un ecosistema. Elige el producto que necesita cada tarea.
¿Haces scraping de más sitios? Consulta los scrapers de Google Maps, Reddit y YouTube, o todas las herramientas de web scraping.
Envía la dirección de la búsqueda de Indeed a Web Unlocker con limit=50 dentro. Abre la página en un navegador real desde una dirección de EE. UU. y la devuelve con el JSON propio de Indeed: 50 ofertas con puesto, empresa, ubicación, salario, valoración de la empresa, fecha de publicación y enlace. El código de arriba hace exactamente eso.
No para buscar empleo. La antigua Publisher API, que devolvía ofertas, está cerrada, y las APIs actuales de Indeed son para socios que envían ofertas a Indeed, como los sistemas de seguimiento de candidatos. Ninguna devuelve resultados de búsqueda a un tercero, así que un scraper lee las páginas públicas.
No hay una API de Indeed, de pago ni gratis, para leer ofertas de empleo. Web Unlocker empieza con 1000 solicitudes gratis, suficientes para 1000 páginas de búsqueda de 50 ofertas cada una.
Los términos de Indeed están escritos para personas que buscan trabajo, y sus páginas de búsqueda son públicas y cargan sin iniciar sesión. Web Unlocker las carga como lo hace el navegador de un visitante y devuelve la página. Qué recoges y cómo lo usas es decisión tuya, así que compruébalo con las normas que se apliquen a tu proyecto.
Las ofertas de empleo se publican para que se lean, y los scrapers leen las páginas públicas que ve un visitante. Las normas cambian según el país y lo que hagas con los datos, así que compruébalo con tu propio uso. Web Unlocker devuelve la página; el resto es cosa tuya.
Un programa que carga las páginas de un portal de empleo y extrae las ofertas como datos: puesto, empresa, ubicación, salario, fecha, descripción y enlace. En Indeed, Web Unlocker se ocupa de cargar la página, y los campos salen del JSON que Indeed incluye en cada una.
Envía la dirección de la búsqueda a la API de scraping de Indeed con la biblioteca requests, busca el array de resultados en la página y cárgalo con el módulo json. La pestaña Python de arriba es un script completo, probado en la API real: 50 ofertas en una solicitud.
La trae la página de cada oferta. Abre indeed.com/m/viewjob?jk= seguido de la clave de la oferta con Web Unlocker: devuelve la descripción como texto y HTML, con el puesto, la empresa, la ubicación y el tipo de empleo. Una página por oferta, 1000 descripciones por $0.98.
Indeed muestra a un visitante una página de una búsqueda y pide una cuenta en la siguiente. Hay dos salidas: dividir la búsqueda por fecha, radio, salario o trabajo remoto, y cada división es una página nueva de 50 ofertas; o abrir Indeed en Cloud Browser, iniciar sesión una vez en tu propia cuenta y pasar las páginas desde esa sesión.
Tan recientes como las de Indeed. Ordena una búsqueda por fecha o fíltrala a las últimas 24 horas y la página muestra ofertas marcadas como Just posted. Los conjuntos de datos que se venden por registro se actualizan cada semana o cada mes; una página es la de hoy.
Sí. La página de una empresa devuelve su valoración, su número de opiniones y sus ofertas abiertas; sus páginas de opiniones devuelven 20 opiniones cada una, con pros y contras, página a página; su página de salarios lista el pago por puesto. Las páginas de salarios por puesto y ciudad también funcionan, con el promedio y el rango.
Sí. Los sitios de Indeed de Reino Unido, Canadá, Alemania y Francia devolvieron sus páginas de búsqueda de la misma forma, con el país de salida ajustado. Envía la dirección del sitio del país y elige la geo en la solicitud.
Web Unlocker devuelve la página, no una tabla, así que no se recorta nada antes de que la veas. Convertir las ofertas en un CSV son unas pocas líneas de código, o un solo prompt: pasa la página a Claude con la skill de scraping de Gologin y pide un CSV.
Menos de $1 por 1000 páginas en la API de scraping de Indeed, y el mismo precio para cada página. Una página de búsqueda trae 50 ofertas, así que 1000 ofertas de páginas de búsqueda cuestan 2 centavos, y 1000 ofertas con su descripción completa, cerca de $1. Una página que no carga no cuesta nada. Los planes empiezan en $49 al mes por 50 000 solicitudes.
Sí, para empezar: Web Unlocker incluye 1000 solicitudes gratis, suficientes para 50 000 ofertas de páginas de búsqueda o 1000 descripciones completas.
Depende de lo que necesites. Los scrapers de Indeed de Apify y Bright Data venden filas ya hechas y cobran cada oferta como un registro, y sus usuarios cuentan que algunas ejecuciones devuelven menos ofertas de las que muestra Indeed. Web Unlocker es un web scraper de Indeed que devuelve la página completa a un solo precio, con el JSON propio de Indeed dentro, así que tú decides qué campos conservas.
Cuéntanos un poco sobre tu equipo y recibe: