Just Join IT Scraper avatar

Just Join IT Scraper

Pricing

$1.00 / 1,000 jobs

Go to Apify Store
Just Join IT Scraper

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ł

Paweł

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

1

Monthly active users

9 days ago

Last modified

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

  • Extracts up to 100 job offers per listing page from server-rendered data (no browser needed)
  • 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

JustJoin.it is built with Next.js App Router. Job listing data is embedded in React Server Components (RSC) flight payloads within <script> tags. The scraper:

  1. Fetches listing pages via HTTP (CheerioCrawler -- no browser overhead)
  2. Parses RSC payloads to extract structured offer objects (up to 100 per page)
  3. Optionally visits individual job pages for full descriptions and skill levels

Input Parameters

ParameterTypeDefaultDescription
startUrlsArray[]Direct JustJoin.it URLs to scrape (overrides filters)
keywordString-Search keyword (e.g., "React", "DevOps")
locationStringall-locationsCity name (e.g., "warszawa", "krakow")
categoryString-Technology category (javascript, python, devops, etc.)
experienceLevelArray[]Filter: junior, mid, senior, lead
employmentTypeArray[]Filter: b2b, permanent, mandate_contract
workplaceTypeArray[]Filter: remote, hybrid, office
withSalaryBooleanfalseOnly return offers with salary disclosed
sortByStringpublishedSort by: published, salary
maxItemsInteger100Max offers to scrape (0 = unlimited)
extractFullDetailsBooleanfalseVisit each job page for full description
maxConcurrencyInteger10Max parallel requests
maxRequestsPerMinuteInteger120Rate limiting
proxyConfigurationObject-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:

FieldTypeDescription
titleStringJob title
companyNameStringCompany name
companyLogoUrlStringCompany logo image URL
cityStringPrimary city
streetStringStreet address
locationsArrayAll locations [{city, street}]
salaryStringHuman-readable salary (e.g., "24,000 - 33,000 PLN/month (net, b2b)")
salaryMinNumberMinimum salary (original currency)
salaryMaxNumberMaximum salary (original currency)
salaryCurrencyStringSalary currency (PLN, USD, EUR, etc.)
salaryTypeStringContract type for this salary (b2b, permanent, etc.)
salaryUnitStringPay unit (month, hour)
salaryGrossBooleanWhether salary is gross (true) or net (false)
allEmploymentTypesArrayAll salary variants [{from, to, currency, type, unit, gross}]
experienceLevelStringExperience level (junior, mid, senior, lead)
workplaceTypeStringWorkplace type (remote, hybrid, office)
workingTimeStringWorking time (full_time, part_time)
requiredSkillsArrayRequired technology skills
niceToHaveSkillsArrayNice-to-have skills
remoteInterviewBooleanRemote interview available
isPromotedBooleanPromoted/featured listing
isSuperOfferBooleanSuper offer badge
publishedAtStringISO 8601 publish date
lastPublishedAtStringISO 8601 last republish date
expiredAtStringISO 8601 expiration date
slugStringURL slug identifier
jobUrlStringDirect URL to job offer
guidStringUnique offer identifier
scrapedAtStringISO 8601 scrape timestamp

Full Details Mode (extractFullDetails: true)

Additional fields when visiting each job page:

FieldTypeDescription
descriptionStringFull job description text
companyWebsiteStringCompany website URL
countryStringCountry code (e.g., "PL")
regionStringRegion/state
validThroughStringOffer validity date
requiredSkillsDetailedArraySkills with proficiency levels [{name, level}]
niceToHaveSkillsDetailedArrayNice-to-have skills with levels
languagesArrayRequired languages [{code, level}]
companySizeStringCompany size category
countryCodeStringISO 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

SlugName
javascriptJavaScript
htmlHTML
phpPHP
rubyRuby
pythonPython
javaJava
net.NET
scalaScala
cC
mobileMobile
testingTesting/QA
devopsDevOps
adminAdmin/IT
uxUX/UI
pmProject Management
gameGame Dev
analyticsAnalytics
securitySecurity
dataData
goGo
supportSupport
erpERP
architectureArchitecture
aiAI/ML

Performance and Cost

Default Mode (extractFullDetails: false)

  • Speed: ~100 offers per request (single HTTP call per listing page)
  • Cost: Minimal -- one HTTP request per 100 offers
  • Proxy: Optional, works without proxies in most cases
  • Recommended for: Most use cases, salary analysis, market research

Full Details Mode (extractFullDetails: true)

  • Speed: 1 HTTP request per offer (for full descriptions)
  • Cost: Higher -- one request per offer plus listing page requests
  • 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

ParameterValuesExample
experience-leveljunior, mid, senior, lead?experience-level=senior,mid
employment-typeb2b, permanent, mandate_contract?employment-type=b2b
workplace-typeremote, hybrid, office?workplace-type=remote,hybrid
with-salaryyes?with-salary=yes
keywordany string?keyword=React
orderByDESC?orderBy=DESC
sortBypublished, salary?sortBy=published

Example URLs

# All remote senior Python jobs with salary
https://justjoin.it/job-offers/all-locations/python?experience-level=senior&workplace-type=remote&with-salary=yes
# B2B JavaScript jobs in Warsaw
https://justjoin.it/job-offers/warszawa/javascript?employment-type=b2b
# All DevOps jobs sorted by salary
https://justjoin.it/job-offers/all-locations/devops?with-salary=yes&sortBy=salary&orderBy=DESC