indeed-scraper-api
v0.0.1
Published
Node.js client for scraping Indeed job listings using the ScrapingBee web scraping API.
Maintainers
Readme
Indeed Scraper API (Node.js)
Scrape Indeed job listings from Node without running a browser or parsing HTML. This package wraps the ScrapingBee web scraping API: give it a role and a city, and it resolves to a JSON array of jobs. Rendering and residential proxies are handled on ScrapingBee's side.
Why a wrapper at all? Indeed builds its listings in JavaScript and screens automated requests, so fetching the raw HTML yourself gets you an empty shell. This Indeed scraper turns on headless rendering and residential proxies per request, then extracts the fields with server-side rules so your code stays a few lines long.
Install
npm install indeed-scraper-apiNode 14 or newer. axios is pulled in as a dependency.
Usage
const { IndeedScraper } = require('indeed-scraper-api');
const scraper = new IndeedScraper({ apiKey: 'YOUR_SCRAPINGBEE_API_KEY' });
(async () => {
const { jobs } = await scraper.search('data engineer', { location: 'Austin', start: 0 });
jobs.forEach((job) => {
console.log(`${job.title} @ ${job.company} (${job.location})`);
});
})();Grab an API key at ScrapingBee; signup includes 1,000 free credits and needs no card.
Options
search(query, options) takes the query as the first argument and an options object second. Indeed paginates in increments of 10, so start: 10 is the second page.
| Option | Default | What it does |
|---|---|---|
| location | '' | City or region for the search |
| start | 0 | Pagination offset (10 per page) |
| renderJs | true | Render the page in a headless browser |
| premiumProxy | true | Send the request over residential proxies |
| countryCode | 'us' | Proxy country |
| wait | 5000 | Milliseconds to wait after the page loads |
| extractRules | JOB_RULES | Swap in your own field selectors |
Returned data
Each job object mirrors the selectors from ScrapingBee's data extraction rules:
{
title: 'Data Engineer',
company: 'Globex',
location: 'Austin, TX',
url: '/rc/clk?jk=...'
}Scraping a single Indeed URL
Use scrape(url, options) for a specific job or company page. It returns rendered HTML by default, or JSON when you supply your own extractRules:
const html = await scraper.scrape('https://www.indeed.com/viewjob?jk=SOME_ID');Credits
Residential proxies plus JavaScript rendering put each call at 25 ScrapingBee credits. If a target does not need residential IPs, set premiumProxy: false for cheaper datacenter requests. The full table is on ScrapingBee pricing.
Notes
This is an independent, community-built client on top of the public ScrapingBee API. It is not affiliated with Indeed. For the underlying walkthrough, read ScrapingBee's Indeed scraping guide.
License
MIT
