> ## Documentation Index
> Fetch the complete documentation index at: https://docs.scrapeunblocker.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Scrape Upwork job posts

> Searches Upwork jobs for `q` (or lists the newest jobs without it) and returns `jobs`: `id`, `ciphertext`, `url`, `title`, `description` (full text), `publishedAt`, `createdAt`, `renewedAt`, `jobType` (hourly / fixed), `hourlyMin`, `hourlyMax`, `budget` (fixed price), `currency`, `experienceLevel`, `duration`, `workload`, `skills`, plus `totalResults` and `nextStart`. Filter with `job_type`, `experience`, `budget`, `hourly_rate`, `client_hires`, `workload`, `duration`, `location`, `category`, `contract_to_hire`; sort by `relevance` or `recency`. `details=true` adds, per job: `proposals`, `interviewing`, `invitesSent`, `hired`, `positionsToHire`, `lastClientActivity`, `category`, `qualifications` and `client` (`country`, `city`, `timezone`, `paymentVerified`, `rating`, `reviews`, `totalSpent`, `hires`, `memberSince`; no client names). A private listing is marked `privateListing: true` without those fields. Upwork shows signed-out visitors the first 5000 results of a search. Billing: one unit per results page of up to 50 jobs, plus one per job page fetched with `details=true` (`callUnits`).



## OpenAPI

````yaml /api-reference/openapi.json post /jobs/upwork
openapi: 3.1.0
info:
  title: ScrapeUnblocker API
  description: >-
    Public API for the ScrapeUnblocker proxy/anti-bot service. Authenticate
    every request with the `x-scrapeunblocker-key` header. Documented here:
    page-source extraction, Google SERP scraping, image fetch, and the dedicated
    plugin endpoints (search engines, marketplaces, reviews, travel, social and
    more). All other paths exist for internal operations and are intentionally
    hidden from this spec.
  version: 3.0.0
servers:
  - url: https://api.scrapeunblocker.com
    description: Production
security: []
paths:
  /jobs/upwork:
    post:
      tags:
        - Plugins
      summary: Scrape Upwork job posts
      description: >-
        Searches Upwork jobs for `q` (or lists the newest jobs without it) and
        returns `jobs`: `id`, `ciphertext`, `url`, `title`, `description` (full
        text), `publishedAt`, `createdAt`, `renewedAt`, `jobType` (hourly /
        fixed), `hourlyMin`, `hourlyMax`, `budget` (fixed price), `currency`,
        `experienceLevel`, `duration`, `workload`, `skills`, plus `totalResults`
        and `nextStart`. Filter with `job_type`, `experience`, `budget`,
        `hourly_rate`, `client_hires`, `workload`, `duration`, `location`,
        `category`, `contract_to_hire`; sort by `relevance` or `recency`.
        `details=true` adds, per job: `proposals`, `interviewing`,
        `invitesSent`, `hired`, `positionsToHire`, `lastClientActivity`,
        `category`, `qualifications` and `client` (`country`, `city`,
        `timezone`, `paymentVerified`, `rating`, `reviews`, `totalSpent`,
        `hires`, `memberSince`; no client names). A private listing is marked
        `privateListing: true` without those fields. Upwork shows signed-out
        visitors the first 5000 results of a search. Billing: one unit per
        results page of up to 50 jobs, plus one per job page fetched with
        `details=true` (`callUnits`).
      operationId: upwork_jobs_jobs_upwork_post
      parameters:
        - name: q
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            description: >-
              What to search for, e.g. 'python' or 'logo design'. Leave empty
              with sort=recency for the newest jobs.
            title: Q
          description: >-
            What to search for, e.g. 'python' or 'logo design'. Leave empty with
            sort=recency for the newest jobs.
        - name: job_type
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            description: hourly or fixed.
            title: Job Type
          description: hourly or fixed.
        - name: experience
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            description: 'Experience level, comma list of: entry, intermediate, expert.'
            title: Experience
          description: 'Experience level, comma list of: entry, intermediate, expert.'
        - name: budget
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            description: >-
              Fixed-price budget in USD, comma list of ranges like '100-499',
              '1000-4999' or '5000-'.
            title: Budget
          description: >-
            Fixed-price budget in USD, comma list of ranges like '100-499',
            '1000-4999' or '5000-'.
        - name: hourly_rate
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            description: Hourly rate in USD, e.g. '25-50' or '40-'.
            title: Hourly Rate
          description: Hourly rate in USD, e.g. '25-50' or '40-'.
        - name: client_hires
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            description: 'Client''s past hires, comma list of: 0, 1-9, 10-.'
            title: Client Hires
          description: 'Client''s past hires, comma list of: 0, 1-9, 10-.'
        - name: workload
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            description: part_time (under 30 hrs/week) or full_time.
            title: Workload
          description: part_time (under 30 hrs/week) or full_time.
        - name: duration
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            description: >-
              Project length, comma list of: week, month, semester, ongoing
              (under a month, 1-3 months, 3-6 months, over 6 months).
            title: Duration
          description: >-
            Project length, comma list of: week, month, semester, ongoing (under
            a month, 1-3 months, 3-6 months, over 6 months).
        - name: location
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            description: >-
              Client location, comma list of regions or countries as Upwork
              names them, e.g. 'Europe' or 'United States'.
            title: Location
          description: >-
            Client location, comma list of regions or countries as Upwork names
            them, e.g. 'Europe' or 'United States'.
        - name: category
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            description: >-
              Job category, comma list of names (Accounting & Consulting, Admin
              Support, Customer Service, Data Science & Analytics, Design &
              Creative, Engineering & Architecture, It & Networking, Legal,
              Sales & Marketing, Translation, Web, Mobile & Software Dev,
              Writing) or category ids.
            title: Category
          description: >-
            Job category, comma list of names (Accounting & Consulting, Admin
            Support, Customer Service, Data Science & Analytics, Design &
            Creative, Engineering & Architecture, It & Networking, Legal, Sales
            & Marketing, Translation, Web, Mobile & Software Dev, Writing) or
            category ids.
        - name: contract_to_hire
          in: query
          required: false
          schema:
            type: boolean
            description: Only contract-to-hire jobs.
            default: false
            title: Contract To Hire
          description: Only contract-to-hire jobs.
        - name: sort
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            description: relevance (default with q) or recency (default without q).
            title: Sort
          description: relevance (default with q) or recency (default without q).
        - name: start
          in: query
          required: false
          schema:
            type: integer
            description: >-
              0-based position of the first job, 0-4999 (Upwork shows signed-out
              visitors the first 5000 results); `nextStart` continues.
            default: 0
            title: Start
          description: >-
            0-based position of the first job, 0-4999 (Upwork shows signed-out
            visitors the first 5000 results); `nextStart` continues.
        - name: max_results
          in: query
          required: false
          schema:
            type: integer
            description: >-
              Jobs to collect, 1-5000. Each results page (up to 50 jobs) is
              billed one unit.
            default: 50
            title: Max Results
          description: >-
            Jobs to collect, 1-5000. Each results page (up to 50 jobs) is billed
            one unit.
        - name: details
          in: query
          required: false
          schema:
            type: boolean
            description: >-
              Add each job's page: proposals, client stats, qualifications. Up
              to 100 jobs; one more unit per job page fetched.
            default: false
            title: Details
          description: >-
            Add each job's page: proposals, client stats, qualifications. Up to
            100 jobs; one more unit per job page fetched.
      responses:
        '200':
          description: JSON with a `jobs` array.
          content:
            application/json:
              schema: {}
        '400':
          description: Invalid parameters.
        '404':
          description: Upwork found no jobs for the search.
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
        '502':
          description: >-
            Blocked by Upwork on every attempt, an unusable answer, or no answer
            in time.
      security:
        - ScrapeUnblockerKey: []
components:
  schemas:
    HTTPValidationError:
      properties:
        detail:
          items:
            $ref: '#/components/schemas/ValidationError'
          type: array
          title: Detail
      type: object
      title: HTTPValidationError
    ValidationError:
      properties:
        loc:
          items:
            anyOf:
              - type: string
              - type: integer
          type: array
          title: Location
        msg:
          type: string
          title: Message
        type:
          type: string
          title: Error Type
      type: object
      required:
        - loc
        - msg
        - type
      title: ValidationError
  securitySchemes:
    ScrapeUnblockerKey:
      type: apiKey
      in: header
      name: x-scrapeunblocker-key
      description: Your ScrapeUnblocker API key. Apply on every request.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.