Freelancer.com Projects Scraper avatar

Freelancer.com Projects Scraper

Pricing

from $0.84 / 1,000 results

Go to Apify Store
Freelancer.com Projects Scraper

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

Ibnu Adzim

Maintained by Community

Actor 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 Design or web-scraping and 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

  1. You describe the work you want: keywords, skills, project type, budget.
  2. Skill names are resolved against Freelancer's live list before anything is searched.
  3. The actor pages through active projects, 99 per request, deduplicating as it goes, and stops when the results run out.
  4. 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 }
}
FieldTypeDescription
querystringFree-text search. A real filter — python narrowed 5,723 active projects to 172.
skillsarraySkill name (PHP), slug (php) or numeric id (3) — all three resolve. An unknown one is reported as an error.
includeSkillTaxonomybooleanAlso emit all 3,483 skills with ids, slugs and categories. One extra request. Default false.
projectTypesarrayfixed, hourly, or empty for both.
minAveragePrice / maxAveragePriceintegerBounds on the average bid for fixed-price work.
minAverageHourly / maxAverageHourlyintegerBounds on the average hourly bid.
includeProjectDetailsbooleanFull description, skills, attachments and location rather than the short preview. Same number of requests either way. Default true.
maxItemsintegerStop after this many unique projects. 0 = no cap. Default 300.
maxPagesintegerRequest ceiling. 99 projects per page, ~5,700 active in total, so ~58 pages covers everything. Default 5.
minRequestIntervalnumberSeconds between requests. Default 0.5.
proxyConfigurationobjectApify 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.

FieldDescription
id / projectUrlProject id and a direct link.
title / descriptionTitle and the full brief.
preview_descriptionThe first ~100 characters of the brief, cut mid-word — a truncation, not a summary.
typefixed or hourly.
budgetMinimum / budgetMaximum / currencyCodeThe advertised budget, in the poster's own currency.
bidCount / bidAverageHow crowded the project already is, and at what price.
bidperiodHow many days bidding stays open.
submittedAt / updatedAtISO 8601 UTC, alongside the raw unix fields.
skillNames / skillIdsRequired skills, flattened from the nested objects.
featured / urgent / local / nonpublicFreelancer's own listing flags.
employerAvailableAlways false — see Known limits.

SEARCH_SUMMARY

FieldDescription
upstreamTotalHow many active projects match your filters.
projectsReturned / pagesFetched / duplicatesDroppedWhat the run did.
skillsFilteredThe skills your names resolved to, with their ids.
stoppedBecausemax_items_reached, max_pages_reached, no_new_projects, no_more_results.
offsetClampsPastEndAlways true — why paging stops on "no new ids" rather than on an empty page.
employerNotAvailableAnonymouslyAlways true.

SKILL

{"recordType": "SKILL", "skillId": 3, "skillName": "PHP", "skillSlug": "php",
"categoryId": 1, "categoryName": "Websites, IT & Software"}

Paste skillName, skillSlug or skillId into skills.

ERROR

_errorMeaning
invalid_inputRefused before any request — an unknown skill (with suggestions), a bad project type, or an inverted budget range.
api_rejectedFreelancer refused the request itself.
unexpected_shapeA success response without the structure this actor depends on.
fetch_failedNetwork or server trouble after retries.

Known limits

  • The employer is not public. Freelancer's API accepts a user_details flag 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.