Skip to main content
Glama
jlucasmcrell

Apify Public Data & Leads

Glassdoor Active Job Postings and Salary Search

glassdoor_jobs_search
Read-only

Find active job openings, hiring employers, salary estimates, and company ratings from Glassdoor for any profession or location.

Instructions

Search active employment vacancies, hiring employers, estimated compensation bands, and corporate ratings from Glassdoor.

Behavioral Transparency:

  • Execution: Network call executed synchronously in the cloud via Apify Actor 'captainhandsome/glassdoor-jobs-scraper'.

  • Side Effects: Reads public sources and creates a billed Actor run and dataset on your Apify account.

  • Authentication: Requires APIFY_TOKEN environment variable.

  • Latency & Limits: Typical run duration is 15-40 seconds; timeout capped at 120 seconds.

Usage Guidelines:

  • When to use: Use when researching active job openings, hiring trends, employer compensation ranges, or workplace ratings for specific professions.

  • When NOT to use: Do not use for local commercial lead generation, corporate financial filings, or live video streaming.

  • Named alternatives: Use 'google_maps_search' for commercial trade directories, 'sec_edgar_filings' for SEC corporate filings, or 'usaspending_contracts' for federal prime contractor records.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
locationNoGeographic municipality, metropolitan area, or 'Remote' filter (e.g. 'Austin, TX' or 'New York, NY'). Defaults to all locations if empty.
job_titleYesTarget job title, professional role, or occupational keyword (e.g. 'Software Engineer', 'Data Analyst', or 'DevOps Architect').
max_resultsNoMaximum number of active job listings to retrieve. Integer between 1 and 100. Defaults to 10.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
runNo
errorNo
statusYes
resultsYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed45 schema fields changedv1.1.0
    • addedInput schema / additionalProperties
      Added value: +false
    • addedOutput schema / properties / error
      Added value: +{
      +  "type": "object"
      +}
    • removedOutput schema / properties / results / description
      Removed value: -"Collection of active employment job postings extracted from Glassdoor."
    • addedOutput schema / properties / results / items / properties / age_in_days
      Added value: +{
      +  "description": "Exact number of days since the job was posted, as reported by Glassdoor. Uncapped, unlike the posting age shown on the card, which stops at 30d+.",
      +  "title": "Age in days",
      +  "type": [
      +    "integer",
      +    "null"
      +  ]
      +}
    • removedOutput schema / properties / results / items / properties / companyName
      Removed value: -{
      -  "description": "Name of the recruiting employer or corporate entity.",
      -  "type": "string"
      -}
    • addedOutput schema / properties / results / items / properties / easy_apply
      Added value: +{
      +  "description": "True when the listing can be applied to directly on Glassdoor rather than on the employer's own site.",
      +  "title": "Easy Apply",
      +  "type": [
      +    "boolean",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / results / items / properties / employer
      Added value: +{
      +  "description": "Hiring company name displayed on the job card.",
      +  "title": "Employer",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / results / items / properties / employer_id
      Added value: +{
      +  "description": "Numeric Glassdoor company identifier, stable across listings and usable to group every job from one employer. 0 when the employer has no Glassdoor company profile.",
      +  "title": "Glassdoor employer ID",
      +  "type": [
      +    "integer",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / results / items / properties / employer_logo_url
      Added value: +{
      +  "description": "Direct URL to the employer's square logo image on Glassdoor's media CDN.",
      +  "title": "Employer logo URL",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / results / items / properties / employer_name_full
      Added value: +{
      +  "description": "Full registered company name including any legal suffix, where the job card shows only the short display name. Empty when the employer has no Glassdoor company profile.",
      +  "title": "Employer full legal name",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / results / items / properties / is_sponsored
      Added value: +{
      +  "description": "True when the listing is a paid placement rather than an organic search result.",
      +  "title": "Sponsored listing",
      +  "type": [
      +    "boolean",
      +    "null"
      +  ]
      +}
    • removedOutput schema / properties / results / items / properties / jobTitle
      Removed value: -{
      -  "description": "Official employment position or vacancy title.",
      -  "type": "string"
      -}
    • removedOutput schema / properties / results / items / properties / jobUrl
      Removed value: -{
      -  "description": "Direct canonical URL to the employment application posting.",
      -  "type": "string"
      -}
    • addedOutput schema / properties / results / items / properties / job_attributes
      Added value: +{
      +  "description": "Wider set of attributes extracted from the posting - seniority, years of experience, schedule, benefits, certifications and tooling - comma separated, up to 30 values.",
      +  "title": "Job attributes",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / results / items / properties / job_description_snippet
      Added value: +{
      +  "description": "Opening excerpt of the job description as Glassdoor summarises it on the results page. Truncated by the source, not the full posting text.",
      +  "title": "Job description snippet",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / results / items / properties / job_id
      Added value: +{
      +  "description": "Stable numeric Glassdoor job listing identifier extracted from the listing URL.",
      +  "title": "Glassdoor job ID",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / results / items / properties / job_skills
      Added value: +{
      +  "description": "Key skills Glassdoor extracted from the job description, comma separated, up to 25 values.",
      +  "title": "Required skills",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / results / items / properties / job_title
      Added value: +{
      +  "description": "Title displayed on the Glassdoor job card.",
      +  "title": "Job title",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / results / items / properties / job_url
      Added value: +{
      +  "description": "Stable Glassdoor listing URL with tracking parameters removed.",
      +  "title": "Canonical job URL",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • changedOutput schema / properties / results / items / properties / location / description
      Previous value: -"Geographic workplace location or remote designation."New value: +"Location displayed for the job listing."
    • addedOutput schema / properties / results / items / properties / location / title
      Added value: +"Job location"
    • changedOutput schema / properties / results / items / properties / location / type
      Previous value: -"string"New value: +[
      +  "string",
      +  "null"
      +]
    • addedOutput schema / properties / results / items / properties / location_id
      Added value: +{
      +  "description": "Numeric Glassdoor location identifier for the job, the same id that appears as IC<id> in Glassdoor search URLs.",
      +  "title": "Glassdoor location ID",
      +  "type": [
      +    "integer",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / results / items / properties / location_type
      Added value: +{
      +  "description": "Granularity of the location field: city, state or country. Remote and nationwide postings resolve to country.",
      +  "title": "Location granularity",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / results / items / properties / normalized_job_title
      Added value: +{
      +  "description": "Glassdoor's canonical occupation title for the listing, useful for grouping and deduplicating roles whose advertised titles differ.",
      +  "title": "Normalized job title",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / results / items / properties / pay_currency
      Added value: +{
      +  "description": "ISO currency code for the salary figures.",
      +  "title": "Pay currency",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / results / items / properties / pay_period
      Added value: +{
      +  "description": "Period the salary figures are expressed in, such as ANNUAL or HOURLY.",
      +  "title": "Pay period",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / results / items / properties / posting_age
      Added value: +{
      +  "description": "Relative listing age reported by Glassdoor, such as 24h, 3d, or 30d+.",
      +  "title": "Posting age",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / results / items / properties / posting_date_estimated
      Added value: +{
      +  "description": "UTC calendar date estimated from posting_age at collection time. Treat as approximate, especially for values ending in +.",
      +  "title": "Estimated posting date",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / results / items / properties / posting_date_exact
      Added value: +{
      +  "description": "UTC calendar date the job was posted, derived from age_in_days at collection time. Accurate to the day and, where populated, preferable to posting_date_estimated.",
      +  "title": "Posting date",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / results / items / properties / posting_date_precision
      Added value: +{
      +  "description": "estimated for ordinary relative ages or lower_bound for capped ages such as 30d+.",
      +  "title": "Posting date precision",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • changedOutput schema / properties / results / items / properties / rating / description
      Previous value: -"Employer workplace review rating on a 1.0 to 5.0 scale."New value: +"Employer rating displayed by Glassdoor."
    • addedOutput schema / properties / results / items / properties / rating / title
      Added value: +"Employer rating"
    • changedOutput schema / properties / results / items / properties / rating / type
      Previous value: -"number"New value: +[
      +  "string",
      +  "null"
      +]
    • addedOutput schema / properties / results / items / properties / salary
      Added value: +{
      +  "description": "Salary range or estimate exactly as displayed on the job card.",
      +  "title": "Displayed salary",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • removedOutput schema / properties / results / items / properties / salaryEstimate
      Removed value: -{
      -  "description": "Estimated annual or hourly compensation range when published.",
      -  "type": "string"
      -}
    • addedOutput schema / properties / results / items / properties / salary_max
      Added value: +{
      +  "description": "Upper bound of the pay range in pay_currency per pay_period.",
      +  "title": "Salary high (90th percentile)",
      +  "type": [
      +    "number",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / results / items / properties / salary_median
      Added value: +{
      +  "description": "Midpoint of the pay range in pay_currency per pay_period.",
      +  "title": "Salary median (50th percentile)",
      +  "type": [
      +    "number",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / results / items / properties / salary_min
      Added value: +{
      +  "description": "Lower bound of the pay range in pay_currency per pay_period, parsed from the displayed salary into a sortable number.",
      +  "title": "Salary low (10th percentile)",
      +  "type": [
      +    "number",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / results / items / properties / salary_source
      Added value: +{
      +  "description": "EMPLOYER_PROVIDED when the employer published the pay, ESTIMATED when Glassdoor modelled it. Tells you which salary rows are reported facts.",
      +  "title": "Salary source",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / results / items / properties / scraped_at
      Added value: +{
      +  "description": "UTC timestamp when the result page was extracted.",
      +  "title": "Collected at",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • removedOutput schema / properties / results / items / required
      Removed value: -[
      -  "jobTitle",
      -  "companyName"
      -]
    • addedOutput schema / properties / run
      Added value: +{
      +  "type": "object"
      +}
    • addedOutput schema / properties / status
      Added value: +{
      +  "enum": [
      +    "success",
      +    "empty_unverified",
      +    "partial",
      +    "error"
      +  ],
      +  "type": "string"
      +}
    • changedOutput schema / required
      Previous value: -[
      -  "results"
      -]New value: +[
      +  "results",
      +  "status"
      +]
  2. Changed8 schema fields changedv1.0.6
    • changedInput schema / properties / job_title / description
      Previous value: -"e.g. 'Software Engineer'"New value: +"Target job title, professional role, or occupational keyword (e.g. 'Software Engineer', 'Data Analyst', or 'DevOps Architect')."
    • addedInput schema / properties / job_title / minLength
      Added value: +2
    • addedInput schema / properties / location / default
      Added value: +""
    • changedInput schema / properties / location / description
      Previous value: -"e.g. 'Austin, TX' or 'Remote'"New value: +"Geographic municipality, metropolitan area, or 'Remote' filter (e.g. 'Austin, TX' or 'New York, NY'). Defaults to all locations if empty."
    • addedInput schema / properties / max_results / description
      Added value: +"Maximum number of active job listings to retrieve. Integer between 1 and 100. Defaults to 10."
    • addedInput schema / properties / max_results / maximum
      Added value: +100
    • addedInput schema / properties / max_results / minimum
      Added value: +1
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "properties": {
      +    "results": {
      +      "description": "Collection of active employment job postings extracted from Glassdoor.",
      +      "items": {
      +        "properties": {
      +          "companyName": {
      +            "description": "Name of the recruiting employer or corporate entity.",
      +            "type": "string"
      +          },
      +          "jobTitle": {
      +            "description": "Official employment position or vacancy title.",
      +            "type": "string"
      +          },
      +          "jobUrl": {
      +            "description": "Direct canonical URL to the employment application posting.",
      +            "type": "string"
      +          },
      +          "location": {
      +            "description": "Geographic workplace location or remote designation.",
      +            "type": "string"
      +          },
      +          "rating": {
      +            "description": "Employer workplace review rating on a 1.0 to 5.0 scale.",
      +            "type": "number"
      +          },
      +          "salaryEstimate": {
      +            "description": "Estimated annual or hourly compensation range when published.",
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "jobTitle",
      +          "companyName"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    }
      +  },
      +  "required": [
      +    "results"
      +  ],
      +  "type": "object"
      +}
  3. First observedv0.1.0

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses execution mechanism (synchronous Apify Actor call), side effects (billed run and dataset creation), authentication requirements (APIFY_TOKEN), and latency limits (15-40s typical, 120s timeout). This adds substantial context beyond the annotations and clarifies the true cost/operational profile of the call.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is organized into clear, front-loaded sections: purpose, behavioral transparency, and usage guidelines. Every sentence provides useful operational or routing information without fluff or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 3-parameter search tool with a rich output schema and strong annotations, the description covers authentication, side effects, latency, and alternatives. Nothing needed for correct selection or invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema documentation covers all three parameters with 100% coverage, including defaults, constraints, and examples. The tool description itself adds no parameter-level detail, so the schema already carries the burden; baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Search') and names the exact resource ('active employment vacancies, hiring employers, estimated compensation bands, and corporate ratings from Glassdoor'). It clearly distinguishes itself from sibling tools like linkedin_jobs_search by anchoring the source as Glassdoor.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit when-to-use guidance ('researching active job openings, hiring trends...'), explicit when-NOT-to-use guidance ('local commercial lead generation...'), and names concrete alternatives (google_maps_search, sec_edgar_filings, usaspending_contracts). This is exemplary routing behavior.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.