Freelancer Projects Scraper
Pricing
from $7.00 / 1,000 results
Freelancer Projects Scraper
Collect active public projects from Freelancer.com and return structured records with titles, descriptions, project types, budgets, currencies, bid counts, skills and posting dates. Search by keywords or skill IDs, filter by project type and minimum budget, and optionally include full descriptions.
Pricing
from $7.00 / 1,000 results
Rating
0.0
(0)
Developer
Axiom Works
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
6 days ago
Last modified
Categories
Share
Returns: one row per Freelancer.com project with title, projectType, currency, budgetMin, budgetMax, bidCount, skills and postedAt.
Input: {"searchQueries": ["web scraping"], "projectType": "fixed", "maxItems": 50}
Best for: freelance lead lists, project-demand and budget monitoring, skill-trend research.
This Freelancer scraper and Freelancer API alternative returns active, public projects as clean JSON. One real output record:
{"id": "33925476","sourceUrl": "https://www.freelancer.com/projects/mobile-phone/SaaS-Project-SaaS-for-multi","title": "SaaS Project ( SaaS for multi-agent live chat integration with WhatsApp)","currency": "USD","budgetMin": 250,"budgetMax": 750,"bidCount": 303}
What does Freelancer Projects Scraper do?
Freelancer Projects Scraper collects active projects from Freelancer.com and returns them as structured records. You give it one or more search keywords, for example "web scraping" or "data entry", and optionally a list of Freelancer skill ids, a payment type and a minimum budget. The Actor pages through the results of each search, removes duplicates, and saves one record per project, newest first.
Every record has the project title, the description, whether it is fixed price or hourly, the currency, the budget range, how many bids have been placed, the average bid, the skills the client tagged, the category, when the project was posted, the bidding period, whether it is urgent or featured, and the language. An optional AI step adds an intent label that says whether the budget looks realistic for the described scope.
The Actor reads only public project data that anyone can see without an account. It does not log in and does not collect private information. It keeps to about one request per second, which is gentle on the site. It does not return the client's country, because anonymous project data does not include it for most projects.
People use it to build lead lists of clients who are hiring right now, to watch how demand and budgets move for a skill, to find under-priced or crowded projects, and to feed project text into their own dashboards, spreadsheets or language-model pipelines.
What data can you get?
Each project becomes one dataset item. Items are unique by id, and sourceUrl is the Freelancer.com page of the project.
| Field | Type | Description |
|---|---|---|
id | string | Freelancer project identifier |
sourceUrl | string | Project page on Freelancer.com |
title | string | Project title |
description | string | Project description, shortened to 300 characters unless the full description option is on |
projectType | string | fixed or hourly |
currency | string | Currency code of the budget, for example USD |
usdRate | number | Exchange rate from the project currency to USD |
budgetMin | number | Minimum budget in the project currency |
budgetMax | number | Maximum budget in the project currency |
bidCount | number | Number of bids placed so far |
avgBid | number | Average bid amount |
skills | array | Skill names tagged on the project |
category | string | Category of the project's first skill |
postedAt | string | ISO 8601 time the project was posted |
bidPeriodDays | number | Number of days the project accepts bids |
isUrgent | boolean | Whether the urgent upgrade is active |
isFeatured | boolean | Whether the featured upgrade is active |
language | string | Language code of the project text |
status | string | Project status, for example active |
updatedAt | string | ISO 8601 time the project was last updated |
isSealed | boolean | Whether bids are sealed |
isNda | boolean | Whether the project requires an NDA |
isFullTime | boolean | Whether the project is a full-time position |
isQualifiedOnly | boolean | Whether only qualified freelancers can bid |
intent | string | AI label: realistic, underpriced or unclear |
Some projects have no maximum budget, and projects without bids have no average bid. Those fields are returned as null rather than guessed.
How to use Freelancer Projects Scraper
- Open the Actor in Apify Console and go to the Input tab.
- Enter one or more search queries, or add skill ids.
- Choose a project type if you only want fixed price or hourly work.
- Set Max items to the number of projects you want. The run stops as soon as that many records are saved.
- Leave AI enrichment on if you want the intent label, or turn it off for raw data only.
- Click Start. Results appear in the Output tab and can be downloaded as JSON, CSV, Excel or HTML.
Freelancer returns up to 100 projects per request. The Actor requests pages in turn for each query and stops when the results run out, when it has reached the maximum number of items, or after the first 1,100 results of a very large search. Projects that appear in more than one query are saved once.
If your keywords match nothing, the run finishes with zero items and a warning in the log. It does not output placeholder records.
Skill ids are numeric. For example, 3 is PHP and 13 is Python. The skills array in the output shows skill names, so you can run a keyword search first and then narrow it down.
Input
| Field | Type | Description |
|---|---|---|
searchQueries | array | Keywords to search, for example ["web scraping", "data entry"]. Optional if you give skill ids. |
skillIds | array | Optional numeric skill ids. Projects matching any of them are returned. |
projectType | string | any, fixed or hourly. Default any. |
currencies | array of strings | Accepted currency codes, such as USD and EUR. Empty accepts all. |
maxBidCount | integer | Maximum bids, inclusive. Use 0 for unbid projects, or -1 to disable. Missing counts are excluded when enabled. |
maxBudget | number | Maximum budget in the project currency. Projects whose lowest budget is higher are dropped. Default 0, which turns the filter off. |
postedWithinHours | integer | Only projects posted within this many hours, for example 24 for the last day. Default 0, which turns the filter off. |
minBudget | number | Minimum budget in the project currency. Projects whose highest budget is lower are dropped. Default 0, which turns the filter off. |
maxItems | integer | Maximum projects to return, default 50. |
includeFullDescription | boolean | Return the complete description. Default false. |
enableAiEnrichment | boolean | Add the intent label. Default true. |
proxyConfiguration | object | Proxy settings. Direct by default, with automatic retry through the Apify datacenter proxy if a request is blocked. |
Example input:
{"searchQueries": ["web scraping", "data entry"],"skillIds": [],"projectType": "fixed","minBudget": 50,"includeFullDescription": true,"maxItems": 100}
To focus a shortlist, set currencies to ["USD"] and maxBidCount to 10. These filters combine with keywords, skills, project type, recency and budget. Only matching projects count toward the shared maxItems limit; restrictive filters may produce fewer results. Currency matching ignores letter case. A bid count is a snapshot of competition when the API responds, not a prediction of future bids.
You may omit searchQueries when supplying skillIds, for example {"skillIds":[13],"maxItems":1}. At least one nonempty keyword query or positive numeric skill ID is needed.
The minimum budget filter compares the numbers as they are, in each project's own currency. It does not convert currencies. Use the usdRate field after the run if you want to compare projects in dollars.
Output
The Output tab shows a table of projects with the main fields. The full dataset can be exported in JSON, CSV, Excel, XML or HTML, or read through the API. Example item with all fields:
{"id": "40738529","sourceUrl": "https://www.freelancer.com/projects/blender/Stylized-Modular-Game-Avatar-Creation","title": "Stylized Modular Game Avatar Creation","description": "We are hiring an experienced Stylized 3D Character Artist / Technical Character Artist to build the master avatar system for a confidential virtual workplace platform...","projectType": "fixed","currency": "USD","usdRate": 1,"budgetMin": 30,"budgetMax": 250,"bidCount": 50,"avgBid": 115.36,"skills": ["3D Rendering", "Animation", "Maya", "3D Modelling"],"category": "Design, Media & Architecture","postedAt": "2026-10-03T16:41:12.000Z","bidPeriodDays": 7,"isUrgent": false,"isFeatured": false,"language": "en","intent": "realistic"}
How much does it cost?
The Actor is charged per result: each project saved to the dataset counts as one result, and projects that also receive the AI intent label count as an enriched result. You never pay for more projects than your Max items setting. See the Pricing tab of the Actor for the current rates, and set a maximum cost per run in the run options if you want a hard limit.
Turn AI enrichment off if you only need the raw project data.
Use with AI agents (MCP)
You can call this Actor from any MCP-compatible assistant through the Apify MCP server. Add this to your client configuration:
{"mcpServers": {"apify": {"url": "https://mcp.apify.com?tools=axiomworks/freelancer-projects-scraper"}}}
Example prompts:
- "Find 30 fixed-price Freelancer projects about web scraping and list the ones with the most bids."
- "Get the newest hourly Freelancer projects for Python and show the budget range for each."
- "Search Freelancer for data entry projects with a budget above 100 and summarise the common skills."
Integrations and API
You can run the Actor from code with the Apify API clients.
Python:
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("axiomworks/freelancer-projects-scraper").call(run_input={"searchQueries": ["web scraping"], "maxItems": 50})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item["title"], item["budgetMin"], item["budgetMax"], item["currency"])
JavaScript:
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });const run = await client.actor('axiomworks/freelancer-projects-scraper').call({searchQueries: ['web scraping'],maxItems: 50,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items.length);
cURL:
curl -X POST "https://api.apify.com/v2/acts/axiomworks~freelancer-projects-scraper/run-sync-get-dataset-items" \-H "Authorization: Bearer $APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"searchQueries": ["web scraping"], "maxItems": 50}'
You can also connect the Actor to Make, Zapier, n8n, Google Sheets or webhooks, and schedule it to run daily so that new projects reach your spreadsheet or chat channel automatically.
FAQ
How many projects can I get per search? Up to the first 1,100 results of each query, newest first. Use several queries or skill ids to go broader.
Does it return the client's country? No. Anonymous project data does not include the client's country for most projects, so the Actor does not promise it.
What currency are the budgets in?
Each project has its own currency, shown in the currency field. The usdRate field gives the exchange rate to USD.
Why is a description shortened? By default the description is cut to 300 characters to keep the dataset compact. Turn on the full description option to get the whole text.
What does the intent label mean? It is produced by a third-party AI processor that reads the title, description and budget. It says whether the budget looks realistic, underpriced or unclear for the described scope. It is a rough guide, not a valuation. If the AI step is unavailable, the field is null and you are not charged for enrichment.
Do I need a proxy? Usually not. The Actor connects directly and only falls back to the Apify datacenter proxy when a request is blocked.
The run returned zero items. Why? The keywords or filters may match no active projects. Try broader keywords, remove the minimum budget or set the project type to any.
Is it legal to scrape Freelancer?
The Actor collects only public project information that is visible without logging in, and it does not touch private data or accounts. Laws and site terms differ by country and by use, so check that your use, especially any use of personal data, complies with the rules that apply to you, and read the terms of the site. This Actor is an independent tool and is not affiliated with or endorsed by Freelancer.com. This is not legal advice.
Feedback
Found a bug or missing a field? Open an issue from the Actor page in Apify Console, or send a message through the Issues tab. Feedback on new filters and fields is welcome.