{
  "openapi": "3.0.1",
  "info": {
    "title": "Upwork MCP - SaaS Ideas",
    "description": "Find SaaS ideas using upwork. Search for zapier automation, n8n, automate etc to find what business are looking to automate. Feed this to an AI agent to extract business ideas.",
    "version": "0.1",
    "x-build-id": "JPHeUZQDuxgymIYs3"
  },
  "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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}