Upwork Search Job(s) Scraper (No Cookies) (Richest output)
Pricing
$21.00/month + usage
Upwork Search Job(s) Scraper (No Cookies) (Richest output)
Extract detailed Upwork job listings with our scraper. Get job descriptions, budgets, required skills, client history, and engagement terms in a structured format. Perfect for market research and competitive analysis.
Pricing
$21.00/month + usage
Rating
0.0
(0)
Developer
Muhamed Didovic
Maintained by CommunityActor stats
4
Bookmarked
79
Total users
2
Monthly active users
7 days ago
Last modified
Categories
Share
Upwork Jobs Scraper
Extract structured job listings from Upwork.com. Ideal for job seekers, recruiters, and market researchers looking to analyze job market trends, skills in demand, and competitive insights.
Features
- Comprehensive Job Scraping:
- Extract detailed job postings including titles, descriptions, budgets, and requirements.
- Support for various job types (hourly, fixed-price) and experience levels.
- Advanced Search Filters:
- Filter by location, job type, budget range, client history, and more.
- Support for complex search queries with multiple parameters.
- Performance Optimized:
- Configurable concurrency and retry settings for reliable scraping.
- Built-in proxy rotation with residential IP support to avoid blocks.
- Structured Data Output:
- Clean, normalized data in JSON format ready for analysis.
- Consistent schema for easy integration with databases and analytics tools.
Getting Started
Basic Usage
-
Configure Input:
- Add Upwork job URLs to the
startUrlsarray. - Set your preferred scraping limits and proxy settings.
- Add Upwork job URLs to the
-
Run the Scraper:
- Execute the scraper via Apify platform or CLI.
- Monitor progress through the Apify dashboard.
-
Export Data:
- Download results in JSON, CSV, or other supported formats.
- Use webhooks or API to integrate with your workflow.
Example Input
{"startUrls": [{ "url": "https://www.upwork.com/jobs/~0123456789abcdef" },{ "url": "https://www.upwork.com/freelance-jobs/apply/Pitchbook-Data-Extraction-for-Paddle-Companies_~021933418908659249795/" },{ "url": "https://www.upwork.com/nx/search/jobs/?q=web+development" }],"maxItems": 100,"maxConcurrency": 10,"minConcurrency": 1,"maxRequestRetries": 100,"proxy": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"]}}
Two Ways to Search
You can drive the scraper in either of two ways — pick whichever fits your workflow. Both feed the same engine and can be combined in one run.
Mode 1 — Search by URL (startUrls)
Paste one or more public Upwork search URLs. Any filters already in the URL (contractor_tier, t, client_hires, location, etc.) are honored automatically.
{"startUrls": [{ "url": "https://www.upwork.com/nx/search/jobs/?q=react+developer&sort=recency&contractor_tier=2,3&t=1" }],"maxItems": 100}
You can also mix in individual job URLs (/jobs/~0… or /freelance-jobs/apply/…) in the same startUrls array — those are scraped directly.
Mode 2 — Search by filters (structured fields)
Prefer not to hand-craft a URL? Fill in the structured fields instead. searchQuery is the only required field; every other filter is optional.
{"searchQuery": "Software Developer","sortBy": "relevance","experienceLevel": ["intermediate", "expert"],"jobType": ["fixed"],"clientHires": ["10_plus"],"contractToHire": true,"maxItems": 100}
Multi-select filters accept multiple values (e.g. Entry and Expert level) and are applied together.
How search & fallback works
For every search, the scraper first queries a fast hosted jobs API, then automatically falls back to live Upwork scraping if that source can't serve the request — so a run always completes without any configuration on your part. The output schema is identical regardless of which path served the data.
Tip: If you supply neither
startUrlsnorkeywords, the run has nothing to search. Provide at least one.
Input Configuration
Input Fields Explained
| Parameter | Description | Default |
|---|---|---|
startUrls | Array of Upwork job URLs or search result pages to start scraping (Mode 1). | [] |
searchQuery | Keywords to search (Mode 2). Required when no startUrls given. | — |
sortBy | Sort results: relevance (best match) or recent (newest). | relevance |
categories | One or more job categories (e.g. Web/Mobile & Software Dev, Design). | [] |
subcategories | One or more subcategory UIDs (advanced). | [] |
experienceLevel | One or more of entry, intermediate, expert. | [] |
jobType | Payment type: hourly, fixed. | [] |
clientHires | Client hiring history: none, 1_to_9, 10_plus. | [] |
clientLocation | Client location(s): country name or region group (e.g. Americas). | [] |
clientTimezone | Client time zone(s) as IANA names (e.g. America/New_York). | [] |
projectLength | under_1_month, 1_to_3_months, 3_to_6_months, over_6_months. | [] |
hoursPerWeek | Weekly commitment: part_time (<30 hrs), full_time (30+ hrs). | [] |
contractToHire | Show only contract-to-hire roles. | false |
maxItems | Maximum number of job listings to scrape per search. | 100 |
maxConcurrency | Maximum number of pages to process simultaneously. | 10 |
minConcurrency | Minimum number of pages to keep in processing queue. | 1 |
maxRequestRetries | Number of times to retry failed requests before giving up. | 100 |
proxy | Proxy configuration for making requests. Residential proxies recommended. | Apify Proxy |
cookies | (Optional) Authentication cookies if accessing protected content. | [] |
Supported URL Formats
1. Job Search URLs
Search for jobs using Upwork's search functionality:
https://www.upwork.com/nx/search/jobs/?q=airbnb
2. Individual Job Postings
Scrape specific job postings using these URL formats:
https://www.upwork.com/freelance-jobs/apply/Pitchbook-Data-Extraction-for-Paddle-Companies_~021933418908659249795/https://www.upwork.com/jobs/~021897592604309915141
3. Advanced Search with Filters
Use Upwork's advanced search parameters:
https://www.upwork.com/nx/search/jobs/?q=full+stack+data+scientist&sort=recency&location=Americas,Europe
Advanced Search Parameters
The scraper supports various Upwork search parameters that can be included in your start URLs:
q: Search query (e.g.,web+development)sort: Sort order (recency,relevance)location: Filter by location (comma-separated values)t: Job type (0for hourly,1for fixed-price)amount: Budget range (e.g.,100-500)client_hires: Client hiring history (e.g.,0,1-9,10-)payment_verified: Show only verified payments (1for true)timezone: Filter by timezone (comma-separated values)
Example with multiple filters:
https://www.upwork.com/nx/search/jobs/?q=react&sort=recency&location=Americas,Europe&t=1&amount=100-500&payment_verified=1
Output Structure
{"hiredApplicantNames": null,"opening": {"job": {"status": "ACTIVE","postedOn": "2025-06-22T08:27:45.795Z","publishTime": "2025-06-22T08:27:46.991Z","sourcingTime": null,"startDate": null,"deliveryDate": null,"workload": null,"contractorTier": "INTERMEDIATE","description": "We are Nova9 Marketing, a fast-growing digital marketing startup based in Seychelles, focused on helping Airbnbs, boutique hotels, and short-term rentals grow their online presence and increase direct bookings.\n\nOur services range from OTA listing optimization and dynamic pricing to social media management, visual branding, and Meta (Facebook/Instagram) ads.\n\nWe’re now looking to bring on a Social Media Manager with strong experience in Instagram and Facebook content creation, especially for brands in hospitality, real estate, travel, or lifestyle.\n\nThis is a long-term, remote position with the opportunity to manage multiple client accounts as we grow. You’ll be working closely with our video editor, virtual assistant, and creative director to deliver premium social media experiences for our clients.\n\n🛠 What You’ll Be Responsible For:\n\t•\tCreating monthly content plans (feed + story + Reel structure)\n\t•\tWriting engaging, branded captions with CTAs and emojis\n\t•\tSelecting and suggesting photos or clips from client shoot folders\n\t•\tCoordinating 6 Reels/month (our editor will handle the video – you guide the direction)\n\t•\tScheduling content via Later, Metricool, or similar\n\t•\tMonitoring basic engagement (replying to DMs/comments 2–3 times per week)\n\t•\tDelivering monthly performance reports using in-platform analytics\n\n✅ Requirements:\n\t•\t1+ year experience managing Instagram and Facebook for clients (travel/hospitality preferred)\n\t•\tConfident writing engaging, on-brand captions in English\n\t•\tBasic understanding of Reels hooks, trends, and storytelling\n\t•\tComfortable using Canva, Later/Metricool/Buffer, and Google Drive\n\t•\tHighly organized and proactive communicator\n\t•\tBonus: Familiarity with TikTok and short-form video trends\n💼 Scope & Rate:\n\t•\tWe’re offering $250–$300/month to start per client\n\t•\tFirst project will be a trial month for 1 property account\n\t•\tIf successful, we’ll increase workload and scale you into multiple accounts\n\t•\tFlexible working hours – we care more about quality and reliability than timezone\n\n🌴 Why Work With Us:\n\t•\tWe’re a creative team building something big in a niche with global growth potential\n\t•\tYou’ll work with beautiful, high-quality content (tropical hotels, beach villas, aerial shots)\n\t•\tDirect line of communication with the founder – no corporate fluff\n\t•\tRemote, independent, outcome-driven environment\n\t•\tLong-term growth opportunities — we want team players, not gig hoppers","info": {"ciphertext": "~021936702637394960044","id": "1936702637394960044","type": "FIXED","access": "PUBLIC_INDEX","title": "Social Media Manager for Airbnb & Hotels","hideBudget": false,"createdOn": "2025-06-22T08:27:45.795Z","notSureProjectDuration": false,"notSureFreelancersToHire": false,"notSureExperienceLevel": false,"notSureLocationPreference": false,"premium": false},"segmentationData": [{"customValue": null,"label": "Ongoing project","name": "Employment","sortOrder": 1,"type": "EMPLOYMENT","value": "EMPLOYMENT_POSITION","skill": null}],"sandsData": {"occupation": {"freeText": null,"ontologyId": "upworkOccupation:socialmediamarketing","prefLabel": "Social Media Marketing","id": "1017484851352698999","uid": "1017484851352698999"},"ontologySkills": [{"groupId": "1549040540813496320","id": "1045317701570953216","freeText": null,"prefLabel": "Travel & Hospitality","groupPrefLabel": "Industry"}],"additionalSkills": [{"groupId": null,"id": "1052162208978227208","freeText": null,"prefLabel": "Facebook"},{"groupId": null,"id": "1052162208978227206","freeText": null,"prefLabel": "Instagram"},{"groupId": null,"id": "1204836476859301888","freeText": null,"prefLabel": "Social Media Content Creation"},{"groupId": null,"id": "1031626781101637632","freeText": null,"prefLabel": "Social Media Management"}]},"category": {"name": "Digital Marketing","urlSlug": "digital-marketing"},"categoryGroup": {"name": "Sales & Marketing","urlSlug": "sales-marketing"},"budget": {"amount": 300,"currencyCode": "USD"},"annotations": {"tags": ["jsi_contractToHire","contractToHireSet","searchable","C2HJobsOptInEducation"]},"engagementDuration": {"label": "1 to 3 months","weeks": 9},"extendedBudgetInfo": {"hourlyBudgetMin": null,"hourlyBudgetMax": null,"hourlyBudgetType": null},"attachments": [],"clientActivity": {"lastBuyerActivity": "2025-06-22T08:52:15.177Z","totalApplicants": 20,"totalHired": 0,"totalInvitedToInterview": 0,"unansweredInvites": 0,"invitationsSent": 0,"numberOfPositionsToHire": 1}},"qualifications": {"countries": null,"earnings": null,"groupRecno": null,"languages": null,"localDescription": null,"localFlexibilityDescription": null,"localMarket": false,"minJobSuccessScore": 0,"minOdeskHours": 0,"onSiteType": null,"prefEnglishSkill": "ANY","regions": null,"risingTalent": false,"shouldHavePortfolio": false,"states": null,"tests": null,"timezones": null,"type": "ANY","locationCheckRequired": false,"group": null,"location": null,"locations": null},"questions": []},"buyer": {"enterprise": false,"isPaymentMethodVerified": false,"info": {"location": {"offsetFromUtcMillis": 0,"countryTimezone": "Etc/UTC (UTCZ)","city": null,"country": "Seychelles"},"stats": {"totalAssignments": 0,"activeAssignmentsCount": 0,"hoursCount": 0,"feedbackCount": 0,"score": 0,"totalJobsWithHires": 0,"totalCharges": null},"company": {"name": null,"companyId": "1931041000145612262","isEDCReplicated": null,"contractDate": "2025-06-06T00:00:00.000Z","profile": {"industry": "Travel & Hospitality","size": 1}},"jobs": {"openCount": 3,"postedCount": 3,"openJobs": [{"id": "1936712169910544263","uid": "1936712169910544263","isPtcPrivate": false,"ciphertext": "~021936712169910544263","title": "Meta Ads Specialist for Airbnb & Boutique Hotels","type": "FIXED"},{"id": "1936698126381745887","uid": "1936698126381745887","isPtcPrivate": false,"ciphertext": "~021936698126381745887","title": "OTA Listing & Pricing Optimization Expert (Airbnb/Booking/VRBO)","type": "FIXED"}]},"avgHourlyJobsRate": null},"workHistory": []},"currentUserInfo": {"owner": false,"freelancerInfo": {"profileState": "AUTO_ACCEPTED","applied": null,"devProfileCiphertext": "~01d7fa411418639c50","hired": null,"application": null,"pendingInvite": null,"contract": null,"hourlyRate": {"amount": 99},"qualificationsMatches": {"matches": [{"clientPreferred": "all","clientPreferredLabel": "Any","freelancerValue": "IC","freelancerValueLabel": "Not Specified","qualification": "FreelancerType","qualified": true},{"clientPreferred": "0","clientPreferredLabel": "At least 0%","freelancerValue": "0","freelancerValueLabel": "0%","qualification": "MinimumJobSuccessScore","qualified": true},{"clientPreferred": "0","clientPreferredLabel": "Any","freelancerValue": "4","freelancerValueLabel": "Native Or Bilingual","qualification": "EnglishLevel","qualified": true},{"clientPreferred": "0","clientPreferredLabel": "At least 0 hours","freelancerValue": "0","freelancerValueLabel": "0","qualification": "HoursBilled","qualified": true},{"clientPreferred": "ANY","clientPreferredLabel": "Any","freelancerValue": "0.00","freelancerValueLabel": "0.00","qualification": "Earnings","qualified": true},{"clientPreferred": "Any","clientPreferredLabel": null,"freelancerValue": "en","freelancerValueLabel": "English","qualification": "Language","qualified": true}]}}},"similarJobs": [],"workLocation": {"onSiteCity": null,"onSiteCountry": null,"onSiteReason": null,"onSiteReasonFlexible": null,"onSiteState": null,"onSiteType": null},"phoneVerificationStatus": {"status": "VERIFIED"},"applicantsBidsStats": null,"specializedProfileOccupationId": "1017484851352698999","applicationContext": {"freelancerAllowed": false,"clientAllowed": true},"basicInfo": {"id": "1936702637394960044","title": "Social Media Manager for H^Airbnb^H & Hotels","description": "We are Nova9 Marketing, a fast-growing digital marketing startup based in Seychelles, focused on helping Airbnbs, boutique hotels, and short-term rentals grow their online presence and increase direct bookings.\n\nOur services range from OTA listing optimization and dynamic pricing to social media management, visual branding, and Meta (Facebook/Instagram) ads.\n\nWe’re now looking to bring on a Social Media Manager with strong experience in Instagram and Facebook content creation, especially for brands in hospitality, real estate, travel, or lifestyle.\n\nThis is a long-term, remote position with the opportunity to manage multiple client accounts as we grow. You’ll be working closely with our video editor, virtual assistant, and creative director to deliver premium social media experiences for our clients.\n\n🛠 What You’ll Be Responsible For:\n\t•\tCreating monthly content plans (feed + story + Reel structure)\n\t•\tWriting engaging, branded captions with CTAs and emojis\n\t•\tSelecting and suggesting photos or clips from client shoot folders\n\t•\tCoordinating 6 Reels/month (our editor will handle the video – you guide the direction)\n\t•\tScheduling content via Later, Metricool, or similar\n\t•\tMonitoring basic engagement (replying to DMs/comments 2–3 times per week)\n\t•\tDelivering monthly performance reports using in-platform analytics\n\n✅ Requirements:\n\t•\t1+ year experience managing Instagram and Facebook for clients (travel/hospitality preferred)\n\t•\tConfident writing engaging, on-brand captions in English\n\t•\tBasic understanding of Reels hooks, trends, and storytelling\n\t•\tComfortable using Canva, Later/Metricool/Buffer, and Google Drive\n\t•\tHighly organized and proactive communicator\n\t•\tBonus: Familiarity with TikTok and short-form video trends\n💼 Scope & Rate:\n\t•\tWe’re offering $250–$300/month to start per client\n\t•\tFirst project will be a trial month for 1 property account\n\t•\tIf successful, we’ll increase workload and scale you into multiple accounts\n\t•\tFlexible working hours – we care more about quality and reliability than timezone\n\n🌴 Why Work With Us:\n\t•\tWe’re a creative team building something big in a niche with global growth potential\n\t•\tYou’ll work with beautiful, high-quality content (tropical hotels, beach villas, aerial shots)\n\t•\tDirect line of communication with the founder – no corporate fluff\n\t•\tRemote, independent, outcome-driven environment\n\t•\tLong-term growth opportunities — we want team players, not gig hoppers","relevanceEncoded": "{\"position\":\"3\"}","ontologySkills": [{"uid": "1045317701570953216","parentSkillUid": null,"prefLabel": "Travel & Hospitality","prettyName": "Travel & Hospitality","freeText": null,"highlighted": false},{"uid": "1052162208978227208","parentSkillUid": null,"prefLabel": "Facebook","prettyName": "Facebook","freeText": null,"highlighted": false},{"uid": "1052162208978227206","parentSkillUid": null,"prefLabel": "Instagram","prettyName": "Instagram","freeText": null,"highlighted": false},{"uid": "1204836476859301888","parentSkillUid": null,"prefLabel": "Social Media Content Creation","prettyName": "Social Media Content Creation","freeText": null,"highlighted": false},{"uid": "1031626781101637632","parentSkillUid": null,"prefLabel": "Social Media Management","prettyName": "Social Media Management","freeText": null,"highlighted": false}],"isSTSVectorSearchResult": false,"connectPrice": 8,"applied": false,"upworkHistoryData": {"client": {"paymentVerificationStatus": null,"country": "Seychelles","totalReviews": 0,"totalFeedback": 0,"hasFinancialPrivacy": false,"totalSpent": null},"freelancerClientRelation": {"lastContractRid": null,"companyName": null,"lastContractTitle": null}},"jobTile": {"job": {"id": "1936702637394960044","ciphertext": "~021936702637394960044","jobType": "FIXED","weeklyRetainerBudget": null,"hourlyBudgetMax": null,"hourlyBudgetMin": null,"hourlyEngagementType": null,"contractorTier": "IntermediateLevel","sourcingTimestamp": null,"createTime": "2025-06-22T08:27:45.795Z","publishTime": "2025-06-22T08:27:46.991Z","enterpriseJob": false,"personsToHire": 1,"premium": false,"totalApplicants": 20,"hourlyEngagementDuration": null,"fixedPriceAmount": {"isoCurrencyCode": null,"amount": "300.0"},"fixedPriceEngagementDuration": {"id": "474250516458926082","rid": 3,"label": "1 to 3 months","weeks": 9,"ctime": "2014-06-04T17:59:10.123Z","mtime": "2014-06-04T17:59:10.123Z"}}}}}
Field Explanations
Job Opening Details
| Field | Type | Description | Example/Notes |
|---|---|---|---|
opening.job.status | String | Current status of the job posting | ACTIVE, CLOSED, etc. |
opening.job.postedOn | String | When the job was originally posted | ISO 8601 format |
opening.job.publishTime | String | When the job was published | ISO 8601 format |
opening.job.description | String | Full job description including requirements and responsibilities | HTML/text content |
opening.job.contractorTier | String | Experience level required | INTERMEDIATE, EXPERT, etc. |
opening.job.workload | String | Expected workload | FULL_TIME, PART_TIME, etc. |
opening.job.info.title | String | Job title | Plain text |
opening.job.info.ciphertext | String | Encoded job identifier | Used in URLs |
opening.job.info.type | String | Job type | FIXED, HOURLY |
opening.job.budget.amount | Number | Budget amount | Currency specified in budget.currencyCode |
opening.job.budget.currencyCode | String | Currency code | USD, EUR, etc. |
opening.job.engagementDuration.weeks | Number | Expected project duration in weeks | |
opening.job.engagementDuration.label | String | Human-readable duration | e.g., "1 to 3 months" |
opening.job.clientActivity.totalApplicants | Number | Total number of applicants | |
opening.job.clientActivity.totalHired | Number | Number of candidates hired | |
opening.job.clientActivity.lastBuyerActivity | String | Timestamp of last buyer activity | ISO 8601 format |
Skills & Categories
| Field | Type | Description | Example/Notes |
|---|---|---|---|
opening.job.sandsData.occupation.prefLabel | String | Main job category | e.g., "Social Media Marketing" |
opening.job.sandsData.occupation.ontologyId | String | Internal category ID | |
opening.job.sandsData.ontologySkills[] | Array | Industry/topical skills | Array of skill objects |
opening.job.sandsData.additionalSkills[] | Array | Specific skills/tools | Array of skill objects |
opening.job.category.name | String | Job category | e.g., "Digital Marketing" |
opening.job.categoryGroup.name | String | Category group | e.g., "Sales & Marketing" |
Client/Buyer Information
| Field | Type | Description | Example/Notes |
|---|---|---|---|
buyer.info.location.country | String | Client's country | |
buyer.info.location.countryTimezone | String | Client's timezone | |
buyer.info.stats.totalAssignments | Number | Total jobs posted by client | |
buyer.info.stats.hoursCount | Number | Total hours worked by client | |
buyer.info.stats.feedbackCount | Number | Number of feedback entries | |
buyer.info.stats.score | Number | Client's rating score | |
buyer.info.company.profile.industry | String | Client's industry | |
buyer.info.company.profile.size | Number | Company size | |
buyer.info.jobs.openCount | Number | Currently open jobs | |
buyer.info.jobs.postedCount | Number | Total jobs posted | |
buyer.info.jobs.openJobs[] | Array | List of client's other open jobs | Array of job objects |
Application & Engagement
| Field | Type | Description | Example/Notes |
|---|---|---|---|
currentUserInfo.freelancerInfo.profileState | String | Current user's application state | e.g., "AUTO_ACCEPTED" |
currentUserInfo.freelancerInfo.hourlyRate.amount | Number | User's hourly rate | |
currentUserInfo.freelancerInfo.qualificationsMatches.matches[] | Array | How user matches job requirements | Array of qualification objects |
applicationContext.freelancerAllowed | Boolean | If current user can apply | |
applicationContext.clientAllowed | Boolean | If current user can manage the job |
Job Metadata
| Field | Type | Description | Example/Notes |
|---|---|---|---|
basicInfo.id | String | Unique job ID | |
basicInfo.title | String | Job title | |
basicInfo.description | String | Full job description | |
basicInfo.connectPrice | Number | Cost to apply (in Connects) | |
basicInfo.ontologySkills[] | Array | Skills associated with the job | Array of skill objects |
basicInfo.jobTile.job.jobType | String | Type of job | FIXED, HOURLY |
basicInfo.jobTile.job.totalApplicants | Number | Number of applicants | |
basicInfo.jobTile.job.fixedPriceAmount.amount | String | Fixed price amount | If job type is FIXED |
basicInfo.jobTile.job.hourlyBudgetMin | Number | Minimum hourly rate | If job type is HOURLY |
basicInfo.jobTile.job.hourlyBudgetMax | Number | Maximum hourly rate | If job type is HOURLY |
basicInfo.jobTile.job.contractorTier | String | Required experience level |
Support
- For issues or feature requests, please use the Issues section of this actor.
- If you need customization or have questions, feel free to contact the author:
- Author's website: https://muhamed-didovic.github.io/
- Email: muhamed.didovic@gmail.com
Additional Services
- Request customization or whole dataset: muhamed.didovic@gmail.com
- If you need anything else scraped, or this actor customized, email: muhamed.didovic@gmail.com
- For API services of this scraper (no Apify fee, just usage fee for the API), contact: muhamed.didovic@gmail.com