JustJoin.it Jobs Scraper — Polish Tech & IT Jobs
Pricing
Pay per usage
JustJoin.it Jobs Scraper — Polish Tech & IT Jobs
Extract live IT vacancies from JustJoin.it, Poland's leading tech job board. Records include title, company, city, salary ranges (B2B/UoP), tech stack and remote status. Perfect for CEE job boards, salary analytics and sourcing Polish developers.
Scrape current IT openings from JustJoin.it — Poland's biggest tech board — including salary ranges and tech stacks.
What JustJoin.it data does this scraper extract?
Each result is one flat JSON record per job posting:
| Field | Meaning |
|---|---|
title | Job title as posted |
company | Hiring company / organisation |
source | Always "justjoinit" — useful when merging with other scrapers' output |
location | Location / duty station (may include remote hints) |
workplaceType | remote / hybrid / office, as reported by the source |
experienceLevel | junior / mid / senior / c-level, as reported by the source |
skills | Comma-separated required skills, where the source provides them |
salary | Salary text where the source provides it (e.g. "B2B 22 000–28 000 PLN") |
salaryMin | Raw numeric salary range minimum, where the source provides it |
salaryMax | Raw numeric salary range maximum, where the source provides it |
salaryCurrency | Salary currency code (e.g. pln), where the source provides it |
salaryPeriod | Salary period as reported by the source (month / hour / day) |
categoryId | JustJoin.it numeric tech-category id |
url | Direct link to the posting |
postedAt | Posting date where the source provides it (ISO 8601) |
snippet | Short description excerpt |
id | Stable source-side identifier |
How to scrape JustJoin.it with this Actor
- Click Try for free / Run — no login to the target site, no cookies, no proxies to configure.
- Adjust the input (keyword, filters,
maxItems) or keep the defaults. - Run it and export the dataset as JSON, CSV or Excel, or read it over the API.
Run it from your own code:
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("nomad-agent/justjoinit-scraper").call(run_input={"maxItems": 50})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item["title"], "—", item["company"], item["url"])
Or a single HTTP call that runs the Actor and returns items in one response:
curl -X POST \"https://api.apify.com/v2/acts/nomad-agent~justjoinit-scraper/run-sync-get-dataset-items?token=<YOUR_APIFY_TOKEN>" \-H "Content-Type: application/json" \-d '{"maxItems": 50}'
Input
| Field | Type | Default | Notes |
|---|---|---|---|
categories | array (select) | ["1", "2"] | Tech category to fetch. Multi-select of JustJoin.it's 23 categories (JavaScript, HTML/CSS, PHP, Ruby, Python, .NET, Scala, C, Mobile, Testing, DevOps, Admin, UX/UI, PM, Game, Analytics, Security, Data, Go, Support, ERP, Architecture, Other). Leave empty to use the default frontend-focused set. |
experienceLevels | array (select) | [] | Filter by experience level (junior / mid / senior / c-level). Leave empty for all levels. |
workplaceTypes | array (select) | [] | Filter by workplace arrangement (remote / hybrid / office). Leave empty for all types. |
postedSince | integer | 0 | Drop postings older than this many days, based on the source's publish date. Postings with a missing/unparseable publish date always pass through. Set 0 to disable. |
titleExclude | array of strings | [] | Drop postings whose title contains any of these substrings (case-insensitive). |
companyExclude | array of strings | [] | Drop postings whose company name contains any of these substrings (case-insensitive). |
maxItems | integer | 100 | Maximum number of job postings to return across all requested categories. Set 0 for no limit. |
maxPages | integer | 5 | Maximum number of result pages to fetch for each category (50 results per page). Increase to get older… |
cacheTtlSeconds | integer | 1800 | Advanced. Reuse a recent fetch instead of hitting JustJoin.it again within this many seconds; set 0 to always fetch fresh data. |
Output example
{"id": "upvanta-senior-full-stack","title": "Senior Full Stack Developer","company": "Upvanta","source": "justjoinit","location": "Poznań (Remote)","workplaceType": "remote","experienceLevel": "senior","skills": "Node.js, Vue.js, Azure","salary": "B2B 22 000–28 000 PLN","salaryMin": 22000,"salaryMax": 28000,"salaryCurrency": "pln","salaryPeriod": "month","categoryId": 1,"url": "https://justjoin.it/job-offer/upvanta-senior-full-stack","postedAt": "2026-06-26T09:00:27.819Z","snippet": "level=senior; skills=Node.js, Vue.js, Azure; salary=B2B 22 000–28 000 PLN"}
Pricing
Pay per event: $0.05 per Actor start and $0.004 per job returned. 100 jobs ≈ $0.45. No subscription, no rental — you pay only for what you fetch.
Integrations
Export results as JSON, CSV or Excel; connect via Make, Zapier or n8n; call directly with run-sync-get-dataset-items; or plug into AI agents through the Apify MCP server.
Use cases
- CEE tech job boards and alert bots
- Salary analytics for the Polish market (B2B vs UoP)
- Tech-stack demand tracking
- Sourcing developers in Poland
FAQ
Is it legal to scrape JustJoin.it? This Actor reads only publicly available job postings — data any visitor can see without logging in. No personal data behind authentication is touched. Review the target site's terms and your local regulations for your specific use case.
Do I need an account on the target site? No. Postings are fetched from public pages/APIs — no login, cookies or session tokens.
How fresh is the data?
Every run fetches live listings. Results are cached for cacheTtlSeconds (default 30 min, set 0 to always hit the source live).
How many jobs can I get?
maxItems caps the run (set 0 where supported for no cap). Most sources paginate from newest to oldest.
Something broken or missing? Open an issue on the Actor's Issues tab — it is monitored and reliability fixes ship fast.