Just Join IT Scraper
Pricing
$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
$1.00 / 1,000 jobs
Rating
0.0
(0)
Developer
Paweł
Maintained by CommunityActor stats
1
Bookmarked
51
Total users
17
Monthly active users
12 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