Upwork Jobs Scraper – Clients, Budgets & Contacts
Pricing
from $0.99 / 1,000 upwork jobs
Upwork Jobs Scraper – Clients, Budgets & Contacts
Find current Upwork jobs by keyword, URL or job ID. Extract descriptions, budgets, skills, client spend and hiring signals, activity, qualifications, questions and public contacts. Rank opportunities and export JSON, CSV or Excel.
Pricing
from $0.99 / 1,000 upwork jobs
Rating
0.0
(0)
Developer
Kelopr_bk
Maintained by CommunityActor stats
0
Bookmarked
5
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Upwork Jobs Scraper — Clients, Budgets & Contacts
Turn current Upwork job searches into structured opportunity data. Find jobs by keyword, enrich known listings, compare budgets, inspect public client hiring signals, extract contacts explicitly published in job text, and rank the best opportunities with explainable scores.
Current jobs · Full descriptions · Budgets & skills · Client intelligence · Job activity · Qualifications · Screening questions · Public contacts · Application insights
What can this Actor do?
| Workflow | Best for | Output |
|---|---|---|
SEARCH | Fast market and opportunity scans | Job identity, description, budget, skills, experience, duration, timestamps and search rank |
SEARCH_FULL | Lead qualification and bid research | Search data plus available client, activity, qualification, attachment and screening-question fields |
DETAIL | Enrich known jobs | Full public record for supplied Upwork job URLs or numeric job IDs |
Every workflow deduplicates by Upwork job ID, keeps matched search terms, applies filters, extracts public contacts and adds explainable opportunity intelligence.
Quick start
Find recent Python jobs
{"mode": "SEARCH","queries": ["python developer"],"sourceSort": "recency","maxResults": 25,"resultsPerQuery": 25}
Search and add full job intelligence
{"mode": "SEARCH_FULL","queries": ["web scraping", "data extraction"],"maxResults": 20,"resultsPerQuery": 30,"includeContacts": true,"sortResultsBy": "OPPORTUNITY_SCORE"}
Enrich known Upwork jobs
{"mode": "DETAIL","startUrls": [{"url": "https://www.upwork.com/jobs/~022094813107468472052"}],"jobIds": ["2094725460191723809"],"maxResults": 10}
What data will you receive?
Job identity and timing
jobId, ciphertext, url, title, description, status, closeReason, createdAt, publishedAt, scrapedAt, detailFetched, detailStatus, detailSource, warnings.
Contract and budget
jobType, experienceLevel, hourlyRateMin, hourlyRateMax, weeklyRetainerBudget, fixedBudget, fixedBudgetMax, budgetMin, budgetMax, budgetDisplay, currencyCode, engagementType, durationLabel, durationWeeks, workload, workArrangement, personsToHire, premium, enterpriseJob, contractStartDate, contractEndDate, onSiteType.
Skills and classification
skills, skillIds, highlightedSkills, technicalStack, inferredSkills, category, categorySlug, categoryGroup, categoryGroupSlug, subcategory, occupation, tags.
Client intelligence
When Upwork publishes the values, full records can include:
clientCountry, clientCity, clientState, clientTimezone, clientIndustry, clientCompanySize, clientPaymentVerified, clientRating, clientReviewCount, clientTotalSpent, clientJobsPosted, clientHireRate, clientOpenJobs, clientTotalHires, clientActiveHires, clientAverageHourlyRate, clientTotalHours, clientMemberSince, clientCanHire.
Job activity
totalApplicants, invitesSent, totalInvitedToInterview, totalHired, totalOffers, unansweredInvites, lastClientActivity, personsToHire, canReceiveProposals.
Qualifications and application requirements
preferredCountries, preferredStates, preferredRegions, preferredTimezones, localMarket, requiredEnglishProficiency, requiredJobSuccessScore, requiredHoursWorked, portfolioRequired, risingTalentPreferred, coverLetterRequired, screeningQuestions, screeningQuestionCount, attachmentNames, attachmentCount.
Public contacts
The Actor finds only contacts explicitly published in the job text:
- email addresses;
- phone numbers;
- external websites;
- public messaging handles.
Contacts are saved to a separate dataset with the job ID, job title, source context and job URL. contactCount and hasPublicContacts stay on the job record.
Application Intelligence
Every job receives transparent, locally calculated signals:
opportunityScoreandopportunityBand;applyRecommendation;riskFlagsandriskFlagCount;freshnessMinutes;competitionLevel;clientConfidenceScore;applicationEffort;technicalStackandinferredSkills;applicationRequirements;clientIntentSignals;proposalTips;agencyPreference;antiBotPhrasewhen the client publishes a proposal instruction;jobFingerprintfor stable downstream deduplication.
Scores never replace source data. The jobScoreBreakdownJson field explains the components used for ranking.
Filters
| Input | Purpose |
|---|---|
jobType | Any, hourly or fixed-price work |
experienceLevel | Entry level, intermediate or expert |
minBudget, maxBudget | Normalized budget bounds |
minHourlyRate, maxHourlyRate | Hourly-rate range |
includeSkills, excludeSkills | Required or blocked skills |
publishedAfter | Keep newer jobs |
clientCountries | Public client-location filter |
onlyPaymentVerified | Keep jobs with verified client payment |
onlyWithContacts | Keep jobs with public contact data |
sortResultsBy | Source order, newest, opportunity score or budget |
maxResults | Maximum unique jobs saved across the run |
Filtered and duplicate candidates do not count as saved results.
Output views
| View | Designed for |
|---|---|
| Best matches | Scores, recommendations, freshness, competition and risk |
| Jobs | Full descriptions and core job records |
| Client intelligence | Spend, hire rate, reviews, payment and company signals |
| Application intelligence | Questions, qualifications, requirements and proposal tips |
| Job activity | Applicants, invites, interviews, hires and offers |
| Budgets | Hourly, fixed, retainer and normalized budget fields |
| Skills | Source skills, IDs, detected stack and query matches |
| Public contacts | Contacts explicitly published in job text |
| Errors | Skipped sources and actionable run issues |
| Run summary | Saved, filtered, duplicate and source-request counters |
Source coverage
Public Upwork job surfaces do not expose the same fields for every posting. Search rows can be lighter than full records, and some job pages restrict client or activity information. Missing values remain null; the Actor does not invent budgets, client history, contacts or application statistics.
Use detailStatus, detailSource, warnings and the run summary to distinguish complete, search-only and unavailable fields.
Export and integrations
Download results as JSON, JSONL, CSV, Excel, XML, RSS or an HTML table. Use the Apify API, webhooks, Make, Zapier, Google Sheets, Airbyte, your CRM, an AI agent or your own application.
Save a configured input as an Apify task when you want to reuse the same search and filters.
Performance
The production SEARCH_FULL workflow was tested with 50 unique jobs on 512 MB. It completed search, 50 public detail requests, scoring and dataset writes in 11.22 seconds of total platform time, with 50/50 public_complete records and no source retries.
Cost control
For a small first run:
- Choose
SEARCH. - Use one query.
- Set
maxResultsandresultsPerQueryto 5. - Inspect the fields and filters you need.
- Switch to
SEARCH_FULLonly when client and application details are useful.
Set Maximum charge per run in Apify Console for a hard budget ceiling.
Frequently asked questions
Does the Actor require an Upwork account?
No. Provide keywords, public job URLs or numeric job IDs.
Why are some client fields empty?
Upwork publishes different detail levels across jobs. Empty fields mean the value was not available in the selected public source.
Can I combine several search phrases?
Yes. Add one phrase per row in queries. Duplicate jobs are merged and matchedQueries keeps every matching phrase.
Can I extract contact details?
Yes, when a client explicitly included them in the public job description. The Actor does not generate or guess contacts.
What makes the opportunity score explainable?
It uses published freshness, budget, skills, client signals, applicant competition and explicit risk phrases. The breakdown travels with each row.
Can I enrich jobs from another dataset?
Export or map the job URLs/IDs into startUrls or jobIds, then use DETAIL.
Tags: upwork scraper · upwork jobs · freelance jobs · client intelligence · job leads · budget data · contact extraction · proposal research · opportunity scoring