Upwork Jobs Scraper — Freelance Job Listings & Client Data
Pricing
$3.90 / 1,000 job scrapeds
Upwork Jobs Scraper — Freelance Job Listings & Client Data
Scrape Upwork job listings by keyword, category, and filters. Extract job descriptions, budgets, client ratings, hire history, required skills, and experience levels.
Upwork Jobs Scraper
Scrape Upwork job listings by keyword, category, skill, budget range, experience level, client rating, and more. Returns structured data including titles, full descriptions, required skills, budget details, client hire history, proposal counts, and direct job URLs. Built to actually work — unlike the existing 1.3-star actors on Apify Store.
Why Use This Actor
The current Upwork scrapers on Apify Store have a 1.3-star rating because they fail silently, return empty datasets, and ignore filter inputs entirely. This actor uses Playwright for full browser rendering (required because Upwork is a React SPA), residential proxies to avoid Upwork's aggressive datacenter IP blocking, and exhaustive error handling so you always know what happened. Every filter input actually works, every error produces a clear message, and zero-config runs return real results.
How to Use
- Provide a search query (e.g., "python developer", "logo design") or leave the default "web development" for an instant test run.
- Optionally add filters: job type (hourly/fixed), experience level, budget range, client rating, required skills, or client country.
- Set
maxJobsto control how many listings to extract (default: 50, max: 1,000). - Enable
includeDescriptionto fetch full job descriptions from each job's detail page. - Enable
includeClientHistoryto get client spend totals, hire counts, and ratings. - Run the actor. Results are pushed to the dataset as structured JSON.
Residential proxy is required and enabled by default on paid Apify plans. Free-plan users must provide their own residential proxy URL.
Input Configuration
Common setups for different use cases:
- Freelancer prospecting: Set
searchQueryto your skill,postedWithinDays: 1for fresh leads,clientRating: 4to filter out risky clients. - Market research: Set
categoryIdto a specific category,maxJobs: 200,includeClientHistory: trueto analyze spending patterns. - Budget analysis: Set
jobType: "fixed",minBudget: 500,maxBudget: 5000to study pricing for fixed-price projects. - Skill demand tracking: Set
skills: ["React", "TypeScript"]to find jobs requiring specific technologies.
All parameters have sensible defaults. The actor works with zero configuration.
Output Format
Each job listing is returned as a JSON object with the following fields: jobId, title, url, description, descriptionSnippet, postedAt, jobType, experienceLevel, budget (with type, min, max, exact, currency), skills, category, subcategory, proposalsCount, proposalRange, client (with country, rating, reviewCount, totalSpent, totalHires, memberSince, paymentVerified), duration, weeklyHoursRange, contractorPreference, and scrapedAt.
A run summary is saved to the key-value store with aggregate stats: total jobs found and scraped, top skills by frequency, average budget, job type breakdown (hourly vs fixed), and total run duration.
Tips and Advanced Usage
- Use
postedWithinDays: 1for the freshest leads — schedule the actor to run daily for an automated prospecting pipeline. - Set
clientRating: 4to filter out clients with poor payment history and low ratings. - Use
includeClientHistory: trueto prioritize clients who have spent $10K+ on Upwork — these are serious buyers. - Set
includeDescription: falsefor faster runs when you only need listing-level data (title, budget, skills). - Export results to CSV and import directly into your CRM or lead tracking tool.
- Combine
skillsfilter withexperienceLevel: ["expert"]to find high-value expert-level contracts. - Use
clientCountry: "US"to focus on US-based clients who typically have higher budgets.
Proxy Requirements
Upwork actively blocks datacenter IP ranges. This actor uses Apify residential proxies by default, which requires a paid Apify plan ($49+/month). Free-plan users must supply their own residential proxy URL in the Proxy Configuration input field. Without a residential proxy, the actor will exit with a clear error message explaining next steps. The actor rotates proxy endpoints and browser fingerprints automatically to avoid detection.
Related Actors
- Indeed Job Scraper — Scrape Indeed.com job listings by keyword and location
- LinkedIn Jobs Scraper — Extract job listings from LinkedIn
- Glassdoor Scraper — Scrape company reviews and salary data
Pricing
This actor uses Pay-Per-Event (PPE) pricing: $3.90 per 1,000 jobs scraped ($0.0039 per event).
Pricing includes all platform compute costs — no hidden fees.
FAQ
Why does Upwork block regular proxies?
Upwork uses sophisticated anti-bot detection that fingerprints datacenter IP ranges. Residential proxies route through real ISP connections, which look like normal user traffic. This is why residential proxy is required and not optional.
Can I scrape Upwork without a residential proxy?
No. Upwork will block your requests immediately with datacenter proxies. You need either a paid Apify plan (which includes residential proxy) or your own residential proxy URL from a provider like BrightData, Oxylabs, or SmartProxy.
What does the proposals count tell me?
The proposals count shows how many freelancers have already applied to a job. Low proposal counts (under 10) mean less competition and a higher chance of winning the contract. Jobs showing "50+" proposals are highly competitive.
How often should I run this for fresh job leads?
For active prospecting, run daily with postedWithinDays: 1. For market research, weekly runs with postedWithinDays: 7 provide good trend data. Schedule runs using Apify's built-in scheduler.
Can I get jobs from a specific country's clients?
Yes. Use the clientCountry input with an ISO country code like "US", "GB", or "AU". The actor filters results to only include jobs posted by clients from that country.
Does it get the full job description or just the snippet?
By default (includeDescription: true), the actor navigates to each job's detail page to extract the full description. This adds 1-2 seconds per job but gives you the complete text. Set includeDescription: false for faster runs with only the search result snippet.
What categories are available?
Common Upwork category slugs include: web-mobile-software-dev, design-creative, writing, admin-support, customer-service, data-science-analytics, engineering-architecture, sales-marketing, translation, and accounting-consulting. Check Upwork's category pages for the full list.
Is scraping Upwork legal?
This actor scrapes publicly visible job listings that do not require a login. However, Upwork's Terms of Service prohibit automated access. Users are responsible for reviewing Upwork's terms and ensuring compliance in their jurisdiction. This actor is intended for research and data collection purposes.