{
  "openapi": "3.0.1",
  "info": {
    "title": "Upwork Jobs Scraper: Pay, Clients & Job Alerts, No Login",
    "description": "Scrape public Upwork job posts to find clients, track freelance demand and get new job alerts. Filter by skill, budget and client history. Get pay, skills, applicants and client spend. No login.",
    "version": "0.1",
    "x-build-id": "EVUo8KT03yWgVh2pc"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/cliqtomedia~upwork-jobs-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-cliqtomedia-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/cliqtomedia~upwork-jobs-scraper/runs": {
      "post": {
        "operationId": "runs-sync-cliqtomedia-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/cliqtomedia~upwork-jobs-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-cliqtomedia-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": {
          "queries": {
            "title": "Search phrases",
            "type": "array",
            "description": "Search each phrase. Results from all searches share the result limit. Leave blank when you use URLs or job IDs.",
            "items": {
              "type": "string"
            }
          },
          "startUrls": {
            "title": "Search or job URLs",
            "type": "array",
            "description": "Public Upwork search or job links. Search filters in a link take the place of the same input filters.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "jobIds": {
            "title": "Job IDs",
            "type": "array",
            "description": "Read public details for these job IDs. Use the numeric ID or the ID that starts with ~02.",
            "items": {
              "type": "string"
            }
          },
          "maxItems": {
            "title": "Maximum results",
            "minimum": 1,
            "maximum": 1000000,
            "type": "integer",
            "description": "Stop after saving this many matching jobs across all inputs. The source may have fewer jobs. Pages read before this limit still count as source work.",
            "default": 10
          },
          "includeDetails": {
            "title": "Read public job details",
            "type": "boolean",
            "description": "Include the public client panel, job activity and requirements. A job that is visible only to members keeps its search fields.",
            "default": true
          },
          "mode": {
            "title": "Run mode",
            "enum": [
              "search",
              "details",
              "monitor"
            ],
            "type": "string",
            "description": "Search finds jobs. Details reads job links or IDs. Monitor keeps a history and returns new or changed jobs.",
            "default": "search"
          },
          "jobType": {
            "title": "Payment types",
            "type": "array",
            "description": "Keep hourly, fixed-price or weekly retainer jobs.",
            "items": {
              "type": "string",
              "enum": [
                "hourly",
                "fixed",
                "weekly_retainer"
              ]
            }
          },
          "experienceLevel": {
            "title": "Experience levels",
            "type": "array",
            "description": "Keep the selected experience levels.",
            "items": {
              "type": "string",
              "enum": [
                "entry",
                "intermediate",
                "expert"
              ]
            }
          },
          "categories": {
            "title": "Categories",
            "type": "array",
            "description": "Upwork category IDs. Choose a category by name. Leave blank for all categories.",
            "items": {
              "type": "string",
              "enum": [
                "531770282584862721",
                "531770282580668416",
                "531770282580668417",
                "531770282580668420",
                "531770282580668421",
                "531770282584862722",
                "531770282580668419",
                "531770282584862723",
                "531770282580668422",
                "531770282584862720",
                "531770282580668418",
                "531770282580668423"
              ],
              "enumTitles": [
                "Accounting & Consulting",
                "Admin Support",
                "Customer Service",
                "Data Science & Analytics",
                "Design & Creative",
                "Engineering & Architecture",
                "IT & Networking",
                "Legal",
                "Sales & Marketing",
                "Translation",
                "Web, Mobile & Software Dev",
                "Writing"
              ]
            }
          },
          "minBudget": {
            "title": "Minimum fixed budget",
            "minimum": 0,
            "type": "number",
            "description": "Keep jobs with a known fixed budget at or above this amount."
          },
          "maxBudget": {
            "title": "Maximum fixed budget",
            "minimum": 0,
            "type": "number",
            "description": "Keep jobs with a known fixed budget at or below this amount."
          },
          "minHourlyRate": {
            "title": "Minimum hourly rate",
            "minimum": 0,
            "type": "number",
            "description": "Keep jobs whose known minimum hourly rate is at or above this amount."
          },
          "maxHourlyRate": {
            "title": "Maximum hourly rate",
            "minimum": 0,
            "type": "number",
            "description": "Keep jobs whose known maximum hourly rate is at or below this amount."
          },
          "workload": {
            "title": "Weekly workload",
            "type": "array",
            "description": "Filter by the weekly time needed.",
            "items": {
              "type": "string",
              "enum": [
                "part_time",
                "full_time",
                "as_needed"
              ]
            }
          },
          "duration": {
            "title": "Project duration",
            "type": "array",
            "description": "Filter by the source project duration group.",
            "items": {
              "type": "string",
              "enum": [
                "week",
                "month",
                "semester",
                "ongoing"
              ]
            }
          },
          "contractToHire": {
            "title": "Contract-to-hire only",
            "type": "boolean",
            "description": "Keep jobs marked as contract-to-hire. Needs public job details.",
            "default": false
          },
          "includeKeywords": {
            "title": "Required words",
            "type": "array",
            "description": "Each word or phrase must appear in the title, description or skills.",
            "items": {
              "type": "string"
            }
          },
          "excludeKeywords": {
            "title": "Excluded words",
            "type": "array",
            "description": "Skip a job if any word or phrase appears in its title, description or skills.",
            "items": {
              "type": "string"
            }
          },
          "requiredSkills": {
            "title": "Required skills",
            "type": "array",
            "description": "Each skill name must be in the job skills. Match ignores letter case.",
            "items": {
              "type": "string"
            }
          },
          "titleContains": {
            "title": "Words in title",
            "type": "string",
            "description": "Keep jobs whose title contains this phrase. Match ignores letter case."
          },
          "maxAgeMinutes": {
            "title": "Maximum job age in minutes",
            "minimum": 0,
            "type": "number",
            "description": "Keep jobs published within this many minutes."
          },
          "maxJobAge": {
            "title": "Job age",
            "type": "object",
            "description": "Alternative age filter with value and unit. Units: minutes, hours, days or weeks."
          },
          "fromDate": {
            "title": "Published from",
            "type": "string",
            "description": "Keep jobs published on or after this UTC date or time. Use YYYY-MM-DD or an ISO time ending in Z."
          },
          "toDate": {
            "title": "Published through",
            "type": "string",
            "description": "Keep jobs published through this UTC date or time. A date without a time includes the full day."
          },
          "proposals": {
            "title": "Proposal ranges",
            "type": "array",
            "description": "Keep jobs with an exact applicant count inside these ranges. Needs public job details.",
            "items": {
              "type": "string",
              "enum": [
                "0-4",
                "5-9",
                "10-14",
                "15-19",
                "20-49",
                "50-"
              ]
            }
          },
          "maxApplicants": {
            "title": "Maximum applicants",
            "minimum": 0,
            "type": "integer",
            "description": "Keep jobs with a known applicant count at or below this value. Needs public job details."
          },
          "paymentVerified": {
            "title": "Payment verified only",
            "type": "boolean",
            "description": "Keep clients with a verified payment method. Needs public job details.",
            "default": false
          },
          "minClientTotalSpent": {
            "title": "Minimum client spend",
            "minimum": 0,
            "type": "number",
            "description": "Keep clients with a known public lifetime spend at or above this amount. Needs public job details."
          },
          "minClientRating": {
            "title": "Minimum client rating",
            "minimum": 0,
            "maximum": 5,
            "type": "number",
            "description": "Keep clients with a known public rating at or above this value. Needs public job details."
          },
          "minClientReviewCount": {
            "title": "Minimum client reviews",
            "minimum": 0,
            "type": "integer",
            "description": "Keep clients with at least this many public reviews. Needs public job details."
          },
          "clientHistory": {
            "title": "Client hiring history",
            "type": "array",
            "description": "Keep clients with no hires, 1–9 hires or 10+ hires.",
            "items": {
              "type": "string",
              "enum": [
                "0",
                "1-9",
                "10-"
              ]
            }
          },
          "clientCountries": {
            "title": "Client countries",
            "type": "array",
            "description": "Client country names, such as United States. Needs public job details.",
            "items": {
              "type": "string"
            }
          },
          "excludeLocations": {
            "title": "Exclude client countries",
            "type": "array",
            "description": "Skip jobs from these client countries. Needs public job details.",
            "items": {
              "type": "string"
            }
          },
          "timezones": {
            "title": "Client timezones",
            "type": "array",
            "description": "Upwork timezone filter values from a search link.",
            "items": {
              "type": "string"
            }
          },
          "onlyNew": {
            "title": "Only new jobs",
            "type": "boolean",
            "description": "Keep a history across runs and return jobs not saved before. Use Return changed jobs to include edits.",
            "default": false
          },
          "emitChanged": {
            "title": "Return changed jobs",
            "type": "boolean",
            "description": "With Only new jobs, also return jobs whose public fields changed."
          },
          "stateName": {
            "title": "History name",
            "type": "string",
            "description": "Use the same history name on later runs. Use a different name for a separate monitor. Only needed for Only new jobs."
          },
          "resetState": {
            "title": "Reset job history",
            "type": "boolean",
            "description": "Ignore the previous history for this run. New history contains only jobs saved by this run.",
            "default": false
          },
          "skipReposts": {
            "title": "Skip repeated job text",
            "type": "boolean",
            "description": "Keep a history and skip a new job ID when its cleaned title and description match a job saved before.",
            "default": false
          },
          "deliveryConnector": {
            "title": "Send results to (optional)",
            "type": "string",
            "description": "Your Slack, Notion or other MCP connector. After the run the Actor posts a short summary there. Connect services once in Apify Console → MCP connectors."
          },
          "deliveryTarget": {
            "title": "Notion page or channel (optional)",
            "type": "string",
            "description": "Where to post the summary: a Notion page link (each run is added on top of that page) or a Slack channel ID. Leave empty to let the connector decide."
          },
          "descriptionFormat": {
            "title": "Description format",
            "enum": [
              "text",
              "markdown",
              "html"
            ],
            "type": "string",
            "description": "Return plain text, basic Markdown, or escaped HTML. Line breaks are kept. The source formatting may be simplified.",
            "default": "text"
          },
          "descriptionMaxLength": {
            "title": "Description length limit",
            "minimum": 0,
            "type": "integer",
            "description": "Trim the returned description to this many characters. Leave blank for the full public text."
          },
          "compact": {
            "title": "Compact output",
            "type": "boolean",
            "description": "Leave out the nested requirements and skill IDs. Other fields stay the same.",
            "default": false
          },
          "excludeEmptyFields": {
            "title": "Hide empty fields",
            "type": "boolean",
            "description": "Leave out fields whose value is null or an empty string.",
            "default": false
          },
          "query": {
            "title": "Single search phrase",
            "type": "string",
            "description": "A single search phrase. When set, it takes the place of Search phrases."
          },
          "rawUrl": {
            "title": "Single search URL",
            "type": "string",
            "description": "A public Upwork job search link. Its filters take the place of the same input filters."
          },
          "sort": {
            "title": "Search order",
            "enum": [
              "recency",
              "relevance+desc"
            ],
            "type": "string",
            "description": "Read newest jobs first, or use the source relevance order. Large searches may be split by category.",
            "default": "recency"
          },
          "perPage": {
            "title": "Jobs per search page",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "Read this many jobs per page. A smaller page reads less data when you need only a few jobs.",
            "default": 50
          },
          "page": {
            "title": "First search page",
            "minimum": 1,
            "maximum": 101,
            "type": "integer",
            "description": "Start from this page. Page 1 starts at the newest matching jobs.",
            "default": 1
          },
          "pagesToScrape": {
            "title": "Search pages per input",
            "minimum": 1,
            "type": "integer",
            "description": "Optional page limit for each search. Leave blank to keep paging until the result limit or the end."
          },
          "subcategories": {
            "title": "Subcategory IDs",
            "type": "array",
            "description": "Upwork subcategory IDs from a search link.",
            "items": {
              "type": "string"
            }
          },
          "skillIds": {
            "title": "Skill IDs",
            "type": "array",
            "description": "Upwork skill IDs from a search link.",
            "items": {
              "type": "string"
            }
          },
          "hourlyRateRange": {
            "title": "Hourly range from search link",
            "type": "string",
            "description": "Use an Upwork hourly range such as 20-50. For a simple minimum or maximum, use the hourly rate fields below."
          },
          "fixedPriceRange": {
            "title": "Fixed budget ranges from search link",
            "type": "string",
            "description": "Use Upwork budget ranges such as 100-499,500-999. For a simple minimum or maximum, use the budget fields below."
          },
          "customFilters": {
            "title": "Custom field filters",
            "type": "array",
            "description": "Filter public fields with includes, notIncludes, equals or notEquals. Use objects with key, operator and value. Filters are combined with AND.",
            "items": {
              "type": "object"
            }
          },
          "concurrency": {
            "title": "Jobs at a time",
            "minimum": 1,
            "maximum": 8,
            "type": "integer",
            "description": "Read up to this many jobs together. The Actor waits when the source asks it to slow down.",
            "default": 4
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}