Upwork Jobs Scraper · Apify
Upwork Jobs Scraper avatar

Upwork Jobs Scraper

Pricing

from $0.14 / 1,000 results

Go to Apify Store
Upwork Jobs Scraper

Upwork Jobs Scraper

$0.2/1K jobs | Scrape Upwork job listings with advanced filters for skills, budgets, clients, and project requirements.

Pricing

from $0.14 / 1,000 results

Rating

0.0

(0)

Developer

Vali G

Vali G

Maintained by Community

Actor stats

4

Bookmarked

120

Total users

46

Monthly active users

14 days ago

Last modified

Categories

Features

Limited permissions

Share

An Apify Actor for searching Upwork job listings using keywords and optional job, client, project, and location filters. The Actor's input lets you narrow results by category, experience level, contract type, client hiring history, project length, workload, and more.

Features

  • Search job titles and descriptions with keywords.
  • Sort results by relevance or recency.
  • Filter by one or more job categories and subcategories.
  • Filter by experience level and hourly or fixed-price contract type.
  • Narrow results using client hiring history, location, and time zone.
  • Filter by project length, weekly workload, and contract-to-hire status.
  • Set a maximum result count from 1 to 5,000.

Input

The Actor accepts a JSON object. Only keywords is required; all other properties are optional.

Example input

{
"keywords": "Software Developer",
"sort": "recency",
"category2_uid": ["531770282580668418"],
"contractor_tier": ["2", "3"],
"t": ["0", "1"],
"client_hires": ["1-9", "10-"],
"location": ["Canada", "United States"],
"timezone": ["America/New_York"],
"duration_v3": ["month", "semester"],
"workload": ["as_needed"],
"contract_to_hire": false,
"limit": 100
}

Input properties

PropertyTypeRequiredDefault / allowed valuesDescription
keywordsstringYesDefault: Software DeveloperKeywords to search in job titles and descriptions.
sortstringNorelevance or recency; default: relevanceSort search results by relevance or recency. In the Apify input UI, these are displayed as Relevance and Newest.
category2_uidarray of stringsNoCategory UIDs listed belowSelect one or more job categories.
subcategory2_uidarray of stringsNoString valuesSelect one or more subcategories by UID. The schema does not enumerate the available subcategory UIDs.
contractor_tierarray of stringsNo1, 2, 3Experience level: Entry Level, Intermediate, or Expert.
tarray of stringsNo0, 1Job type: Hourly or Fixed-Price.
client_hiresarray of stringsNo0, 1-9, 10-Client hiring history: No hires, 1 to 9 hires, or 10+ hires.
locationarray of stringsNoFree-form strings; examples: Canada, United StatesFilter by one or more client locations.
timezonearray of stringsNoFree-form strings; example: America/New_YorkFilter by one or more client time zones.
duration_v3array of stringsNoweek, month, semester, ongoingProject length: Less than one month, 1 to 3 months, 3 to 6 months, or More than 6 months.
workloadarray of stringsNoas_needed, full_timeHours per week: Less than 30 hrs/week or More than 30 hrs/week.
contract_to_hirebooleanNoBooleanWhen true, show only contract-to-hire roles.
limitintegerNoDefault: 100; minimum: 1; maximum: 5000Maximum number of results.

Category UIDs

Pass the UID value(s) in category2_uid, not the display label.

CategoryUID
Accounting & Consulting531770282584862721
Admin Support531770282580668416
Customer Service531770282580668417
Data Science & Analytics531770282580668420
Design & Creative531770282580668421
Engineering & Architecture531770282584862722
IT & Networking531770282580668419
Legal531770282584862723
Sales & Marketing531770282580668422
Translation531770282584862720
Web, Mobile & Software Dev531770282580668418
Writing531770282580668423

Experience-level values

ValueDisplay label
1Entry Level
2Intermediate
3Expert

Job-type values

ValueDisplay label
0Hourly
1Fixed-Price

Client-hire values

ValueDisplay label
0No hires
1-91 to 9 hires
10-10+ hires

Project-length values

ValueDisplay label
weekLess than one month
month1 to 3 months
semester3 to 6 months
ongoingMore than 6 months

Workload values

ValueDisplay label
as_neededLess than 30 hrs/week
full_timeMore than 30 hrs/week

Output

The sample output is a job record. The fields below describe the structure shown in the supplied example. Some values in that example are null; values may depend on the job listing.

Sample output item

{
"id": "2116258603404893639",
"cipherText": "~022116258603404893639",
"url": "https://www.upwork.com/jobs/~022116258603404893639",
"title": "Experienced Software Development Company / Senior Full-Stack Developer",
"jobType": "HOURLY",
"weeklyRetainerBudget": null,
"hourlyBudgetMax": "47.0",
"hourlyBudgetMin": "25.0",
"hourlyEngagementType": "FULL_TIME",
"contractorTier": "ExpertLevel",
"sourcingTimestamp": null,
"createTime": "2026-10-30T19:59:04.405Z",
"publishTime": "2026-10-30T19:59:09.694Z",
"enterpriseJob": false,
"personsToHire": 1,
"premium": false,
"totalApplicants": 87,
"hourlyEngagementDuration": {
"rid": 2,
"label": "3 to 6 months",
"weeks": 18,
"mtime": "2014-06-04T17:59:10.123Z",
"ctime": "2014-06-04T17:59:10.123Z"
},
"fixedPriceAmount": null,
"fixedPriceEngagementDuration": null,
"skills": [
{
"uid": "1110580482322976768",
"prefLabel": "API",
"highlighted": false
},
{
"uid": "996364628025274385",
"prefLabel": "PHP",
"highlighted": false
}
],
"client": {
"paymentVerificationStatus": null,
"country": "Netherlands",
"totalReviews": 0,
"totalFeedback": 0,
"hasFinancialPrivacy": false,
"totalSpent": {
"isoCurrencyCode": "USD",
"amount": "0.0"
}
},
"description": "Full job description text..."
}

Output fields

FieldDescription
idJob identifier.
cipherTextEncoded job identifier value provided in the sample.
urlLink to the Upwork job listing.
titleJob title.
jobTypeJob contract type, such as HOURLY in the sample.
weeklyRetainerBudgetWeekly retainer budget, or null in the sample.
hourlyBudgetMin, hourlyBudgetMaxMinimum and maximum hourly budget, represented as strings in the sample.
hourlyEngagementTypeHourly workload classification, such as FULL_TIME.
contractorTierExperience level, such as ExpertLevel.
sourcingTimestampSourcing timestamp; null in the sample.
createTime, publishTimeJob creation and publication timestamps.
enterpriseJobWhether the listing is marked as an enterprise job.
personsToHireNumber of people the client intends to hire.
premiumWhether the listing is marked as premium.
totalApplicantsApplicant count shown in the sample.
hourlyEngagementDurationHourly project-duration details, including rid, label, weeks, mtime, and ctime.
fixedPriceAmountFixed-price budget amount; null in the hourly sample.
fixedPriceEngagementDurationFixed-price project-duration details; null in the sample.
skillsArray of skills. Each sample skill includes a uid, prefLabel, and highlighted flag.
clientClient details, including payment-verification status, country, review and feedback counts, financial-privacy flag, and total spending.
client.totalSpentClient spending object with currency code (isoCurrencyCode) and amount.
descriptionFull job description text.

Running the Actor

  1. Open Upwork Jobs Scraper in Apify Console.
  2. Enter the required keywords value.
  3. Optionally configure sorting and filters.
  4. Set limit to the maximum number of results you want (between 1 and 5,000).
  5. Run the Actor and inspect the resulting job records in the run's dataset.

Notes

  • keywords is the only required input property.
  • Array-valued filters accept multiple values.
  • Use the category UID values above for category2_uid.
  • subcategory2_uid, location, and timezone accept strings; the supplied schema does not define a fixed list of valid values for them.
  • The sample shows an hourly job. Fixed-price-related fields are also present in the sample structure but are null for that listing.
  • The supplied schema and sample do not specify pagination behavior, scraping speed, proxy requirements, authentication requirements, or guarantees about result availability.