Upwork Jobs Scraper - Search & All Current Freelance Jobs avatar

Upwork Jobs Scraper - Search & All Current Freelance Jobs

Pricing

from $2.00 / 1,000 results

Go to Apify Store
Upwork Jobs Scraper - Search & All Current Freelance Jobs

Upwork Jobs Scraper - Search & All Current Freelance Jobs

Scrape public Upwork freelance jobs from the all-current feed or optional English keywords. Export titles, budget, skills, client signals, and job links with residential-proxy support.

Pricing

from $2.00 / 1,000 results

Rating

0.0

(0)

Developer

kane liu

kane liu

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

4 days ago

Last modified

Share

Collect current public Upwork jobs without logging in. Start from the unfiltered all-jobs feed, or narrow the run with optional keywords. Export structured titles, budgets, skills, proposal ranges, and client signals into an Apify Dataset you can download as Excel, CSV, or JSON.

This Actor is a thin Apify client: scraping runs on a worker reached through the control plane. The worker collects every surface — jobs, freelancer profiles, the project catalog, and sitemap enumeration — over a direct HTTP lane that reads Upwork's public server-rendered pages. A browser-based fallback is used only when the direct lane is unavailable. No Apify proxy is needed. Dataset field names for the jobs surface stay compatible with previous builds.

Worker URL is config, not code: the Actor reads WORKER_BASE_URL from Actor environment variables (plus optional per-run workerBaseUrl). Migrating the worker host means updating WORKER_BASE_URL (and WORKER_AUTH if the API key changes) in Apify Console — no Actor code change required.

There are no preset search keywords. Empty input means “all current job types on the public search feed.” Optional keywords only apply when you enter them.


Need a dedicated scraper for one website?

This Actor is the general tool for protected public pages. If you already have one specific site and a field list, a dedicated scraper is faster and more stable: listing + detail, your export format, delivered to your Apify account or as a standalone runnable client.

I confirm the tier before you pay. The clock starts after that confirmation.

Start here: Submit a custom scraper request

Starter $50Dedicated $100Hard target $200–999
Site1 simple anti-bot public site1 medium anti-bot public siteCloudflare / aggressive anti-bot / custom parser
ScopeFull listing + detail fieldsListing + detail + pagination, your field listAgreed fields, repeatable runs
DeliveryCSV/JSON · Apify Actor or standalone runnable client (script/CLI)Same, plus a sample run and short instructionsFeasibility first, then build
Time24 hours after we confirm the URL is in scope48 hours after confirmationQuoted after feasibility
Fixes30 days for small public-layout changes30 daysScoped in the quote

Hard-target sites are not a 100% uptime promise. You get a dedicated parser that can be re-run on the agreed fields. If the URL is not feasible, you get a refund or pay an assessment fee only — you will know before the build starts.

Not in Starter/Dedicated: login-walled data, native APK / Windows installer / full web apps, or two-year maintenance. Those are a separate quote.


What you can do with it

1. Pull the latest all-jobs feed for market scanning

In plain English: Watch what freelancers and agencies are hiring for right now — without typing a keyword first.

To run this, all you fill in are a few fields in the Apify input form:

FieldWhat to enter
KeywordsLeave empty
Max itemse.g. 20
Sortrecency

Click Start. The Actor calls the worker through the control plane. The worker fetches the public Upwork search page over its direct HTTP lane; the Actor writes the newest public listings into a clean table:

TitleJob typeBudgetProposalsClient country
Go High Level Specialisthourly$15–$25/hr5 to 10United States
Real Estate Listing Marketing Strategistfixed$500Less than 5Canada

Every row has the fields you need for research or outreach lists. Download as Excel, CSV, or JSON, or pipe the Dataset into Make / n8n / Zapier.

Each Dataset row is one billed entity and includes a stable rowType + id. maxItems is the row budget for each keyword or URL input, not one shared budget for the whole run. The default is 70. Larger requests are dispatched in parts of at most 70 rows when the selected surface supports continuation. All row types share the same per-input budget, and the run still stops at your maximum total charge. Detail enrichment updates the same job row; it does not create an extra billed row.

2. Track demand for a niche skill or tool

In plain English: See how many public jobs mention tools like n8n, LangChain, or Shopify — and what clients are offering.

FieldWhat to enter
Keywordse.g. n8n automation
Max pages per keyword1–3
Max itemse.g. 50

You get titles, skills, budgets, proposal pressure, and client signals so you can compare niches without manual copying.

3. Build agency lead lists from public budgets and client spend

In plain English: Filter for jobs that show public budget and client country/spend signals, then export for CRM or Sheets.

FieldWhat to enter
KeywordsOptional niche phrases
Scrape detailstrue when you need extra public detail fields
Max detail itemse.g. 5

Detail enrichment visits a bounded number of public job pages. It is slower; keep maxDetailItems small on first runs.

4. Feed freelancing alerts into automation tools

In plain English: Run on a schedule and push new Upwork listings into Slack, Telegram, Google Sheets, or a database.

PlatformHow to connect
Make.comApify → Run Actor → lentic_clockss/upwork-jobs-scraper
n8nApify node → Run Actor
ZapierApify integration → Run Actor
Python / JSApify client SDK (example below)

5. Compare hourly vs fixed-price competition

In plain English: Capture jobType, rate ranges, fixed prices, and proposal midpoints so you can estimate competition density without opening dozens of browser tabs.

6. Collect other public surfaces

Set collectionSurface to switch away from job search:

collectionSurfaceWhat it collectsExtra fields
jobs (default)Public job search and optional job detail pageskeywords, scrapeDetails, maxDetailItems
freelancersPublic freelancer profile pagesprofileUrls (only https://www.upwork.com/freelancers/... URLs are kept)
servicesPublic project catalog listings—
sitemapPublic sitemap URL enumerationmaxShards, maxUrlsPerShard (0 = unlimited)

maxItems applies to each keyword, profile URL, or category URL. An empty keyword list is one all-current-jobs input. Job search has a continuation cursor for requests above one 70-row unit; the current category, services, and sitemap paths stop after their first unit when no continuation is available.

{
"collectionSurface": "freelancers",
"profileUrls": ["https://www.upwork.com/freelancers/~01abc..."],
"maxItems": 3
}

More Actors like this

Need another job board or a different vertical? Use a dedicated Actor below for structured fields. Use this Actor for Upwork public freelance job search and the all-current feed.

Similar jobs & freelance Actors

Prefer another specialized scraper?

If your target has a specialized Actor below, use that first — usually cheaper and more structured than a generic scrape.

E-commerce

Real Estate

Travel & Stays

Social & Content

Ads Intelligence

Local & Maps

General Tools

→ See the full catalog in Related Actors below, or browse apify.com/lentic_clockss.


How to use (no code required)

  1. Click Try for free
  2. Leave keywords empty for the full public feed, or add up to 10 phrases
  3. Set maxItems for cost control (start with 5–20)
  4. Click Start and open the Dataset

That's the whole workflow: choose scope, start, download. The free monthly Apify credit is enough for small canaries before you scale.

What you get back

Each Dataset item can include:

  • Job identity — job ID, title, description snippet, canonical URL
  • Search context — keyword used (all when unfiltered), page, source search URL
  • Budget — hourly min/max or fixed price when public
  • Competition — proposal range text + normalized midpoint
  • Skills & level — public skill tags and experience level when present
  • Client signals — country, total spend bucket, hire rate, payment-verified flag when public
  • Timestamp — collection time

Missing public values stay empty/null. The Actor does not invent data.

Run artifacts in Key-Value Store:

ArtifactWhat it is
INPUT_ECHONormalized input (presetKeywords: [], collection scope)
RUN_SUMMARYPages succeeded/blocked, worker lane, counts
ERROR_SUMMARYStructured failure if the run cannot collect trustworthy rows

Data source and boundary

ModeSource
All current jobsPublic Upwork search feed without q
Keyword searchPublic Upwork search with optional q
Optional detailsPublic job detail pages (bounded)
Freelancer profilesPublic profile pages from profileUrls
Project catalogPublic project catalog pages
Sitemap enumerationPublic sitemap index and shards
  • Primary path: direct HTTP fetch of public server-rendered pages, run by the worker
  • Browser fallback: only when the direct lane is unavailable; no Apify proxy involved
  • No login, no messaging, no private account data
  • Page structure and anti-bot rules change; start small and keep budgets bounded

Free Apify plan limits (set by this Actor's developer)

LimitFree Apify planPaid Apify plan
Runs of this Actor10 runs totalUnlimited
Dataset rows per runUp to 200Limited by your maximum total charge

When the run cap is hit, the run finishes with a clear status message — not an Apify platform error.

Pricing

Pay per event. No subscription.

Free Apify plan: up to 10 runs of this Actor and 200 Dataset rows per run. Upgrade to a paid Apify plan for unlimited runs. (Limits set by the Actor developer.)

EventPriceWhen charged
apify-actor-start$0.005Once when a normal run starts
apify-default-dataset-item$2.00 / 1,000 ($0.002 each)Each Dataset item written

User pays platform usage costs: Yes (for example, Actor compute when platform billing is active). The Actor does not use Apify Proxy.

Real-world examples:

ScenarioApprox. product charge
Canary: 5 jobs$0.005 + 5 × $0.002 = $0.015
Daily niche scan: 100 jobs$0.005 + $0.20 = $0.205
1,000 jobs$0.005 + $2.00 = $2.005

Cost scales mostly with results. Platform compute usage is separate and depends on run duration and memory.

Live View endpoints

When Standby / Live View is enabled, the service exposes a small OpenAPI surface:

EndpointPurpose
GET /Readiness
GET /healthHealth
GET /input-exampleLow-cost example input
GET /openapi.jsonDeployed OpenAPI document

Collection still runs through a normal Actor run — Live View does not scrape Upwork by itself.

Connect from code

Actor ID: lentic_clockss/upwork-jobs-scraper

from apify_client import ApifyClient
client = ApifyClient("<APIFY_TOKEN>")
run = client.actor("lentic_clockss/upwork-jobs-scraper").call(
run_input={
"collectionSurface": "jobs",
"maxItems": 70,
"sort": "recency",
}
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item.get("title"), item.get("jobUrl"), item.get("salary"))

Input reference

ParameterTypeDefaultDescription
collectionSurfacestringjobsjobs, freelancers, services, or sitemap.
keywordsstring[][]Optional search phrases (max 10). Empty = all-current feed.
maxPagesPerKeywordinteger1Pages per keyword (1–10).
maxItemsinteger70Max Dataset rows for each keyword or URL input (1–500); UI prefill is 3. Larger requests use units of at most 70 where continuation is supported. All row types share the budget. The run stops at your maximum total charge. Free Apify plan: 200 rows/run and 10 total runs.
sortstringrecencyrecency or relevance.
scrapeDetailsbooleantrueJobs surface: enrich from public detail pages.
maxDetailItemsinteger5Max detail pages when enrichment is on.
profileUrlsstring[][]Freelancer profile URLs; used only when collectionSurface is freelancers.
categoryUrlsstring[][]Freelancer category URLs; used when the freelancers surface has no profile URLs.
maxShardsinteger0Sitemap shards to read (0–500, 0 = unlimited); sitemap only.
maxUrlsPerShardinteger0URLs per sitemap shard (0–10000, 0 = unlimited); sitemap only.
timeoutSecsinteger90HTTP request timeout (30–180).
debugbooleanfalseBounded diagnostics only (no raw HTML stored).
workerBaseUrlstring(env)Optional override, restricted to this Actor's control-plane entry point. Default: Actor env WORKER_BASE_URL.

A legacy proxyConfiguration block is still accepted for old inputs but is ignored; the worker does not use an Apify proxy.

FAQ

Do I need an Upwork account?
No. The Actor only reads public pages.

Are there preset keywords?
No. Empty keywords collect the unfiltered public feed.

Do I need a proxy?
No. The worker reads public server-rendered pages over its own direct HTTP lane. Any proxyConfiguration in old inputs is ignored.

What if a page is blocked?
The run fails closed when it cannot produce trustworthy rows. It does not fake an empty success after hard blocks.

Can I scrape private proposals or messages?
No.

How fresh is the data?
As fresh as the public search page at run time.

I'm on the free Apify plan — are there limits?
Yes. Free Apify plan users get 10 runs of this Actor and up to 200 Dataset rows per run. These limits are set by the Actor developer (not Apify). When you hit the run cap, the run finishes with a clear status message — it is not a platform bug. Upgrade to a paid Apify plan for unlimited runs.

When to use something else

If you need…Use something else
RemoteOK / Himalayas / Jobicy job boardsOur dedicated job-board Actors
Applying to jobs or messaging clientsManual Upwork or official APIs

All 77 public Actors from [lentic_clockss]. Click a name to open the Store detail page.

Jobs & Freelance

Real Estate

E-commerce

Travel & Stays

Social & Content

Ads Intelligence

Local & Maps

General Tools

→ Browse the full profile: apify.com/lentic_clockss