У Indeed нет API для поиска вакансий, а обычный запрос упирается в проверку безопасности. Web Unlocker открывает поиск в настоящем браузере и возвращает страницу с 50 карточками, с зарплатой и рейтингом, по цене одной страницы: 1000 вакансий за 2 цента.
1000 бесплатных запросов · Оплата только за успех · 195+ стран · Работает с Claude
Страницы Indeed загружаются от 10 до 30 секунд. Всё ещё работаем, нажимать снова не нужно.
Готовы попробовать на своих поисках? Получите API-ключ или запишитесь на демо.
Расскажите немного о вашей команде и получите:
Страница поиска Indeed содержит 50 карточек вакансий с зарплатой, рейтингом компании и датой публикации, и Web Unlocker берёт за неё как за одну страницу. Парсеры Indeed на Apify и Bright Data считают каждую вакансию отдельной записью.
Одна страница, 50 вакансий.
Двадцать страниц, 1000 вакансий.
Нужно полное описание? Страница каждой вакансии - ещё один запрос, поэтому 1000 вакансий с описаниями обходятся в $1.00. Разбейте рынок по дате, радиусу, зарплате или удалённой работе: каждый срез - ещё одна страница с 50 вакансиями.
Сколько стоят 1000 вакансий Indeed с полными описаниями
20 страниц поиска и 1000 страниц вакансий по опубликованным ценам
Bright Data, собственный Indeed Scraper от Apify и Indeed Job Scraper на Apify считают каждую вакансию записью: 1000 записей по ценам pay-as-you-go и тарифа Free.
Сто страниц Indeed запрошены одна за другой, без повторов: поиск вакансий в 40 городах, страницы вакансий, страницы компаний, страницы отзывов и четыре страновых сайта. Вот что вернулось и как быстро.
Страница, которая не вернулась, стоит $0.
Вы платите за страницы, а не за попытки.
Отсортируйте поиск по дате или оставьте только последние 24 часа, и самые свежие вакансии окажутся наверху. Ваш скрипт запрашивает эту одну страницу так часто, как нужно: проверка каждый час - это 24 страницы в день, $0.71 в месяц.
Наборы данных о вакансиях обновляются раз в месяц.
Ваша страница - сегодняшняя.
Парсинг Indeed без разбора HTML: собственный JSON Indeed лежит внутри каждой страницы поиска, 50 вакансий с названием, компанией, зарплатой, рейтингом и датой публикации. Страница вакансии так же содержит полное описание.
Заполните форму выше. Ключ придёт на почту в течение одного рабочего дня.
Поиск с limit=50 - для 50 вакансий, страница вакансии - для её описания, вкладка вакансий компании - страница за страницей.
Вырежьте из страницы массив results, и у вас есть все поля, которые показывает Indeed, от зарплаты до даты публикации.
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));Готовы запустить на своих поисках? Получите API-ключ и бесплатные запросы.
У Indeed нет API поиска вакансий для вашего приложения, а каждый готовый парсер вакансий Indeed берёт плату за каждую вакансию. Вот что нужно на каждом пути к данным о вакансиях Indeed для тех же 1000 вакансий.
| Что нужно | Indeed API | Apify | Bright Data | |
|---|---|---|---|---|
| Данные поиска вакансий для вашего приложения | Да | Нет | Да | Да |
| Вы платите за | Страницу | Нет API | Каждую вакансию | Каждую запись |
| 1000 вакансий с описаниями | $1.00 | Нет | от $0.10 до $6 | $1.50 |
| Вакансий в одном запросе | 50 | Нет | До 1000 за запуск | Одна запись |
| Страница 2 и дальше | Из вашего аккаунта | Нет | Да | Да |
| Отзывы и зарплаты компаний | Да | Нет | Нет | Да |
| Страница целиком в HTML или Markdown | Да | Нет | Нет | Нет |
| Бесплатный старт для бизнеса | Да | Нет | Да | Да |
Парсите не только Indeed? Web Unlocker возвращает любую страницу так же и по той же цене.
Web Unlocker возвращает одну страницу за запрос, а Indeed показывает посетителю одну страницу вакансий, прежде чем попросить войти. Добавьте Cloud Browser для остального: он один раз входит в ваш аккаунт Indeed и держит эту сессию живой, поэтому страницы 2, 20 и 50 открываются так же, как страница 1, на том же устройстве и с тем же резидентным IP.
Ваша сессия - это браузер, который продолжает работать, а не восстановленный файл. Закройте скрипт вечером, откройте завтра, и Indeed увидит того же вошедшего посетителя.
Профиль сохраняет cookie и резидентный IP от запуска к запуску, поэтому Indeed видит одного человека на одном ноутбуке, а не нового посетителя на каждой странице.
Управляйте им из Playwright, Puppeteer или Claude: откройте поиск, нажмите «далее», прочитайте карточки, повторите. Резидентные IP включены.
Запускайте из Playwright, Puppeteer или Claude. Посмотреть Cloud Browser.
Один аккаунт, одна прокси-сеть, одна экосистема. Выберите продукт под задачу.
Парсите и другие сайты? Смотрите парсеры Google Maps, Reddit и YouTube или все инструменты для веб-парсинга.
Отправьте адрес поиска Indeed в Web Unlocker с limit=50. Он откроет страницу в настоящем браузере с американского адреса и вернёт её с собственным JSON Indeed внутри: 50 вакансий с названием, компанией, местом, зарплатой, рейтингом компании, датой публикации и ссылкой. Код выше делает именно это.
Для поиска вакансий нет. Старый Publisher API, который возвращал списки вакансий, закрыт, а нынешние API Indeed предназначены для партнёров, которые отправляют вакансии в Indeed, например систем учёта кандидатов. Ни один из них не отдаёт результаты поиска третьей стороне, поэтому парсер читает публичные страницы.
API Indeed, который можно купить или получить бесплатно, чтобы читать вакансии, не существует. С Web Unlocker вы получаете 1000 бесплатных запросов, этого хватит на 1000 страниц поиска по 50 вакансий.
Условия Indeed написаны для тех, кто ищет работу, а страницы поиска вакансий публичные и открываются без входа. Web Unlocker загружает их так же, как браузер посетителя, и возвращает страницу. Что вы собираете и как используете, решаете вы, поэтому сверьтесь с правилами, которые относятся к вашему проекту.
Вакансии публикуют, чтобы их читали, а парсеры читают публичные страницы, которые видит посетитель. Правила различаются по странам и зависят от того, что вы делаете с данными, поэтому сверьте своё использование с ними. Web Unlocker возвращает страницу, остальное - на вас.
Программа, которая загружает страницы сайтов с вакансиями и достаёт из них объявления как данные: название, компанию, место, зарплату, дату, описание и ссылку. На Indeed загрузку берёт на себя Web Unlocker, а поля достаются из JSON, который Indeed встраивает в каждую страницу.
Отправьте адрес поиска в API парсера Indeed через библиотеку requests, найдите массив results на странице и загрузите его модулем json. Вкладка Python выше - готовый скрипт, проверенный на живом API: 50 вакансий одним запросом.
Оно есть на странице каждой вакансии. Откройте indeed.com/m/viewjob?jk= и ключ вакансии через Web Unlocker: он вернёт описание текстом и HTML, а также название, компанию, место и тип занятости. Одна страница на вакансию, 1000 описаний за $0.98.
Indeed показывает посетителю одну страницу поиска и просит аккаунт на следующей. Есть два способа: разбейте поиск по дате, радиусу, зарплате или удалённой работе, и каждый срез - новая страница с 50 вакансиями; или откройте Indeed в Cloud Browser, один раз войдите в свой аккаунт и листайте страницы из этой сессии.
Настолько же свежие, как на самом Indeed. Отсортируйте поиск по дате или оставьте только последние 24 часа, и на странице будут вакансии с пометкой Just posted. Наборы данных, которые продают по записям, обновляются раз в неделю или раз в месяц, а страница - сегодняшняя.
Да. Страница компании возвращает её рейтинг, число отзывов и открытые вакансии, страницы отзывов - по 20 отзывов с плюсами и минусами, страница за страницей, а страница зарплат - оплату по должностям. Страницы зарплат по должности и городу тоже работают, со средним значением и диапазоном.
Да. Сайты Indeed Великобритании, Канады, Германии и Франции вернули страницы поиска так же, с выбранной страной выхода. Отправьте адрес странового сайта и выберите гео в запросе.
Web Unlocker возвращает страницу, а не таблицу, поэтому до вас ничего не обрезается. Превратить вакансии в CSV можно несколькими строками кода или одним запросом: передайте страницу Claude вместе с Gologin scraping skill и попросите CSV.
Меньше $1 за 1000 страниц в API парсера Indeed, одна цена за любую страницу. На странице поиска 50 вакансий, поэтому 1000 вакансий со страниц поиска стоят 2 цента, а 1000 вакансий с полными описаниями - около $1. Страница, которая не загрузилась, ничего не стоит. Тарифы начинаются от $49 в месяц за 50 000 запросов.
Да, для старта: с Web Unlocker вы получаете 1000 бесплатных запросов, этого хватит на 50 000 вакансий со страниц поиска или 1000 полных описаний вакансий.
Зависит от задачи. Парсеры Indeed на Apify и Bright Data продают готовые строки и берут деньги за каждую вакансию как за запись, а их пользователи сообщают о запусках, которые возвращают меньше вакансий, чем показывает Indeed. Web Unlocker - веб-парсер Indeed, который возвращает всю страницу по одной цене, с собственным JSON Indeed внутри, поэтому поля, которые оставить, выбираете вы.
Расскажите немного о вашей команде и получите: