Search Pracuj.pl jobs
Job ads on Pracuj.pl (Poland's largest job board) for keywords and a place, with every filter the site offers: category, position level, contract type, work schedule, work mode, region, radius, posting date, minimum salary and employer. Each result has the title, employer, locations with coordinates, salary text, contract and level labels, work modes, dates and links; ads published in several cities are grouped like on the site. facets lists the ids for every filter. 50 per page.
Every response includes credits_used: the credits this call cost.
Parameters
| name | type | description |
|---|---|---|
q | string | Keywords (job title, skill or company). Example: python |
location | string | City or place (e.g. warszawa, krakow, wroclaw). Example: warszawa |
radius | 0 | 10 | 20 | 30 | 50 | 100 | Distance around location in km. |
category | string | Category ids, comma separated (see facets.categories; e.g. 5016 IT - software development). |
level | string | Position level ids, comma separated (1 trainee, 3 assistant, 17 junior, 4 mid, 18 senior, 19 expert, 5 team lead, 20 manager, 6 director; see facets.position_levels). |
contract | string | Contract type ids, comma separated (0 employment contract, 1 contract for specific work, 2 mandate contract, 3 B2B, 4 replacement, 5 agency, 6 temporary, 7 internship). |
schedule | string | Work schedule ids, comma separated (0 full time, 1 part time, 2 additional or temporary). |
mode | string | Work modes, comma separated: full-office, hybrid, home-office (remote), mobile. Example: hybrid |
region | string | Region (voivodeship) ids, comma separated (see facets.regions; 7 mazowieckie, 6 malopolskie). |
posted | 1 | 3 | 7 | 14 | 30 | Only ads published in the last N days. |
salary_min | string | Minimum monthly salary in PLN (1 = only ads that show a salary). |
company_id | string | Only this employer's ads (company_id from results). |
ukrainian_friendly | string | 1 = only ads open to candidates from Ukraine. |
no_agencies | string | 1 = leave out recruitment agencies' ads. |
whole_poland | string | 1 = include ads for work anywhere in Poland. |
page | string | Results page (1-based). Pass next_page back; it is null on the last page. |
Every endpoint also takes fresh, raw, fields (see lean responses and caching).
Example
curl "https://api.api.sh/pracuj/v1/search?q=python" \
-H "x-api-key: $APISH_KEY" import os, requests
res = requests.get(
"https://api.api.sh/pracuj/v1/search",
params={"q": "python"},
headers={"x-api-key": os.environ["APISH_KEY"]},
timeout=120,
)
res.raise_for_status()
data = res.json() const url = new URL("https://api.api.sh/pracuj/v1/search");
url.searchParams.set("q", "python");
const res = await fetch(url, { headers: { "x-api-key": process.env.APISH_KEY } });
if (!res.ok) throw new Error(`${res.status} ${await res.text()}`);
const data = await res.json(); Response
A JSON object with the fields described above, plus raw (the source's own data), cached, fetched_at and credits_used. Errors return {"success": false, "error": "…"} with the HTTP status (see errors). A lookup that ran but found nothing (404) costs the price above; refused calls and errors on our side are free (what's charged).