{
  "openapi": "3.0.1",
  "info": {
    "title": "Upwork Scraper - Jobs, Freelancers & Project Catalog",
    "description": "Extract public Upwork jobs, freelancer profiles, Project Catalog services and sitemap URLs. Export budgets, skills, rates and public client details; pay per delivered row plus a start fee.",
    "version": "0.2",
    "x-build-id": "JYrDgKPU8WHt7F5Ig"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/lentic_clockss~upwork-jobs-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-lentic_clockss-upwork-jobs-scraper",
        "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/lentic_clockss~upwork-jobs-scraper/runs": {
      "post": {
        "operationId": "runs-sync-lentic_clockss-upwork-jobs-scraper",
        "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/lentic_clockss~upwork-jobs-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-lentic_clockss-upwork-jobs-scraper",
        "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": {
          "keywords": {
            "title": "Search keywords",
            "maxItems": 10,
            "type": "array",
            "description": "Enter up to 10 search phrases for jobs, freelancer search or Project Catalog services. An empty list requests unfiltered results; an empty jobs input without any target uses the small prefilled example.",
            "items": {
              "type": "string",
              "minLength": 1,
              "maxLength": 200
            }
          },
          "collectionSurface": {
            "title": "Collection surface",
            "enum": [
              "jobs",
              "freelancers",
              "services",
              "sitemap"
            ],
            "type": "string",
            "description": "Choose public jobs, freelancer profiles, Project Catalog services or sitemap URLs. Services uses keywords when provided; an empty keyword list returns unfiltered service listings.",
            "default": "jobs"
          },
          "maxItems": {
            "title": "Max results per keyword or URL",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "Maximum Dataset rows for each keyword, freelancer profile URL, or freelancer category URL (1–500). Default: 70. Larger requests are collected in parts of at most 70 rows when continuation is available. All row types count together, and the run stops at your maximum total charge. Free Apify plan: 200 rows per run and 10 runs.",
            "default": 70
          },
          "profileUrls": {
            "title": "Freelancer profile URLs",
            "type": "array",
            "description": "Public Upwork freelancer profile links, used only when collectionSurface is freelancers. These take precedence over categoryUrls and keywords; invalid links stop the run with the expected URL format.",
            "items": {
              "type": "string"
            }
          },
          "categoryUrls": {
            "title": "Freelancer category URLs",
            "type": "array",
            "description": "Upwork freelancer category links, such as https://www.upwork.com/hire/python-developers/. Used only for freelancers when no profileUrls are supplied; takes precedence over keywords.",
            "items": {
              "type": "string"
            }
          },
          "sort": {
            "title": "Sort order",
            "enum": [
              "recency",
              "relevance",
              "relevance+desc",
              "client_total_charge+desc",
              "client_rating+desc"
            ],
            "type": "string",
            "description": "Use recency for newest jobs or relevance for best matches. The other listed options are retained for compatibility but are not supported by current collection.",
            "default": "recency"
          },
          "scrapeDetails": {
            "title": "Enrich from job detail pages",
            "type": "boolean",
            "description": "Enrich a limited number of job rows with public client, proposal and budget details. Enabled by default; enrichment does not create extra billed rows.",
            "default": true
          },
          "maxDetailItems": {
            "title": "Maximum detail pages",
            "minimum": 0,
            "maximum": 50,
            "type": "integer",
            "description": "Maximum number of jobs to enrich when scrapeDetails is enabled, from 0 to 50. Missing public values remain empty.",
            "default": 5
          },
          "maxPagesPerKeyword": {
            "title": "Pages per keyword",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "Page setting retained for compatibility, from 1 to 10. Current collection follows the row limit rather than this setting; use maxItems to bound results.",
            "default": 1
          },
          "maxShards": {
            "title": "Sitemap file limit (legacy)",
            "minimum": 0,
            "maximum": 500,
            "type": "integer",
            "description": "Legacy sitemap setting, from 0 to 500, where 0 means no requested limit. Current collection does not enforce this setting; use maxItems to limit URL rows.",
            "default": 0
          },
          "maxUrlsPerShard": {
            "title": "URLs per sitemap file (legacy)",
            "minimum": 0,
            "maximum": 10000,
            "type": "integer",
            "description": "Legacy sitemap setting, from 0 to 10000, where 0 means no requested limit. Current collection does not enforce this setting; use maxItems to limit URL rows.",
            "default": 0
          },
          "timeoutSecs": {
            "title": "Request timeout",
            "minimum": 30,
            "maximum": 180,
            "type": "integer",
            "description": "Timeout for an individual request, from 30 to 180 seconds. This is separate from the Actor run timeout in run options.",
            "default": 90
          },
          "debug": {
            "title": "Developer diagnostics",
            "type": "boolean",
            "description": "Leave disabled. Used only by the developer for testing.",
            "default": false
          },
          "workerBaseUrl": {
            "title": "Developer test setting",
            "type": "string",
            "description": "Leave empty. Used only by the developer for testing."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}