{
  "openapi": "3.0.1",
  "info": {
    "title": "Upwork Job Scraper: Job Posts for Leads & SaaS Ideas",
    "description": "Scrape Upwork job posts by keyword with Upwork's own filters: experience level, budget type, workload, client hires, duration and proposal count. Each row has the job ID, title and full description, ready for lead lists, rate checks and LLM prompts. No login. Export to CSV, Excel, JSON or API.",
    "version": "0.1",
    "x-build-id": "JF2ZHPPTOyxRB2xbM"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/epicscrapers~upwork-scraper-mcp/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-epicscrapers-upwork-scraper-mcp",
        "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/epicscrapers~upwork-scraper-mcp/runs": {
      "post": {
        "operationId": "runs-sync-epicscrapers-upwork-scraper-mcp",
        "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/epicscrapers~upwork-scraper-mcp/run-sync": {
      "post": {
        "operationId": "run-sync-epicscrapers-upwork-scraper-mcp",
        "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": {
          "query": {
            "title": "🔍 Search Query",
            "type": "string",
            "description": "Enter keywords to find relevant jobs (e.g., \"react developer\", \"python data science\"). Leave empty to browse all available jobs."
          },
          "sort": {
            "title": "Sort By",
            "enum": [
              "relevance+desc",
              "recency+desc",
              "budget+desc"
            ],
            "type": "string",
            "description": "Choose how to order the job listings. Most Relevant is usually the best starting point.",
            "default": "relevance+desc"
          },
          "maxResults": {
            "title": "Max Jobs",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "Maximum number of job listings to scrape. Keep this low on first run to test quickly.",
            "default": 10
          },
          "contractorTier": {
            "title": "Experience Level",
            "uniqueItems": true,
            "type": "array",
            "description": "Filter by the client's required experience level. Select one or more, or leave empty for all.",
            "items": {
              "type": "string",
              "enum": [
                "EntryLevel",
                "Intermediate",
                "Expert"
              ],
              "enumTitles": [
                "Entry Level",
                "Intermediate",
                "Expert"
              ]
            },
            "default": []
          },
          "jobType": {
            "title": "Budget Type",
            "uniqueItems": true,
            "type": "array",
            "description": "Filter by how the job is priced. Select one or more, or leave empty for all types.",
            "items": {
              "type": "string",
              "enum": [
                "fixed",
                "hourly",
                "weekly_retainer"
              ],
              "enumTitles": [
                "Fixed-price",
                "Hourly",
                "Weekly Retainer"
              ]
            },
            "default": []
          },
          "workload": {
            "title": "Workload",
            "uniqueItems": true,
            "type": "array",
            "description": "Filter by expected weekly hours. Select one or more, or leave empty for all.",
            "items": {
              "type": "string",
              "enum": [
                "part_time",
                "full_time",
                "as_needed",
                "none"
              ],
              "enumTitles": [
                "Part Time",
                "Full Time",
                "As Needed",
                "Not Specified"
              ]
            },
            "default": []
          },
          "clientHires": {
            "title": "Client History",
            "uniqueItems": true,
            "type": "array",
            "description": "Filter by how many freelancers the client has hired on Upwork. Helpful for finding established clients.",
            "items": {
              "type": "string",
              "enum": [
                "0",
                "1-9",
                "10-"
              ],
              "enumTitles": [
                "No previous hires",
                "1-9 hires",
                "10+ hires"
              ]
            },
            "default": []
          },
          "duration": {
            "title": "Job Duration",
            "uniqueItems": true,
            "type": "array",
            "description": "Filter by the estimated length of the job. Select one or more, or leave empty for all.",
            "items": {
              "type": "string",
              "enum": [
                "week",
                "month",
                "semester",
                "ongoing"
              ],
              "enumTitles": [
                "Less than 1 month",
                "1-3 months",
                "3-6 months",
                "6+ months / Ongoing"
              ]
            },
            "default": []
          },
          "contractToHire": {
            "title": "Contract-to-Hire",
            "type": "boolean",
            "description": "Only include jobs that offer a contract-to-hire option. Disabled by default to show all jobs.",
            "default": false
          },
          "previousClients": {
            "title": "Established Clients Only",
            "type": "boolean",
            "description": "Only show jobs where the client has hired on Upwork before. Useful for filtering out first-time clients.",
            "default": false
          },
          "proposals": {
            "title": "Proposal Count",
            "uniqueItems": true,
            "type": "array",
            "description": "Filter by how many proposals have already been submitted. Lower competition jobs often have fewer proposals.",
            "items": {
              "type": "string",
              "enum": [
                "*",
                "0-4",
                "5-9",
                "10-14",
                "15-19",
                "20-49"
              ],
              "enumTitles": [
                "Any",
                "0-4 proposals",
                "5-9 proposals",
                "10-14 proposals",
                "15-19 proposals",
                "20-49 proposals"
              ]
            },
            "default": []
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}