Request a tool
All toolsAutomationsGuidesMCP serverRequest a toolPlatformsCategories
Freelancer.com Scraper icon

Freelancer.com Scraper

Scrape Freelancer.com projects with no account. Rows carry fixed or hourly budgets, bid counts, average bid, skills, client country and rating.

188 runs on Apify $0.00045 per project ($0.45 / 1,000)
Run this in the cloudRun on Apify →

Developer & Research Tools

How it works

  1. 1
    Open it on Apify

    Hit Run on Apify — it opens the tool in the cloud, no install.

  2. 2
    Set the inputs

    Adjust searchQuery, skills, projectType (sensible defaults are pre-filled).

  3. 3
    Click Run

    The tool runs on Apify’s cloud and collects the data for you.

  4. 4
    Export the results

    Download as JSON, CSV or Excel, or pipe straight into your app, Google Sheets, or an AI agent.

Pricing

$0.00045 per project = $0.45 per 1,000

You are charged forWhenPrice
Project returnedCharged once per genuine Freelancer.com project row: title, full description, fixed or hourly budget with currency and USD conversion, bid count, average bid, skills, client country, city, rating, review count and verification flags, listing upgrade flags, posted date and project URL. Sample rows, diagnostic rows and projects removed by your own filters are never charged.$0.00045

Pay-per-event pricing: you are billed per result, not per subscription. Billing is handled by Apify on your own account. These are the live Apify store prices, in effect since 2026-08-08, and they are what you are actually charged.

Inputs

FieldWhat it doesType
searchQueryFree-text search across active Freelancer.com projects, e.g. "wordpress", "logo design", "python scraper". Leave empty to take the newest projects across the whole site.string
skillsOnly return projects tagged with these Freelancer skills. Use the exact skill name shown on the site ("PHP", "Logo Design", "Data Entry"), its URL slug ("web-design") or its numeric skill id. This is a real server-side filter, so it is the cheapest way to narrow a search.array
projectTypeFixed-price projects quote a total budget; hourly projects quote an hourly rate. Every row states which in its budgetType field.string
upgradesPaid listing upgrades. These are rare, in a 994-project sample, featured 0.5%, sealed 0.5%, urgent 0.6%, NDA 0.4%, so selecting one will return very few rows.array
maxItemsHard cap on rows returned. You are charged only for rows you receive. Freelancer's own API stops paging at roughly 5,000 projects per search, so that is the practical ceiling for one run.integer
includeClientDetailsAdds the client's country, city, star rating, review count, member-since date and verification flags. This costs one extra request per project, so a large run is slower with it on. Country is present on ~100% of projects; a star rating only on ~32%, because most Freelancer clients have no reviews yet.boolean
clientCountriesKeep only projects whose client is in one of these countries. Accepts ISO codes ("US", "GB", "AU") or full names ("United States"). Filtered here, after the client lookup. Freelancer's own countries[] parameter is accepted by the API but does nothing. Dropped projects are never charged.array
minBudgetUsdKeep only projects whose budget range reaches this amount. Compared in USD using the exchange rate Freelancer returns with each project, so an INR or GBP project is converted before comparison. Applied here rather than server-side, because Freelancer's max_avg_price parameter is a relevance hint, not a filter. Dropped projects are never charged.integer
maxBudgetUsdKeep only projects whose budget range starts at or below this amount, in USD.integer
minBidsKeep only projects with at least this many bids.integer
maxBidsKeep only projects with at most this many bids. Useful for finding fresh, low-competition work: set it to 5.integer
sortByNewest first is Freelancer's default ordering. Most bids first surfaces the busiest projects.string

What you get

A structured dataset — each result includes fields like:

titleprojectTypebudgetMinbudgetMaxbudgetCurrencybidCountaverageBidskillsclientCountryclientRatingpostedAtprojectUrl

Export every run as JSON, CSV or Excel, or send it to your app, a database, Google Sheets, or an AI agent.

Related tools in Developer & Research Tools

Other ready-to-run tools in the same category — all pay-per-use on the Apify cloud.

GitHub Scraper iconDeveloper & Research Tools

GitHub Scraper

Search GitHub repos and users: stars, forks, language, topics, licence, plus user bio, company and followers. No token needed. $0.90 per 1,000 rows.

18 use cases

Stack Overflow / Stack Exchange Scraper iconDeveloper & Research Tools

Stack Overflow / Stack Exchange Scraper

Search Stack Overflow and Stack Exchange by keyword or tag. Score, answer count, views, reputation and body text. $2 per 1,000 questions.

2 use cases

Package Registry Scraper (npm + PyPI) iconDeveloper & Research Tools

Package Registry Scraper (npm + PyPI)

Get npm and PyPI package metadata as JSON. Version, license, author, repo, keywords and npm monthly downloads. $2 per 1,000 packages.

2 use cases

arXiv Scraper iconDeveloper & Research Tools

arXiv Scraper

Search arXiv papers by title, author, abstract or category. Get full abstracts, authors, categories, DOI, dates and PDF links. $2 per 1,000 papers.

2 use cases

OpenAlex Scholarly Works Scraper iconDeveloper & Research Tools

OpenAlex Scholarly Works Scraper

Search 250M+ OpenAlex papers with no API key. Get titles, authors, venue, year, citations, DOI, OA links and full abstracts. $2.00 per 1,000 papers.

2 use cases

Crossref Scholarly Works Scraper iconDeveloper & Research Tools

Crossref Scholarly Works Scraper

Search 150M+ papers on Crossref: DOI, title, authors, journal, publisher, date, citations and abstract. No API key. $1.00 per 1,000 works.

2 use cases

See all Developer & Research Tools →

Freelancer.com Scraper: open projects with budgets, bid counts and client data

Freelancer.com works on bidding. The client names a budget, freelancers bid against it, and the site publishes how many have bid and what they are asking on average. All three land on every row, next to the skills, the client's country and rating, and the full project description.

One thing to get straight before you sort anything: on an hourly project, budgetMin and budgetMax are an hourly rate, not a total. budgetType says which on every row, and mixing the two is the easiest way to produce a nonsense average.

InputA keyword, skills, and budget or bid filters
OutputOne row per open project
Ceiling5,000 projects per run
Account neededNone, and no API key
Price$0.45 per 1,000 projects, flat on every plan

🔍 What Freelancer.com Scraper does

It searches the open projects, applies your filters, and writes one row each. Skills are a real server-side filter, so narrowing by PHP or Logo Design is the cheapest and fastest way to cut a search down. Budget, bid-count and client-country filters are applied afterwards on the rows themselves, and anything dropped by them is not charged.

Budgets come back in the project's own currency and converted to USD, using the exchange rate Freelancer returns with each project. That matters because the site is genuinely multi-currency, and sorting a mixed export on budgetMin without the USD columns gives you a meaningless ranking.

Client details are on by default: country, city, star rating, review count, member-since date and the verification flags. That costs one extra lookup per project, so a big run is slower with them on.

📥 What you give it

None of these fields has a default. The input form arrives pre-filled with a working example, and those values are starting points you can clear.

{
  "searchQuery": "wordpress",
  "skills": ["PHP"],
  "projectType": "fixed",
  "maxBids": 5,
  "minBudgetUsd": 250,
  "maxItems": 200
}
FieldForm starts atWhat it is
searchQuerywordpressFree text across open projects. Clear it to take the newest projects site-wide.
skillsemptyOnly projects tagged with these. Use the exact skill name, its URL slug like web-design, or its numeric id. This is the one filter Freelancer applies for you.
projectTypeanyfixed or hourly.
upgradesemptyfeatured, sealed, urgent, NDA. These are rare, well under 1% of projects each, so picking one returns very few rows.
maxItems50Hard cap on rows, up to 5,000.
includeClientDetailsonAdds the client's country, city, rating, review count, member-since date and verification flags.
clientCountriesemptyKeep only projects whose client is in one of these. ISO codes like US or full names. Applied after the client lookup, so it is slower than filtering on skills.
minBudgetUsd, maxBudgetUsdnoneBudget bounds in USD, compared after conversion.
minBids, maxBidsnoneBid-count bounds. Set maxBids to 5 to find work nobody has quoted on yet.
sortBynewestnewest or bids.
proxyConfigurationoffOptional. Your own servers are used exactly as given.

📤 What you get back

A real row, with the description cut short:

{
  "projectId": 40721965,
  "title": "Bilingual Real Estate Cold Caller",
  "description": "I need someone who can cold call using a U.S. line for several hours each weekday, speak confidently with residential homeowners in both English and Spanish, and secure firm Zoom listing appointments for me...",
  "projectUrl": "https://www.freelancer.com/projects/real-estate/Bilingual-Real-Estate-Cold-Caller",
  "projectType": "hourly",
  "budgetType": "hourly_rate",
  "budgetMin": 15,
  "budgetMax": 25,
  "budgetCurrency": "USD",
  "budgetMinUsd": 15,
  "budgetMaxUsd": 25,
  "bidCount": 4,
  "averageBid": 17.5,
  "averageBidUsd": 17.5,
  "hourlyCommitmentHours": 40,
  "hourlyCommitmentInterval": "week",
  "hourlyDuration": "unspecified",
  "skills": ["Sales", "CRM", "Real Estate", "Spanish Translator", "Customer Service", "Lead Generation", "Appointment Setting", "Cold Calling"],
  "skillIds": [64, 147, 443, 521, 671, 1683, 1694, 3415],
  "categories": ["Sales & Marketing", "Translation & Languages", "Data Entry & Admin"],
  "isSealed": false, "isFeatured": false, "isUrgent": false, "isNda": false,
  "isFulltime": false, "isPremium": false, "isRecruiter": false, "isLocal": false,
  "bidsHidden": false,
  "status": "open",
  "postedAt": "2026-09-20T01:27:46.000Z",
  "updatedAt": "2026-09-20T07:28:23.000Z",
  "bidPeriodDays": 7,
  "bidsCloseAt": "2026-09-27T01:27:46.000Z",
  "language": "en",
  "projectCountry": null,
  "projectCity": null,
  "clientDetailsFetched": true,
  "clientCountry": "United States",
  "clientCountryCode": "US",
  "clientCity": "DORAL",
  "clientRating": 5,
  "clientReviewCount": 4,
  "clientMemberSince": "2022-01-03T01:31:14.000Z",
  "clientPaymentVerified": true,
  "clientEmailVerified": true,
  "clientPhoneVerified": true,
  "clientProfileComplete": true,
  "clientDepositMade": true,
  "scrapedAt": "2026-09-20T07:45:12.637Z"
}

The categories list is cut short; the real row carries five.

FieldWhat it is
budgetMin, budgetMaxWhat the client asked for. A total on a fixed project and an hourly rate on an hourly one. Read budgetType before you compare two rows. budgetMax is missing on open-ended budgets.
averageBidWhat freelancers are actually asking, which is often nowhere near the budget. This is the number that tells you the going rate.
budgetMinUsd, budgetMaxUsd, averageBidUsdThe same figures converted, so a mixed-currency export sorts properly.
bidCountnull when nobody has bid yet. The bid filters read that as zero.
clientRatingOnly about a third of projects have one, because most clients have never been reviewed. Read clientReviewCount first: a zero-star client with zero reviews is a new client, not a bad one.
clientPaymentVerified, clientDepositMadeThe two flags worth more than the rating when you are deciding whether a client is real.
bidsCloseAtWhen bidding ends, derived from postedAt and bidPeriodDays.
projectCountry, projectCitySet only on the small share of projects that need somebody on site.
skills, skillIdsNames and Freelancer's numeric ids. Feed the ids straight back into skills on the next run.

🧾 Reading the output

RowHow to spot itCharged
A projectIt has a projectIdyes
The sample row_sample: true and charged: falseno
A diagnosticAn errorCode and no projectIdno

Real project rows carry no charged field at all, so filter on _sample being absent rather than on charged being true.

errorCodeWhat it means
NO_RESULTSThe search ran and matched nothing. Loosen a filter or widen the keyword.
UNKNOWN_SKILLA skill name could not be matched. Use the exact name from the site, its slug, or its id.
SKILL_LOOKUP_FAILEDThe skill list could not be read. Re-run it.
API_ERRORFreelancer refused the request.
HTTP_ERRORFreelancer was unreachable or answered badly.
BAD_JSONThe answer could not be read. Re-run it.

▶️ How to run it

1. Open Freelancer.com Scraper and click Try for free. 2. Type a term into Keyword, or clear it to take the newest projects site-wide. 3. Add Skills if you know them. That is the filter that does the most work. 4. Set Maximum projects, then click Start. 5. Download the dataset as JSON, CSV or Excel, or read it from the Apify API.

💰 How much does it cost?

$0.45 per 1,000 projects. Flat on every Apify plan, no volume tiers.

You pay per project row you receive. Projects dropped by the budget, bid-count or client-country filters are not charged, the sample row is not charged, and diagnostic rows are not charged. Client details do not add a second charge, they just make the run slower.

💡 What people use it for

  • Finding fresh work nobody has quoted on: maxBids at 5, sorted newest, on a schedule.
  • Reading the real going rate for a skill, by comparing averageBidUsd against budgetMinUsd across

a few hundred projects rather than guessing.

  • Filtering for clients who have actually paid before, using clientPaymentVerified and

clientDepositMade instead of a star rating most clients do not have.

  • Watching demand for a skill over time, by running the same skill filter weekly and counting rows.
  • Building a lead list of clients in one country who post the kind of work you do.

🚧 What it does not do

  • Open projects only. No completed or awarded work, and no history.
  • No bid lists. You get the count and the average, not who bid or what each of them said.
  • No contests and no freelancer profiles. Projects only.
  • About 5,000 projects is as deep as one search goes. Use narrower searches rather than a bigger

number.

  • Most clients have no rating, so a rating filter of your own would throw away most of the

market. The verification flags are the better signal.

  • Budget filters need a USD conversion. A project Freelancer gives no exchange rate for is

dropped by those filters rather than guessed at.

  • Listing upgrades are rare. Filtering on featured, sealed, urgent or NDA will return

very little.

  • Rows are a snapshot. Bid counts move fast and bidding closes. bidsCloseAt tells you when.

🧭 Which work-listings scraper do you need?

If you wantUse
Open freelance projects with budgets and bid countsThis one
French job postings with salariesHelloWork Jobs Scraper
Germany, Austria and SwitzerlandXING Jobs Scraper
Germany, Austria, Netherlands and BelgiumStepStone Jobs Scraper
Startup roles from WellfoundWellfound Jobs Scraper

❓ Questions people ask

Do I need a Freelancer account? No. Everything here is public project data.

Why is a $15 to $25 budget showing on a project that will take weeks? Because it is hourly. Check budgetType, which reads hourly_rate on those rows.

Why does the average bid sit above the budget? That happens a lot. The budget is what the client hoped for and averageBid is what the market is asking. That gap is the most useful thing on the row.

Why do so many clients have a zero rating? Because most of them have never been reviewed. clientReviewCount tells you which zeros are new clients rather than bad ones.

What is the fastest way to narrow a search? Skills. Freelancer applies that one itself, so it cuts the work rather than just cutting the output.

Is this legal? These are public project listings. Check Freelancer's terms and your own local rules before using the output commercially. Apify's write-up on scraping and the law is a good starting point, and we are not lawyers.

🆘 If something breaks

Open the Issues tab on the actor page. Send the keyword or skill and the run ID. If you got a diagnostic row, its errorCode usually names the problem on its own.