Upwork API

Upwork Jobs API

Search Upwork job postings by keyword, with up to 25 fresh listings per request.

POST/v1/run/upwork.jobs
Uptime
100.00%
30d · 15 calls
Requests
17
30d · weekly, last 12 wks
Response
7.3s
median · 30d

Try it

Make your first request

Open in
Get a free key
Sample response
Free runs return only the first 3 results. Fund a key to get the full response.
{
  "data": {
    "items": [
      {
        "budget": "example",
        "clientLocation": "example",
        "clientRating": 4.6,
        "clientTotalSpent": 12500,
        "createdUtc": 12.5,
        "description": "A short example description of this item.",
        "experienceLevel": "example",
        "hourlyRateMax": 12.5,
        "hourlyRateMin": 12.5,
        "jobId": "a1b2c3d4",
        "jobType": "general",
        "paymentVerified": true,
        "proposals": 42,
        "tags": [
          "example"
        ],
        "title": "Example title",
        "url": "https://example.com/page"
      }
    ]
  },
  "found": true
}
Response interface
interface UpworkJobsResponse {
  data: {
    items: {
      budget?: string;
      clientLocation?: string;
      clientRating?: number;
      clientTotalSpent?: number;
      createdUtc?: number;
      description?: string;
      experienceLevel?: string;
      hourlyRateMax?: number;
      hourlyRateMin?: number;
      jobId: string;
      jobType?: string;
      paymentVerified?: boolean | null;
      proposals?: number;
      tags?: string[] | null;
      title: string;
      url: string;
    }[];
  } | null;
  found: boolean;
}

Full parameter and response reference - every field, type, and example for this endpoint.

Reference

Request, response, and price

Last verified 2026-09-16 · uptime and latency measured over 30d
POST /v1/run/upwork.jobs
curl -X POST https://api.getanyapi.com/v1/run/upwork.jobs \
  -H "Authorization: Bearer $ANYAPI_KEY" \
  -H "Content-Type: application/json" \
  -d '{"jobType":"fixed","limit":10,"query":"web developer"}'
FieldTypeExample value
Request body
querystring"web developer"Keywords to search Upwork jobs for (e.g. react developer).
experienceLevelenumFilter by required experience level.
jobTypeenum"fixed"Filter by payment type: fixed-price or hourly jobs.
limitinteger10Maximum number of results to return (10-25, default 25). You are billed per result returned, so a lower limit costs less.
locationstringFilter by client location - a region, subregion, or country (e.g. United States, Europe).
paymentVerifiedbooleanWhen true, only return jobs from clients with a verified payment method.
sortenumSort order for listings: newest or relevance (e.g. newest).
Response
dataobjectResult payload, or null when nothing was found.
data.itemsobject[]Job records: title, description, budget or hourly rate, required skills, posted date, and client details. Populated whenever the provider has data for the entity.
data.items[].budgetstringFixed-price budget in USD (e.g. $4000). Absent on hourly jobs, which carry hourlyRateMin and hourlyRateMax.
data.items[].clientLocationstringClient country or location.
data.items[].clientRatingnumberClient average rating.
data.items[].clientTotalSpentnumberClient lifetime spend (USD).
data.items[].createdUtcnumberUTC epoch timestamp in seconds (Unix time). Multiply by 1000 for a JS Date in milliseconds.
data.items[].descriptionstringFull job posting description text. Populated whenever the provider has data for the entity.
data.items[].experienceLevelstringRequired experience level (e.g. Entry, Intermediate, Expert).
data.items[].hourlyRateMaxnumberUpper bound of the client's hourly rate range in USD. Absent on fixed-price jobs.
data.items[].hourlyRateMinnumberLower bound of the client's hourly rate range in USD. Absent on fixed-price jobs.
data.items[].jobIdstringUpwork job identifier. Populated whenever the provider has data for the entity.
data.items[].jobTypestringFixed or Hourly.
data.items[].paymentVerifiedbooleanWhether the client's payment method is verified; null when Upwork reports it as unknown.
data.items[].proposalsintegerNumber of proposals submitted.
data.items[].tagsstring[]Skill tags.
data.items[].titlestringJob posting title. Populated whenever the provider has data for the entity.
data.items[].urlstringUpwork job posting URL. Populated whenever the provider has data for the entity.
foundbooleanWhether any jobs were found for the search.
Price
Price per request (ceiling)USD$0.0286
Price /1k resultsUSD$1.14

FAQ

About the Upwork Jobs API

The AnyAPI Upwork Jobs API returns Upwork jobs data as normalized JSON from one POST call to /v1/run/upwork.jobs. Search Upwork job postings by keyword, with up to 25 fresh listings per request. AnyAPI returns one normalized schema whichever source serves it. It costs $1.14 per 1,000 results, and never more than $0.0286 for a single request, in US dollars with no subscription and no monthly minimum. Over the last 30 days, 100.0% of Upwork jobs calls through AnyAPI succeeded, with a median response time of 7.3 seconds across 15 measured calls.

It costs $1.14 per 1,000 results, and never more than $0.0286 for a single request, in US dollars with no subscription and no monthly minimum. You fund one USD wallet, each call draws it down, and a failed request costs $0.

Search Upwork job postings by keyword, with up to 25 fresh listings per request. The response is normalized JSON with the same envelope every AnyAPI endpoint returns, so parsing a second endpoint is a change of URL and nothing else.

Over the last 30 days, 100.0% of Upwork jobs calls through AnyAPI succeeded, with a median response time of 7.3 seconds across 15 measured calls. These are AnyAPI's own measurements of traffic through the gateway, recomputed continuously, not a published service-level target.