SOCIAL MEDIA

Upwork Jobs Scraper API

Search Upwork Jobs and Get Upwork Job Details cover Upwork job search end to end. Search Upwork Jobs takes a keyword and returns matching postings with their title, description, contract type, budget, publish time and a job reference to pass into the detail call. Get Upwork Job Details takes that reference — the job ciphertext, or the job URL — and returns the complete posting: the full description, required skills, budget range, how many freelancers have applied and been interviewed, and the client’s own country, feedback score, hire count and total historical spend. Both read Upwork’s public visitor GraphQL surface — no Upwork account or session cookie is required. They run over residential proxy exits specifically because Upwork’s visitor surface was measured to return zero successful reads over datacenter IPs during evaluation, where the residential pool worked; that is a documented, measured choice rather than a default. The exact price is on this page’s FAQ, generated from the catalog. Filter values (contract type, budget bands and similar enums) are independently measured against Upwork’s own API, since Upwork disables introspection on this surface — an unverified guess at an enum value fails the call loudly rather than silently returning nothing.

What data you get

Search Upwork Jobs

jobs
arrayrequired
jobs[].jobId
stringrequired
jobs[].title
stringrequired
jobs[].jobUrl
stringrequired
jobs[].jobType
stringrequired
jobs[].ciphertext
stringrequired
jobs[].description
stringrequired
jobs[].publishTime
stringrequired
jobs[].hourlyBudgetMax
numberrequired
jobs[].hourlyBudgetMin
numberrequired
jobs[].fixedPriceAmount
numberrequired
page
integerrequired
query
stringrequired
hasMore
booleanrequired
pageSize
integerrequired
elapsedMs
integerrequired
fetchedAt
stringrequired
totalFound
integerrequired
resultCount
integerrequired

Get Upwork Job Details

title
stringrequired
jobUrl
stringrequired
skills
arrayrequired
status
stringrequired
jobType
stringrequired
postedOn
stringrequired
elapsedMs
integerrequired
fetchedAt
stringrequired
buyerScore
numberrequired
ciphertext
stringrequired
totalHired
integerrequired
description
stringrequired
publishTime
stringrequired
buyerCountry
stringrequired
contractorTier
stringrequired
buyerTotalSpent
numberrequired
hourlyBudgetMax
numberrequired
hourlyBudgetMin
numberrequired
totalApplicants
integerrequired
lastBuyerActivity
stringrequired
buyerTotalJobsWithHires
integerrequired
totalInvitedToInterview
integerrequired

Calling Search Upwork Jobs

A schema-derived request and response shape — not a captured production call, since upAPI has none to publish. Every field is real, from the operation’s own published schema.

bash
curl -X POST https://api.upapi.io/upwork-jobs-search.get \
  -H "X-Api-Key: $UPAPI_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "page": 1,
  "sort": "recency",
  "query": "python developer",
  "jobType": "any",
  "pageSize": 20,
  "experienceLevel": "any"
}'
json — example response shape
{
  "jobs": [
    {
      "jobId": "example",
      "title": "Alan Turing",
      "jobUrl": "example",
      "jobType": "example",
      "ciphertext": "example",
      "description": "example",
      "publishTime": "example",
      "hourlyBudgetMax": 1,
      "hourlyBudgetMin": 1,
      "fixedPriceAmount": 1
    }
  ],
  "page": 1,
  "query": "typescript",
  "hasMore": false,
  "pageSize": 5,
  "elapsedMs": 1,
  "fetchedAt": "example",
  "totalFound": 1,
  "resultCount": 1
}

Pricing

Every unit draws from one pooled monthly quota shared across the whole catalog. See upapi.io/pricing for what a unit costs on each plan.

Questions people actually ask

Do I need an Upwork account to search jobs?

No. Both operations read Upwork’s public visitor surface — the same job board a signed-out visitor can browse — and authenticate only with your upAPI key. Authenticated Upwork (posting proposals, messaging clients) is out of scope for this catalog.

What does the job detail call return about the client?

The client’s country, feedback score, total jobs with hires, and total historical spend, alongside the posting’s own budget, required skills, and applicant and interview counts.

How much does this cost?

Every operation in this cluster costs 10 weighted units per call, drawn from your plan’s pooled monthly quota — see upapi.io/pricing for what a unit costs on each tier.

What do I pass into Get Upwork Job Details?

The job’s ciphertext reference from a Search Upwork Jobs result, or the job’s own URL — either is accepted.

How fresh is the data — is it cached?

Search Upwork Jobs is cached for 3 minutes; Get Upwork Job Details is cached for 10 minutes. A repeat call inside a cached window returns the cached response and is billed nothing.

Related