Freelancer.com Projects Scraper
Pricing
from $0.84 / 1,000 results
Freelancer.com Projects Scraper
Active freelance projects from Freelancer.com: title, full description, budget range, bid count and average bid, required skills, project type and posting time. Filter by keyword, skill or budget, with skill names resolved to the numeric ids the site needs.
Pricing
from $0.84 / 1,000 results
Rating
0.0
(0)
Developer
Ibnu Adzim
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
2
Monthly active users
3 days ago
Last modified
Categories
Share
Active freelance projects from Freelancer.com — title, full description, budget range, bid count and average bid, required skills, project type and posting time.
Why use this actor
- Type skill names, not ID numbers. Freelancer's own filter only accepts
numeric skill ids, and there are 3,483 of them. Type
PHP,Game Designorweb-scrapingand this actor looks the id up for you — and if the skill does not exist, it says so instead of returning an empty result that looks like "no work available". - Bid competition on every row. How many freelancers have already bid, and what the average bid is — the two numbers that decide whether a project is worth your time.
- The full brief, not the truncated preview the listing shows.
- Paging that actually stops. Past the end of the results the API quietly serves the same last page over and over, forever. This actor detects that and stops; a naive loop would re-export the same 99 projects indefinitely.
- The whole skill taxonomy — 3,483 skills with ids, slugs and categories — available as its own output in one extra request.
- No account, no API key, no login.
How it works
- You describe the work you want: keywords, skills, project type, budget.
- Skill names are resolved against Freelancer's live list before anything is searched.
- The actor pages through active projects, 99 per request, deduplicating as it goes, and stops when the results run out.
- Results land in your dataset as JSON, CSV or Excel, with a summary row describing the run.
Input
{"query": "python","skills": ["PHP"],"projectTypes": [],"includeProjectDetails": true,"includeSkillTaxonomy": false,"maxItems": 300,"maxPages": 5,"minRequestInterval": 0.5,"proxyConfiguration": { "useApifyProxy": true }}
| Field | Type | Description |
|---|---|---|
query | string | Free-text search. A real filter — python narrowed 5,723 active projects to 172. |
skills | array | Skill name (PHP), slug (php) or numeric id (3) — all three resolve. An unknown one is reported as an error. |
includeSkillTaxonomy | boolean | Also emit all 3,483 skills with ids, slugs and categories. One extra request. Default false. |
projectTypes | array | fixed, hourly, or empty for both. |
minAveragePrice / maxAveragePrice | integer | Bounds on the average bid for fixed-price work. |
minAverageHourly / maxAverageHourly | integer | Bounds on the average hourly bid. |
includeProjectDetails | boolean | Full description, skills, attachments and location rather than the short preview. Same number of requests either way. Default true. |
maxItems | integer | Stop after this many unique projects. 0 = no cap. Default 300. |
maxPages | integer | Request ceiling. 99 projects per page, ~5,700 active in total, so ~58 pages covers everything. Default 5. |
minRequestInterval | number | Seconds between requests. Default 0.5. |
proxyConfiguration | object | Apify Proxy. Datacenter is the default and is sufficient. |
Currency is not normalised. Projects are posted in USD, CAD, AUD, INR and others. Each row carries its own
currencyCode, and the budget filters compare raw numbers.
Output
Four record types share one dataset, told apart by recordType.
PROJECT
{"_input": "query='python'","_source": "S1-projectsapi","_scrapedAt": "2026-09-16T04:34:20Z","recordType": "PROJECT","id": 40714249,"title": "Python Script for Amazon Shift-Picking","projectUrl": "https://www.freelancer.com/projects/selenium/Python-Script-for-Amazon-Shift","type": "fixed","status": "active","frontend_project_status": "open","budgetMinimum": 250.0,"budgetMaximum": 750.0,"currencyCode": "CAD","bidCount": 67,"bidAverage": 404.33,"bidperiod": 7,"submittedAt": "2026-09-16T04:26:26Z","updatedAt": "2026-09-16T04:26:26Z","skillNames": ["JavaScript", "Python", "Linux", "Web Scraping", "Selenium", "… 4 more"],"skillIds": [9, 13, 31, 95, 116, 696, 1679, 1977, 2165],"preview_description": "I rely on Amazon's internal shift-picking portal and I'm tired of hammering the refresh ke…","description": "(full brief)","featured": false,"urgent": false,"local": false,"language": "en","employerAvailable": false,"pageNumber": 1}
All 84 of Freelancer's own fields ship alongside these.
| Field | Description |
|---|---|
id / projectUrl | Project id and a direct link. |
title / description | Title and the full brief. |
preview_description | The first ~100 characters of the brief, cut mid-word — a truncation, not a summary. |
type | fixed or hourly. |
budgetMinimum / budgetMaximum / currencyCode | The advertised budget, in the poster's own currency. |
bidCount / bidAverage | How crowded the project already is, and at what price. |
bidperiod | How many days bidding stays open. |
submittedAt / updatedAt | ISO 8601 UTC, alongside the raw unix fields. |
skillNames / skillIds | Required skills, flattened from the nested objects. |
featured / urgent / local / nonpublic | Freelancer's own listing flags. |
employerAvailable | Always false — see Known limits. |
SEARCH_SUMMARY
| Field | Description |
|---|---|
upstreamTotal | How many active projects match your filters. |
projectsReturned / pagesFetched / duplicatesDropped | What the run did. |
skillsFiltered | The skills your names resolved to, with their ids. |
stoppedBecause | max_items_reached, max_pages_reached, no_new_projects, no_more_results. |
offsetClampsPastEnd | Always true — why paging stops on "no new ids" rather than on an empty page. |
employerNotAvailableAnonymously | Always true. |
SKILL
{"recordType": "SKILL", "skillId": 3, "skillName": "PHP", "skillSlug": "php","categoryId": 1, "categoryName": "Websites, IT & Software"}
Paste skillName, skillSlug or skillId into skills.
ERROR
_error | Meaning |
|---|---|
invalid_input | Refused before any request — an unknown skill (with suggestions), a bad project type, or an inverted budget range. |
api_rejected | Freelancer refused the request itself. |
unexpected_shape | A success response without the structure this actor depends on. |
fetch_failed | Network or server trouble after retries. |
Known limits
- The employer is not public. Freelancer's API accepts a
user_detailsflag and always returns an empty users object with a null owner id to anonymous callers, so who posted a project is not available. Every row is flagged rather than carrying a field that is permanently empty. - Bids are counted, not listed. You get how many and the average; the individual bids are behind the same boundary.
- Active projects only. There is no public archive of completed work.
- 99 projects per request is the site's cap, and asking for more returns 99 without saying so.
- Currency is not converted.