Upwork Jobs Search Scraper avatar

Upwork Jobs Search Scraper

Deprecated

Pricing

from $2.99 / 1,000 upwork freelance projects

Go to Apify Store
Upwork Jobs Search Scraper

Upwork Jobs Search Scraper

Deprecated

Scrape freelance and contract job listings from Upwork. Extract job titles, client info, budget ranges, skills required, experience levels, and project types for freelance marketplace analysis and recruitment.

Pricing

from $2.99 / 1,000 upwork freelance projects

Rating

0.0

(0)

Developer

Jobs API

Jobs API

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

0

Monthly active users

11 days ago

Last modified

Share

What does Upwork Jobs Search Scraper do?

Upwork Jobs Search Scraper is currently a bounded public-access probe against Upwork job search. It is not presently a working Upwork jobs API alternative: a source-authored Cloudflare security challenge was visible on the public search page in Chrome during the 2026-09-27 validation. The Actor must stop at that boundary and emit no fabricated records.

The Actor supports search, single-URL, and multiple-URL probe modes. It records platform process status separately from the dataset result and access classification, plus the final URL, request count, runtime, failure reason, and one-attempt request receipt in the default key-value store. A source barrier stops later targets and is recorded as platform SUCCEEDED with resultStatus: SKIPPED. Fatal non-block failures are recorded as platform FAILED and resultStatus: FAILED; their access classification may be DEFERRED.

Why use this Upwork access probe?

  • Confirm whether public Upwork job pages are reachable from a particular Actor environment.
  • Capture machine-readable evidence of HTTP challenges or transport failures.
  • Detect access-policy changes without mixing diagnostics into a jobs dataset.
  • Schedule bounded checks, call them through the Apify API, and monitor failures in Apify Console.
  • Avoid misleading fallback data from search indexes, cached snippets, or fabricated jobs.

This implementation does not use authenticated pages, browser fingerprinting, CAPTCHA solving, cookies, external search indexes, private APIs, or access-control bypasses.

What data can the Actor extract?

When Upwork blocks the request, the dataset remains empty by design. These run-state fields are still available:

Storage/keyTypeDescription
RUN_SUMMARY.statusstringActual Apify process state: SUCCEEDED for a handled source barrier, or FAILED for a fatal non-block failure.
RUN_SUMMARY.resultStatusstringDataset outcome: SKIPPED for a source barrier or FAILED when extraction cannot produce verified rows.
RUN_SUMMARY.accessStatusstringAccess classification such as SKIPPED for a source barrier or DEFERRED for an ordinary service/transport failure.
RUN_SUMMARY.requestsintegerCount of attempted public HTTPS requests.
RUN_SUMMARY.failureReasonstringChallenge, HTTP, timeout, or parser limitation.
RUN_SUMMARY.runtimeMsintegerEnd-to-end probe duration.
RUN_DIAGNOSTICS.itemsarrayPer-target URL, status/final URL when available, and reason.
REQUEST_RECEIPTSarrayOne receipt per attempted request; attempt is 1 and retries is 0.
datasetarrayEmpty unless a future implementation can verify rich public job records.

The dormant dataset schema requires a canonical Upwork job URL, rich description, and positive verification evidence. The current code deliberately has no parser/emission path because live public HTML is unavailable for responsible implementation and validation.

How to probe Upwork jobs

  1. Open the Actor input tab in Apify Console.
  2. Choose search, single, or multiple.
  3. For search, enter keywords or an exact public /nx/search/jobs/ URL.
  4. For direct modes, provide real Upwork job URLs containing a ~jobId.
  5. Keep maxRequests small and choose a practical timeout.
  6. Inspect RUN_SUMMARY, RUN_DIAGNOSTICS, and REQUEST_RECEIPTS.
  7. After resultStatus: SKIPPED or a visible source challenge, stop requests to Upwork. Do not retry, change routes or headers, switch identities, or use proxy, cookies, or challenge-solving tools.

How much will it cost to probe Upwork?

A probe makes only bounded native HTTPS requests and uses no browser, so compute usage is small. Actual cost depends on your Apify plan, memory, timeout, and current platform pricing. A single search target with a 30-second timeout is the recommended baseline. Failed target access still consumes the request and runtime used to establish that failure.

Input

See the input tab for full configuration options.

{
"mode": "search",
"query": "software engineer",
"maxItems": 3,
"maxRequests": 5,
"requestTimeoutSecs": 30
}

maxItems limits direct targets, maxRequests is a hard request budget, and requestDelayMs applies between sequential direct probes. A custom search URL must use the exact Upwork /nx/search/jobs/ path.

Output

The dataset is empty while the Actor has no verified record parser. Inspect the actual RUN_SUMMARY, RUN_DIAGNOSTICS, and REQUEST_RECEIPTS records for this run; diagnostics are never represented as job records.

Tips and advanced options

  • Use one search request first; increasing limits does not solve a target security challenge.
  • Do not treat a generic /freelance-jobs/apply/<category>/ path as a job detail URL; valid direct URLs contain a ~jobId.
  • Inspect the summary, diagnostics, and receipt before deciding whether any further access is allowed. Do not repeat a request after SKIPPED.
  • Do not schedule repeated probes while the same source challenge is visible.
  • Do not supply login cookies or private credentials.

Local development

npm ci --no-audit --no-fund
npm run check
npm test
apify validate-schema
npm run validate

These checks do not contact Upwork. The 2026-09-27 validation ended at the visible Cloudflare challenge, so no Actor run was sent. Offline challenge tests validate SUCCEEDED/SKIPPED; fatal non-block tests validate FAILED/FAILED. Before any future apify run, inspect CLI storage behavior, preserve existing default or legacy stores, use a new actor-relative APIFY_LOCAL_STORAGE_DIR, and pass --resurrect; never use --purge or reuse an existing dataset directory. Local storage is not uploaded to Apify Console.

FAQ, disclaimers, and support

Why is there no job dataset?

The tested public endpoint returns a Cloudflare challenge before listing data. Emitting cached, indexed, or invented rows would misrepresent source verification, so this Actor emits zero jobs.

Can I provide cookies or use a CAPTCHA solver?

No. This Actor is limited to ordinary unauthenticated public HTTPS and does not accept session material or bypass controls.

Our Actors are ethical and do not extract any private user data, such as email addresses, gender, or location. They only extract what the user has chosen to share publicly. We therefore believe that our Actors, when used for ethical purposes by Apify users, are safe. However, you should be aware that your results could contain personal data. Personal data is protected by the GDPR in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers.

Respect Upwork's terms, robots guidance, rate limits, and security controls. For programmatic access, see the Actor API tab. For support, use the Issues tab with a redacted input and run ID.