{
  "openapi": "3.0.1",
  "info": {
    "title": "Upwork Jobs Scraper API – 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": "RRrwFJpj8lgcqp8dF"
  },
  "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
          },
          "paymentVerifiedOnly": {
            "title": "💳 Payment-verified clients only",
            "type": "boolean",
            "description": "Keep only jobs whose client has a verified billing method. Needs client data, so it applies in Search + details and Direct jobs, not in plain Search.",
            "default": false
          },
          "minClientSpend": {
            "title": "Minimum client lifetime spend",
            "minimum": 0,
            "type": "integer",
            "description": "Keep only clients who have paid at least this much on Upwork."
          },
          "minClientRating": {
            "title": "Minimum client rating",
            "minimum": 0,
            "maximum": 5,
            "type": "integer",
            "description": "Keep only clients rated at least this high (0–5)."
          },
          "minClientHireRate": {
            "title": "Minimum client hire rate",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "Keep only clients who hire on at least this share of their jobs, in percent."
          },
          "maxApplicants": {
            "title": "Maximum applicants so far",
            "minimum": 0,
            "type": "integer",
            "description": "Keep only jobs with at most this many proposals, to bid where competition is low. 0 means any.",
            "default": 0
          },
          "clientCountries": {
            "title": "Client countries to keep",
            "type": "array",
            "description": "Keep only clients located in these countries, e.g. United States. Empty means any.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "excludeClientCountries": {
            "title": "🚫 Client countries to skip",
            "type": "array",
            "description": "Drop clients located in these countries.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "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": "Preconfigured for reliable Upwork results and ready to run. The Actor routes the search list through Apify's Unblocker and the detail lookups through datacenter proxies automatically, so this setting does not need changing.",
            "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}