openapi: 3.0.0
info:
  title: Google Jobs Listing API
  description: |
    The Google Jobs Listing API returns the employer ratings Google Jobs shows for one job: the employer's rating, review count and link on review sites such as Indeed, Glassdoor and ZipRecruiter, along with the employer's website.

    Google shows up to three review sites, and which ones depends on the `gl` country and the `hl` language. Each rating stays on its site's own scale, given by `max_rating`.

    **Cross-linking**: Pass the `job_id` of a Google Jobs API result as the `job_id` parameter.

    **Unavailable jobs**: When Google Jobs has no job for the job_id, such as a posting that has been taken down, the response carries an `error` instead of `ratings`.
  version: 1.0.0
servers:
  - url: https://www.searchapi.io/api/v1
paths:
  /search:
    get:
      summary: Google Jobs Listing
      security:
        - ApiKeyAuth: []
        - ApiKeyQuery: []
      parameters:
        - name: engine
          in: query
          required: true
          description: Search engine to use
          schema:
            type: string
            enum: ["google_jobs_listing"]
        - name: job_id
          in: query
          required: true
          description: ID of the job, taken from the job_id field of a Google Jobs API result
          schema:
            type: string
            pattern: '^[A-Za-z0-9_-]+$'
            maxLength: 4096
        - name: gl
          in: query
          required: false
          description: 'Country of the search, which also changes the review sites Google shows ratings from. Supported values are listed at https://www.searchapi.io/docs/parameters/google-jobs/gl'
          schema:
            type: string
            enum: ["dz", "as", "ao", "ai", "ag", "ar", "aw", "at", "bs", "bh", "bd", "by", "be", "bz", "bj", "bm", "bo", "bw", "br", "io", "bf", "bi", "cm", "ca", "cv", "ky", "cf", "td", "cl", "co", "cd", "cr", "ci", "cu", "dk", "dj", "dm", "do", "ec", "eg", "sv", "et", "fk", "fr", "gf", "pf", "tf", "ga", "gm", "de", "gh", "gr", "gp", "gt", "gy", "ht", "hn", "hk", "in", "id", "iq", "it", "jm", "jp", "jo", "kz", "ke", "kw", "kg", "lb", "ls", "ly", "mg", "mw", "my", "ml", "mq", "mu", "yt", "mx", "ms", "ma", "mz", "na", "nl", "nc", "ni", "ne", "ng", "om", "pk", "ps", "pa", "py", "pe", "ph", "pt", "pr", "qa", "re", "ru", "rw", "sh", "pm", "vc", "st", "sa", "sn", "sc", "sl", "sg", "so", "za", "gs", "es", "lk", "sr", "ch", "tw", "tz", "th", "tg", "tt", "tn", "tc", "ug", "ae", "uk", "gb", "us", "uy", "uz", "ve", "vn", "vg", "vi", "zm", "zw"]
            default: "us"
        - name: hl
          in: query
          required: false
          description: 'Interface language of the search, which can also change the review sites Google shows ratings from. The default follows the gl country, as listed at https://www.searchapi.io/docs/parameters/google-jobs/gl. Some languages, such as English, round large review counts. Supported values are listed at https://www.searchapi.io/docs/parameters/google/hl'
          schema:
            type: string
            enum: ["af", "ak", "sq", "am", "ar", "hy", "az", "eu", "be", "bem", "bn", "bh", "xx-bork", "bs", "br", "bg", "km", "ca", "chr", "ny", "zh-cn", "zh-tw", "co", "hr", "cs", "da", "nl", "xx-elmer", "en", "eo", "et", "ee", "fo", "tl", "fi", "fr", "fy", "gaa", "gl", "ka", "de", "el", "kl", "gn", "gu", "xx-hacker", "ht", "ha", "haw", "iw", "hi", "hu", "is", "ig", "id", "ia", "ga", "it", "ja", "jw", "kn", "kk", "rw", "rn", "xx-klingon", "kg", "ko", "kri", "ku", "ckb", "ky", "lo", "la", "lv", "ln", "lt", "loz", "lg", "ach", "mk", "mg", "my", "ms", "ml", "mt", "mv", "mi", "mr", "mfe", "mo", "mn", "sr-me", "ne", "pcm", "nso", "no", "nn", "oc", "or", "om", "ps", "fa", "xx-pirate", "pl", "pt", "pt-br", "pt-pt", "pa", "qu", "ro", "rm", "nyn", "ru", "gd", "sr", "sh", "st", "tn", "crs", "sn", "sd", "si", "sk", "sl", "so", "es", "es-419", "su", "sw", "sv", "tg", "ta", "tt", "te", "th", "ti", "to", "lua", "tum", "tr", "tk", "tw", "ug", "uk", "ur", "uz", "vu", "vi", "cy", "wo", "xh", "yi", "yo", "zu"]
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SearchResponse'
        '400':
          description: Validation Error. There is an issue with query parameters, such as missing required parameters or invalid values.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Authentication Error. The API key is missing or invalid.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Rate Limit Exceeded. The number of allowed requests has been exceeded. Consider upgrading your plan or waiting for the limit to reset.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Server Error. Internal server error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '503':
          description: Timeout. We could not retrieve results in 90 seconds.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
components:
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: Authorization
      description: 'Use Bearer authentication. Format: "Bearer YOUR_API_KEY"'
    ApiKeyQuery:
      type: apiKey
      in: query
      name: api_key
      description: Pass API key as query parameter
  schemas:
    SearchResponse:
      type: object
      properties:
        search_metadata:
          $ref: '#/components/schemas/SearchMetadata'
        search_parameters:
          $ref: '#/components/schemas/SearchParameters'
        ratings:
          type: array
          description: Ratings of the employer on review sites
          items:
            $ref: '#/components/schemas/Rating'
        company_website:
          type: string
          description: Website of the employer
        is_partial:
          type: boolean
          description: True when at least one rating link or the company website is a Google redirect link to the page instead of the page's own address
        error:
          type: string
          description: Error message if the request failed, e.g. when Google Jobs has no job for the job_id
    Rating:
      type: object
      required: [company_name, source, rating, max_rating, reviews, link]
      properties:
        company_name:
          type: string
          description: Name of the employer the rating is for
        source:
          type: string
          description: Review site the rating comes from
        rating:
          type: number
          description: Rating of the employer on the review site's own scale
        max_rating:
          type: integer
          description: Highest rating on the review site's scale, such as 5 or 10
        reviews:
          type: integer
          description: Number of employer reviews on the review site, approximate when the hl language abbreviates it
        link:
          type: string
          description: Link to the employer's reviews on the review site
    SearchMetadata:
      type: object
      required: [status, created_at]
      properties:
        id:
          type: string
          description: Unique identifier for the search request
        status:
          type: string
          description: Status of the search request
        created_at:
          type: string
          format: date-time
          description: Timestamp when the search was created
        request_time_taken:
          type: number
          description: Time taken to make the request in seconds
        parsing_time_taken:
          type: number
          description: Time taken to parse the results in seconds
        total_time_taken:
          type: number
          description: Total time taken for the search in seconds
        request_url:
          type: string
          description: Google Jobs URL for this job
        json_url:
          type: string
          description: URL to view JSON results
    SearchParameters:
      type: object
      properties:
        engine:
          type: string
          description: Search engine used
        job_id:
          type: string
          description: ID of the requested job
        gl:
          type: string
          description: Country of the search
        hl:
          type: string
          description: Interface language of the search
    ErrorResponse:
      type: object
      required: [error]
      properties:
        error:
          type: string
          description: Error message describing what went wrong
