{
  "openapi": "3.0.1",
  "info": {
    "title": "Upwork Freelancer Search — Rates, Earnings, JSS, Work History",
    "description": "Search Upwork freelancers by keyword, skills, rate, JSS, badge, country, hours and tenure. Per profile: exact earnings, every contract with feedback both ways, education, employment, languages, certificates. Seconds from a maintained census; live search on request. Pay per row, no start fee.",
    "version": "0.1",
    "x-build-id": "nFWBOrJOKxh33iAtb"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/moxlade~upwork-freelancers/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-moxlade-upwork-freelancers",
        "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/moxlade~upwork-freelancers/runs": {
      "post": {
        "operationId": "runs-sync-moxlade-upwork-freelancers",
        "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/moxlade~upwork-freelancers/run-sync": {
      "post": {
        "operationId": "run-sync-moxlade-upwork-freelancers",
        "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 keywords",
            "maxLength": 200,
            "type": "string",
            "description": "Matched against the profile title, overview and skills. Leave empty to filter the whole census by the fields below."
          },
          "profileUrls": {
            "title": "Profile URLs or ids",
            "maxItems": 5000,
            "type": "array",
            "description": "Look up specific freelancers instead of searching: profile URLs (https://www.upwork.com/freelancers/~01…) or bare ids (~01…). Up to 5,000. A private profile is answered as status: private with the date it went private.",
            "items": {
              "type": "string"
            }
          },
          "fullProfiles": {
            "title": "Full profiles (fresh read + every contract)",
            "type": "boolean",
            "description": "With profileUrls: re-read each profile from Upwork now and fetch everything it has — the complete contract history (hours, charges also on private contracts, the client's feedback and the freelancer's feedback about the client), education, employment history, languages, certificates, other experiences, portfolios, testimonials and specialized profiles. Billed as profile_live per profile; about 10 s per profile. Without it, the stored profile is returned (profile_stored).",
            "default": false
          },
          "topRated": {
            "title": "Top Rated only",
            "type": "boolean",
            "description": "Only Top Rated freelancers (includes Top Rated Plus)."
          },
          "topRatedPlus": {
            "title": "Top Rated Plus only",
            "type": "boolean",
            "description": "Only Top Rated Plus."
          },
          "risingTalent": {
            "title": "Rising Talent only",
            "type": "boolean",
            "description": "Only freelancers with the Rising Talent badge."
          },
          "countries": {
            "title": "Countries",
            "maxItems": 50,
            "type": "array",
            "description": "Country names as Upwork shows them, e.g. United States, United Kingdom, Germany. Any of these.",
            "items": {
              "type": "string"
            }
          },
          "regions": {
            "title": "Regions",
            "type": "array",
            "description": "Upwork's regions. Any of these.",
            "items": {
              "type": "string",
              "enum": [
                "Americas",
                "Europe",
                "Asia",
                "Africa",
                "Oceania"
              ]
            }
          },
          "rateMin": {
            "title": "Hourly rate from (USD)",
            "minimum": 0,
            "maximum": 10000,
            "type": "integer",
            "description": "Listed hourly rate at least this."
          },
          "rateMax": {
            "title": "Hourly rate up to (USD)",
            "minimum": 0,
            "maximum": 10000,
            "type": "integer",
            "description": "Listed hourly rate at most this."
          },
          "jssMin": {
            "title": "Job Success Score at least",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "0–100. Profiles without a shown JSS are excluded when this is set."
          },
          "hoursMin": {
            "title": "Hours billed at least",
            "minimum": 0,
            "type": "integer",
            "description": "Total hours billed on Upwork."
          },
          "jobsMin": {
            "title": "Jobs worked at least",
            "minimum": 0,
            "type": "integer",
            "description": "Jobs worked, as the profile reports it."
          },
          "earnedMin": {
            "title": "Lifetime earnings at least (USD)",
            "minimum": 0,
            "type": "integer",
            "description": "Uses the exact figure where known, the card's lower bound otherwise."
          },
          "memberSinceAfter": {
            "title": "Member since (after)",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
            "type": "string",
            "description": "Joined Upwork on or after this date (YYYY-MM-DD)."
          },
          "memberSinceBefore": {
            "title": "Member since (before)",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
            "type": "string",
            "description": "Joined Upwork on or before this date (YYYY-MM-DD)."
          },
          "lastWorkedWithinDays": {
            "title": "Worked within the last N days",
            "minimum": 1,
            "maximum": 3650,
            "type": "integer",
            "description": "Last work on Upwork within this many days — active freelancers only."
          },
          "hireAgainMin": {
            "title": "Hire-again rate at least (%)",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "Share of clients who would hire again."
          },
          "skills": {
            "title": "Skills (any of)",
            "maxItems": 50,
            "type": "array",
            "description": "Skill names as Upwork lists them, e.g. Python, Django, Web Scraping. A profile matches if it lists any of them.",
            "items": {
              "type": "string"
            }
          },
          "availability": {
            "title": "Availability",
            "type": "array",
            "description": "As stated on the profile: more than 30 hrs/week (fullTime), less than 30 (partTime), as needed (notSure).",
            "items": {
              "type": "string",
              "enum": [
                "fullTime",
                "partTime",
                "notSure"
              ]
            }
          },
          "hasContracts": {
            "title": "Has completed contracts",
            "type": "boolean",
            "description": "Only freelancers with at least one completed contract."
          },
          "idVerified": {
            "title": "Identity verified",
            "type": "boolean",
            "description": "Only freelancers whose identity Upwork has verified."
          },
          "excludeAgencies": {
            "title": "Exclude agency members",
            "type": "boolean",
            "description": "Drop freelancers listed under an agency."
          },
          "changedSince": {
            "title": "Changed since",
            "pattern": "^(\\d{4}-\\d{2}-\\d{2}(T[0-9:.]+Z?)?|\\s*\\d{1,3}\\s*[dwmDWM]\\s*)$",
            "type": "string",
            "description": "ISO date or timestamp, or a window like 7d, 2w, 1m (so a scheduled task never needs editing). Only profiles whose rate, title, JSS, badge, hours, jobs, skills, availability or hire-again rate moved since then; each row carries the changes as {field, from, to, at}."
          },
          "include": {
            "title": "Include sections",
            "type": "array",
            "description": "Sections to add to every row from the stored profile at no extra charge: contracts (completed contracts with feedback both ways; the full list after a fullProfiles read), portfolios, testimonials, specialized_profiles, education, employment_history, languages, certificates, other_experiences.",
            "items": {
              "type": "string",
              "enum": [
                "contracts",
                "portfolios",
                "testimonials",
                "specialized_profiles",
                "education",
                "employment_history",
                "languages",
                "certificates",
                "other_experiences"
              ]
            }
          },
          "sort": {
            "title": "Sort",
            "enum": [
              "relevance",
              "rate",
              "rate_asc",
              "hours",
              "jss",
              "earnings",
              "last_worked_on",
              "first_seen",
              "fetched"
            ],
            "type": "string",
            "description": "Order of the stored results. Upwork's own relevance order comes only with liveSearch.",
            "default": "relevance"
          },
          "maxItems": {
            "title": "Max results",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "Upper bound on rows returned — and on what the run can cost.",
            "default": 50
          },
          "maxAgeDays": {
            "title": "Max age of a stored profile (days)",
            "minimum": 1,
            "maximum": 3650,
            "type": "integer",
            "description": "Stored rows read from Upwork longer ago than this are left out of a search. Every row carries fetched_at and age_days regardless.",
            "default": 30
          },
          "includeStale": {
            "title": "Include older profiles",
            "type": "boolean",
            "description": "Ignore maxAgeDays and return every matching stored profile.",
            "default": false
          },
          "includePrivate": {
            "title": "Include profiles that went private",
            "type": "boolean",
            "description": "Search results also return profiles that are no longer public (status: private, with private_since and the last public state). Lookups by id always answer them.",
            "default": false
          },
          "liveSearch": {
            "title": "Live search",
            "type": "boolean",
            "description": "Ask Upwork for the current result for the query instead of the stored census: Upwork's own relevance order, and freelancers the census has not seen yet. Slower (under a minute for 25 rows), billed as card_live per row. Needs a query.",
            "default": false
          },
          "maxPages": {
            "title": "Live search: max pages",
            "minimum": 1,
            "maximum": 100,
            "type": "integer",
            "description": "With liveSearch, how many result pages to walk at most (10 rows per page) before returning what passed the filters.",
            "default": 10
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}