Glassdoor API — Interview Reports and Questions
Documentation menu
FetchLayer FetchLayer API

Get candidate interview reports

Return candidate-reported interview experiences at one company: the role interviewed for, the location, how difficult the candidate found it, whether they rated the experience positive, the outcome (offer accepted, offer declined, no offer), their written account of the process, how they got the interview, how many days it took end to end, and the questions they were asked. Walk several pages in one request with pages, or resume with cursor. This is the surface that tells you what a competitor's hiring loop actually looks like from the candidate's side.

POST /interview-reports Interviews
https://api.fetchlayer.dev/glassdoor/interview-reports
OpenAPI JSON

Headers

Authorization string required

Bearer token — your FetchLayer API key.

Parameters

company string required

Glassdoor company id, or any Glassdoor URL containing one. Use /search-companies to turn a name into an id.

limit number optional

Maximum interview reports returned (max 1000), or -1 for everything available. (default: 30)

pages number optional

Pages of results to collect in one request (max 100), or -1 for the maximum allowed. Each page counts as one request against your plan. (default: 1)

cursor string optional

Resume from a previous response's nextCursor.

delayMs number optional

Milliseconds to wait between pages (max 30000).

Response Fields

interview-reports

Get candidate interview reports

employerId string

The company these interviews were at.

companyName string | null

Company name as published.

interviews object[]

The collected interview reports.

interviews[].interviewId string

Stable id for the report — the key to dedupe on across runs.

interviews[].jobTitle string | null

Role the candidate interviewed for.

interviews[].location string | null

Where the interview happened, at the granularity in locationType.

interviews[].difficulty string | null

How hard the candidate found it, for example AVERAGE or VERY_DIFFICULT.

interviews[].experience string | null

How they rated the experience: POSITIVE, NEUTRAL or NEGATIVE.

interviews[].outcome string | null

The result: ACCEPT_OFFER, DECLINE_OFFER or NO_OFFER.

interviews[].processDescription string | null

The candidate's own account of the interview process.

interviews[].source string | null

How they got the interview, for example APPLIED_ONLINE or RECRUITER.

interviews[].durationDays number | null

Days the process took, as reported — the number to benchmark your own loop against.

interviews[].interviewedAt string | null

When the interview took place.

interviews[].questions object[]

Questions the candidate was asked, each with its text and how many public answers it has.

interviewCount number

Interview reports in this response.

pagesScraped number

Pages actually collected. Each one counts as a request against your plan.

pagesRequested number

Pages the request asked for. Lower than pagesScraped means the listing ran out.

nextCursor string | null

Pass back as cursor to continue, or null when the listing is exhausted.

hasNextPage boolean

Whether more results exist beyond this response.

requestedUrl string

The Glassdoor page this result corresponds to.

scrapedAt string

When the page was collected, as an ISO 8601 timestamp.

notes string[]

Plain-language caveats about this particular result — a walk that stopped short, a listing with more pages, an upstream limit that was hit. Read it: a well-formed response can still be incomplete, and this is where that is said.

blocked boolean

Always false on a successful response.

Request

curl -X POST "https://api.fetchlayer.dev/glassdoor/interview-reports" \
  -H "Authorization: Bearer ss-your-key" \
  -H "Content-Type: application/json" \
  -d '{"company":"671954","pages":2,"limit":40}'

Response

{
  "employerId": "671954",
  "companyName": "Stripe",
  "interviewCount": 20,
  "pagesScraped": 2,
  "pagesRequested": 2,
  "hasNextPage": true,
  "nextCursor": "eyJwYWdlIjozfQ==",
  "interviews": [
    {
      "interviewId": "5512094",
      "jobTitle": "Backend Engineer",
      "location": "Remote",
      "difficulty": "DIFFICULT",
      "experience": "POSITIVE",
      "outcome": "ACCEPT_OFFER",
      "source": "APPLIED_ONLINE",
      "durationDays": 28,
      "interviewedAt": "2026-06-11",
      "questions": [
        {
          "question": "Design a rate limiter for an idempotent payments API.",
          "answerCount": 4
        }
      ]
    }
  ],
  "notes": []
}