{
  "openapi": "3.0.1",
  "info": {
    "title": "Upwork Jobs Scraper – Clients, Budgets & Contacts",
    "description": "Find current Upwork jobs by keyword, URL or job ID. Extract descriptions, budgets, skills, client spend and hiring signals, activity, qualifications, questions and public contacts. Rank opportunities and export JSON, CSV or Excel.",
    "version": "0.1",
    "x-build-id": "Dx1bk0RggPSsI49MD"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/trakk~upwork-jobs-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-trakk-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/trakk~upwork-jobs-scraper/runs": {
      "post": {
        "operationId": "runs-sync-trakk-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/trakk~upwork-jobs-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-trakk-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": {
          "mode": {
            "title": "🎯 What do you want to collect?",
            "enum": [
              "SEARCH",
              "SEARCH_FULL",
              "DETAIL"
            ],
            "type": "string",
            "description": "Search is fastest. Search + details verifies selected jobs and adds client/activity fields. Direct jobs accepts known URLs or IDs.",
            "default": "SEARCH"
          },
          "queries": {
            "title": "🔎 Search keywords",
            "type": "array",
            "description": "One query per row. Results are merged and duplicates are removed while preserving every matched query.",
            "default": [
              "python developer"
            ],
            "items": {
              "type": "string"
            }
          },
          "sourceSort": {
            "title": "Source ordering",
            "enum": [
              "recency",
              "relevance"
            ],
            "type": "string",
            "description": "Choose whether Upwork should return the newest or most relevant matches first.",
            "default": "recency"
          },
          "startUrls": {
            "title": "🔗 Upwork job URLs",
            "type": "array",
            "description": "Direct jobs mode only. Add public Upwork job URLs. Numeric job IDs can be added below instead.",
            "default": [],
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "jobIds": {
            "title": "🔢 Numeric job IDs",
            "type": "array",
            "description": "Direct jobs mode only. Example: 2077479055407476346.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "maxResults": {
            "title": "🎁 Maximum saved jobs",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "Global limit after duplicate removal, contact extraction, filters, scoring, and sorting.",
            "default": 20
          },
          "resultsPerQuery": {
            "title": "Results per search query",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "Maximum source rows collected for each keyword before all queries are merged.",
            "default": 20
          },
          "jobType": {
            "title": "💼 Contract type",
            "enum": [
              "ANY",
              "HOURLY",
              "FIXED"
            ],
            "type": "string",
            "description": "Keep all jobs, hourly contracts, or fixed-price projects.",
            "default": "ANY"
          },
          "experienceLevel": {
            "title": "Experience level",
            "enum": [
              "ANY",
              "ENTRY_LEVEL",
              "INTERMEDIATE",
              "EXPERT"
            ],
            "type": "string",
            "description": "Filter by the experience level requested by the client.",
            "default": "ANY"
          },
          "maxAgeDays": {
            "title": "Maximum job age",
            "minimum": 0,
            "maximum": 3650,
            "type": "integer",
            "description": "Keep only jobs published within this many days. Use 0 for any age.",
            "default": 0
          },
          "minBudget": {
            "title": "Minimum budget",
            "minimum": 0,
            "type": "number",
            "description": "Minimum fixed budget or hourly range ceiling."
          },
          "maxBudget": {
            "title": "Maximum budget",
            "minimum": 0,
            "type": "number",
            "description": "Maximum fixed budget or hourly range floor."
          },
          "minHourlyRate": {
            "title": "Minimum hourly rate",
            "minimum": 0,
            "type": "number",
            "description": "Keep hourly jobs whose range reaches at least this value."
          },
          "maxHourlyRate": {
            "title": "Maximum hourly rate",
            "minimum": 0,
            "type": "number",
            "description": "Keep hourly jobs whose range starts at or below this value."
          },
          "includeSkills": {
            "title": "🧩 Required skills",
            "type": "array",
            "description": "Every entered value must appear in the job's skill list.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "excludeKeywords": {
            "title": "🚫 Excluded words or phrases",
            "type": "array",
            "description": "Jobs containing any entered phrase in the title or description are removed.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "includeContacts": {
            "title": "📇 Extract public contacts",
            "type": "boolean",
            "description": "Save emails, phones, websites, and public messaging handles explicitly included in job text to the Contacts output.",
            "default": true
          },
          "onlyWithContacts": {
            "title": "Keep only jobs with a public contact",
            "type": "boolean",
            "description": "Discard jobs where no public email, phone, website, or messaging handle was found. This automatically enables contact extraction.",
            "default": false
          },
          "sortResultsBy": {
            "title": "↕️ Final result ordering",
            "enum": [
              "SOURCE",
              "NEWEST",
              "OPPORTUNITY_SCORE",
              "BUDGET_HIGH",
              "BUDGET_LOW"
            ],
            "type": "string",
            "description": "Applied after deduplication, enrichment, filters, and scoring.",
            "default": "SOURCE"
          },
          "maxConcurrency": {
            "title": "⚡ Parallel tasks",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "Number of independent queries or details processed at once. The default favors reliability.",
            "default": 4
          },
          "maxRetries": {
            "title": "🔄 Retry attempts",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "Fresh-session retries for temporary network or source interruptions.",
            "default": 8
          },
          "requestTimeoutSeconds": {
            "title": "⏱️ Request timeout",
            "minimum": 10,
            "maximum": 120,
            "type": "integer",
            "description": "Maximum time for one source request.",
            "default": 35
          },
          "proxyConfiguration": {
            "title": "🌐 Connection settings",
            "type": "object",
            "description": "Connection settings are preconfigured for reliable Upwork results. The default is ready to run.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ],
              "apifyProxyCountry": "CA"
            }
          }
        }
      },
      "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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}