# Upwork jobs search: `POST /v1/upwork/jobs`

Cost: 2 credits (2 (an empty page and failed requests are free)). Docs: https://scrapercompany.com/docs/reference/upwork-jobs

One page (up to 10) of Upwork jobs.

Upwork's own signed-out search page (`/nx/search/jobs/`). Each row carries the job `ciphertext` (its public id) and
`job_id`, the title with Upwork's match highlighting removed, the
full description, the payment type (`fixed`/`hourly`) with the
fixed budget or hourly range, the contractor tier, duration and
engagement, the skill list, the publish time, and the client
block Upwork prints on search (country — often null there —
payment-verified flag, total spent, reviews, feedback). `total`
is Upwork's own result count; page with `page`.

Give `query` or an Upwork search `url` (its filters take
priority). A one-value `job_types`/`experience_levels` rides
Upwork's own URL filters (verified); several values,
`min_fixed_budget` and `max_age_days` filter the fetched page
instead, so a filtered page can return fewer than 10 rows. An
empty page is not billed. A block or a spent time budget is 503
with `Retry-After` and is not billed.

Request body (JSON):

- `query` (string | null; optional; min length 1, max length 200): Job keywords, as typed into Upwork search.
- `url` (string | null; optional; min length 12, max length 2000): An Upwork jobs search URL instead of `query` (`upwork.com/nx/search/jobs/?…`); its own filters take priority.
- `sort` (string; optional; default recency; one of recency, relevance): Upwork's sort: newest first (`recency`) or Upwork's relevance order.
- `page` (integer; optional; default 1; min 1, max 100): Result page, 10 jobs each (Upwork's `page`).
- `job_types` (array of string; optional; max items 2): Payment type. One value rides Upwork's `t` filter; both values filter the fetched page.
- `experience_levels` (array of string; optional; max items 3): Contractor tier. One value rides Upwork's `contractor_tier` filter; several filter the fetched page.
- `min_fixed_budget` (number | null; optional; min 0): Only fixed-price jobs with a budget of at least this many USD. Filters the fetched page.
- `max_age_days` (integer | null; optional; min 1, max 365): Only jobs published within the last N days. Filters the fetched page.

Base URL: `https://api.scrapercompany.com`. Auth: send your key in the `x-api-key` header. A failed request (4xx or 5xx) or an empty result costs 0 credits.

- [Full API reference as one Markdown file](https://scrapercompany.com/llms-full.txt)
- [OpenAPI spec](https://scrapercompany.com/openapi.json)
