Apify Store
AS
Apify Store
/neatrat/upwork-job-scraper

Upwork Job Scraper

Scrape Upwork jobs without limits 🌟 Bypass CAPTCHAs & apply custom filters. Apify is retiring rental Actors, so pricing is changing. For many users around ~7k jobs/month, cost should stay near the old

liveasyncunknown~30s typical
automationlead generationjobsupworkjob
$0.0044
per result + $0.005 call
plus $0.001 platform fee per run
Actor charges $0.0035 per result; Cracked adds 25% plus a $0.005 call fee
Bring your own Apify Store key: provider portion drops to $0.
$Set up https://cracked-ai-pearl.vercel.app/SKILL.md, then use Cracked to run apify /neatrat/upwork-job-scraper for me.

Input

FieldTypeDescription
querystringKeywords to search for in Upwork jobs
rawUrlstringDirectly use this Upwork search URL instead of constructing one (must be from upwork.com and include nx/search/jobs)
experienceLevelarrayFilter jobs by required experience level
jobTypearrayFilter jobs by payment type
paymentVerifiedbooleanFilter jobs by payment verification status
fixedPriceRangearrayRange for fixed-price jobs (min and max in USD, e.g. [100, 1000])
hourlyRateRangearrayRange for hourly rate jobs (min and max in USD/hour, e.g. [20, 50])
clientHistoryarrayFilter by client hiring history
locationarrayFilter jobs by location (regions, subregions, or countries)
cookiesarrayCookies to use for requests (useful for bypassing Upwork's protection)
customFiltersarrayCustom filters to apply to job results
pageintegerPage number to start scraping from default 1
pagesToScrapeintegerNumber of pages to scrape sequentially starting from the specified page. Non-paying Apify users are limited to 5 total runs and 500 total results across all runs. default 1
perPageintegerNumber of results to display per page default 50
sortstring (newest | relevance)How to sort the job listings default "newest"
maxJobAgeobjectFilter out jobs older than this time

Call it

curl
curl https://cracked-ai-pearl.vercel.app/v1/run \
  -H "Authorization: Bearer ck_live_..." -H "content-type: application/json" \
  -d '{"provider":"apify","endpoint":"/neatrat/upwork-job-scraper","input":{"query":"web scraping","experienceLevel":["entry","intermediate"],"jobType":["fixed","hourly"],"paymentVerified":true,"fixedPriceRange":["100","1000"],"hourlyRateRange":["20","50"],"clientHistory":["noHires","1to9Hires"],"location":["United States","Europe"],"cookies":[],"customFilters":[],"maxJobAge":{"value":24,"unit":"hours"}},"wait":false}'
poll
curl "https://cracked-ai-pearl.vercel.app/v1/runs/<runId>?wait=30" -H "Authorization: Bearer ck_live_..."
cli
npx cracked-ai run -p apify -e /neatrat/upwork-job-scraper -i '{"query":"web scraping","experienceLevel":["entry","intermediate"],"jobType":["fixed","hourly"],"paymentVerified":true,"fixedPriceRange":["100","1000"],"hourlyRateRange":["20","50"],"clientHistory":["noHires","1to9Hires"],"location":["United States","Europe"],"cookies":[],"customFilters":[],"maxJobAge":{"value":24,"unit":"hours"}}' -w 120
mcp
run_tool({ provider: "apify", endpoint: "/neatrat/upwork-job-scraper", input: {"query":"web scraping","experienceLevel":["entry","intermediate"],"jobType":["fixed","hourly"],"paymentVerified":true,"fixedPriceRange":["100","1000"],"hourlyRateRange":["20","50"],"clientHistory":["noHires","1to9Hires"],"location":["United States","Europe"],"cookies":[],"customFilters":[],"maxJobAge":{"value":24,"unit":"hours"}}, wait: false })

Try it

Runs against your signed-in workspace balance. Sign in if you have not.