Freelancer.com Project Budget & Bids Scraper
Pull Freelancer.com projects from direct links, search keywords, category pages or a user's posted-project list, with budget or hourly rate, bid count, days left, skills and description.
Input schema
Input fields, types, required flags, descriptions, defaults, and prefills come from the published definition. Prefill examples are distinct from defaults.
| Field | Type | Required | Description |
|---|---|---|---|
mode | string | required | 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. |
query | string | optional | Keyword used in mode=search, e.g. `python`, `logo design`, `data entry`. Required for search mode. |
projectUrls | array | optional | 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. |
Show all input fields
| Field | Type | Required | Description |
|---|---|---|---|
mode | string | required | 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. |
query | string | optional | Keyword used in mode=search, e.g. `python`, `logo design`, `data entry`. Required for search mode. |
projectUrls | array | optional | 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. |
categoryUrls | array | optional | Freelancer /jobs/<skill>/ URLs or skill slugs used in mode=byCategory, e.g. https://www.freelancer.com/jobs/python/ or `website-design`. |
projectType | string | optional | Keep fixed-price projects, hourly projects, or both. |
budgetMin | integer | optional | Minimum fixed budget or hourly rate in USD. Use 0 for no minimum. When projectType=any, the range is applied to both types. |
budgetMax | integer | optional | Maximum fixed budget or hourly rate in USD. Use 0 for no maximum. When projectType=any, the range is applied to both types. |
minBidCount | integer | optional | Only keep projects with at least this many bids. Use 0 for no minimum. |
maxBidCount | integer | optional | Only keep projects with at most this many bids. Use 0 for no maximum. |
skills | array | optional | Skill names, slugs or numeric ids to narrow the search, e.g. `Python`, `website-design` or `13`. |
languages | array | optional | ISO 639-1 language codes, e.g. `en`, `de`, `hi`, `es`. |
postedAfter | string | optional | Only keep projects posted on or after this date. ISO date or datetime, e.g. `2026-01-01` or `2026-01-01T12:00:00Z`. |
postedBefore | string | optional | Only keep projects posted on or before this date. ISO date or datetime, e.g. `2026-12-31` or `2026-12-31T23:59:59Z`. |
includeClosed | boolean | optional | Also search closed projects in search/category modes. Direct project URLs and ids always work for closed projects. |
includeDetails | boolean | optional | Fetch the public project page for employer country/rating/reviews, verification flags, page title and posting text. Adds one request per project. |
includeBids | boolean | optional | Fetch individual bids with bidder identity, amount, delivery period and proposal text. Adds one request per project. |
maxBidsPerProject | integer | optional | How many individual bids to return per project when `includeBids` is enabled. |
sortBy | string | optional | Order of search/category results. Ending-soon and budget sorts are applied to the collected candidate pool. |
maxPages | integer | optional | Maximum listing pages to request. Each page contains up to 99 projects. |
maxItems | integer | optional | Hard cap on emitted project records. |
Download the published input schema
View complete JSON
{
"description": "Collect Freelancer.com projects by keyword, category or direct project URL/id, with fixed/hourly budgets, skills, languages, bids, employer details and dates.",
"properties": {
"budgetMax": {
"default": 0,
"description": "Maximum fixed budget or hourly rate in USD. Use 0 for no maximum. When projectType=any, the range is applied to both types.",
"maximum": 10000000,
"minimum": 0,
"prefill": 0,
"title": "Maximum budget (USD)",
"type": "integer"
},
"budgetMin": {
"default": 0,
"description": "Minimum fixed budget or hourly rate in USD. Use 0 for no minimum. When projectType=any, the range is applied to both types.",
"maximum": 10000000,
"minimum": 0,
"prefill": 0,
"title": "Minimum budget (USD)",
"type": "integer"
},
"categoryUrls": {
"default": [],
"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",
"prefill": [],
"title": "Category or skill URLs",
"type": "array"
},
"includeBids": {
"default": false,
"description": "Fetch individual bids with bidder identity, amount, delivery period and proposal text. Adds one request per project.",
"prefill": false,
"title": "Fetch bid lists",
"type": "boolean"
},
"includeClosed": {
"default": false,
"description": "Also search closed projects in search/category modes. Direct project URLs and ids always work for closed projects.",
"prefill": false,
"title": "Include closed projects",
"type": "boolean"
},
"includeDetails": {
"default": true,
"description": "Fetch the public project page for employer country/rating/reviews, verification flags, page title and posting text. Adds one request per project.",
"prefill": false,
"title": "Fetch project details",
"type": "boolean"
},
"languages": {
"default": [],
"description": "ISO 639-1 language codes, e.g. `en`, `de`, `hi`, `es`.",
"editor": "stringList",
"prefill": [],
"title": "Project languages",
"type": "array"
},
"maxBidCount": {
"default": 0,
"description": "Only keep projects with at most this many bids. Use 0 for no maximum.",
"maximum": 1000000,
"minimum": 0,
"prefill": 0,
"title": "Maximum bid count",
"type": "integer"
},
"maxBidsPerProject": {
"default": 20,
"description": "How many individual bids to return per project when `includeBids` is enabled.",
"maximum": 1000,
"minimum": 1,
"prefill": 1,
"title": "Max bids per project",
"type": "integer"
},
"maxItems": {
"default": 50,
"description": "Hard cap on emitted project records.",
"maximum": 10000,
"minimum": 1,
"prefill": 3,
"title": "Max items",
"type": "integer"
},
"maxPages": {
"default": 5,
"description": "Maximum listing pages to request. Each page contains up to 99 projects.",
"maximum": 100,
"minimum": 1,
"prefill": 1,
"title": "Max pages",
"type": "integer"
},
"minBidCount": {
"default": 0,
"description": "Only keep projects with at least this many bids. Use 0 for no minimum.",
"maximum": 1000000,
"minimum": 0,
"prefill": 0,
"title": "Minimum bid count",
"type": "integer"
},
"mode": {
"default": "auto",
"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"
],
"prefill": "search",
"title": "Mode",
"type": "string"
},
"postedAfter": {
"default": "",
"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",
"prefill": "",
"title": "Posted after",
"type": "string"
},
"postedBefore": {
"default": "",
"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",
"prefill": "",
"title": "Posted before",
"type": "string"
},
"projectType": {
"default": "any",
"description": "Keep fixed-price projects, hourly projects, or both.",
"editor": "select",
"enum": [
"any",
"fixed",
"hourly"
],
"enumTitles": [
"Any type",
"Fixed-price projects",
"Hourly projects"
],
"prefill": "any",
"title": "Project type",
"type": "string"
},
"projectUrls": {
"default": [],
"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",
"prefill": [],
"title": "Project URLs or ids",
"type": "array"
},
"query": {
"default": "python",
"description": "Keyword used in mode=search, e.g. `python`, `logo design`, `data entry`. Required for search mode.",
"editor": "textfield",
"prefill": "python",
"title": "Search keyword",
"type": "string"
},
"skills": {
"default": [],
"description": "Skill names, slugs or numeric ids to narrow the search, e.g. `Python`, `website-design` or `13`.",
"editor": "stringList",
"prefill": [],
"title": "Skills",
"type": "array"
},
"sortBy": {
"default": "latest",
"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"
],
"prefill": "latest",
"title": "Sort results",
"type": "string"
}
},
"required": [
"mode"
],
"schemaVersion": 1,
"title": "Freelancer Project Scraper Input",
"type": "object"
}
Output schema
Published result links and storage locations. This schema is not an exhaustive contract for every field in a dataset record.
| Field | Type | Required | Description |
|---|---|---|---|
projects | string | optional | Dataset containing Freelancer project records. |
Download the published output schema
View complete JSON
{
"actorOutputSchemaVersion": 1,
"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": {
"description": "Dataset containing Freelancer project records.",
"template": "{{links.apiDefaultDatasetUrl}}/items",
"title": "Freelancer projects",
"type": "string"
}
},
"title": "Freelancer.com Project Budget & Bids Scraper Output"
}
Dataset schema
Published dataset views and any declared field definitions. A view can select only a subset of the returned record fields.
Download the published dataset schema
View complete JSON
{
"actorSpecification": 1,
"views": {
"overview": {
"display": {
"component": "table",
"properties": {}
},
"title": "Projects",
"transformation": {
"fields": [
"title",
"projectType",
"budget",
"hourlyRate",
"bidCount",
"canonicalUrl"
]
}
}
}
}
Key-value schema
Published key-value store definitions, when provided by this build.
This definition is not present in the default published build. See the published README for available documentation.
Published README
Read the full published documentation
Freelancer.com Project Budget & Bids Scraper
Freelancer.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.
What this actor does
- 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.
- Fixed and hourly projects: budgets stay separate, with native-currency and USD values on every record.
- Real filters: project type, budget range, skills, languages, bid-count range and posting-date range.
- Bid intelligence: bid count and average bid always; an optional full bid list with bidder username, country, amount, delivery period and proposal text.
- Employer context: country, city, rating, review count, member-since date and payment/email/phone verification flags when the public project page publishes them.
- Closed projects: search them with
includeClosed, or fetch any closed project directly by URL or id. - Clean output: empty fields are omitted at every depth, so you never have to defend against
null.
Output per project
projectId— Freelancer project idtitle,pageTitle,slug— project title, page title and URL slugsourceUrl,canonicalUrl— where the project was found and its canonical project URLstatus,subStatus,frontendStatus— project status as publishedprojectType—fixedorhourlybudget— fixed-price budget display string, e.g.$250-750 USDbudgetMinMax— fixed budget as{min, max, currency}budgetUsdMin,budgetUsdMax— fixed budget converted to USDhourlyRate— hourly rate display string, e.g.$15-30 USD / hrhourlyRateMinMax— hourly rate as{min, max, currency}hourlyRateUsdMin,hourlyRateUsdMax— hourly rate converted to USDcurrency,currencySymbol— project currencypaymentType— fixed-price or hourly label from the pagebidCount— number of bids receivedaverageBid— average bid in the project's currencyaverageBidUsd— average bid converted to USDbids— individual bids whenincludeBidsis 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 flagdescription— full project briefskills— skill names attached to the projectskillSlugs,skillIds,categories— skill slugs, numeric ids and top-level categoriesemployer— public client details: country, country code, city, rating, review count, member-since date and verification flagspostedAt,updatedAt,endsAt,latestActivityAt— ISO 8601 datesbidPeriodDays,daysLeft— bidding window and days remainingpostedText— relative posting text from the project page, when availablehourlyCommitmentHours,hourlyCommitmentInterval,hourlyDuration— hourly project commitmentisFeatured,isUrgent,isNda,isSealed,isNonpublic,isFulltime,isLocal,isProjectManagement,isRecruiter— project flagsprojectCountry,projectCity— published project location, when availablemarketplaceRating,marketplaceReviewCount,marketplaceDescription— marketplace rating block when the page carries itrecordType: "project",scrapedAt— record type and scrape timestamp
Input
| Field | Type | Default | Description |
|---|---|---|---|
mode |
string | auto |
auto, search, byProject or byCategory |
query |
string | python |
Keyword for mode=search |
projectUrls |
array | [] |
Project URLs, paths or numeric ids for mode=byProject |
categoryUrls |
array | [] |
/jobs/<skill>/ URLs or skill slugs for mode=byCategory |
projectType |
string | any |
any, fixed or hourly |
budgetMin |
integer | 0 |
Minimum fixed budget or hourly rate in USD; 0 = no minimum |
budgetMax |
integer | 0 |
Maximum fixed budget or hourly rate in USD; 0 = no maximum |
minBidCount |
integer | 0 |
Minimum number of bids; 0 = no minimum |
maxBidCount |
integer | 0 |
Maximum number of bids; 0 = no maximum |
skills |
array | [] |
Skill names, slugs or numeric ids |
languages |
array | [] |
ISO 639-1 language codes, e.g. en, de, hi |
postedAfter |
string | – | ISO date/datetime lower bound on posting time |
postedBefore |
string | – | ISO date/datetime upper bound on posting time |
includeClosed |
boolean | false |
Include closed projects in search/category results |
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 |
includeBids |
boolean | false |
Fetch individual bids |
maxBidsPerProject |
integer | 20 |
Maximum bids returned per project (1–1000) |
sortBy |
string | latest |
latest, ending_soon, lowest_budget, highest_budget, lowest_bids or highest_bids; ending-soon and budget sorts order the collected pool |
maxPages |
integer | 5 |
Maximum listing pages (99 projects per page) |
maxItems |
integer | 50 |
Hard cap on emitted projects (1–10000) |
Example: keyword search with a fixed budget
{
"mode": "search",
"query": "python",
"projectType": "fixed",
"budgetMin": 250,
"budgetMax": 1500,
"languages": ["en"],
"maxItems": 100
}
Example: hourly projects with low competition
{
"mode": "search",
"query": "react",
"projectType": "hourly",
"budgetMin": 20,
"budgetMax": 80,
"maxBidCount": 10,
"sortBy": "lowest_bids",
"maxItems": 50
}
Example: browse a skill page and include bids
{
"mode": "byCategory",
"categoryUrls": ["https://www.freelancer.com/jobs/logo-design/"],
"includeBids": true,
"maxBidsPerProject": 10,
"maxItems": 25
}
Example: fetch specific projects, including a closed one
{
"mode": "byProject",
"projectUrls": [
"https://www.freelancer.com/projects/python/cricket-prediction-rewards-bot",
"40425363"
],
"includeDetails": true,
"includeBids": true,
"maxBidsPerProject": 20
}
Use cases
- Freelance demand monitoring — track project volume and budgets across skills and categories
- Pricing research — compare fixed budgets and hourly rates across currencies in USD
- Bid-competition analysis — find low-bid, high-budget projects and inspect who is bidding
- Employer intelligence — see client country, rating, reviews and verification flags before bidding
- Market and trend research — export project descriptions, skills and posting dates for analysis
- Opportunity alerts — schedule keyword or category searches and filter by budget, bids and age
FAQ
Do I need a Freelancer.com account, cookies or a proxy? No. The actor reads public project data and runs without login, cookies or proxy setup. It chooses a working connection automatically.
Why is the employer missing from some records? Freelancer 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.
What does includeDetails change?
The 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.
How many bids can I get per project?
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.
Why do some bids show an amount of 0?
Freelancer 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.
Why don't closed projects appear first when includeClosed is on?
The 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.
What is the difference between budget and hourlyRate?
Fixed-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.
Are budgets converted to USD?
Yes. budgetMinMax and hourlyRateMinMax keep the project's own currency, while budgetUsdMin, budgetUsdMax, hourlyRateUsdMin, hourlyRateUsdMax and averageBidUsd are converted to USD. Filters use USD.
Can I search closed projects?
Yes. Set includeClosed to true in search or category mode. Direct project URLs and ids work for closed projects without any extra setting.
Why do I get fewer rows than maxItems?
A 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.
Why are some fields missing from a record?
The 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.
How fresh is the data?
Each run reads the live project listing. Bid counts and statuses can change quickly; scrapedAt records when the row was collected.
Is this affiliated with Freelancer.com? No. This is an independent, third-party actor that reads public Freelancer.com project data. It is not affiliated with or endorsed by Freelancer.com.
Python quickstart
Use a schema-derived input and the Python standard library to start a run. An Apify account and token are required for execution.
Source build bbzK5whhDLh1yi1Dc. Documentation is regenerated from the default published build; private drafts are not included.