Upwork Jobs Scraper – Clients, Budgets & Contacts avatar

Upwork Jobs Scraper – Clients, Budgets & Contacts

Pricing

from $0.99 / 1,000 upwork jobs

Go to Apify Store
Upwork Jobs Scraper – Clients, Budgets & Contacts

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

Kelopr_bk

Maintained by Community

Actor stats

0

Bookmarked

5

Total users

1

Monthly active users

3 days ago

Last modified

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?

WorkflowBest forOutput
SEARCHFast market and opportunity scansJob identity, description, budget, skills, experience, duration, timestamps and search rank
SEARCH_FULLLead qualification and bid researchSearch data plus available client, activity, qualification, attachment and screening-question fields
DETAILEnrich known jobsFull 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:

  • opportunityScore and opportunityBand;
  • applyRecommendation;
  • riskFlags and riskFlagCount;
  • freshnessMinutes;
  • competitionLevel;
  • clientConfidenceScore;
  • applicationEffort;
  • technicalStack and inferredSkills;
  • applicationRequirements;
  • clientIntentSignals;
  • proposalTips;
  • agencyPreference;
  • antiBotPhrase when the client publishes a proposal instruction;
  • jobFingerprint for stable downstream deduplication.

Scores never replace source data. The jobScoreBreakdownJson field explains the components used for ranking.

Filters

InputPurpose
jobTypeAny, hourly or fixed-price work
experienceLevelEntry level, intermediate or expert
minBudget, maxBudgetNormalized budget bounds
minHourlyRate, maxHourlyRateHourly-rate range
includeSkills, excludeSkillsRequired or blocked skills
publishedAfterKeep newer jobs
clientCountriesPublic client-location filter
onlyPaymentVerifiedKeep jobs with verified client payment
onlyWithContactsKeep jobs with public contact data
sortResultsBySource order, newest, opportunity score or budget
maxResultsMaximum unique jobs saved across the run

Filtered and duplicate candidates do not count as saved results.

Output views

ViewDesigned for
Best matchesScores, recommendations, freshness, competition and risk
JobsFull descriptions and core job records
Client intelligenceSpend, hire rate, reviews, payment and company signals
Application intelligenceQuestions, qualifications, requirements and proposal tips
Job activityApplicants, invites, interviews, hires and offers
BudgetsHourly, fixed, retainer and normalized budget fields
SkillsSource skills, IDs, detected stack and query matches
Public contactsContacts explicitly published in job text
ErrorsSkipped sources and actionable run issues
Run summarySaved, 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:

  1. Choose SEARCH.
  2. Use one query.
  3. Set maxResults and resultsPerQuery to 5.
  4. Inspect the fields and filters you need.
  5. Switch to SEARCH_FULL only 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