Upwork API

Upwork API for job search

Upwork jobs as JSON from a keyword: description, skills, hourly or fixed budget, experience level, duration and posting time, plus any job in full with applicants and the client's spend history.

  • No card needed
  • Failed calls are free
  • Pack credits never expire
Keyword or skill
Endpoint
curl "https://api.toolzerhub.com/v1/upwork/search?query=python+scraping" \
  -H "x-api-key: $TOOLZERHUB_API_KEY"
200 OK
Real response, 6 Nov 2026
{
  "data": {
    "query": "python scraping",
    "page": 1,
    "sort": "newest",
    "job_type": "any",
    "experience_level": "any",
    "total": 300,
    "page_size": 50,
    "max_page": 6,
    "has_more": true,
    "count": 3,
    "url": "https://www.upwork.com/nx/search/jobs/?q=python+scraping&sort=recency",
    "stop_reason": null,
    "results": [
      {
        "job_id": "~022118416160812586681",
        "title": "Python AI Agent to Generate Application specific Web Scraping rules.",
        "url": "https://www.upwork.com/jobs/~022118416160812586681",
        "description": "We are looking for an experienced Python AI Agent Developer to build an AI-powered application that automatically generates application-specific web scraping rules.\n\nThe objective is to develop an AI ",
        "skills": [
          "Python",
          "Data Scraping",
          "Web Crawling",
          "Agentic Workflows",
          "AI Agent Development"
        ],
        "job_type": "hourly",
        "experience_level": "intermediate",
        "budget": {
          "fixed_price": null,
          "hourly_min": 20,
          "hourly_max": 50,
          "currency": "USD"
        },
        "workload": "part_time",
        "duration": "1 to 3 months",
        "duration_weeks": 9,
        "posted_at": "2026-11-05T18:52:52Z"
      },
      {
        "job_id": "~022118388163193053698",
        "title": "Build an Automated B2B Lead Generation System for a Recruitment Firm - Fixed Price",
        "url": "https://www.upwork.com/jobs/~022118388163193053698",
        "description": "About us\nWe’re a recruitment and executive search firm based in Singapore. We want a system that finds companies that are actively hiring, finds the right contact at each one, and contacts them automa",
        "skills": [
          "Lead Generation",
          "Customer Relationship Management",
          "Python",
          "English"
        ],
        "job_type": "hourly",
        "experience_level": "intermediate",
        "budget": {
          "fixed_price": null,
          "hourly_min": null,
          "hourly_max": null,
          "currency": "USD"
        },
        "workload": "part_time",
        "duration": "Less than 1 month",
        "duration_weeks": 3,
        "posted_at": "2026-11-05T17:01:49Z"
      },
      {
        "job_id": "~022118324593413766913",
        "title": "Python Data Engineer: Build Sports Analytics Database & API (Punting Form Data)",
        "url": "https://www.upwork.com/jobs/~022118324593413766913",
        "description": "I am looking for an independent, mid-level Python and Data Engineer to build a custom data ingestion pipeline, relational database, and localized API layer. \n\nThe project involves harvesting horse rac",
        "skills": [
          "Python",
          "API",
          "Data Extraction",
          "ETL Pipeline",
          "PostgreSQL",
          "API Integration",
          "Data Ingestion",
          "FastAPI",
          "pandas",
          "SQLAlchemy"
        ],
        "job_type": "hourly",
        "experience_level": "intermediate",
        "budget": {
          "fixed_price": null,
          "hourly_min": 45,
          "hourly_max": 75,
          "currency": "USD"
        },
        "workload": "part_time",
        "duration": "1 to 3 months",
        "duration_weeks": 9,
        "posted_at": "2026-11-05T12:49:10Z"
      }
    ]
  }
}

3 of the 50 jobs on the page shown, descriptions cut to 200 characters.

1
1 credit per call
98.1%
finished without a server error
2
Upwork endpoints

52 of 53 production calls in the 7 days to 6 Nov 2026 finished without a server error, not counting caller errors.

Response

What comes back

Field names and types read off the real responses in the demo above.

  • Search jobs/v1/upwork/search12 fields
    • job_idstring"~022118416160812586681"
    • titlestring"Python AI Agent to Gene…"
    • urlstring"https://www.upwork.com/…"
    • descriptionstring"We are looking for an e…"
    • skillsarray[5 items]
    • job_typestring"hourly"
    • experience_levelstring"intermediate"
    • budgetobject{ fixed_price, hourly_min }
    • workloadstring"part_time"
    + 3 more
  • Job details/v1/upwork/job16 fields
    • job_idstring"~022118416160812586681"
    • titlestring"Python AI Agent to Gene…"
    • statusstring"active"
    • descriptionstring"We are looking for an e…"
    • job_typestring"hourly"
    • experience_levelstring"intermediate"
    • budgetobject{ fixed_price, hourly_min }
    • workloadstring"Less than 30 hrs/week"
    • durationstring"1 to 3 months"
    + 7 more

Use cases

What people build with it

  • 01Collect new jobs for a skill every daySearch jobs
  • 02Compare fixed-price and hourly budgets across keywordsSearch jobs
  • 03Read a job's applicants and the client's spend historySearch jobsJob details

How it works

From key to JSON

  1. 01x-api-key••••••••••Get a key100 free credits a month, no card
  2. 02GET/v1/upwork/searchSend a requestAny HTTP client, no SDK needed
  3. 03{ data, status }200Get JSONFailed calls cost nothing

Pricing

What it costs

Every endpoint on this page costs 1 credit per call. Failed calls cost nothing.

  • Free$0every month
    • 100 credits a month
    • No card needed
  • 10K pack$19one time
    • 10,000 credits
    • Never expire
    • $1.90 per 1,000
  • Starter$29a month
    • 20,000 credits a month
    • Cancel anytime
    • $1.45 per 1,000

Per 1,000 credits

  • 10K pack$1.90
  • Starter$1.45
  • Growth$1.32
  • Scale$1.21
  • Business$0.99
  • Customfrom $0.99

Plans renew monthly and cancel anytime. Custom plans start at 1M+ credits. Full pricing

Compare

Why not build it yourself

Three ways to get Upwork data into your app.

CompareToolzer HubUpwork API (GraphQL)Your own scraper
SetupOne API keyKey request, decided by Upwork in about a weekProxies, sessions, retries
When Upwork changesWe fix itUpwork maintains itYou fix the parser
Cost to start100 free credits a monthNeeds $25,000 in lifetime earnings or spendProxies and your time

Official API access rules: Upwork Help: How to request an API key from Upwork (opens in new tab)

FAQ

Questions

Is this the official Upwork API?
No. Toolzer Hub is not affiliated with Upwork. Ours reads what a signed-out visitor sees, with one key and no Upwork account. In the 300 jobs from one "python scraping" search, 66 of the 153 hourly jobs came back with no hourly range.
What does the official Upwork API allow?
Upwork's API keys are for "personal or internal use". A request needs an identity-verified account with at least $25,000 in lifetime earnings, spend or both and, for freelancers and agencies, a Job Success Score of 90% or more. Upwork emails a decision in about a week.
What data does it return?
Search jobs, Job details, as JSON.
What does it cost?
1 credit per call. New workspaces get 100 credits a month at no cost; plans work out to $0.99 to $1.45 per 1,000 credits. Failed calls are not charged.

Try the Upwork API free

Every new workspace gets 100 credits a month. Buy credits only when you need more.

Not affiliated with Upwork.