Freelancer Scraper — Projects, Freelancers, Bids & Contests avatar

Freelancer Scraper — Projects, Freelancers, Bids & Contests

Pricing

from $1.50 / 1,000 results

Go to Apify Store
Freelancer Scraper — Projects, Freelancers, Bids & Contests

Freelancer Scraper — Projects, Freelancers, Bids & Contests

Scrape Freelancer.com without login: projects (open now or 17M+ of history) with USD budgets and bid stats, freelancer profiles with rates, ratings and reviews, every bid with bidder and amount, and contests. Thousands of rows per minute. Not affiliated with Freelancer.com.

Pricing

from $1.50 / 1,000 results

Rating

0.0

(0)

Developer

Logiover

Logiover

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

6 days ago

Last modified

Share

Freelancer Scraper

Freelancer Scraper is a fast, no-login Freelancer.com scraper that exports projects, freelancer profiles, bids and contests from Freelancer.com to CSV, Excel, JSON or an API in seconds. Scrape Freelancer.com projects that are open for bids right now, or go back through more than 17 million historical projects; pull freelancer profiles with hourly rates, ratings, reviews, skills and verification badges from the 1.6-million-profile directory; get every bid on a project with the bidder, the amount, the delivery time and the winner; and collect design contests with prizes and entry counts.

It works as a Freelancer.com API alternative: scrape Freelancer.com projects and freelancers without login — no Freelancer.com account, no OAuth app, no API key, no cookies and no browser. You type keywords or skills, pick countries and filters, and get clean, flat rows with budgets converted to US dollars, ISO dates and one column per fact — ready for lead generation, market research, rate benchmarking and AI agents. Measured on 2026-10-13: 25,000 projects in 44 seconds, 12,000 freelancer profiles in 53 seconds, the first rows of any run in about 1–4 seconds.

Not affiliated with, endorsed by or sponsored by Freelancer Technology Pty Limited or Freelancer.com. "Freelancer" and "Freelancer.com" are trademarks of their owner and are used here only to describe the data source.


What you get

Row typeWhat it isHighlightsTypical volume
ProjectA job posted by a clientbudget in the posted currency and USD, fixed/hourly, bid count and average bid, skills, status and close reason (awarded, expired, cancelled), posted date, full description, 11 upgrade flags, local-job location, client country (with a country filter)≈5,000 open now, 17.7 million in the history
FreelancerA directory profilehourly rate (USD), country and city, rating, reviews, jobs completed, completion / on-budget / on-time %, five rating sub-scores, earnings score, all skills, exams, membership, Preferred Freelancer and verification badges, member since, photo, "About me"1.6 million profiles
BidOne proposal on a projectamount (and USD), delivery days, rank, award status (winner = awarded), sealed flag, the bidder's name, country, rate, rating, reviews and verification, plus the project's title, link, budget and bid count10–1,600+ per project
ContestA design (or other) contestprize (and USD), entries, duration, judging period, dates, status, type, skills≈180 active, 380,000+ in the history

Every row has a type column (project, freelancer, bid, contest), a stable numeric id, a direct url, scrapedAt, and searchQuery — the keyword or skill that found it. Fields that do not apply to a row (a location on a remote job, a client country without a country filter) are left out instead of being written as empty columns, so exports stay tidy.


Who uses a Freelancer.com scraper, and for what

  • B2B lead generation — agencies, SaaS vendors and recruiters build lists of active freelancers by skill, country, hourly rate and rating ("React developers in Poland, 4.8+, 50+ reviews"), or find clients who keep posting projects in their niche.
  • Market research and demand analytics — count how many projects ask for a skill per month, how budgets move, which categories grow, which countries hire. The full project history since the 2000s is reachable, newest first.
  • Rate benchmarking — compare hourly rates of freelancers by skill and country, budgets of projects, average bids and real bid amounts to price your own services or justify a rate card.
  • Competitive intelligence on bids — see who bids on projects like yours, at what price, how fast they promise delivery, and who won (awardStatus = awarded).
  • Job alerts and bidding bots — schedule the Actor every 10–60 minutes with postedAfter: "1 hour" and your skills, then push new open projects to Slack, email, a CRM or an AI agent that drafts proposals.
  • Talent sourcing and research — shortlist verified, high-completion freelancers before posting a project, or study gig-economy pricing across countries.
  • AI agents and LLM pipelines — clean JSON rows with USD-normalised money and ISO dates are easy to feed into RAG, analytics notebooks or agent tools (see MCP / AI agents below).

How it works

  1. Public JSON, no login. The Actor reads the public JSON endpoints the Freelancer.com website itself uses for anonymous visitors — no HTML parsing to break, no browser, no account.
  2. Deep history without the paging wall. Freelancer.com stops paging a project or contest search at 5,000 results, whatever total it reports. The Actor reads a big search in windows of up to 5,000, each ending where the previous one's oldest row is, and pipelines them: the next window starts as soon as the current window's last page is in, so 25,000 projects arrive in 44 seconds. Overlaps at the window edges are deduplicated by ID.
  3. Freelancer directory beyond 10,000. The directory stops at 10,000 profiles per search. When you ask for more, the search is split into hourly-rate bands (which partition the directory exactly — measured) and, where a band is still bigger, into the 30 largest countries plus one "rest of the world" slice. No profile is read twice on purpose; duplicates are removed by ID.
  4. Bids with bidder profiles. For every project found, the Actor reads its bids and joins each bidder's public profile (rating, reviews, country, rate); on projects with hundreds of bids the profiles are looked up in batches.
  5. Rate limits handled for you. Freelancer.com allows each IP about 200 project requests per minute and 1,000 per hour. The Actor reads the limit headers on every response, keeps a few requests in reserve, and moves extra work to fresh Apify Proxy IPs before a limit is hit — measured: 0 rate-limit errors in a 252-request run. Without a proxy it waits for the window to reopen instead of failing.
  6. Exact limits, honest outcomes. maxItems is exact (slots are reserved before data is written, so parallel pages can never overshoot). Rows are saved page by page, so you see results within seconds. A search that genuinely has no results ends SUCCEEDED with a plain-English explanation; a run that could not reach Freelancer.com at all ends FAILED with the reason — the two are never confused. A SUMMARY record in the run's key-value store lists requests, windows, splits, duplicates, response times and anything not found.

How to use it

  1. Click Try for free / Start on this page (an Apify account is free to create).
  2. Choose What to scrape: Projects, Freelancers, Bids or Contests.
  3. Enter search keywords and/or skills, optionally countries and the filters for that mode.
  4. Set Max results (0 = everything the search has) and press Start.
  5. Watch rows appear in the Output tab; export them as CSV, Excel, JSON, XML or HTML, or fetch them through the API.

You can also paste Freelancer.com URLs — project pages, profiles (/u/username), contests, and skill pages such as /jobs/python/, /freelancers/skills/python or /freelancers/india/python — and the Actor fetches exactly those.


Input reference

FieldTypeDefaultUsed byWhat it does
modeprojects / freelancers / bids / contestsprojectsallWhich listing to search. URLs are always fetched whatever the mode.
searchQueriesarray of strings[]allOne search per keyword; all words must match. Empty = list everything (newest first) with your filters.
skillsarray of strings[]allFreelancer.com skill names ("Python", "Logo Design", "Web Scraping") or numeric IDs. ANY skill matches. Close names are matched ("React" → React.js) and logged.
countriesarray of strings[]projects, bids, freelancersProjects/bids: the client's country (adds clientCountry). Freelancers: where they live. Names ("Germany", "UK") or ISO codes ("DE").
urlsarray of strings[]allProject URLs or IDs, profile URLs or usernames, contest URLs, skill pages. With URLs and no keywords/skills, only the URLs are scraped.
maxItemsinteger1000allTotal rows to save. 0 = no limit. Exact.
projectStatusopen / all / closedopenprojects, bidsOpen for bids now, the whole history, or closed only.
projectTypeany / fixed / hourlyanyprojects, bidsFixed-price or hourly projects.
minBudgetUsd, maxBudgetUsdinteger0projects, bidsBudget range in USD (the project's range must reach the minimum / start below the maximum).
postedAfterdate or relative–projects, bids, contests2026-01-31, or relative: 1 hour, 24 hours, 7 days, 3 months.
postedBeforedate–projects, bids, contestsUp to and including this day.
languagesarray[]projects, bidsProject language codes (en, de, es) or names.
projectUpgradesmulti-select[]projects, bidsFeatured, Urgent, Sealed, NDA, Full-time, Qualified, Recruiter, IP agreement, Private (any of them).
projectSortnewest / bids / avg_bidnewestprojects, bidsNewest first reaches the end of any search; the other two orders show the top 5,000 per search.
minHourlyRate, maxHourlyRateinteger (USD)0freelancersHourly-rate range.
minRating0–50freelancersMinimum overall rating (implies at least one review).
minReviewsinteger0freelancersMinimum number of reviews.
onlineOnlybooleanfalsefreelancersOnly freelancers online at run time.
freelancerSortbest / rating / reviews / ratebestfreelancersFreelancer.com's own ranking, highest rating, most reviews, highest rate.
maxBidsPerProjectinteger0bidsCap bids per project (0 = all), e.g. 20 to sample many projects.
contestStatusactive / allactivecontestsRunning contests or the whole history.
includeDescriptionsbooleantrueallFull descriptions and "About me" texts. Off = smaller rows (projects keep a 100-character preview).
maxConcurrencyinteger 1–5024allParallel API requests.
proxyConfigurationproxyApify ProxyallUsed only for overflow when a per-IP limit is reached. Leave as is.

Example inputs

Open Python projects (live leads):

{
"mode": "projects",
"searchQueries": ["python"],
"maxItems": 100
}

Project history for market research — every "Shopify" project of the last 90 days, USD budgets:

{
"mode": "projects",
"skills": ["Shopify"],
"projectStatus": "all",
"postedAfter": "90 days",
"maxItems": 0
}

Hourly projects from US and UK clients posted in the last 3 days:

{
"mode": "projects",
"projectStatus": "all",
"projectType": "hourly",
"countries": ["US", "United Kingdom"],
"postedAfter": "3 days",
"maxItems": 500
}

Lead list — German freelancers with 4+ stars, 10+ reviews, from $30/hour:

{
"mode": "freelancers",
"countries": ["Germany"],
"minRating": "4",
"minReviews": 10,
"minHourlyRate": 30,
"maxItems": 1000
}

Big directory export — 12,000 Python freelancers (split automatically):

{
"mode": "freelancers",
"searchQueries": ["python"],
"maxItems": 12000
}

Every bid on recent WordPress projects, with bidder profiles and the winner:

{
"mode": "bids",
"searchQueries": ["wordpress"],
"projectStatus": "all",
"maxItems": 2000
}

Design contests history:

{
"mode": "contests",
"searchQueries": ["logo"],
"contestStatus": "all",
"maxItems": 1000
}

Job alert (schedule hourly):

{
"mode": "projects",
"skills": ["Web Scraping", "Data Extraction", "Python"],
"postedAfter": "1 hour",
"minBudgetUsd": 100,
"maxItems": 0
}

Output data dictionary

Project rows (type = "project")

FieldTypeDescription
idnumberFreelancer.com project ID (stable; use for deduplication).
titlestringProject title.
urlstringProject page.
projectTypestringfixed or hourly.
statusstringopen, work_in_progress, complete, closed…
statusDetailstringWhy it is no longer open: closed_awarded, closed_expired, frozen_timeout, cancel_seller, cancel_admin, cancel_buyer… (absent while open).
currencystringPosted currency (USD, EUR, INR, AUD, GBP…).
budgetMin, budgetMaxnumberBudget range in that currency; hourly projects: per hour. budgetMax is empty for open-ended budgets.
budgetMinUsd, budgetMaxUsdnumberSame in US dollars (Freelancer.com's own exchange rate).
hourlyHoursPerWeeknumberHourly projects: expected hours per week.
bidCountnumberBids received.
bidAvg, bidAvgUsdnumberAverage bid, in the project currency and in USD.
skillsstringRequired skills, pipe-separated.
categoriesstringSkill categories.
descriptionstringFull description with paragraph breaks.
languagestringLanguage code.
postedAtstringPosting time, ISO 8601 UTC.
bidPeriodDaysnumberDays the project accepts bids.
isFeatured, isUrgent, isSealed, isNda, isFullTime, isPrivate, isRecruiterAssisted, isQualifiedOnly, isIpAgreement, isHireMe, isLocalbooleanUpgrades and project kind.
location, latitude, longitude, localJobDatestring / numberLocal (on-site) jobs only.
clientCountrystringClient's country — present when you filter projects by country.
searchQuerystringKeyword or skill that found the row.
scrapedAtstringCollection time.

Freelancer rows (type = "freelancer")

FieldTypeDescription
id, username, urlnumber / stringUser ID, username and profile link.
name, taglinestringPublic name and headline.
hourlyRateUsdnumberHourly rate in USD.
country, countryCode, city, regionstringLocation.
timezone, utcOffsetstring / numberIANA time zone and hours from UTC.
rating, reviewsnumberOverall 0–5 rating (empty without reviews) and review count.
jobsCompleted, completionRatePctnumberCompleted projects and completion rate.
onBudgetPct, onTimePctnumberShare of reviewed jobs on budget / on time.
ratingQuality, ratingCommunication, ratingExpertise, ratingProfessionalism, ratingHireAgainnumberSub-scores 0–5.
rating12Months, reviews12MonthsnumberLast 12 months.
earningsScorenumberFreelancer.com's 0–10 earnings score.
skills, skillCount, topCategoriesstring / numberAll listed skills, how many, and the three main categories.
qualificationsstringExams passed with scores.
portfolioItemsnumberPortfolio size.
membershipstringMembership plan.
isPreferredFreelancer, isVerified, identityVerified, paymentVerified, phoneVerified, emailVerified, depositMadebooleanTrust badges.
registeredAtstringMember since.
languagestringPrimary language.
avatarUrlstringProfile photo.
profileDescriptionstring"About me" text.

Bid rows (type = "bid")

FieldTypeDescription
idnumberBid ID.
projectId, projectTitle, projectUrl, projectType, projectStatusThe project the bid belongs to.
projectBudgetMinUsd, projectBudgetMaxUsd, projectBidCount, currencyProject budget in USD, its bid count and currency.
bidAmount, bidAmountUsdnumberAmount bid (hourly projects: per hour); absent on sealed bids.
deliveryDaysnumberPromised delivery time.
bidPostedAtstringWhen the bid was placed.
bidRanknumberFreelancer.com's ranking of the bid on that project.
awardStatusstringawarded marks the winner; also pending, rejected, canceled.
bidStatusstringactive, in_progress, …
milestonePercentnumberUpfront milestone requested (%).
isSealed, isHighlighted, isRetractedbooleanBid flags.
bidderId, bidderUsername, bidderName, bidderUrlWho bid.
bidderCountry, bidderCity, bidderHourlyRateUsdWhere they are and their profile rate.
bidderRating, bidderReviews, bidderJobsCompleted, bidderCompletionRatePct, bidderEarningsScorenumberTheir track record.
bidderIdentityVerified, bidderPaymentVerified, bidderRegisteredAtVerification and member since.

Contest rows (type = "contest")

FieldTypeDescription
id, title, urlContest ID, title, page.
statusstringactive, pending (judging), closed.
contestTypestringguaranteed or prepaid.
prize, currency, prizeUsdPrize, currency and USD value.
entryCountnumberEntries submitted.
durationDays, judgingPeriodDaysnumberContest length and judging window.
postedAt, endsAtstringStart and end.
skills, categories, description, languagestringContent.
isFeatured, isUrgent, isSealed, isHighlighted, isPrivate, isExtendedbooleanUpgrades.

Output examples (real rows from test runs on 2026-10-13; long texts and a few fields shortened)

Project:

{
"type": "project",
"id": 40765375,
"title": "Bitcoin Trading Strategy Backtesting",
"url": "https://www.freelancer.com/projects/data-analysis/Bitcoin-Trading-Strategy-Backtesting",
"projectType": "hourly",
"status": "open",
"currency": "GBP",
"budgetMin": 10,
"budgetMax": 15,
"budgetMinUsd": 13.24,
"budgetMaxUsd": 19.86,
"hourlyHoursPerWeek": 40,
"bidCount": 27,
"bidAvg": 15.81,
"bidAvgUsd": 20.94,
"skills": "Python | Statistics | R Programming Language | Financial Analysis | Statistical Analysis | Data Analysis | Backtesting | Cryptocurrency",
"categories": "Websites, IT & Software | Engineering & Science | Business, Accounting, Human Resources & Legal",
"description": "Cryptocurrency Trading Strategy Analysis\n\nI want to analyse a file containing historical Bitcoin price predictions…",
"language": "en",
"postedAt": "2026-10-13T10:25:11.000Z",
"bidPeriodDays": 7,
"isFeatured": false,
"isUrgent": false,
"isSealed": false,
"isNda": false,
"isFullTime": false,
"isPrivate": false,
"isRecruiterAssisted": false,
"isQualifiedOnly": false,
"isIpAgreement": false,
"isHireMe": false,
"isLocal": false,
"searchQuery": "python",
"scrapedAt": "2026-10-13T10:45:48.250Z"
}

Freelancer:

{
"type": "freelancer",
"id": 60347976,
"username": "neerajdhameliya",
"url": "https://www.freelancer.com/u/neerajdhameliya",
"name": "Niral",
"tagline": "Full Stack Developer: Flutter, React, Node, Python",
"hourlyRateUsd": 25,
"country": "India",
"countryCode": "IN",
"city": "Surat",
"region": "Gujarat",
"timezone": "Asia/Calcutta",
"rating": 4.99,
"reviews": 97,
"jobsCompleted": 103,
"completionRatePct": 97.2,
"onBudgetPct": 98.7,
"onTimePct": 99.2,
"ratingHireAgain": 4.96,
"rating12Months": 5,
"reviews12Months": 12,
"earningsScore": 8.5575,
"skills": "PHP | JavaScript | Python | Website Design | Mobile App Development | Django | eCommerce | MySQL | …",
"skillCount": 53,
"topCategories": "Websites, IT & Software | Design, Media & Architecture | Mobile Phones & Computing",
"qualifications": "Preferred Freelancer Program SLA Exam (97%) | Python Level 1 (80%) | Python - Level 2 (75%)",
"portfolioItems": 29,
"membership": "premier",
"isPreferredFreelancer": false,
"isVerified": true,
"identityVerified": true,
"paymentVerified": true,
"registeredAt": "2022-01-25T06:58:24.000Z",
"avatarUrl": "https://cdn3.f-cdn.com/ppic/272514159/logo/60347976/Cyd9V/profile_logo_Facebook_60347976.jpg",
"profileDescription": "Full stack web developer and mobile app developer building web apps, SaaS platforms, APIs and Flutter apps since 2015…",
"searchQuery": "python",
"scrapedAt": "2026-10-13T10:45:48.969Z"
}

Bid (the winning one):

{
"type": "bid",
"id": 496578552,
"projectId": 40765303,
"projectTitle": "One-page website development (Bricks Builder)",
"projectUrl": "https://www.freelancer.com/projects/graphic-design/One-page-website-development-Bricks",
"projectType": "fixed",
"projectStatus": "work_in_progress",
"projectBudgetMinUsd": 250,
"projectBudgetMaxUsd": 250,
"projectBidCount": 1,
"currency": "USD",
"bidAmount": 250,
"bidAmountUsd": 250,
"deliveryDays": 27,
"bidPostedAt": "2026-10-13T09:43:00.000Z",
"bidRank": 1,
"awardStatus": "awarded",
"bidStatus": "in_progress",
"milestonePercent": 0,
"isSealed": false,
"isHighlighted": false,
"isRetracted": false,
"bidderId": 35799422,
"bidderUsername": "sarthakdhonchak",
"bidderName": "Sarthak",
"bidderUrl": "https://www.freelancer.com/u/sarthakdhonchak",
"bidderCountry": "India",
"bidderCity": "Panipat",
"bidderHourlyRateUsd": 50,
"bidderRating": 4.88,
"bidderReviews": 193,
"bidderJobsCompleted": 205,
"bidderCompletionRatePct": 96.2,
"bidderEarningsScore": 8.5947,
"bidderIdentityVerified": true,
"bidderPaymentVerified": true,
"bidderRegisteredAt": "2019-06-15T11:46:20.000Z",
"searchQuery": "wordpress",
"scrapedAt": "2026-10-13T10:50:37.071Z"
}

Contest rows follow the same pattern (title, prize and prizeUsd, entries, dates, skills, status).


How much data can I get?

Measured on the Apify platform on 2026-10-13 with default settings (512 MB memory):

InputRows savedRun timeMemory peakNotes
Prefilled example: open "python" projects, 100 rows1002.1 s (first rows after 0.6 s)43 MB1 API request
Historical "python" projects1,0002.8 s66 MB11 requests
All open projects on Freelancer.com (maxItems: 0)5,1036.0 s76 MB2 windows
Whole project history, newest first25,00046 s104 MB252 requests, 7 windows, 6 overlap duplicates removed, 0 rate-limit errors
Freelancers "web scraping"1,0006.1 s76 MBfirst rows after 4 s
Freelancers "python" (split into rate bands and countries)12,00054 s89 MB125 requests, 115 slices
Bids on "wordpress" projects (all statuses)2,0003.6 s54 MBbidder profiles joined
Contest history1,00011.9 s51 MB
Hourly projects, US + UK clients, last 3 days113 (all that exist)1.6 s41 MBclientCountry filled
German freelancers, 4★+, 10+ reviews, $30+/h71 (all that exist)3.8 s41 MB

Depth limits, in plain words

  • Projects and contests: no practical limit — a search is read to its very end, newest first (17.7 million projects and 380,000 contests exist). Only the Most bids and Highest average bid orders stop at the top 5,000 per search, because Freelancer.com does not page further in those orders.
  • Freelancers: 10,000 per search slice; bigger searches are split by hourly rate and country automatically, so tens of thousands of profiles per run are normal. Very large slices (for example every $10/hour freelancer in India) are read to 10,000 and listed in SUMMARY.cappedSlices.
  • Bids: all bids of every project (or maxBidsPerProject). Sealed bids show the bidder but not the amount.
  • Open projects: about 5,000 at any time — the whole live market fits in one run of a few seconds.

Big runs and the "Maximum cost per run" setting. Every pay-per-event run on Apify has a maximum cost (Run options → Maximum cost per run, or maxTotalChargeUsd in the API). For 10,000+ results set it to at least results × price per result (Pricing tab) — e.g. 25,000 × $2.50 / 1,000 = $62.50. With a smaller budget the run stops cleanly at the number it covers, ends SUCCEEDED and says so in its status ("Saved 6,800 results — this run's maximum cost ($17.00) covers 6,800 results at the current price. Raise "Maximum cost per run" to get more."); it never fails, aborts or charges past your limit (SUMMARY.stoppedBy = "MAX_COST").

What you pay: a fixed price per result — see the Pricing tab (on 2026-10-13: $2.50 per 1,000 results on the Free plan, down to $1.50 per 1,000 from the Gold plan up). Compute, storage and proxies are included; there is no separate proxy bill and no subscription.


Integrations

API (curl) — run and get the rows in one call

curl -X POST "https://api.apify.com/v2/acts/logiover~freelancer-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN&format=json" \
-H "Content-Type: application/json" \
-d '{"mode":"projects","searchQueries":["python"],"maxItems":200}'

Use format=csv or format=xlsx for spreadsheets. For long runs use the asynchronous runs endpoint and fetch defaultDatasetId when the run finishes.

Node.js

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('logiover/freelancer-scraper').call({
mode: 'freelancers',
skills: ['React.js'],
countries: ['Poland'],
minRating: '4',
maxItems: 500,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.length, items[0]);

Python

from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("logiover/freelancer-scraper").call(run_input={
"mode": "bids",
"searchQueries": ["shopify"],
"projectStatus": "all",
"maxItems": 1000,
})
for bid in client.dataset(run["defaultDatasetId"]).iterate_items():
if bid.get("awardStatus") == "awarded":
print(bid["projectTitle"], bid["bidderUsername"], bid.get("bidAmountUsd"))

Make, Zapier, n8n

Use the official Apify apps/nodes: action Run an Actor with logiover/freelancer-scraper and your input JSON, then Get dataset items. Typical flows: new open project → Slack/Telegram message; new freelancer list → HubSpot/Pipedrive; weekly bid export → Google Sheets.

Google Sheets

Either connect the Apify integration for Google Sheets, or paste this into a cell to always load the latest run as CSV:

=IMPORTDATA("https://api.apify.com/v2/acts/logiover~freelancer-scraper/runs/last/dataset/items?token=YOUR_APIFY_TOKEN&format=csv")

Schedules and webhooks

Create a Schedule (for example every 30 minutes with postedAfter: "30 minutes") and add a webhook on Run succeeded to push the new rows to your endpoint, CRM or bidding assistant.

MCP / AI agents

The Actor works as a tool for AI agents through the Apify MCP server — connect Claude, ChatGPT, Cursor or any MCP client to https://mcp.apify.com/?actors=logiover/freelancer-scraper and ask in plain language: "Find open Shopify projects from US clients over $500 posted today" or "List 4.8-star Python freelancers in Germany with their rates". The flat, USD-normalised output is easy for an LLM to reason about.


Freelancer Scraper vs. the alternatives

This ActorOfficial Freelancer.com APIManual browsing / copy-paste
Account, OAuth app, API keynot neededneeded for most useneeds an account for many pages
Past the 5,000 / 10,000 paging capyes — windows and splits built inyou build itno
Rate limitshandled (reserve + IP overflow)you handle 429s–
Bids with bidder profiles and winneryes, joinedseparate calls per bid and userslow
Money in USD, ISO dates, flat columnsyesraw nested JSONno
ExportCSV, Excel, JSON, API, Sheets, webhooks, MCPcode onlynone
Speed25,000 projects in 46 sdepends on your codehours

Limits and tips

  • Client identity is not public. Freelancer.com hides who posted a project from anonymous visitors, so there is no client name, rating or contact. Filter by countries to get each project's client country.
  • No emails or phone numbers. Profiles do not expose them; use the profile URL, name, company and location for enrichment.
  • Sealed bids hide the amount (the row is still there with the bidder).
  • Budgets on hourly projects are per hour; hourlyHoursPerWeek tells you the expected weekly load.
  • Totals vs rows: Freelancer.com's counts include private and deleted items it does not return, so a search can yield slightly fewer rows than its headline total.
  • Fastest monitoring setup: projectStatus: "open", your skills, postedAfter equal to the schedule interval, maxItems: 0.
  • Fastest bulk export: maxConcurrency 24–50 and includeDescriptions: false if you do not need long texts.

Reliability and freshness

  • Live data: every run reads Freelancer.com at that moment — nothing is cached or resold from an old database.
  • Retries and IP rotation: transient errors are retried; a refused or rate-limited IP rests while work continues on another Apify Proxy IP.
  • No silent failures: empty searches succeed with an explanation, unreachable sources fail with the reason, missing URLs are listed by name, and every run writes a SUMMARY with requests, windows, splits, duplicates and response times.
  • Exact maxItems and no duplicate rows (deduplicated by ID across windows and slices); the run also respects your maximum cost per run to the result and stops cleanly there instead of failing.
  • Tested on 2026-10-13 with 25,000-project, 12,000-freelancer, 2,000-bid and 1,000-contest runs plus negative tests (nonsense keyword, invalid URL, unknown skill, deleted project).

FAQ

Do I need a Freelancer.com account, API key or cookies?

No. The Actor uses the public data Freelancer.com shows to anonymous visitors. You only need an Apify account to run it.

The Actor collects publicly visible information only — no login walls, no private messages, no personal contact details. Scraping public data is generally lawful in many jurisdictions, but you are responsible for how you use the data: respect Freelancer.com's terms, privacy laws such as GDPR/CCPA (especially for profile data used in outreach) and anti-spam rules. When in doubt, ask a lawyer.

How many projects can I scrape in one run?

As many as the search has. Projects are read newest first in windows of up to 5,000 with no total cap; a measured run saved 25,000 projects in 46 seconds. With maxItems: 0 a run continues until the search is exhausted or the run's timeout is reached.

How many freelancer profiles can I get?

Up to 10,000 per search slice, and the Actor splits bigger searches by hourly rate and country automatically — 12,000 "python" freelancers took 54 seconds. Tens of thousands per run are normal.

Why did my run stop before reaching "Max results"?

Most likely the run's maximum cost was reached. Pay-per-event runs on Apify have a cost limit (Maximum cost per run in the run options, maxTotalChargeUsd in the API); the Actor saves exactly as many results as that limit pays for, then finishes successfully with a message such as "Saved 6,800 results — this run's maximum cost ($17.00) covers 6,800 results at the current price." Raise the limit to at least results × price per result — e.g. $62.50 for 25,000 results at $2.50 per 1,000 — and run again. Other reasons are reported the same way: the search ran out of results, or the run hit its time limit.

Can I get the bids on a project and see who won?

Yes. Choose Bids mode (with a search or project URLs). Each bid row contains the amount, delivery days, the bidder's profile stats, and awardStatus — awarded marks the winning bid.

Why is the bid amount empty on some bids?

Those are sealed bids: Freelancer.com hides the amount from everyone except the client. The bidder and the rest of the row are still provided.

Can I get the client's name, email or phone?

No. Freelancer.com does not expose client identities or contact details publicly. You can get the client's country by filtering projects by country.

How do I monitor new projects for my skills?

Create a schedule (e.g. every 30 minutes) with mode: "projects", your skills, postedAfter: "30 minutes" and maxItems: 0, then add a webhook or a Make/Zapier/n8n flow to forward new rows to Slack, email or your CRM.

Are budgets converted to US dollars?

Yes. budgetMinUsd, budgetMaxUsd, bidAvgUsd, bidAmountUsd and prizeUsd use the exchange rate Freelancer.com itself attaches to each currency; the original currency and amounts are kept too. Freelancer hourly rates are stored in USD by Freelancer.com.

Which URLs can I paste?

Project pages (/projects/category/title-123 or just the numeric ID), profiles (/u/username or the bare username), contests (/contest/…-123.html), and skill pages: /jobs/python/, /freelancers/skills/python, /freelancers/india/python. Regional domains (freelancer.in, freelancer.co.uk …) work too.

What happens when a search has no results?

The run succeeds with 0 rows and a status message explaining why ("Freelancer.com has nothing matching this search" or, for open projects only, a hint to search the full history). Unknown skills, unknown countries and invalid URLs are reported by name.

What if Freelancer.com rate-limits the scraper?

The Actor reads Freelancer.com's limit headers and stops short of the limit on each IP, continuing on other Apify Proxy IPs; without a proxy it waits until the limit window reopens. Measured: a 252-request run finished with zero rate-limit errors.

Can I export to Excel or Google Sheets?

Yes — the Output tab offers CSV, Excel (XLSX), JSON, JSONL, XML and HTML. For Google Sheets use the Apify integration or the IMPORTDATA formula above.

Can AI agents use it?

Yes, through the Apify MCP server (https://mcp.apify.com/?actors=logiover/freelancer-scraper) or as a tool in LangChain, LlamaIndex, CrewAI and similar frameworks via the Apify API.

I need a field that is missing. What can I do?

Open an issue on the Issues tab with an example URL — issues are answered within 24 hours, and reasonable field requests are usually added quickly.


Changelog

  • 2026-10-13 — first release. Projects (open, closed or full history) with USD budgets and bid stats; freelancer directory with rate/country splitting past 10,000; bids with bidder profiles and award status; contests; URL input for projects, profiles, contests and skill pages; pipelined time windows (25,000 projects in 46 s); per-IP rate-limit handling with Apify Proxy overflow; exact maxItems; honest empty/failed outcomes with a SUMMARY record. Full history in the Changelog tab.

Support

Questions, bugs or feature requests: open an issue on the Issues tab — answered within 24 hours. Please include the run ID so the run can be checked.

Disclaimer

This Actor is an independent tool. It is not affiliated with, endorsed by or sponsored by Freelancer.com or Freelancer Technology Pty Limited. It collects only publicly available data; you are responsible for using that data lawfully and in line with the source's terms.