Just Join IT Scraper
Pricing
from $1.00 / 1,000 jobs
Go to Apify Store
Default Mode (
Full Details Mode (
Default Mode (
Full Details Mode (
Just Join IT Scraper
Fast IT job scraper for JustJoin.it. Extract salaries, tech stacks, experience levels, remote options. Supports keyword, location, category filters. Up to 100 offers per request.
Pricing
from $1.00 / 1,000 jobs
Rating
0.0
(0)
Developer
Paweł
Maintained by CommunityActor stats
1
Bookmarked
53
Total users
17
Monthly active users
14 days ago
Last modified
Categories
Share
Fast and efficient Apify Actor for scraping IT job listings from JustJoin.it -- Poland's and Central Europe's leading IT job board.
Features
- Scrapes every matching offer -- automatically pages through the full result set (hundreds or thousands of offers, not just the first page)
- Comprehensive job data: title, company, salary (min/max/currency/type), location, experience level, required skills, workplace type, and more
- All salary information broken down into structured fields (min, max, currency, contract type, gross/net)
- Multiple employment type salary variants per offer (B2B, permanent, converted currencies)
- Filter by: keyword, location, technology category, experience level, employment type, workplace type, salary availability
- Optional full detail extraction: visits each job page for description, skill levels, languages, company size
- Built-in deduplication, session rotation, and proxy support
- Three dataset views: Overview, Detailed, and Salaries
How It Works
- You set filters (keyword, location, category, experience, salary, etc.) or paste JustJoin.it URLs
- The scraper pages through every matching offer and returns clean, structured data -- no browser, fast and lightweight
- Optionally enriches each offer with the full description, skill levels, languages, and company size
Input Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
startUrls | Array | [] | Direct JustJoin.it URLs to scrape (overrides filters) |
keyword | String | - | Search keyword (e.g., "React", "DevOps") |
location | String | all-locations | City name (e.g., "warszawa", "krakow") |
category | String | - | Technology category (javascript, python, devops, etc.) |
experienceLevel | Array | [] | Filter: junior, mid, senior, lead |
employmentType | Array | [] | Filter: b2b, permanent, mandate_contract |
workplaceType | Array | [] | Filter: remote, hybrid, office |
withSalary | Boolean | false | Only return offers with salary disclosed |
sortBy | String | published | Sort by: published, salary |
maxItems | Integer | 100 | Max offers to scrape (0 = unlimited) |
extractFullDetails | Boolean | false | Visit each job page for full description |
maxConcurrency | Integer | 10 | Max parallel requests |
maxRequestsPerMinute | Integer | 300 | Rate limiting |
proxyConfiguration | Object | - | Proxy settings (recommended for extractFullDetails) |
Input Example
{"keyword": "React","location": "warszawa","category": "javascript","experienceLevel": ["senior", "mid"],"employmentType": ["b2b"],"workplaceType": ["remote", "hybrid"],"withSalary": true,"maxItems": 50,"extractFullDetails": false}
Using Start URLs
You can also provide pre-built URLs directly:
{"startUrls": ["https://justjoin.it/job-offers/all-locations/python?experience-level=senior&with-salary=yes","https://justjoin.it/job-offers/warszawa/javascript?workplace-type=remote"],"maxItems": 200}
Output
Default Mode (extractFullDetails: false)
Each record contains:
| Field | Type | Description |
|---|---|---|
title | String | Job title |
companyName | String | Company name |
companyLogoUrl | String | Company logo image URL |
city | String | Primary city |
street | String | Street address |
locations | Array | All locations [{city, street}] |
salary | String | Human-readable salary (e.g., "24,000 - 33,000 PLN/month (net, b2b)") |
salaryMin | Number | Minimum salary (original currency) |
salaryMax | Number | Maximum salary (original currency) |
salaryCurrency | String | Salary currency (PLN, USD, EUR, etc.) |
salaryType | String | Contract type for this salary (b2b, permanent, etc.) |
salaryUnit | String | Pay unit (month, hour) |
salaryGross | Boolean | Whether salary is gross (true) or net (false) |
allEmploymentTypes | Array | All salary variants [{from, to, currency, type, unit, gross}] |
experienceLevel | String | Experience level (junior, mid, senior, lead) |
workplaceType | String | Workplace type (remote, hybrid, office) |
workingTime | String | Working time (full_time, part_time) |
requiredSkills | Array | Required technology skills |
niceToHaveSkills | Array | Nice-to-have skills |
remoteInterview | Boolean | Remote interview available |
isPromoted | Boolean | Promoted/featured listing |
isSuperOffer | Boolean | Super offer badge |
publishedAt | String | ISO 8601 publish date |
lastPublishedAt | String | ISO 8601 last republish date |
expiredAt | String | ISO 8601 expiration date |
slug | String | URL slug identifier |
jobUrl | String | Direct URL to job offer |
guid | String | Unique offer identifier |
scrapedAt | String | ISO 8601 scrape timestamp |
Full Details Mode (extractFullDetails: true)
Additional fields when visiting each job page:
| Field | Type | Description |
|---|---|---|
description | String | Full job description text |
companyWebsite | String | Company website URL |
country | String | Country code (e.g., "PL") |
region | String | Region/state |
validThrough | String | Offer validity date |
requiredSkillsDetailed | Array | Skills with proficiency levels [{name, level}] |
niceToHaveSkillsDetailed | Array | Nice-to-have skills with levels |
languages | Array | Required languages [{code, level}] |
companySize | String | Company size category |
countryCode | String | ISO country code |
Example Output (Default Mode)
{"title": "Fullstack Developer (Angular + Python)","companyName": "Code and Pepper","companyLogoUrl": "https://imgproxy.justjoinit.tech/.../logo.png","city": "Gdansk","street": "Aleja Grunwaldzka","locations": [{ "city": "Gdansk", "street": "Aleja Grunwaldzka" },{ "city": "Suwalki", "street": null }],"salary": "24,000 - 33,000 PLN/month (net, b2b)","salaryMin": 24000,"salaryMax": 33000,"salaryCurrency": "PLN","salaryType": "b2b","salaryUnit": "month","salaryGross": false,"allEmploymentTypes": [{"from": 24000,"to": 33000,"currency": "PLN","type": "b2b","unit": "month","gross": false,"currencySource": "original"},{"from": 18000,"to": 27000,"currency": "PLN","type": "permanent","unit": "month","gross": true,"currencySource": "original"},{"from": 6402,"to": 8803,"currency": "USD","type": "b2b","unit": "month","gross": false,"currencySource": "conversion"}],"experienceLevel": "senior","workplaceType": "hybrid","workingTime": "full_time","requiredSkills": ["Angular", "Python", "TypeScript", "REST API"],"niceToHaveSkills": [],"remoteInterview": true,"isPromoted": false,"isSuperOffer": false,"publishedAt": "2026-03-15T08:00:00.000Z","lastPublishedAt": "2026-03-15T08:00:00.000Z","expiredAt": "2026-04-15T21:59:59.999Z","slug": "code-and-pepper-fullstack-developer-angular-python--gdansk-javascript","jobUrl": "https://justjoin.it/job-offer/code-and-pepper-fullstack-developer-angular-python--gdansk-javascript","guid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890","scrapedAt": "2026-03-16T12:00:00.000Z"}
Example Output (Full Details Mode)
Includes all fields above plus:
{"description": "We are looking for a Senior Fullstack Developer with strong Angular and Python skills to join our product team...","companyWebsite": "https://codeandpepper.com","country": "PL","region": "Pomorskie","validThrough": "2026-04-15T21:59:59.999Z","requiredSkillsDetailed": [{ "name": "Angular", "level": 4 },{ "name": "Python", "level": 4 },{ "name": "TypeScript", "level": 3 },{ "name": "REST API", "level": 3 }],"languages": [{ "code": "en", "level": "B2" }],"countryCode": "PL"}
Available Technology Categories
| Slug | Name |
|---|---|
javascript | JavaScript |
html | HTML |
php | PHP |
ruby | Ruby |
python | Python |
java | Java |
net | .NET |
scala | Scala |
c | C |
mobile | Mobile |
testing | Testing/QA |
devops | DevOps |
admin | Admin/IT |
ux | UX/UI |
pm | Project Management |
game | Game Dev |
analytics | Analytics |
security | Security |
data | Data |
go | Go |
support | Support |
erp | ERP |
architecture | Architecture |
ai | AI/ML |
Performance and Cost
Default Mode (extractFullDetails: false)
- Speed: Very fast -- fetches 100 offers per page and pages through the whole result set
- Cost: Minimal -- lightweight structured data, no browser
- Proxy: Optional, works without proxies in most cases
- Recommended for: Most use cases, salary analysis, market research
Full Details Mode (extractFullDetails: true)
- Speed: Slower -- fetches one extra page per offer for the full description
- Cost: Higher -- one extra fetch per offer on top of the listing pages
- Proxy: Recommended to avoid rate limiting
- Recommended for: When you need full job descriptions, skill proficiency levels, or language requirements
URL Filter Reference
JustJoin.it URL structure:
https://justjoin.it/job-offers/{location}/{category}?{filters}
Query Parameters
| Parameter | Values | Example |
|---|---|---|
experience-level | junior, mid, senior, lead | ?experience-level=senior,mid |
employment-type | b2b, permanent, mandate_contract | ?employment-type=b2b |
workplace-type | remote, hybrid, office | ?workplace-type=remote,hybrid |
with-salary | yes | ?with-salary=yes |
keyword | any string | ?keyword=React |
orderBy | DESC | ?orderBy=DESC |
sortBy | published, salary | ?sortBy=published |
Example URLs
# All remote senior Python jobs with salaryhttps://justjoin.it/job-offers/all-locations/python?experience-level=senior&workplace-type=remote&with-salary=yes# B2B JavaScript jobs in Warsawhttps://justjoin.it/job-offers/warszawa/javascript?employment-type=b2b# All DevOps jobs sorted by salaryhttps://justjoin.it/job-offers/all-locations/devops?with-salary=yes&sortBy=salary&orderBy=DESC