{
  "openapi": "3.0.1",
  "info": {
    "title": "Freelancer Scraper — Projects, Freelancers, Bids & Contests",
    "description": "Scrape Freelancer.com without login: projects (open now or 17M+ of history) with USD budgets and bid stats, freelancer profiles with rates, ratings and reviews, every bid with bidder and amount, and contests. Thousands of rows per minute. Not affiliated with Freelancer.com.",
    "version": "1.0",
    "x-build-id": "nguQNvVis74k4xO8n"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/logiover~freelancer-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-logiover-freelancer-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/logiover~freelancer-scraper/runs": {
      "post": {
        "operationId": "runs-sync-logiover-freelancer-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/logiover~freelancer-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-logiover-freelancer-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": {
          "mode": {
            "title": "What to scrape",
            "enum": [
              "projects",
              "freelancers",
              "bids",
              "contests"
            ],
            "type": "string",
            "description": "Which Freelancer.com listing the keywords, skills and countries below search. Bids searches projects with the project filters and returns one row per bid with the bidder's profile. URLs, project IDs and usernames are always fetched, whatever you pick here (in Bids mode project URLs return their bids).",
            "default": "projects"
          },
          "searchQueries": {
            "title": "Search keywords",
            "type": "array",
            "description": "One search per keyword, e.g. \"python\", \"logo design\", \"shopify store\". All words must match. Leave empty to list everything (newest projects/contests, or the whole freelancer directory) — the filters below still apply.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "skills": {
            "title": "Skills",
            "type": "array",
            "description": "Skill names as Freelancer.com shows them (\"Python\", \"Web Scraping\", \"Logo Design\", \"React.js\") or numeric skill IDs. Results need ANY of the listed skills. Close names are matched (\"React\" → React.js, \"Machine Learning\" → Machine Learning (ML)); the run log shows what each name matched.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "countries": {
            "title": "Countries",
            "type": "array",
            "description": "Projects: the CLIENT's country (each row then gets clientCountry). Freelancers: where the freelancer lives. Names (\"Germany\", \"United States\", \"UK\") or two-letter codes (\"DE\", \"US\"). Ignored for contests.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "urls": {
            "title": "Freelancer.com URLs, project IDs or usernames",
            "type": "array",
            "description": "Fetched directly: project pages (freelancer.com/projects/…), profiles (freelancer.com/u/username), contests (freelancer.com/contest/…), numeric project IDs, bare usernames, and skill pages (freelancer.com/jobs/python/, freelancer.com/freelancers/skills/python, freelancer.com/freelancers/india/python), which run as searches. When you give URLs but no keywords or skills, only the URLs are scraped.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "maxItems": {
            "title": "Max results",
            "minimum": 0,
            "maximum": 1000000,
            "type": "integer",
            "description": "Stop after this many rows in total (projects + freelancers + contests). 0 = no limit: the run ends when every search is exhausted or the run times out.",
            "default": 1000
          },
          "projectStatus": {
            "title": "Project status",
            "enum": [
              "open",
              "all",
              "closed"
            ],
            "type": "string",
            "description": "Open projects are the live leads (about 5,000 at any time). \"All\" and \"Closed\" search the full history, newest first — use them for market research and budget benchmarks.",
            "default": "open"
          },
          "projectType": {
            "title": "Project type",
            "enum": [
              "any",
              "fixed",
              "hourly"
            ],
            "type": "string",
            "description": "Fixed-price or hourly projects only.",
            "default": "any"
          },
          "minBudgetUsd": {
            "title": "Min budget (USD)",
            "minimum": 0,
            "type": "integer",
            "description": "Only projects whose budget range reaches at least this many US dollars (hourly projects: per hour). 0 = no minimum.",
            "default": 0
          },
          "maxBudgetUsd": {
            "title": "Max budget (USD)",
            "minimum": 0,
            "type": "integer",
            "description": "Only projects whose budget range starts at or below this many US dollars. 0 = no maximum.",
            "default": 0
          },
          "postedAfter": {
            "title": "Posted after",
            "type": "string",
            "description": "Projects and contests posted on or after this date — an absolute date (2026-01-31) or a relative one (\"7 days\", \"24 hours\", \"3 months\"). Empty = no limit."
          },
          "postedBefore": {
            "title": "Posted before",
            "type": "string",
            "description": "Projects and contests posted on or before this date (the whole day counts). Empty = up to now."
          },
          "languages": {
            "title": "Project languages",
            "type": "array",
            "description": "Only projects written in these languages: two-letter codes (\"en\", \"de\", \"es\") or names (\"German\").",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "projectUpgrades": {
            "title": "Project upgrades",
            "type": "array",
            "description": "Only projects with ANY of these paid upgrades.",
            "items": {
              "type": "string",
              "enum": [
                "featured",
                "urgent",
                "sealed",
                "NDA",
                "fulltime",
                "qualified",
                "assisted",
                "ip_contract",
                "nonpublic"
              ],
              "enumTitles": [
                "Featured",
                "Urgent",
                "Sealed bids",
                "NDA",
                "Full-time",
                "Qualified freelancers only",
                "Recruiter assisted",
                "IP agreement",
                "Private"
              ]
            },
            "default": []
          },
          "projectSort": {
            "title": "Project order",
            "enum": [
              "newest",
              "bids",
              "avg_bid"
            ],
            "type": "string",
            "description": "Newest first reads a search to its very end. The other orders show the top 5,000 of each search — Freelancer.com does not page further.",
            "default": "newest"
          },
          "minHourlyRate": {
            "title": "Min hourly rate (USD)",
            "minimum": 0,
            "type": "integer",
            "description": "Only freelancers charging at least this much per hour. 0 = no minimum.",
            "default": 0
          },
          "maxHourlyRate": {
            "title": "Max hourly rate (USD)",
            "minimum": 0,
            "type": "integer",
            "description": "Only freelancers charging at most this much per hour. 0 = no maximum.",
            "default": 0
          },
          "minRating": {
            "title": "Min rating",
            "enum": [
              "0",
              "1",
              "2",
              "3",
              "4",
              "5"
            ],
            "type": "string",
            "description": "Only freelancers with at least this overall rating (and at least one review).",
            "default": "0"
          },
          "minReviews": {
            "title": "Min reviews",
            "minimum": 0,
            "type": "integer",
            "description": "Only freelancers with at least this many reviews. 0 = no minimum.",
            "default": 0
          },
          "onlineOnly": {
            "title": "Online now only",
            "type": "boolean",
            "description": "Only freelancers who are online at the moment of the run.",
            "default": false
          },
          "freelancerSort": {
            "title": "Freelancer order",
            "enum": [
              "best",
              "rating",
              "reviews",
              "rate"
            ],
            "type": "string",
            "description": "Order of the directory results. Searches past 10,000 freelancers are split by country and rate, so the order then holds within each slice.",
            "default": "best"
          },
          "maxBidsPerProject": {
            "title": "Max bids per project",
            "minimum": 0,
            "type": "integer",
            "description": "Bids mode: read at most this many bids of each project (in Freelancer.com's own ranking order). 0 = all bids. Use e.g. 20 to sample many projects quickly.",
            "default": 0
          },
          "contestStatus": {
            "title": "Contest status",
            "enum": [
              "active",
              "all"
            ],
            "type": "string",
            "description": "Running contests, or the full contest history newest first.",
            "default": "active"
          },
          "includeDescriptions": {
            "title": "Include full descriptions",
            "type": "boolean",
            "description": "Full project/contest descriptions and freelancer \"About me\" texts. Switch off for smaller rows (projects then keep a 100-character preview).",
            "default": true
          },
          "maxConcurrency": {
            "title": "Parallel requests",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "API pages fetched at the same time. 24 is fast and stays inside Freelancer.com's per-IP limits; extra work moves to Apify Proxy IPs automatically.",
            "default": 24
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Freelancer.com allows each IP about 200 project requests per minute. The run starts on a direct connection and moves extra work to Apify Proxy IPs when that limit is reached, so big runs never stall. Leave as is.",
            "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
                  },
                  "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}