Upwork Jobs Search Scraper
DeprecatedPricing
from $2.99 / 1,000 upwork freelance projects
Upwork Jobs Search Scraper
DeprecatedScrape 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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
0
Monthly active users
11 days ago
Last modified
Categories
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/key | Type | Description |
|---|---|---|
RUN_SUMMARY.status | string | Actual Apify process state: SUCCEEDED for a handled source barrier, or FAILED for a fatal non-block failure. |
RUN_SUMMARY.resultStatus | string | Dataset outcome: SKIPPED for a source barrier or FAILED when extraction cannot produce verified rows. |
RUN_SUMMARY.accessStatus | string | Access classification such as SKIPPED for a source barrier or DEFERRED for an ordinary service/transport failure. |
RUN_SUMMARY.requests | integer | Count of attempted public HTTPS requests. |
RUN_SUMMARY.failureReason | string | Challenge, HTTP, timeout, or parser limitation. |
RUN_SUMMARY.runtimeMs | integer | End-to-end probe duration. |
RUN_DIAGNOSTICS.items | array | Per-target URL, status/final URL when available, and reason. |
REQUEST_RECEIPTS | array | One receipt per attempted request; attempt is 1 and retries is 0. |
| dataset | array | Empty 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
- Open the Actor input tab in Apify Console.
- Choose
search,single, ormultiple. - For search, enter keywords or an exact public
/nx/search/jobs/URL. - For direct modes, provide real Upwork job URLs containing a
~jobId. - Keep
maxRequestssmall and choose a practical timeout. - Inspect
RUN_SUMMARY,RUN_DIAGNOSTICS, andREQUEST_RECEIPTS. - After
resultStatus: SKIPPEDor 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-fundnpm run checknpm testapify validate-schemanpm 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.
Is probing Upwork legal?
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.