HasData is an independent service and is not affiliated with, endorsed by, or sponsored by Glassdoor. Glassdoor is a trademark of its respective owner. This API works with publicly available data only.
Get Your API Key
Sign in at hasdata.com, go to your account settings, and copy your API key. All requests must include your key in thex-api-key header.
Request Cost and API Credits
Each request to the Glassdoor Listing Scraper API consumes API Credits from your account balance.- Cost per request: 10 API Credits
- Credits are deducted only for successful requests.
- Your total available credits depend on your active plan.
You can use your credits across all HasData APIs. The same credit balance is shared platform-wide.
Unused credits do not roll over. Any remaining credits expire at the end of the current billing period.
Make Your First Request
curl --request GET -G \
--url 'https://api.hasdata.com/scrape/glassdoor/listing' \
--data-urlencode 'keyword=software engineer' \
--data-urlencode 'location=New York, NY' \
--data-urlencode 'sort=recent' \
--data-urlencode 'domain=www.glassdoor.com' \
--data-urlencode 'datePosted=7' \
--data-urlencode 'radius=25' \
--data-urlencode 'minSalary=90000' \
--data-urlencode 'maxSalary=150000' \
--data-urlencode 'minRating=4' \
--header 'Content-Type: application/json' \
--header 'x-api-key: <your-api-key>'
hasdata glassdoor-listing \
--keyword 'software engineer' \
--location 'New York, NY' \
--sort recent \
--domain www.glassdoor.com \
--date-posted 7 \
--radius 25 \
--min-salary 90000 \
--max-salary 150000 \
--min-rating 4
const axios = require('axios').default;
const options = {
method: 'GET',
url: 'https://api.hasdata.com/scrape/glassdoor/listing',
params: {
keyword: 'software engineer',
location: 'New York, NY',
sort: 'recent',
domain: 'www.glassdoor.com',
datePosted: '7',
radius: '25',
minSalary: '90000',
maxSalary: '150000',
minRating: '4'
},
headers: {'Content-Type': 'application/json', 'x-api-key': '<your-api-key>'}
};
try {
const { data } = await axios.request(options);
console.log(data);
} catch (error) {
console.error(error);
}
import requests
url = "https://api.hasdata.com/scrape/glassdoor/listing"
querystring = {"keyword":"software engineer","location":"New York, NY","sort":"recent","domain":"www.glassdoor.com","datePosted":"7","radius":"25","minSalary":"90000","maxSalary":"150000","minRating":"4"}
headers = {
"Content-Type": "application/json",
"x-api-key": "<your-api-key>"
}
response = requests.get(url, headers=headers, params=querystring)
print(response.json())
<?php
$params = [
"keyword" => "software engineer",
"location" => "New York, NY",
"sort" => "recent",
"domain" => "www.glassdoor.com",
"datePosted" => "7",
"radius" => "25",
"minSalary" => "90000",
"maxSalary" => "150000",
"minRating" => "4",
];
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.hasdata.com/scrape/glassdoor/listing?" . http_build_query($params),
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-key: <your-api-key>",
],
]);
$response = curl_exec($curl);
curl_close($curl);
echo $response;
OkHttpClient client = new OkHttpClient();
HttpUrl url = HttpUrl.parse("https://api.hasdata.com/scrape/glassdoor/listing")
.newBuilder()
.addQueryParameter("keyword", "software engineer")
.addQueryParameter("location", "New York, NY")
.addQueryParameter("sort", "recent")
.addQueryParameter("domain", "www.glassdoor.com")
.addQueryParameter("datePosted", "7")
.addQueryParameter("radius", "25")
.addQueryParameter("minSalary", "90000")
.addQueryParameter("maxSalary", "150000")
.addQueryParameter("minRating", "4")
.build();
Request request = new Request.Builder()
.url(url)
.get()
.addHeader("Content-Type", "application/json")
.addHeader("x-api-key", "<your-api-key>")
.build();
Response response = client.newCall(request).execute();
using System.Net.Http;
using System.Web;
var client = new HttpClient();
var query = HttpUtility.ParseQueryString(string.Empty);
query["keyword"] = "software engineer";
query["location"] = "New York, NY";
query["sort"] = "recent";
query["domain"] = "www.glassdoor.com";
query["datePosted"] = "7";
query["radius"] = "25";
query["minSalary"] = "90000";
query["maxSalary"] = "150000";
query["minRating"] = "4";
var url = $"https://api.hasdata.com/scrape/glassdoor/listing?{query}";
var request = new HttpRequestMessage(new HttpMethod("GET"), url);
request.Headers.Add("x-api-key", "<your-api-key>");
using var response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
var content = await response.Content.ReadAsStringAsync();
Console.WriteLine(content);
require 'net/http'
require 'uri'
uri = URI("https://api.hasdata.com/scrape/glassdoor/listing")
params = {
"keyword" => "software engineer",
"location" => "New York, NY",
"sort" => "recent",
"domain" => "www.glassdoor.com",
"datePosted" => "7",
"radius" => "25",
"minSalary" => "90000",
"maxSalary" => "150000",
"minRating" => "4",
}
uri.query = URI.encode_www_form(params)
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Get.new(uri)
request["Content-Type"] = 'application/json'
request["x-api-key"] = '<your-api-key>'
response = http.request(request)
puts response.read_body
use reqwest::blocking::Client;
fn main() -> Result<(), Box<dyn std::error::Error>> {
let client = Client::new();
let res = client
.get("https://api.hasdata.com/scrape/glassdoor/listing")
.query(&[("keyword", "software engineer")])
.query(&[("location", "New York, NY")])
.query(&[("sort", "recent")])
.query(&[("domain", "www.glassdoor.com")])
.query(&[("datePosted", "7")])
.query(&[("radius", "25")])
.query(&[("minSalary", "90000")])
.query(&[("maxSalary", "150000")])
.query(&[("minRating", "4")])
.header("Content-Type", "application/json")
.header("x-api-key", "<your-api-key>")
.send()?
.text()?;
println!("{}", res);
Ok(())
}
package main
import (
"fmt"
"io"
"net/http"
"net/url"
)
func main() {
params := url.Values{}
params.Set("keyword", "software engineer")
params.Set("location", "New York, NY")
params.Set("sort", "recent")
params.Set("domain", "www.glassdoor.com")
params.Set("datePosted", "7")
params.Set("radius", "25")
params.Set("minSalary", "90000")
params.Set("maxSalary", "150000")
params.Set("minRating", "4")
u := "https://api.hasdata.com/scrape/glassdoor/listing?" + params.Encode()
req, _ := http.NewRequest("GET", u, nil)
req.Header.Add("Content-Type", "application/json")
req.Header.Add("x-api-key", "<your-api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}
API Parameters
| Parameter | Default Value | Required | Description |
|---|---|---|---|
keyword | software engineer | Yes | The keyword used to search for job listings. |
location | New York, NY | Yes | The location to search for job listings. |
sort | recent | No | The sorting option for the search results. |
domain | www.glassdoor.com | No | The domain of the Glassdoor site (optional). |
datePosted | 7 | No | Returns only jobs posted within the given number of days. |
radius | 25 | No | Search radius around the location, in miles. 0 keeps only jobs in the location itself. Glassdoor uses 25 miles when this is not set. |
minSalary | 90000 | No | Lower bound of the yearly pay range. A job is kept when its estimated pay range overlaps the requested one; hourly and monthly pay are converted to yearly. Jobs without a pay estimate are excluded when a salary filter is set. |
maxSalary | 150000 | No | Upper bound of the yearly pay range, must be greater than minSalary. Can be used on its own. |
minRating | 4 | No | Returns jobs from companies rated at least this high. Glassdoor applies the filter approximately, so a few companies rated slightly below the value can appear. |
easyApplyOnly | - | No | Returns only jobs that can be applied to directly on Glassdoor. Defaults to false. |
remoteOnly | - | No | Returns only remote jobs. Defaults to false. |
nextPageToken | - | No | Token for fetching the next page of jobs, taken from the pagination of a previous response. The token keeps the filters of the search it came from, so they do not need to be sent again. |