Upwork Job Scraper | Scrape up to 10k Jobs ✨ avatar
Upwork Job Scraper | Scrape up to 10k Jobs ✨

Pricing

Pay per event

Go to Apify Store
Upwork Job Scraper | Scrape up to 10k Jobs ✨

Upwork Job Scraper | Scrape up to 10k Jobs ✨

Developed by

Upwork Vibe

Upwork Vibe

Maintained by Community

Get ALL Upwork jobs instantly. Pre-indexed database delivers 10,000+ jobs at once. No cookies, no timeouts, filters that actually work. Perfect for freelancers, agencies, and Clay/Zapier automations. Pay only $0.003 per job - no subscriptions required. upwork@vistorio.online

4.0 (1)

Pricing

Pay per event

1

16

16

Issues response

18 hours

Last modified

19 hours ago

Upwork Scraper - Extract up to 10,000 Jobs per request

Experience seamless Upwork job extraction with fast access to comprehensive job data. Pull up to 10,000 jobs from a single search without any authentication hassles.

✨ Key Features

  • πŸ”‘ No Credentials Required: Simply configure your search parameters and start extracting. No cookies, login details, or complex authentication needed.
  • πŸ“ˆ High Volume Capacity: Extract up to 10,000 jobs per search - perfect for comprehensive market analysis and bulk data collection.
  • ⚑ Fast Data Access: Get results quickly from our pre-indexed database. Optimized for speed and reliability.
  • 🎯 Precision Filtering: 40+ filter parameters that work exactly as configured - budget, location, skills, client history, and more.
  • πŸ“Š Complete Job Data: Access all public job fields including budget details, client stats, vendor requirements, and application costs.

πŸ› οΈ How It Works

  1. Configure Your Search: Set your desired filters - keywords, budget ranges, client requirements, experience levels
  2. Set Volume Limit: Choose how many jobs to extract (1 to 10,000)
  3. Run Extraction: Get results in clean, structured JSON format
  4. Export or Integrate: Use with Clay, Zapier, Make, or export to your preferred format

πŸ’° Transparent Pricing & Performance

$0.003 per job ($3.00 per 1,000 jobs)

  • Pay only for what you extract
  • No subscriptions or hidden fees
  • Platform costs included

Volume Examples with Timing

JobsCostTime
100 jobs$0.30~6 seconds
500 jobs$1.50~15 seconds
1,000 jobs$3.00~20 seconds
5,000 jobs$15.00~40 seconds
10,000 jobs$30.00~70 seconds

πŸ“Έ Output Sample

Output Sample Try the scraper with your own parameters!

Daily Freelancer Monitor

{
"limit": 200,
"fromDate": "2025-01-13", // Yesterday
"toDate": "2025-01-14", // Today
"jobCategories": ["Web Development", "Mobile Development"],
"includeKeywords.keywords": ["React", "Node.js", "TypeScript"],
"includeKeywords.matchTitle": true,
"includeKeywords.matchSkills": false,
"includeKeywords.matchDescription": true,
"budget.hourlyRate.min": "40",
"client.includeLocations": [
{"type": "COUNTRY", "value": "US"},
{"type": "COUNTRY", "value": "CA"},
{"type": "COUNTRY", "value": "GB"}
],
"client.paymentMethodVerified": true
}

Agency Market Analysis

{
"limit": 5000,
"fromDate": "2025-01-01",
"toDate": "2025-01-14",
"jobCategories": ["Web Development", "Web & Mobile Design"],
"budget.fixedPrice.min": "5000",
"client.totalSpent.min": "10000",
"client.minFeedbackScore": "4.0",
"client.includeLocations": [
{"type": "REGION", "value": "north_america"},
{"type": "REGION", "value": "europe"}
],
"vendor.experienceLevel": ["INTERMEDIATE", "EXPERT"]
}

Clay Automation Daily Pull

{
"limit": 300,
"fromDate": "2025-01-13T00:00:00Z",
"toDate": "2025-01-13T23:59:59Z",
"includeKeywords.keywords": ["SaaS", "B2B", "startup"],
"includeKeywords.matchSkills": false,
"includeKeywords.matchTitle": false,
"includeKeywords.matchDescription": true,
"budget.minClientHireRate": 50,
"client.includeLocations": [
{"type": "COUNTRY", "value": "US"}
],
"client.paymentMethodVerified": true,
"client.totalSpent.min": "5000"
}

Advanced Filtering Example

{
"limit": 2000,
"fromDate": "2025-01-01T12:30:00Z",
"jobCategories": [
"Web Development",
"Web & Mobile Design"
],
"includeKeywords.keywords": ["React", "TypeScript", "Next.js"],
"includeKeywords.matchTitle": true,
"includeKeywords.matchDescription": true,
"includeKeywords.matchSkills": true,
"excludeKeywords.keywords": ["WordPress", "PHP", "Shopify"],
"excludeKeywords.matchTitle": true,
"excludeKeywords.matchDescription": true,
"excludeKeywords.matchSkills": true,
"budget.hourlyRate.min": "40",
"budget.hourlyRate.max": "150",
"budget.jobDurations": [
"UP_TO_THREE_MONTHS",
"UP_TO_SIX_MONTHS",
"MORE_THAN_SIX_MONTHS"
],
"budget.minClientHireRate": 50,
"client.paymentMethodVerified": true,
"client.minFeedbackScore": "4.0",
"client.includeLocations": [
{"type": "COUNTRY", "value": "US"},
{"type": "REGION", "value": "europe"},
{"type": "COUNTRY", "value": "GB"}
],
"client.totalSpent.min": "5000",
"vendor.experienceLevel": ["INTERMEDIATE", "EXPERT"],
"vendor.englishProficiency": "FLUENT"
}

πŸ“Š Output format

Clean, structured JSON with all job details:

{
"uid": "1955020056847176693",
"title": "React Developer for SaaS Platform",
"description": "We are looking for an experienced React Developer to help us build and scale our SaaS platform for small-to-medium businesses. You’ll be working closely with our product and backend teams to deliver high-quality, performant, and maintainable features that enhance user experience and support rapid growth.",
"createdAt": "2025-01-15T10:30:00.000Z",
"skills": [
"React",
"TypeScript",
"Node.js",
"Redux",
"REST APIs"
],
"externalLink": "https://www.upwork.com/jobs/~021955020056847176693",
"applicationCost": 6,
"featured": false,
"category": "Web Development",
"ciphertext": "~021955020056847176693",
"questions": null,
"budget": {
"fixedBudget": 5000,
"hourlyRate": {
"min": 40,
"max": 80
}
},
"client": {
"name": "TechStartup Inc",
"timezone": "America/New_York",
"industry": "Technology",
"companySize": 10,
"countryCode": "US",
"phoneNumberVerified": true,
"paymentMethodVerified": true,
"enterprise": false,
"connectedAt": "2024-05-01T00:00:00.000Z",
"stats": {
"totalSpent": 125000,
"totalHires": 42,
"hireRate": 85,
"avgRate": 65,
"feedbackRate": 4.95,
"feedbackCount": 38
}
},
"vendor": {
"hireType": "FREELANCER",
"countryCodes": ["US", "CA", "UK"],
"experienceLevel": "EXPERT",
"englishLevel": "FLUENT"
},
"customJobScore": 4.8
}

Field Descriptions

Core Fields:

  • uid: Unique identifier for the job
  • title: Job title/headline
  • description: Job description
  • createdAt: When the job was posted (ISO 8601)
  • externalLink: Direct link to job on Upwork
  • applicationCost: Connects required to apply
  • featured: Whether it's a featured/promoted job
  • category: Job category on Upwork
  • ciphertext: Encoded job reference
  • questions: Screening questions (array or null)
  • customJobScore: Client quality score (0-5) based on verification status, ratings, hire history, and spending patterns

Budget Object:

  • fixedBudget: Fixed price amount (0 if hourly)
  • hourlyRate.min/max: Hourly rate range (null if fixed)

Client Object:

  • name: Company/client name (may be null)
  • timezone: Client's timezone (IANA format)
  • industry: Client's industry sector
  • companySize: Number of employees
  • countryCode: 2-letter country code
  • phoneNumberVerified: Phone verification status
  • pymentMethodVerified: Payment method verified
  • enterprise: Enterprise client flag
  • connectedAt: When joined Upwork
  • stats.totalSpent: Total spent on platform
  • stats.totalHires: Number of hires made
  • stats.hireRate: Percentage of jobs that result in hire
  • stats.avgRate: Average hourly rate paid
  • stats.feedbackRate: Average rating given (0-5)
  • stats.feedbackCount: Number of feedback entries

Vendor Object:

  • hireType: "FREELANCER", "AGENCY", or "ANY"
  • countryCodes: Preferred freelancer locations
  • experienceLevel: "BEGINNER", "INTERMEDIATE", or "EXPERT"
  • englishLevel: "ANY", "BASIC", "CONVERSATIONAL", "FLUENT", or "NATIVE"

πŸ“‹ Complete Input Parameters

βš™οΈ Basic Settings

ParameterTypeDescriptionExample
limitintegerMax jobs to return (1-10000)1000
fromDatestringJobs posted after (YYYY-MM-DD or YYYY-MM-DDTHH:MM:SSZ)"2025-01-01" or "2025-01-01T00:00:00Z"
toDatestringJobs posted before (YYYY-MM-DD or YYYY-MM-DDTHH:MM:SSZ)"2025-12-31" or "2025-12-31T23:59:59Z"
jobCategoriesarrayUpwork category names["Web Development", "UI/UX Design"]

πŸ”Ž Keyword Filters

ParameterTypeDescriptionExample
includeKeywords.activebooleanEnable include keywordstrue
includeKeywords.keywordsarrayMust contain these terms["React", "Node.js"]
includeKeywords.matchTitlebooleanSearch in titlestrue
includeKeywords.matchDescriptionbooleanSearch in descriptionstrue
includeKeywords.matchSkillsbooleanSearch in required skillstrue
excludeKeywords.activebooleanEnable exclude keywordstrue
excludeKeywords.keywordsarrayExclude jobs with these terms["WordPress", "PHP"]
excludeKeywords.matchTitlebooleanSearch in titlestrue
excludeKeywords.matchDescriptionbooleanSearch in descriptionstrue
excludeKeywords.matchSkillsbooleanSearch in required skillstrue

πŸ’° Budget & Payment

ParameterTypeDescriptionExample
budget.hourlyRate.minstringMinimum hourly rate (USD)"50"
budget.hourlyRate.maxstringMaximum hourly rate (USD)"150"
budget.fixedPrice.minstringMinimum fixed price (USD)"1000"
budget.fixedPrice.maxstringMaximum fixed price (USD)"10000"
budget.connectsPrice.minintegerMinimum connects required1
budget.connectsPrice.maxintegerMaximum connects required10
budget.jobDurationsarrayContract lengths["UP_TO_THREE_MONTHS"]
budget.hourlyWorkloadsarrayWeekly commitment["LESS_THAN_30_HOURS"]
budget.minClientHireRateintegerMin hire rate (%)50

🏒 Client Requirements

ParameterTypeDescriptionExample
client.paymentMethodVerifiedbooleanVerified payment onlytrue
client.minFeedbackScorestringMin rating (0-5)"4.5"
client.totalSpent.minstringMinimum total spent (USD)"10000"
client.totalSpent.maxstringMaximum total spent (USD)"50000"
client.includeLocationsarrayClient locations[{"type": "COUNTRY", "value": "US"}]
client.excludeLocationsarrayExclude locations[{"type": "COUNTRY", "value": "PK"}]
client.companySizeRangearrayCompany sizes["UP_TO_100_EMPLOYEES"]

πŸ‘€ Vendor Preferences

ParameterTypeDescriptionExample
vendor.experienceLevelarrayRequired experience["INTERMEDIATE", "EXPERT"]
vendor.englishProficiencystringEnglish level"FLUENT"
vendor.typearrayFreelancer/Agency["FREELANCER"]
vendor.includeLocationsarrayVendor locations[{"type": "COUNTRY", "value": "US"}]
vendor.includeFeaturedbooleanFeatured jobs onlytrue

Job Categories

Most Popular Categories:

  • "Web Development" - Frontend, backend, full-stack
  • "Mobile Development (Web/Mobile)" - Cross-platform mobile apps
  • "Mobile Development (IT)" - Native iOS/Android development
  • "UI/UX Design" - User interface and experience design
  • "AI/ML Engineering" - Machine learning and AI projects
  • "Data Science & Analytics" - Data analysis and visualization
  • "Digital Marketing" - SEO, PPC, social media
  • "Content Writing" - Articles, blogs, copywriting
  • "Ecommerce Development" - Online stores, Shopify
  • "DevOps Engineering" - CI/CD, cloud infrastructure

Development & Tech:

  • "Web Development"
  • "Mobile Development (Web/Mobile)"
  • "Mobile Development (IT)"
  • "Desktop Software Development"
  • "Ecommerce Development"
  • "Game Development"
  • "Game Design & Development"
  • "Blockchain & Cryptocurrency"
  • "AI/ML Engineering"
  • "Data Engineering"
  • "Cloud Computing"
  • "DevOps Engineering"
  • "DevOps & Solution Architecture"
  • "QA & Testing (Software)"
  • "QA & Testing (Web/Mobile)"

Design & Creative:

  • "UI/UX Design"
  • "Product Design"
  • "Visual Design"
  • "Illustration & Design"
  • "Web & Mobile Design"
  • "3D Modeling & CAD"
  • "Architecture & Interior Design"

Business & Admin:

  • "Product Management (Business)"
  • "Product Management (Tech)"
  • "Project Management"
  • "Business Analysis & Strategy"
  • "Virtual Assistance"
  • "Data Entry & Transcription"
  • "Market Research"

Marketing & Sales:

  • "Digital Marketing"
  • "Social Media Marketing"
  • "Content Writing"
  • "Brand Strategy & Marketing"
  • "Marketing Automation"
  • "Sales & Business Development"

Note: Use exact category names as shown (case-sensitive). Full list of 70+ categories available.

πŸ’‘ Smart Usage Tips - Don't Pay Twice!

Live Job Monitoring (Near Real-Time)

⚠️ Use 10-30 minute overlap ONLY when scraping up to the present moment

Jobs can take up to 30 minutes to sync to our database. If you're monitoring live jobs (toDate = now), use overlap to catch delayed jobs:

// First run at 9:00 AM (scraping up to NOW)
{
"limit": 50,
"fromDate": "2025-01-14T07:00:00Z",
"toDate": "2025-01-14T09:00:00Z" // NOW
}
// Next run at 11:00 AM (scraping up to NOW)
{
"limit": 50,
"fromDate": "2025-01-14T08:30:00Z", // 30-min overlap
"toDate": "2025-01-14T11:00:00Z" // NOW
}
// Next run at 1:00 PM (scraping up to NOW)
{
"limit": 50,
"fromDate": "2025-01-14T10:30:00Z", // 30-min overlap
"toDate": "2025-01-14T13:00:00Z" // NOW
}

When to use overlap: Only when your toDate is the current time (live monitoring) Overlap duration: 10-30 minutes maximum (30 min for maximum safety)

Historical Data Collection (Past Jobs)

βœ… NO overlap needed when scraping historical data

When collecting past jobs (not up to the present moment), use exact date boundaries:

// Day 1: Get January jobs
{
"limit": 1000,
"fromDate": "2025-01-01T00:00:00Z",
"toDate": "2025-01-31T23:59:59Z" // Past date - NO overlap needed
}
// Day 2: Get February jobs
{
"limit": 1000,
"fromDate": "2025-02-01T00:00:00Z", // Exact boundary - no overlap
"toDate": "2025-02-28T23:59:59Z" // Past date - NO overlap needed
}

Daily Batch Collection (Previous Day's Jobs)

βœ… NO overlap needed for daily historical pulls

// Monday: Get Sunday's jobs
{
"fromDate": "2025-01-13T00:00:00Z", // Sunday start
"toDate": "2025-01-13T23:59:59Z" // Sunday end - NO overlap
}
// Tuesday: Get Monday's jobs
{
"fromDate": "2025-01-14T00:00:00Z", // Monday start - exact boundary
"toDate": "2025-01-14T23:59:59Z" // Monday end - NO overlap
}

Key Rule: Overlap is ONLY for live monitoring when toDate = current time

Cost-Effective Filtering

Start with strict filters to minimize costs:

  • Use "client.paymentMethodVerified": true to filter serious clients
  • Set "budget.minClientHireRate": 50 to avoid job collectors
  • Add "client.totalSpent.min": "1000" for proven clients

πŸ”§ Integration Options

Automation Platforms

  • Clay.com - Direct table import with enrichment
  • Make/Zapier - 5000+ app connections
  • n8n - Self-hosted workflows
  • API - REST API for custom integrations

Export Formats

  • JSON (default)
  • CSV
  • Direct to Google Sheets
  • Webhook delivery

πŸ“š API Documentation

Node.js

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });
const run = await client.actor('upwork-vibe/upwork-job-scraper').call(input);

Python

from apify_client import ApifyClient
client = ApifyClient('YOUR_API_TOKEN')
run = client.actor('upwork-vibe/upwork-job-scraper').call(input)

REST API

curl -X POST "https://api.apify.com/v2/acts/upwork-vibe~upwork-job-scraper/runs?token=YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"limit": 100,
"includeKeywords.active": true,
"includeKeywords.keywords": ["react", "javascript"],
"includeKeywords.matchSkills": false,
"includeKeywords.matchTitle": true,
"includeKeywords.matchDescription": true
}'

πŸ“ Location Reference Guide

How to Use Locations

Locations in client.includeLocations, client.excludeLocations, and vendor.includeLocations use this format:

{"type": "COUNTRY", "value": "US"} // For countries
{"type": "REGION", "value": "europe"} // For regions

Common Country Codes (ISO 3166-1 alpha-2)

CountryCodeCountryCode
United StatesUSUnited KingdomGB
CanadaCAAustraliaAU
GermanyDEFranceFR
NetherlandsNLSwitzerlandCH
SwedenSEDenmarkDK
NorwayNOFinlandFI
SpainESItalyIT
PolandPLUkraineUA
IndiaINPakistanPK
BangladeshBDPhilippinesPH
SingaporeSGJapanJP
BrazilBRMexicoMX
ArgentinaARIsraelIL
United Arab EmiratesAESouth AfricaZA

Available Regions

RegionValueIncludes
North Americanorth_americaUS, CA, MX
EuropeeuropeAll EU countries + UK, CH, NO
AsiaasiaAll Asian countries
South Americasouth_americaAll South American countries
AfricaafricaAll African countries
OceaniaoceaniaAU, NZ, Pacific Islands

Example Usage

// Include only US and European clients
"client.includeLocations": [
{"type": "COUNTRY", "value": "US"},
{"type": "REGION", "value": "europe"}
]
// Exclude specific countries
"client.excludeLocations": [
{"type": "COUNTRY", "value": "PK"},
{"type": "COUNTRY", "value": "BD"},
{"type": "COUNTRY", "value": "IN"}
]
// Vendor location preferences
"vendor.includeLocations": [
{"type": "REGION", "value": "north_america"},
{"type": "COUNTRY", "value": "PH"}
]

Note: For the complete list of ISO country codes, see ISO 3166-1 alpha-2

πŸ” Troubleshooting

Getting 0 Results?

  1. Check your date range - Ensure dates aren't in the future
  2. Verify category names - Must match exactly from the enum list (e.g., "Web Development" not "Web Dev")
  3. Remove filters progressively - Start broad, then add filters one by one
  4. Check parameter structure - Use dot notation format (e.g., "budget.hourlyRate.min": "50")

Validation Errors?

  1. Use dot notation - Not nested objects: "includeKeywords.active": true βœ… vs {"includeKeywords": {"active": true}} ❌
  2. Exact category names - "Mobile Development (Web/Mobile)" not "Mobile Development"
  3. Location format - Must have both fields: {"type": "COUNTRY", "value": "US"}
  4. Quote string values - Budget amounts must be strings: "50" not 50

Performance Issues?

  1. Start small - Test with limit: 100 before scaling up
  2. Simplify filters - Complex keyword combinations slow processing
  3. Segment large requests - Use date ranges to break up big searches
  4. Avoid overlapping filters - Don't use contradictory include/exclude rules

Unexpected Costs?

  1. Always set limit - Without it, you might pull thousands of jobs
  2. Test first - Start with limit: 10 to verify your filters work
  3. Check itemCount - Monitor response counts before scaling up
  4. Remember billing - You pay $0.003 per job returned, not per API call

✏️ Support

⚑ Feel free to reach out to the developer for any issues or suggestions for improvement.

πŸ’¬ πŸ“§ πŸ› πŸ’‘ πŸš€