{
  "openapi": "3.0.1",
  "info": {
    "title": "Upwork Jobs Scraper (Job Alerts, Client Stats, No Login)",
    "description": "Scrape new Upwork jobs with no login: title, budget in USD, skills, experience level, proposals band and full description, plus the client's public stats (payment verified, total spent, hires, rating, country). Client filters and only-new mode make a job alert feed. $1 per 1,000 jobs.",
    "version": "0.1",
    "x-build-id": "cddVj2nlaytzwkuul"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/locaihost~upwork-jobs/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-locaihost-upwork-jobs",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/locaihost~upwork-jobs/runs": {
      "post": {
        "operationId": "runs-sync-locaihost-upwork-jobs",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/locaihost~upwork-jobs/run-sync": {
      "post": {
        "operationId": "run-sync-locaihost-upwork-jobs",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "searchQueries": {
            "title": "Search queries",
            "type": "array",
            "description": "What you'd type into Upwork's job search, e.g. \"python\", \"shopify\", \"logo design\". Upwork's search syntax works: quotes for a phrase, AND, OR, NOT. Each query is one search. Leave empty to search whole categories instead.",
            "items": {
              "type": "string"
            }
          },
          "maxJobsPerSearch": {
            "title": "Max jobs per search",
            "minimum": 1,
            "maximum": 5050,
            "type": "integer",
            "description": "Per search query (or per category search). Newest first. Leave empty for 50. Upwork shows at most about 5,000 results for one search.",
            "default": 50
          },
          "onlyNew": {
            "title": "Only jobs new since the last run (job alerts)",
            "type": "boolean",
            "description": "Remembers which jobs this search already returned, so a schedule every 15 to 60 minutes becomes a job alert and you never pay twice for a job. Turn off to get every matching job again.",
            "default": true
          },
          "includeClientStats": {
            "title": "Include client stats",
            "type": "boolean",
            "description": "Read each job's public page for the client box (payment verified, total spent, hires, rating, country, member since) and activity (proposals, interviewing, invites, last viewed). Turn off for faster rows without them.",
            "default": true
          },
          "categories": {
            "title": "Categories",
            "type": "array",
            "description": "Optional. Only jobs in these Upwork categories. With no search queries, the newest jobs of the whole category are returned.",
            "items": {
              "type": "string",
              "enum": [
                "Accounting & Consulting",
                "Admin Support",
                "Customer Service",
                "Data Science & Analytics",
                "Design & Creative",
                "Engineering & Architecture",
                "IT & Networking",
                "Legal",
                "Sales & Marketing",
                "Translation",
                "Web, Mobile & Software Dev",
                "Writing"
              ]
            }
          },
          "jobType": {
            "title": "Job type",
            "enum": [
              "any",
              "hourly",
              "fixed"
            ],
            "type": "string",
            "description": "Hourly, fixed price, or both.",
            "default": "any"
          },
          "experienceLevel": {
            "title": "Experience level",
            "type": "array",
            "description": "Optional. Only jobs asking for these levels.",
            "items": {
              "type": "string",
              "enum": [
                "entry",
                "intermediate",
                "expert"
              ],
              "enumTitles": [
                "Entry level",
                "Intermediate",
                "Expert"
              ]
            }
          },
          "clientLocations": {
            "title": "Client locations",
            "type": "array",
            "description": "Optional. Only jobs from clients in these countries or regions, written the way Upwork's filter writes them, e.g. \"United States\", \"United Kingdom\", \"Europe\".",
            "items": {
              "type": "string"
            }
          },
          "postedWithinHours": {
            "title": "Posted within (hours)",
            "minimum": 1,
            "maximum": 8760,
            "type": "integer",
            "description": "Optional. Only jobs posted in the last this many hours, e.g. 24. Leave empty for any time."
          },
          "paymentVerifiedOnly": {
            "title": "Payment verified clients only",
            "type": "boolean",
            "description": "Leave out jobs whose client has no verified payment method.",
            "default": false
          },
          "minClientSpendUsd": {
            "title": "Minimum client total spent (USD)",
            "minimum": 0,
            "type": "integer",
            "description": "Leave out clients who have spent less than this on Upwork, e.g. 1000."
          },
          "minClientRating": {
            "title": "Minimum client rating",
            "minimum": 0,
            "maximum": 5,
            "type": "number",
            "description": "Leave out clients rated below this (out of 5), and clients with no reviews yet, e.g. 4.5."
          },
          "minClientHires": {
            "title": "Minimum client hires",
            "minimum": 0,
            "type": "integer",
            "description": "Leave out clients who have hired fewer freelancers than this on Upwork."
          },
          "minHourlyRateUsd": {
            "title": "Minimum hourly rate (USD)",
            "minimum": 0,
            "type": "integer",
            "description": "Hourly jobs whose top rate is below this, or that give no rate, are left out. Fixed-price jobs are kept."
          },
          "minFixedBudgetUsd": {
            "title": "Minimum fixed budget (USD)",
            "minimum": 0,
            "type": "integer",
            "description": "Fixed-price jobs with a smaller budget, or none, are left out. Hourly jobs are kept."
          },
          "maxProposals": {
            "title": "Maximum proposals",
            "minimum": 0,
            "type": "integer",
            "description": "Leave out jobs that already have more proposals than this, e.g. 10 for jobs with little competition."
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Apify Proxy by default: residential first (Upwork lets it through without a challenge far more often), datacenter as the fallback. Included in the price.",
            "default": {
              "useApifyProxy": true
            }
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}