{
  "openapi": "3.0.1",
  "info": {
    "title": "Freelancer.com Projects Scraper",
    "description": "Active freelance projects from Freelancer.com: title, full description, budget range, bid count and average bid, required skills, project type and posting time. Filter by keyword, skill or budget, with skill names resolved to the numeric ids the site needs.",
    "version": "0.1",
    "x-build-id": "mg8X2axQPWNEwmord"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/scrapyx~freelancer-projects-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-scrapyx-freelancer-projects-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/scrapyx~freelancer-projects-scraper/runs": {
      "post": {
        "operationId": "runs-sync-scrapyx-freelancer-projects-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/scrapyx~freelancer-projects-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-scrapyx-freelancer-projects-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": {
          "query": {
            "title": "Search text",
            "type": "string",
            "description": "Free-text search across active projects, e.g. 'python', 'logo design', 'shopify'. A real upstream filter — 'python' narrowed 5,723 active projects to 172 during testing."
          },
          "skills": {
            "title": "Skills",
            "type": "array",
            "description": "Filter by required skill. Type the skill NAME ('PHP', 'Game Design'), its URL slug ('php') or its numeric id — all three resolve. Freelancer's own API only accepts the numeric id and has 3,483 of them, so this actor looks them up for you. A skill it does not recognise is reported as an error, because the API answers an unknown id with zero projects and a success status — which looks exactly like 'no work available'.",
            "items": {
              "type": "string"
            }
          },
          "includeSkillTaxonomy": {
            "title": "Also emit the skill list",
            "type": "boolean",
            "description": "Emit all 3,483 skills with their ids, categories and slugs as their own rows. This is where the skill names above come from. Costs one extra request.",
            "default": false
          },
          "projectTypes": {
            "title": "Project types",
            "type": "array",
            "description": "Restrict to 'fixed' price projects, 'hourly' ones, or leave empty for both.",
            "items": {
              "type": "string"
            }
          },
          "minAveragePrice": {
            "title": "Minimum average bid (fixed price)",
            "minimum": 0,
            "type": "integer",
            "description": "Keep only fixed-price projects whose average bid is at least this much, in the project's own currency. Note the currency is not normalised — projects are posted in USD, AUD, INR and others, and each row carries its own."
          },
          "maxAveragePrice": {
            "title": "Maximum average bid (fixed price)",
            "minimum": 0,
            "type": "integer",
            "description": "Upper bound on the average bid, same currency caveat as the minimum."
          },
          "minAverageHourly": {
            "title": "Minimum average hourly rate",
            "minimum": 0,
            "type": "integer",
            "description": "For hourly projects: the lowest average hourly bid to keep, in the project's own currency."
          },
          "maxAverageHourly": {
            "title": "Maximum average hourly rate",
            "minimum": 0,
            "type": "integer",
            "description": "For hourly projects: the highest average hourly bid to keep."
          },
          "includeProjectDetails": {
            "title": "Include full project detail",
            "type": "boolean",
            "description": "Ask Freelancer for the full description, skills, attachments, location and upgrade flags rather than the short preview. Same number of requests either way — it is a flag on the same call — so there is rarely a reason to turn it off.",
            "default": true
          },
          "maxItems": {
            "title": "Max projects to return",
            "minimum": 0,
            "type": "integer",
            "description": "Stop after this many unique projects. 0 means no cap (still bounded by max pages).",
            "default": 300
          },
          "maxPages": {
            "title": "Max pages to fetch",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "Safety ceiling on requests. Freelancer serves at most 99 projects per call, and there were about 5,700 active projects in total during testing — so roughly 58 pages covers everything on offer.",
            "default": 5
          },
          "minRequestInterval": {
            "title": "Minimum interval between requests (seconds)",
            "minimum": 0.05,
            "maximum": 10,
            "type": "number",
            "description": "Shortest gap between two request starts. Pages are fetched one after another, so this is the only speed control that matters.",
            "default": 0.5
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Apify Proxy settings. Datacenter is the default and is sufficient — the API answered normally to a plain unproxied request during testing, with no key and no cookie.",
            "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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}