Collect public Glassdoor job listings as structured data for recruitment research, salary analysis, hiring intelligence, and job aggregation. Glassdoor Jobs Scraper exports each vacancy with its source URL, title, company, location, and collection timestamp. Rich salary and employer fields are included whenever Glassdoor publishes them on the listing.
Example input
{
"keyword": "software engineer",
"location": "New York, NY",
"country": "US",
"daysOld": 7,
"includeDetails": true,
"maxItems": 5
}
You can also supply one or more public Glassdoor searches in startUrls when you have already configured filters on the website.
Example output
{
"url": "https://www.glassdoor.com/job-listing/example.htm?jl=123456",
"title": "Senior Software Engineer",
"companyName": "Example Company",
"location": "New York, NY",
"source": "glassdoor",
"scrapedAt": "2026-07-10T12:00:00.000Z"
}
Fields may be omitted when they are not published in a job card. Every saved record keeps the public source URL so you can review the original vacancy.
What data can you export?
- Job title and canonical Glassdoor listing URL
- Employer name when shown on the listing
- City, state, country, or remote location label
- Glassdoor source provenance
- UTC collection timestamp
- Public salary range, currency, period, and salary source
- Company rating, review count, size, and industry when available
- Job description and application URL when detail enrichment is enabled
- Remote, Easy Apply, job type, query, rank, and collection diagnostics
The dataset is ready for JSON, CSV, Excel, XML, RSS, and API export through Apify.
Who is it for?
Recruiters, talent intelligence teams, job-board operators, compensation analysts, and developers can use this Actor to turn public job searches into structured, repeatable datasets.
Use cases
- Recruiting research: build prospect lists from currently advertised roles.
- Salary analysis: compare public compensation ranges across locations and employers.
- Hiring intelligence: monitor which companies are expanding specific teams.
- Job aggregation: feed normalized vacancies into internal search and alert tools.
- Market analysis: measure demand for titles, skills, industries, and locations.
- Automation: connect recurring runs to webhooks, Google Sheets, Make, Zapier, or your data warehouse.
Input settings
| Field | Type | Description |
|---|---|---|
startUrls |
array | Optional public Glassdoor job-search URLs. |
keyword |
string | Job title, skill, or employer. Default: software engineer. |
location |
string | City, state, or country. Default: New York, NY. |
country |
string | Glassdoor country site and proxy location. |
daysOld |
integer | Maximum posting age from 1 to 30 days. |
remoteOnly |
boolean | Keep jobs labeled as remote. |
easyApplyOnly |
boolean | Keep jobs labeled Easy Apply. |
jobType |
string | All, full-time, part-time, contract, internship, or temporary. |
seniority |
string | Optional seniority keyword preserved in output. |
minSalary |
number | Minimum published maximum salary. |
industry |
string | Optional industry text filter. |
companySize |
string | Optional employee-size text filter. |
minCompanyRating |
number | Minimum Glassdoor employer rating. |
includeDetails |
boolean | Enrich descriptions, apply URLs, and company details. |
maxItems |
integer | Maximum jobs to save. The low prefill keeps a first run inexpensive. |
Use either configured startUrls or the keyword and location fields. Start with a small limit, inspect the results, and then increase the limit for production workflows.
Input recipes
Search by title and city
{
"keyword": "data scientist",
"location": "Austin, TX",
"maxItems": 10
}
Use an existing Glassdoor search
{
"startUrls": [{
"url": "https://www.glassdoor.com/Job/jobs.htm?sc.keyword=product%20manager"
}],
"includeDetails": false,
"maxItems": 10
}
Monitor a narrow hiring market
{
"keyword": "machine learning engineer",
"location": "United States",
"maxItems": 5
}
API usage
cURL
curl -X POST \
"https://api.apify.com/v2/acts/fetch_cat~glassdoor-jobs-scraper/runs?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"keyword":"software engineer","location":"New York, NY","maxItems":5}'
JavaScript
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('fetch_cat/glassdoor-jobs-scraper').call({
keyword: 'software engineer', location: 'New York, NY', maxItems: 5,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
Python
import os
from apify_client import ApifyClient
client = ApifyClient(os.environ['APIFY_TOKEN'])
run = client.actor('fetch_cat/glassdoor-jobs-scraper').call(run_input={
'keyword': 'software engineer', 'location': 'New York, NY', 'maxItems': 5,
})
items = client.dataset(run['defaultDatasetId']).list_items().items
print(items)
After the run finishes, read its default dataset through the returned dataset ID.
Use with MCP and AI agents
Connect an MCP-compatible assistant to:
https://mcp.apify.com/?tools=fetch_cat/glassdoor-jobs-scraper
The assistant can start the Actor with structured input and consume the resulting dataset. Keep limits small when an agent is exploring a new query.
Tips for reliable results
- Use specific job titles rather than broad single-word keywords.
- Include a city and state or a country to reduce ambiguous locations.
- Keep recurring searches narrow and deduplicate by listing URL or job ID.
- A vacancy can disappear when the employer closes it; schedule monitoring according to your freshness needs.
- Glassdoor may publish different fields by country, employer, and job type.
Limits and responsible use
This Actor collects public job-listing information. Website availability and published fields can change. Do not use the output for unlawful discrimination, spam, or decisions that require information Glassdoor did not publish. Follow applicable law, the source website's terms, and privacy requirements in your jurisdiction.
A security or challenge page is reported as an error, not as a successful empty dataset. Legitimate searches with no matching vacancies may return no items.
Support
If a public search repeatedly fails, open an issue from the Actor's Apify page. Include the input, run ID, expected result, and country. Do not include passwords, cookies, tokens, or other secrets.