Freelancer.com Projects Scraper
Pricing
Pay per event
Freelancer.com Projects Scraper
Scrape Freelancer.com project listings by skill/category — title, full description, skill tags, average bid, bid count, days left, and URL. Structured JSON/CSV output for freelance-market research, competitor pricing benchmarks, and lead-gen tooling. No login required. Freelance job and gig data.
Pricing
Pay per event
Rating
0.0
(0)
Developer
DevilScrapes
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Freelancer.com Projects Scraper
$4.20 / 1 000 results ($0.20 per run + $0.004 / result) — pay only for results, no credit card to try.
Pull structured project rows straight off Freelancer.com's public project-search pages, by skill or category — no login, no browser, no API key. We do the dirty work so your dataset stays clean.
🔥 What this scrapes
Freelancer.com's /jobs/<skill> search pages list open projects for a given
skill or category — title, full description, skill tags, the current average
bid, bid count, and days left to bid. This Actor turns that into typed,
Pydantic-validated dataset rows you can export straight to JSON or CSV.
✨ Features
- 🎯 Search by any skill or category —
python,react,wordpress,logo-design, anything that maps tofreelancer.com/jobs/<skill>. - 📄 Multi-page, per-skill — set how many pages to fetch per skill; server-side
pagination confirmed live (
/jobs/<skill>/2returns a fresh page of projects). - 🧊 Clean, typed rows — Pydantic-validated, ISO-8601 timestamps, stable field names.
- 🛡️ We rotate browser fingerprints (curl-cffi impersonation — Chrome / Firefox / Safari) so the target sees real-browser TLS, not Python.
- 🔁 We retry with exponential backoff on
408 / 429 / 503 / 504and honourRetry-After. Up to 5 attempts per page. - 🌐 Datacenter proxy pinned to a country — Freelancer.com localises currency by exit IP, so we pin the exit and flag any row whose currency doesn't match.
- 🧱 Per-skill fault isolation — one bad or blocked skill never stops the others. A skill the site doesn't recognise finishes as a clean zero-row result, not a crash.
- 💰 You pay only for results that land. No data → no charge (only the small
actor-startwarm-up fee).
🎯 Use cases
- Freelance-market researchers benchmarking demand and pricing across skills.
- Agencies tracking what competitors are bidding on and for how much.
- Lead-gen tooling that needs active Freelancer.com project data at volume.
- Rate-setting — see what real clients are currently paying for a skill before you quote your own.
⚙️ How to use it
- Click Try for free (or Run) on the Actor page.
- Enter one or more
skills— the path segment fromfreelancer.com/jobs/<skill>, e.g.python,react,wordpress. - Set
maxPagesPerSkill(default 3) and, optionally,countryCode(defaultUS). - Run it. Results stream to the dataset as they're scraped — export JSON or CSV when it finishes, or read incrementally via the API.
📥 Input
| Field | Type | Default | Description |
|---|---|---|---|
skills | array | — | Required. One or more skill/category path segments. |
maxPagesPerSkill | integer | 3 | Pages to fetch per skill (1-20). |
countryCode | string | US | 2-letter ISO code pinning the datacenter proxy exit country. |
maxRuntimeSecs | integer | 300 | Wall-clock deadline; the Actor stops requesting new pages once spent. |
proxyConfiguration | object | Datacenter, pinned US | Apify Proxy spec. Datacenter is deliberate — see Limitations. |
{"skills": ["python", "react", "wordpress"],"maxPagesPerSkill": 2,"countryCode": "US","maxRuntimeSecs": 180,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": [],"apifyProxyCountry": "US"}}
📤 Output
One dataset row per project:
{"projectUrl": "https://www.freelancer.com/projects/data-analysis/binance-usdt-transaction-analysis","projectPath": "/projects/data-analysis/binance-usdt-transaction-analysis","title": "Binance USDT Transaction Analysis","description": "I need a clear, data-driven picture of every USDT move in my Binance account...","skills": ["API Integration", "Data Analysis", "Data Visualization", "MySQL", "Pandas", "Python"],"budgetType": "fixed","averageBidAmount": 128,"currencySymbol": "$","currencyLikelyUsd": true,"bidCount": 71,"daysLeft": 6,"paymentVerified": true,"featured": false,"sourceSkill": "python","sourcePage": 1,"scrapedAt": "2026-09-16T12:00:00Z"}
💰 Pricing
Pay-per-event, no subscription:
| Event | Price |
|---|---|
| Actor start | $0.20 / run |
| Project result | $0.004 / row |
For a typical run that returns 1,000 rows, that's $4.20 total ($0.20 start
- 1,000 x $0.004). A run that finds nothing (a skill the site has no matching
projects for) only bills the
actor-startfee — never a silent full-price charge for zero data.
🚧 Limitations
averageBidAmountis the current average bid shown on the search card — not the poster's original min/max budget range. Freelancer.com's public search-results page only exposes the average bid; the min/max range the poster originally set lives behind a much heavier per-project detail page (an embedded Angular state blob), which this Actor does not fetch. If you need the exact posted range, treataverageBidAmountas a market-rate signal, not the listing price.- No absolute posting date. The listing page shows "days left to bid," not
a timestamp of when the project was posted —
daysLeftis what we can give you. - Currency follows the proxy exit. We pin
countryCode(defaultUS) and a US-based fetch renders$-prefixed USD amounts. Every row also carriescurrencyLikelyUsd— if it's everfalseon aUS-pinned run, the exit served an unexpected currency symbol; filter those rows out before trusting the amount. - A skill Freelancer.com doesn't recognise returns a generic "Top Jobs" fallback listing, not an error — this Actor detects that fallback and skips it (zero rows for that skill, noted in the run's status message) rather than mislabeling unrelated projects under your requested skill.
❓ FAQ
Does this need a Freelancer.com account? No — the project-search pages are public.
Why datacenter proxy instead of residential? Freelancer.com's search pages returned clean 200s with no anti-bot challenge during testing — datacenter is the cheapest tier that clears reach, so that's what we use by default.
Can I search a phrase instead of a single skill?
Use the skill/category path segment as it appears in a Freelancer.com URL,
e.g. logo-design for freelancer.com/jobs/logo-design. Multi-word phrases
that aren't a real skill slug fall into the "not recognised" case above.
What happens if a page is blocked? We retry with backoff and rotate the proxy session on a 403. If every attempted page for the whole run comes back with no recognisable data at all, the run fails loudly instead of silently returning an empty dataset.
💬 Your feedback
Found a bug, a layout change, or want a field we don't scrape yet? Open an issue on the Actor's Apify Store page or reach out through apify.com/DevilScrapes — we read every report.