{
  "data": {
    "id": "bbzK5whhDLh1yi1Dc",
    "actId": "rIifZrshkdx1QJHsI",
    "userId": "IYgBDiXtHOijAaUel",
    "startedAt": "2026-11-03T08:04:02.739Z",
    "finishedAt": "2026-11-03T08:04:13.053Z",
    "status": "SUCCEEDED",
    "meta": {
      "origin": "CLI"
    },
    "stats": {
      "durationMillis": 10195,
      "runTimeSecs": 10.195,
      "computeUnits": 0.011327777777777779,
      "imageSizeBytes": 362390528
    },
    "options": {
      "useCache": true,
      "betaPackages": false,
      "memoryMbytes": 4096,
      "diskMbytes": 8192
    },
    "createdByOrganizationMemberUserId": "QYo53EZkJk0prePWY",
    "exitCode": 0,
    "inputSchema": "{\n  \"title\": \"Freelancer Project Scraper Input\",\n  \"description\": \"Collect Freelancer.com projects by keyword, category or direct project URL/id, with fixed/hourly budgets, skills, languages, bids, employer details and dates.\",\n  \"type\": \"object\",\n  \"schemaVersion\": 1,\n  \"properties\": {\n    \"mode\": {\n      \"title\": \"Mode\",\n      \"type\": \"string\",\n      \"description\": \"How to find projects. `auto` detects the mode from the fields you fill in, `search` uses a keyword, `byProject` uses project URLs/ids, and `byCategory` browses a skill/category page.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"auto\",\n        \"search\",\n        \"byProject\",\n        \"byCategory\"\n      ],\n      \"enumTitles\": [\n        \"Auto-detect from inputs\",\n        \"Search by keyword\",\n        \"Fetch specific projects\",\n        \"Browse a category or skill\"\n      ],\n      \"default\": \"auto\",\n      \"prefill\": \"search\"\n    },\n    \"query\": {\n      \"title\": \"Search keyword\",\n      \"type\": \"string\",\n      \"description\": \"Keyword used in mode=search, e.g. `python`, `logo design`, `data entry`. Required for search mode.\",\n      \"editor\": \"textfield\",\n      \"default\": \"python\",\n      \"prefill\": \"python\"\n    },\n    \"projectUrls\": {\n      \"title\": \"Project URLs or ids\",\n      \"type\": \"array\",\n      \"description\": \"Full Freelancer project URLs, paths or numeric project ids used in mode=byProject, e.g. https://www.freelancer.com/projects/python/my-project or 40425363.\",\n      \"editor\": \"stringList\",\n      \"default\": [],\n      \"prefill\": []\n    },\n    \"categoryUrls\": {\n      \"title\": \"Category or skill URLs\",\n      \"type\": \"array\",\n      \"description\": \"Freelancer /jobs/<skill>/ URLs or skill slugs used in mode=byCategory, e.g. https://www.freelancer.com/jobs/python/ or `website-design`.\",\n      \"editor\": \"stringList\",\n      \"default\": [],\n      \"prefill\": []\n    },\n    \"projectType\": {\n      \"title\": \"Project type\",\n      \"type\": \"string\",\n      \"description\": \"Keep fixed-price projects, hourly projects, or both.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"any\",\n        \"fixed\",\n        \"hourly\"\n      ],\n      \"enumTitles\": [\n        \"Any type\",\n        \"Fixed-price projects\",\n        \"Hourly projects\"\n      ],\n      \"default\": \"any\",\n      \"prefill\": \"any\"\n    },\n    \"budgetMin\": {\n      \"title\": \"Minimum budget (USD)\",\n      \"type\": \"integer\",\n      \"description\": \"Minimum fixed budget or hourly rate in USD. Use 0 for no minimum. When projectType=any, the range is applied to both types.\",\n      \"minimum\": 0,\n      \"maximum\": 10000000,\n      \"default\": 0,\n      \"prefill\": 0\n    },\n    \"budgetMax\": {\n      \"title\": \"Maximum budget (USD)\",\n      \"type\": \"integer\",\n      \"description\": \"Maximum fixed budget or hourly rate in USD. Use 0 for no maximum. When projectType=any, the range is applied to both types.\",\n      \"minimum\": 0,\n      \"maximum\": 10000000,\n      \"default\": 0,\n      \"prefill\": 0\n    },\n    \"minBidCount\": {\n      \"title\": \"Minimum bid count\",\n      \"type\": \"integer\",\n      \"description\": \"Only keep projects with at least this many bids. Use 0 for no minimum.\",\n      \"minimum\": 0,\n      \"maximum\": 1000000,\n      \"default\": 0,\n      \"prefill\": 0\n    },\n    \"maxBidCount\": {\n      \"title\": \"Maximum bid count\",\n      \"type\": \"integer\",\n      \"description\": \"Only keep projects with at most this many bids. Use 0 for no maximum.\",\n      \"minimum\": 0,\n      \"maximum\": 1000000,\n      \"default\": 0,\n      \"prefill\": 0\n    },\n    \"skills\": {\n      \"title\": \"Skills\",\n      \"type\": \"array\",\n      \"description\": \"Skill names, slugs or numeric ids to narrow the search, e.g. `Python`, `website-design` or `13`.\",\n      \"editor\": \"stringList\",\n      \"default\": [],\n      \"prefill\": []\n    },\n    \"languages\": {\n      \"title\": \"Project languages\",\n      \"type\": \"array\",\n      \"description\": \"ISO 639-1 language codes, e.g. `en`, `de`, `hi`, `es`.\",\n      \"editor\": \"stringList\",\n      \"default\": [],\n      \"prefill\": []\n    },\n    \"postedAfter\": {\n      \"title\": \"Posted after\",\n      \"type\": \"string\",\n      \"description\": \"Only keep projects posted on or after this date. ISO date or datetime, e.g. `2026-01-01` or `2026-01-01T12:00:00Z`.\",\n      \"editor\": \"textfield\",\n      \"default\": \"\",\n      \"prefill\": \"\"\n    },\n    \"postedBefore\": {\n      \"title\": \"Posted before\",\n      \"type\": \"string\",\n      \"description\": \"Only keep projects posted on or before this date. ISO date or datetime, e.g. `2026-12-31` or `2026-12-31T23:59:59Z`.\",\n      \"editor\": \"textfield\",\n      \"default\": \"\",\n      \"prefill\": \"\"\n    },\n    \"includeClosed\": {\n      \"title\": \"Include closed projects\",\n      \"type\": \"boolean\",\n      \"description\": \"Also search closed projects in search/category modes. Direct project URLs and ids always work for closed projects.\",\n      \"default\": false,\n      \"prefill\": false\n    },\n    \"includeDetails\": {\n      \"title\": \"Fetch project details\",\n      \"type\": \"boolean\",\n      \"description\": \"Fetch the public project page for employer country/rating/reviews, verification flags, page title and posting text. Adds one request per project.\",\n      \"default\": true,\n      \"prefill\": false\n    },\n    \"includeBids\": {\n      \"title\": \"Fetch bid lists\",\n      \"type\": \"boolean\",\n      \"description\": \"Fetch individual bids with bidder identity, amount, delivery period and proposal text. Adds one request per project.\",\n      \"default\": false,\n      \"prefill\": false\n    },\n    \"maxBidsPerProject\": {\n      \"title\": \"Max bids per project\",\n      \"type\": \"integer\",\n      \"description\": \"How many individual bids to return per project when `includeBids` is enabled.\",\n      \"minimum\": 1,\n      \"maximum\": 1000,\n      \"default\": 20,\n      \"prefill\": 1\n    },\n    \"sortBy\": {\n      \"title\": \"Sort results\",\n      \"type\": \"string\",\n      \"description\": \"Order of search/category results. Ending-soon and budget sorts are applied to the collected candidate pool.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"latest\",\n        \"ending_soon\",\n        \"lowest_budget\",\n        \"highest_budget\",\n        \"lowest_bids\",\n        \"highest_bids\"\n      ],\n      \"enumTitles\": [\n        \"Newest first\",\n        \"Ending soon\",\n        \"Lowest budget first\",\n        \"Highest budget first\",\n        \"Lowest bid count first\",\n        \"Highest bid count first\"\n      ],\n      \"default\": \"latest\",\n      \"prefill\": \"latest\"\n    },\n    \"maxPages\": {\n      \"title\": \"Max pages\",\n      \"type\": \"integer\",\n      \"description\": \"Maximum listing pages to request. Each page contains up to 99 projects.\",\n      \"minimum\": 1,\n      \"maximum\": 100,\n      \"default\": 5,\n      \"prefill\": 1\n    },\n    \"maxItems\": {\n      \"title\": \"Max items\",\n      \"type\": \"integer\",\n      \"description\": \"Hard cap on emitted project records.\",\n      \"minimum\": 1,\n      \"maximum\": 10000,\n      \"default\": 50,\n      \"prefill\": 3\n    }\n  },\n  \"required\": [\n    \"mode\"\n  ]\n}",
    "readme": "# Freelancer.com Project Budget & Bids Scraper\n\nFreelancer.com publishes project budgets, bid activity, skills and deadlines on every listing. This actor turns that into a structured dataset you can filter, sort and export. Search by keyword, browse a skill/category page, or paste project URLs and ids. It returns the budget in the project's own currency and in USD, the bid count, an optional full bid list with bidder details, the required skills, the employer's public rating and verification flags, and the posting and closing dates. No login, cookies or proxy setup is required.\n\n## What this actor does\n\n- **Three ways to find projects:** keyword search, category/skill browse, or direct project URL/id lookup. Auto-detect picks the right one from the fields you fill in.\n- **Fixed and hourly projects:** budgets stay separate, with native-currency and USD values on every record.\n- **Real filters:** project type, budget range, skills, languages, bid-count range and posting-date range.\n- **Bid intelligence:** bid count and average bid always; an optional full bid list with bidder username, country, amount, delivery period and proposal text.\n- **Employer context:** country, city, rating, review count, member-since date and payment/email/phone verification flags when the public project page publishes them.\n- **Closed projects:** search them with `includeClosed`, or fetch any closed project directly by URL or id.\n- **Clean output:** empty fields are omitted at every depth, so you never have to defend against `null`.\n\n## Output per project\n\n- `projectId` — Freelancer project id\n- `title`, `pageTitle`, `slug` — project title, page title and URL slug\n- `sourceUrl`, `canonicalUrl` — where the project was found and its canonical project URL\n- `status`, `subStatus`, `frontendStatus` — project status as published\n- `projectType` — `fixed` or `hourly`\n- `budget` — fixed-price budget display string, e.g. `$250-750 USD`\n- `budgetMinMax` — fixed budget as `{min, max, currency}`\n- `budgetUsdMin`, `budgetUsdMax` — fixed budget converted to USD\n- `hourlyRate` — hourly rate display string, e.g. `$15-30 USD / hr`\n- `hourlyRateMinMax` — hourly rate as `{min, max, currency}`\n- `hourlyRateUsdMin`, `hourlyRateUsdMax` — hourly rate converted to USD\n- `currency`, `currencySymbol` — project currency\n- `paymentType` — fixed-price or hourly label from the page\n- `bidCount` — number of bids received\n- `averageBid` — average bid in the project's currency\n- `averageBidUsd` — average bid converted to USD\n- `bids` — individual bids when `includeBids` is enabled: bidder id, username, display name, country, city, registration date, hourly rate, rating, review count, amount, currency, delivery period, proposal, submitted date, rank, milestone percentage and sealed flag\n- `description` — full project brief\n- `skills` — skill names attached to the project\n- `skillSlugs`, `skillIds`, `categories` — skill slugs, numeric ids and top-level categories\n- `employer` — public client details: country, country code, city, rating, review count, member-since date and verification flags\n- `postedAt`, `updatedAt`, `endsAt`, `latestActivityAt` — ISO 8601 dates\n- `bidPeriodDays`, `daysLeft` — bidding window and days remaining\n- `postedText` — relative posting text from the project page, when available\n- `hourlyCommitmentHours`, `hourlyCommitmentInterval`, `hourlyDuration` — hourly project commitment\n- `isFeatured`, `isUrgent`, `isNda`, `isSealed`, `isNonpublic`, `isFulltime`, `isLocal`, `isProjectManagement`, `isRecruiter` — project flags\n- `projectCountry`, `projectCity` — published project location, when available\n- `marketplaceRating`, `marketplaceReviewCount`, `marketplaceDescription` — marketplace rating block when the page carries it\n- `recordType: \"project\"`, `scrapedAt` — record type and scrape timestamp\n\n## Input\n\n| Field | Type | Default | Description |\n|---|---|---|---|\n| `mode` | string | `auto` | `auto`, `search`, `byProject` or `byCategory` |\n| `query` | string | `python` | Keyword for `mode=search` |\n| `projectUrls` | array | `[]` | Project URLs, paths or numeric ids for `mode=byProject` |\n| `categoryUrls` | array | `[]` | `/jobs/<skill>/` URLs or skill slugs for `mode=byCategory` |\n| `projectType` | string | `any` | `any`, `fixed` or `hourly` |\n| `budgetMin` | integer | `0` | Minimum fixed budget or hourly rate in USD; `0` = no minimum |\n| `budgetMax` | integer | `0` | Maximum fixed budget or hourly rate in USD; `0` = no maximum |\n| `minBidCount` | integer | `0` | Minimum number of bids; `0` = no minimum |\n| `maxBidCount` | integer | `0` | Maximum number of bids; `0` = no maximum |\n| `skills` | array | `[]` | Skill names, slugs or numeric ids |\n| `languages` | array | `[]` | ISO 639-1 language codes, e.g. `en`, `de`, `hi` |\n| `postedAfter` | string | – | ISO date/datetime lower bound on posting time |\n| `postedBefore` | string | – | ISO date/datetime upper bound on posting time |\n| `includeClosed` | boolean | `false` | Include closed projects in search/category results |\n| `includeDetails` | boolean | `true` | Fetch the public project page for employer details and page text. When off, a project URL is still resolved to its id, but page-only fields are omitted |\n| `includeBids` | boolean | `false` | Fetch individual bids |\n| `maxBidsPerProject` | integer | `20` | Maximum bids returned per project (1–1000) |\n| `sortBy` | string | `latest` | `latest`, `ending_soon`, `lowest_budget`, `highest_budget`, `lowest_bids` or `highest_bids`; ending-soon and budget sorts order the collected pool |\n| `maxPages` | integer | `5` | Maximum listing pages (99 projects per page) |\n| `maxItems` | integer | `50` | Hard cap on emitted projects (1–10000) |\n\n### Example: keyword search with a fixed budget\n\n```json\n{\n  \"mode\": \"search\",\n  \"query\": \"python\",\n  \"projectType\": \"fixed\",\n  \"budgetMin\": 250,\n  \"budgetMax\": 1500,\n  \"languages\": [\"en\"],\n  \"maxItems\": 100\n}\n```\n\n### Example: hourly projects with low competition\n\n```json\n{\n  \"mode\": \"search\",\n  \"query\": \"react\",\n  \"projectType\": \"hourly\",\n  \"budgetMin\": 20,\n  \"budgetMax\": 80,\n  \"maxBidCount\": 10,\n  \"sortBy\": \"lowest_bids\",\n  \"maxItems\": 50\n}\n```\n\n### Example: browse a skill page and include bids\n\n```json\n{\n  \"mode\": \"byCategory\",\n  \"categoryUrls\": [\"https://www.freelancer.com/jobs/logo-design/\"],\n  \"includeBids\": true,\n  \"maxBidsPerProject\": 10,\n  \"maxItems\": 25\n}\n```\n\n### Example: fetch specific projects, including a closed one\n\n```json\n{\n  \"mode\": \"byProject\",\n  \"projectUrls\": [\n    \"https://www.freelancer.com/projects/python/cricket-prediction-rewards-bot\",\n    \"40425363\"\n  ],\n  \"includeDetails\": true,\n  \"includeBids\": true,\n  \"maxBidsPerProject\": 20\n}\n```\n\n## Use cases\n\n- **Freelance demand monitoring** — track project volume and budgets across skills and categories\n- **Pricing research** — compare fixed budgets and hourly rates across currencies in USD\n- **Bid-competition analysis** — find low-bid, high-budget projects and inspect who is bidding\n- **Employer intelligence** — see client country, rating, reviews and verification flags before bidding\n- **Market and trend research** — export project descriptions, skills and posting dates for analysis\n- **Opportunity alerts** — schedule keyword or category searches and filter by budget, bids and age\n\n## FAQ\n\n**Do I need a Freelancer.com account, cookies or a proxy?**\nNo. The actor reads public project data and runs without login, cookies or proxy setup. It chooses a working connection automatically.\n\n**Why is the employer missing from some records?**\nFreelancer publishes the client's country, rating, reviews, member-since date and verification flags on many project pages, but not all. Closed-project pages in particular can be served in a reduced form without the client block. The actor returns the employer object when the public page carries it and omits it when it does not. The employer's username and hire rate are not public.\n\n**What does `includeDetails` change?**\nThe actor always reads the public project API for the title, budget, skills, dates and bid counts. `includeDetails` adds one project-page request for employer details, the page title and the relative posting text. When it is off, a project URL is still resolved to its project id, but those page-only fields are omitted.\n\n**How many bids can I get per project?**\n`bidCount` and `averageBid` are always included. Set `includeBids` to true to get individual bids; `maxBidsPerProject` controls how many. Some projects hide their bid list from public view, so you may get the count without individual bids. Some bidders also leave the proposal text blank, so that field can be absent on an individual bid.\n\n**Why do some bids show an amount of 0?**\nFreelancer hides the amount and proposal for sealed bids. Those bids carry `sealed: true`; the zero amount is the source's placeholder, not a real bid of zero. Visible bids keep their real amount.\n\n**Why don't closed projects appear first when `includeClosed` is on?**\nThe closed archive is much older and larger than the active listing, so a broad keyword returns matching active projects first and reaches closed ones only after several pages. Use a keyword or category that identifies the closed project, or pass its URL/id directly; direct project lookup always includes closed projects.\n\n**What is the difference between `budget` and `hourlyRate`?**\nFixed-price projects use `budget`; hourly projects use `hourlyRate`. For hourly projects the numbers are a rate per hour, not a total. `projectType` tells you which one applies.\n\n**Are budgets converted to USD?**\nYes. `budgetMinMax` and `hourlyRateMinMax` keep the project's own currency, while `budgetUsdMin`, `budgetUsdMax`, `hourlyRateUsdMin`, `hourlyRateUsdMax` and `averageBidUsd` are converted to USD. Filters use USD.\n\n**Can I search closed projects?**\nYes. Set `includeClosed` to true in search or category mode. Direct project URLs and ids work for closed projects without any extra setting.\n\n**Why do I get fewer rows than `maxItems`?**\nA restrictive filter can run out of matches within `maxPages`. Increase `maxPages` or narrow the keyword/category. One keyword returns at most about 5,000 active projects.\n\n**Why are some fields missing from a record?**\nThe source does not publish every field for every project. Empty values are omitted instead of being sent as `null`, `\"\"` or `[]`. This is normal for optional fields such as employer details, hourly commitment or marketplace rating.\n\n**How fresh is the data?**\nEach run reads the live project listing. Bid counts and statuses can change quickly; `scrapedAt` records when the row was collected.\n\n**Is this affiliated with Freelancer.com?**\nNo. This is an independent, third-party actor that reads public Freelancer.com project data. It is not affiliated with or endorsed by Freelancer.com.\n",
    "actorDefinition": {
      "actorSpecification": 1,
      "name": "freelancer-com-project-budget-and-bids-scraper",
      "title": "Freelancer.com Project Budget & Bids Scraper",
      "description": "Collect Freelancer.com projects by keyword, category or URL/id. Get fixed or hourly budgets in native currency and USD, bid counts and bid lists, skills, employer rating and verification, dates and flags. No login or proxy.",
      "version": "2.0",
      "buildTag": "latest",
      "dockerfile": "./Dockerfile",
      "readme": "# Freelancer.com Project Budget & Bids Scraper\n\nFreelancer.com publishes project budgets, bid activity, skills and deadlines on every listing. This actor turns that into a structured dataset you can filter, sort and export. Search by keyword, browse a skill/category page, or paste project URLs and ids. It returns the budget in the project's own currency and in USD, the bid count, an optional full bid list with bidder details, the required skills, the employer's public rating and verification flags, and the posting and closing dates. No login, cookies or proxy setup is required.\n\n## What this actor does\n\n- **Three ways to find projects:** keyword search, category/skill browse, or direct project URL/id lookup. Auto-detect picks the right one from the fields you fill in.\n- **Fixed and hourly projects:** budgets stay separate, with native-currency and USD values on every record.\n- **Real filters:** project type, budget range, skills, languages, bid-count range and posting-date range.\n- **Bid intelligence:** bid count and average bid always; an optional full bid list with bidder username, country, amount, delivery period and proposal text.\n- **Employer context:** country, city, rating, review count, member-since date and payment/email/phone verification flags when the public project page publishes them.\n- **Closed projects:** search them with `includeClosed`, or fetch any closed project directly by URL or id.\n- **Clean output:** empty fields are omitted at every depth, so you never have to defend against `null`.\n\n## Output per project\n\n- `projectId` — Freelancer project id\n- `title`, `pageTitle`, `slug` — project title, page title and URL slug\n- `sourceUrl`, `canonicalUrl` — where the project was found and its canonical project URL\n- `status`, `subStatus`, `frontendStatus` — project status as published\n- `projectType` — `fixed` or `hourly`\n- `budget` — fixed-price budget display string, e.g. `$250-750 USD`\n- `budgetMinMax` — fixed budget as `{min, max, currency}`\n- `budgetUsdMin`, `budgetUsdMax` — fixed budget converted to USD\n- `hourlyRate` — hourly rate display string, e.g. `$15-30 USD / hr`\n- `hourlyRateMinMax` — hourly rate as `{min, max, currency}`\n- `hourlyRateUsdMin`, `hourlyRateUsdMax` — hourly rate converted to USD\n- `currency`, `currencySymbol` — project currency\n- `paymentType` — fixed-price or hourly label from the page\n- `bidCount` — number of bids received\n- `averageBid` — average bid in the project's currency\n- `averageBidUsd` — average bid converted to USD\n- `bids` — individual bids when `includeBids` is enabled: bidder id, username, display name, country, city, registration date, hourly rate, rating, review count, amount, currency, delivery period, proposal, submitted date, rank, milestone percentage and sealed flag\n- `description` — full project brief\n- `skills` — skill names attached to the project\n- `skillSlugs`, `skillIds`, `categories` — skill slugs, numeric ids and top-level categories\n- `employer` — public client details: country, country code, city, rating, review count, member-since date and verification flags\n- `postedAt`, `updatedAt`, `endsAt`, `latestActivityAt` — ISO 8601 dates\n- `bidPeriodDays`, `daysLeft` — bidding window and days remaining\n- `postedText` — relative posting text from the project page, when available\n- `hourlyCommitmentHours`, `hourlyCommitmentInterval`, `hourlyDuration` — hourly project commitment\n- `isFeatured`, `isUrgent`, `isNda`, `isSealed`, `isNonpublic`, `isFulltime`, `isLocal`, `isProjectManagement`, `isRecruiter` — project flags\n- `projectCountry`, `projectCity` — published project location, when available\n- `marketplaceRating`, `marketplaceReviewCount`, `marketplaceDescription` — marketplace rating block when the page carries it\n- `recordType: \"project\"`, `scrapedAt` — record type and scrape timestamp\n\n## Input\n\n| Field | Type | Default | Description |\n|---|---|---|---|\n| `mode` | string | `auto` | `auto`, `search`, `byProject` or `byCategory` |\n| `query` | string | `python` | Keyword for `mode=search` |\n| `projectUrls` | array | `[]` | Project URLs, paths or numeric ids for `mode=byProject` |\n| `categoryUrls` | array | `[]` | `/jobs/<skill>/` URLs or skill slugs for `mode=byCategory` |\n| `projectType` | string | `any` | `any`, `fixed` or `hourly` |\n| `budgetMin` | integer | `0` | Minimum fixed budget or hourly rate in USD; `0` = no minimum |\n| `budgetMax` | integer | `0` | Maximum fixed budget or hourly rate in USD; `0` = no maximum |\n| `minBidCount` | integer | `0` | Minimum number of bids; `0` = no minimum |\n| `maxBidCount` | integer | `0` | Maximum number of bids; `0` = no maximum |\n| `skills` | array | `[]` | Skill names, slugs or numeric ids |\n| `languages` | array | `[]` | ISO 639-1 language codes, e.g. `en`, `de`, `hi` |\n| `postedAfter` | string | – | ISO date/datetime lower bound on posting time |\n| `postedBefore` | string | – | ISO date/datetime upper bound on posting time |\n| `includeClosed` | boolean | `false` | Include closed projects in search/category results |\n| `includeDetails` | boolean | `true` | Fetch the public project page for employer details and page text. When off, a project URL is still resolved to its id, but page-only fields are omitted |\n| `includeBids` | boolean | `false` | Fetch individual bids |\n| `maxBidsPerProject` | integer | `20` | Maximum bids returned per project (1–1000) |\n| `sortBy` | string | `latest` | `latest`, `ending_soon`, `lowest_budget`, `highest_budget`, `lowest_bids` or `highest_bids`; ending-soon and budget sorts order the collected pool |\n| `maxPages` | integer | `5` | Maximum listing pages (99 projects per page) |\n| `maxItems` | integer | `50` | Hard cap on emitted projects (1–10000) |\n\n### Example: keyword search with a fixed budget\n\n```json\n{\n  \"mode\": \"search\",\n  \"query\": \"python\",\n  \"projectType\": \"fixed\",\n  \"budgetMin\": 250,\n  \"budgetMax\": 1500,\n  \"languages\": [\"en\"],\n  \"maxItems\": 100\n}\n```\n\n### Example: hourly projects with low competition\n\n```json\n{\n  \"mode\": \"search\",\n  \"query\": \"react\",\n  \"projectType\": \"hourly\",\n  \"budgetMin\": 20,\n  \"budgetMax\": 80,\n  \"maxBidCount\": 10,\n  \"sortBy\": \"lowest_bids\",\n  \"maxItems\": 50\n}\n```\n\n### Example: browse a skill page and include bids\n\n```json\n{\n  \"mode\": \"byCategory\",\n  \"categoryUrls\": [\"https://www.freelancer.com/jobs/logo-design/\"],\n  \"includeBids\": true,\n  \"maxBidsPerProject\": 10,\n  \"maxItems\": 25\n}\n```\n\n### Example: fetch specific projects, including a closed one\n\n```json\n{\n  \"mode\": \"byProject\",\n  \"projectUrls\": [\n    \"https://www.freelancer.com/projects/python/cricket-prediction-rewards-bot\",\n    \"40425363\"\n  ],\n  \"includeDetails\": true,\n  \"includeBids\": true,\n  \"maxBidsPerProject\": 20\n}\n```\n\n## Use cases\n\n- **Freelance demand monitoring** — track project volume and budgets across skills and categories\n- **Pricing research** — compare fixed budgets and hourly rates across currencies in USD\n- **Bid-competition analysis** — find low-bid, high-budget projects and inspect who is bidding\n- **Employer intelligence** — see client country, rating, reviews and verification flags before bidding\n- **Market and trend research** — export project descriptions, skills and posting dates for analysis\n- **Opportunity alerts** — schedule keyword or category searches and filter by budget, bids and age\n\n## FAQ\n\n**Do I need a Freelancer.com account, cookies or a proxy?**\nNo. The actor reads public project data and runs without login, cookies or proxy setup. It chooses a working connection automatically.\n\n**Why is the employer missing from some records?**\nFreelancer publishes the client's country, rating, reviews, member-since date and verification flags on many project pages, but not all. Closed-project pages in particular can be served in a reduced form without the client block. The actor returns the employer object when the public page carries it and omits it when it does not. The employer's username and hire rate are not public.\n\n**What does `includeDetails` change?**\nThe actor always reads the public project API for the title, budget, skills, dates and bid counts. `includeDetails` adds one project-page request for employer details, the page title and the relative posting text. When it is off, a project URL is still resolved to its project id, but those page-only fields are omitted.\n\n**How many bids can I get per project?**\n`bidCount` and `averageBid` are always included. Set `includeBids` to true to get individual bids; `maxBidsPerProject` controls how many. Some projects hide their bid list from public view, so you may get the count without individual bids. Some bidders also leave the proposal text blank, so that field can be absent on an individual bid.\n\n**Why do some bids show an amount of 0?**\nFreelancer hides the amount and proposal for sealed bids. Those bids carry `sealed: true`; the zero amount is the source's placeholder, not a real bid of zero. Visible bids keep their real amount.\n\n**Why don't closed projects appear first when `includeClosed` is on?**\nThe closed archive is much older and larger than the active listing, so a broad keyword returns matching active projects first and reaches closed ones only after several pages. Use a keyword or category that identifies the closed project, or pass its URL/id directly; direct project lookup always includes closed projects.\n\n**What is the difference between `budget` and `hourlyRate`?**\nFixed-price projects use `budget`; hourly projects use `hourlyRate`. For hourly projects the numbers are a rate per hour, not a total. `projectType` tells you which one applies.\n\n**Are budgets converted to USD?**\nYes. `budgetMinMax` and `hourlyRateMinMax` keep the project's own currency, while `budgetUsdMin`, `budgetUsdMax`, `hourlyRateUsdMin`, `hourlyRateUsdMax` and `averageBidUsd` are converted to USD. Filters use USD.\n\n**Can I search closed projects?**\nYes. Set `includeClosed` to true in search or category mode. Direct project URLs and ids work for closed projects without any extra setting.\n\n**Why do I get fewer rows than `maxItems`?**\nA restrictive filter can run out of matches within `maxPages`. Increase `maxPages` or narrow the keyword/category. One keyword returns at most about 5,000 active projects.\n\n**Why are some fields missing from a record?**\nThe source does not publish every field for every project. Empty values are omitted instead of being sent as `null`, `\"\"` or `[]`. This is normal for optional fields such as employer details, hourly commitment or marketplace rating.\n\n**How fresh is the data?**\nEach run reads the live project listing. Bid counts and statuses can change quickly; `scrapedAt` records when the row was collected.\n\n**Is this affiliated with Freelancer.com?**\nNo. This is an independent, third-party actor that reads public Freelancer.com project data. It is not affiliated with or endorsed by Freelancer.com.\n",
      "input": {
        "title": "Freelancer Project Scraper Input",
        "description": "Collect Freelancer.com projects by keyword, category or direct project URL/id, with fixed/hourly budgets, skills, languages, bids, employer details and dates.",
        "type": "object",
        "schemaVersion": 1,
        "properties": {
          "mode": {
            "title": "Mode",
            "type": "string",
            "description": "How to find projects. `auto` detects the mode from the fields you fill in, `search` uses a keyword, `byProject` uses project URLs/ids, and `byCategory` browses a skill/category page.",
            "editor": "select",
            "enum": [
              "auto",
              "search",
              "byProject",
              "byCategory"
            ],
            "enumTitles": [
              "Auto-detect from inputs",
              "Search by keyword",
              "Fetch specific projects",
              "Browse a category or skill"
            ],
            "default": "auto",
            "prefill": "search"
          },
          "query": {
            "title": "Search keyword",
            "type": "string",
            "description": "Keyword used in mode=search, e.g. `python`, `logo design`, `data entry`. Required for search mode.",
            "editor": "textfield",
            "default": "python",
            "prefill": "python"
          },
          "projectUrls": {
            "title": "Project URLs or ids",
            "type": "array",
            "description": "Full Freelancer project URLs, paths or numeric project ids used in mode=byProject, e.g. https://www.freelancer.com/projects/python/my-project or 40425363.",
            "editor": "stringList",
            "default": [],
            "prefill": []
          },
          "categoryUrls": {
            "title": "Category or skill URLs",
            "type": "array",
            "description": "Freelancer /jobs/<skill>/ URLs or skill slugs used in mode=byCategory, e.g. https://www.freelancer.com/jobs/python/ or `website-design`.",
            "editor": "stringList",
            "default": [],
            "prefill": []
          },
          "projectType": {
            "title": "Project type",
            "type": "string",
            "description": "Keep fixed-price projects, hourly projects, or both.",
            "editor": "select",
            "enum": [
              "any",
              "fixed",
              "hourly"
            ],
            "enumTitles": [
              "Any type",
              "Fixed-price projects",
              "Hourly projects"
            ],
            "default": "any",
            "prefill": "any"
          },
          "budgetMin": {
            "title": "Minimum budget (USD)",
            "type": "integer",
            "description": "Minimum fixed budget or hourly rate in USD. Use 0 for no minimum. When projectType=any, the range is applied to both types.",
            "minimum": 0,
            "maximum": 10000000,
            "default": 0,
            "prefill": 0
          },
          "budgetMax": {
            "title": "Maximum budget (USD)",
            "type": "integer",
            "description": "Maximum fixed budget or hourly rate in USD. Use 0 for no maximum. When projectType=any, the range is applied to both types.",
            "minimum": 0,
            "maximum": 10000000,
            "default": 0,
            "prefill": 0
          },
          "minBidCount": {
            "title": "Minimum bid count",
            "type": "integer",
            "description": "Only keep projects with at least this many bids. Use 0 for no minimum.",
            "minimum": 0,
            "maximum": 1000000,
            "default": 0,
            "prefill": 0
          },
          "maxBidCount": {
            "title": "Maximum bid count",
            "type": "integer",
            "description": "Only keep projects with at most this many bids. Use 0 for no maximum.",
            "minimum": 0,
            "maximum": 1000000,
            "default": 0,
            "prefill": 0
          },
          "skills": {
            "title": "Skills",
            "type": "array",
            "description": "Skill names, slugs or numeric ids to narrow the search, e.g. `Python`, `website-design` or `13`.",
            "editor": "stringList",
            "default": [],
            "prefill": []
          },
          "languages": {
            "title": "Project languages",
            "type": "array",
            "description": "ISO 639-1 language codes, e.g. `en`, `de`, `hi`, `es`.",
            "editor": "stringList",
            "default": [],
            "prefill": []
          },
          "postedAfter": {
            "title": "Posted after",
            "type": "string",
            "description": "Only keep projects posted on or after this date. ISO date or datetime, e.g. `2026-01-01` or `2026-01-01T12:00:00Z`.",
            "editor": "textfield",
            "default": "",
            "prefill": ""
          },
          "postedBefore": {
            "title": "Posted before",
            "type": "string",
            "description": "Only keep projects posted on or before this date. ISO date or datetime, e.g. `2026-12-31` or `2026-12-31T23:59:59Z`.",
            "editor": "textfield",
            "default": "",
            "prefill": ""
          },
          "includeClosed": {
            "title": "Include closed projects",
            "type": "boolean",
            "description": "Also search closed projects in search/category modes. Direct project URLs and ids always work for closed projects.",
            "default": false,
            "prefill": false
          },
          "includeDetails": {
            "title": "Fetch project details",
            "type": "boolean",
            "description": "Fetch the public project page for employer country/rating/reviews, verification flags, page title and posting text. Adds one request per project.",
            "default": true,
            "prefill": false
          },
          "includeBids": {
            "title": "Fetch bid lists",
            "type": "boolean",
            "description": "Fetch individual bids with bidder identity, amount, delivery period and proposal text. Adds one request per project.",
            "default": false,
            "prefill": false
          },
          "maxBidsPerProject": {
            "title": "Max bids per project",
            "type": "integer",
            "description": "How many individual bids to return per project when `includeBids` is enabled.",
            "minimum": 1,
            "maximum": 1000,
            "default": 20,
            "prefill": 1
          },
          "sortBy": {
            "title": "Sort results",
            "type": "string",
            "description": "Order of search/category results. Ending-soon and budget sorts are applied to the collected candidate pool.",
            "editor": "select",
            "enum": [
              "latest",
              "ending_soon",
              "lowest_budget",
              "highest_budget",
              "lowest_bids",
              "highest_bids"
            ],
            "enumTitles": [
              "Newest first",
              "Ending soon",
              "Lowest budget first",
              "Highest budget first",
              "Lowest bid count first",
              "Highest bid count first"
            ],
            "default": "latest",
            "prefill": "latest"
          },
          "maxPages": {
            "title": "Max pages",
            "type": "integer",
            "description": "Maximum listing pages to request. Each page contains up to 99 projects.",
            "minimum": 1,
            "maximum": 100,
            "default": 5,
            "prefill": 1
          },
          "maxItems": {
            "title": "Max items",
            "type": "integer",
            "description": "Hard cap on emitted project records.",
            "minimum": 1,
            "maximum": 10000,
            "default": 50,
            "prefill": 3
          }
        },
        "required": [
          "mode"
        ]
      },
      "output": {
        "actorOutputSchemaVersion": 1,
        "title": "Freelancer.com Project Budget & Bids Scraper Output",
        "description": "One record per Freelancer.com project, with fixed or hourly budget, bid count and bid list, skills, employer rating and verification, dates and flags.",
        "properties": {
          "projects": {
            "type": "string",
            "title": "Freelancer projects",
            "description": "Dataset containing Freelancer project records.",
            "template": "{{links.apiDefaultDatasetUrl}}/items"
          }
        }
      },
      "storages": {
        "dataset": {
          "actorSpecification": 1,
          "views": {
            "overview": {
              "title": "Projects",
              "transformation": {
                "fields": [
                  "title",
                  "projectType",
                  "budget",
                  "hourlyRate",
                  "bidCount",
                  "canonicalUrl"
                ]
              },
              "display": {
                "component": "table",
                "properties": {}
              }
            }
          }
        }
      },
      "environmentVariables": {}
    },
    "buildNumber": "2.0.1",
    "imageDigest": "2dd247ba08dd45a19673446940302caa591908eb14a6b2354c7634fe2b036937",
    "actVersion": {
      "sourceType": "SOURCE_FILES",
      "buildTag": "latest",
      "versionNumber": "2.0"
    },
    "usage": {
      "ACTOR_COMPUTE_UNITS": 0.011327777777777779
    }
  }
}