JustJoin.it Scraper — Polish Tech & IT Jobs + B2B/UoP Salary avatar

JustJoin.it Scraper — Polish Tech & IT Jobs + B2B/UoP Salary

Pricing

$0.90 / 1,000 job results

Go to Apify Store
JustJoin.it Scraper — Polish Tech & IT Jobs + B2B/UoP Salary

JustJoin.it Scraper — Polish Tech & IT Jobs + B2B/UoP Salary

[$0.90/1K] Scrape live IT jobs from JustJoin.it, Poland's top tech board — all 23 categories. Title, company, city, per-contract B2B/UoP/mandate salary, tech stack, required + nice-to-have skills, remote status, geo-coords. For CEE developer sourcing, salary analytics and job boards.

Pricing

$0.90 / 1,000 job results

Rating

0.0

(0)

Developer

Nomad.Dev

Nomad.Dev

Maintained by Community

Actor stats

0

Bookmarked

7

Total users

4

Monthly active users

6 hours ago

Last modified

Share

JustJoin.it Jobs Scraper — Polish Tech & IT Jobs

Scrape current IT openings from JustJoin.it — Poland's biggest tech board — including salary ranges and tech stacks.

  • $0.90 per 1,000 jobs, no start fee — the cheapest JustJoin.it Actor on the Apify Store
  • All 23 tech categories by default — full-board coverage, not a single search query
  • Delta mode (onlyNewSinceLastRun) — scheduled runs return only what's new since the last run
  • Per-contract B2B / UoP / mandate salary breakdown with PLN / EUR / USD conversions
  • Keyword, city, salary, recency and exclusion filters built in

What JustJoin.it data does this scraper extract?

Each result is one flat JSON record per job posting:

FieldMeaning
titleJob title as posted
companyHiring company / organisation
sourceAlways "justjoinit" — useful when merging with other scrapers' output
locationLocation / duty station (may include remote hints)
cityPrimary city of the posting
latitude / longitudePrimary-location geo-coordinates for mapping
workplaceTyperemote / hybrid / office, as reported by the source
experienceLeveljunior / mid / senior / c-level, as reported by the source
skillsComma-separated required skills (string form)
requiredSkillsRequired skill names as an array
niceToHaveSkillsNice-to-have skill names as an array (populated with extractFullDetails)
salarySalary text for the first disclosed contract type (e.g. "B2B 22 000–28 000 PLN")
salaryByTypePer-contract-type salary breakdown — one object per contract type (B2B / permanent / mandate / …) with type, min, max, currency, period, gross and PLN/EUR/USD-normalised minPln/maxPln/minEur/maxEur/minUsd/maxUsd
salaryMin / salaryMaxRaw numeric min/max for the primary contract type
salaryCurrencySalary currency code (e.g. pln)
salaryPeriodSalary period (month / hour / day / year)
salaryGrossWhether the primary range is gross (true) or net (false)
categoryIdJustJoin.it numeric tech-category id
companyLogoHiring company logo thumbnail URL
urlDirect link to the posting
postedAtPosting date where the source provides it (ISO 8601)
snippetShort description excerpt
idStable source-side identifier
descriptionFull job description text — only with extractFullDetails
skillLevelsMap of skill name → required proficiency level (e.g. {"React": 4}) — only with extractFullDetails
languagesRequired languages ([{"code": "en", "level": "C1"}]) — only with extractFullDetails
companySizeReported company size (e.g. "501+") — only with extractFullDetails

How to scrape JustJoin.it with this Actor

  1. Click Try for free / Run — no login to the target site, no cookies, no proxies to configure.
  2. Adjust the input (keyword, filters, maxItems) or keep the defaults.
  3. 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 ApifyClient
client = 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

FieldTypeDefaultNotes
categoriesarray (select)all 23 categoriesTech 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). Defaults to every category — the source has no "all categories" query, so broad coverage means one request per category id; maxItems still caps the total returned. Narrow it to specific categories if you only want e.g. frontend roles. API callers: pass ids as strings (["1", "5"], not [1, 5]) — integer ids are rejected by input validation.
keywordsarray of strings[]Keep only postings whose title or skills contain at least one of these keywords (case-insensitive). Leave empty for all postings.
citystring""Keep only postings whose city or listed locations contain this text (case-insensitive), e.g. Warszawa. Leave empty for all locations.
experienceLevelsarray (select)[]Filter by experience level (junior / mid / senior / c-level). Leave empty for all levels.
workplaceTypesarray (select)[]Filter by workplace arrangement (remote / hybrid / office). Leave empty for all types.
contractTypesarray (select)[]Keep only postings offering at least one of these contract types (b2b / permanent / mandate_contract / internship / any). Leave empty for all.
withSalaryOnlybooleanfalseKeep only postings that disclose a salary range.
salaryMininteger0Drop postings whose top disclosed salary is below this (PLN-normalised). Postings with no salary are dropped when set. 0 disables.
postedSinceinteger0Drop 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.
titleExcludearray of strings[]Drop postings whose title contains any of these substrings (case-insensitive).
companyExcludearray of strings[]Drop postings whose company name contains any of these substrings (case-insensitive).
maxItemsinteger100Maximum number of job postings to return across all requested categories. Set 0 for no limit.
maxPagesinteger5Maximum number of result pages to fetch for each category (50 results per page). Increase to get older postings.
extractFullDetailsbooleanfalseAdvanced. Fetch each offer's page to add description, skillLevels, languages and companySize. One extra request per posting; fails open per posting.
onlyNewSinceLastRunbooleanfalseIncremental delta mode — emit only postings not returned by a previous run with the same filters. State persists across runs.
stateKeystring""Advanced. Override the delta bucket for onlyNewSinceLastRun; runs sharing a key share history. Empty = derive from filters.
cacheTtlSecondsinteger1800Reuse 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)",
"city": "Poznań",
"latitude": 52.4064,
"longitude": 16.9252,
"workplaceType": "remote",
"experienceLevel": "senior",
"skills": "Node.js, Vue.js, Azure",
"requiredSkills": ["Node.js", "Vue.js", "Azure"],
"niceToHaveSkills": [],
"salary": "B2B 22 000–28 000 PLN",
"salaryByType": [
{"type": "b2b", "min": 22000, "max": 28000, "currency": "pln", "period": "month", "gross": false, "minPln": 22000, "maxPln": 28000, "minEur": 5127.4, "maxEur": 6525.5, "minUsd": 5864.2, "maxUsd": 7463.5},
{"type": "permanent", "min": 18000, "max": 23000, "currency": "pln", "period": "month", "gross": true, "minPln": 18000, "maxPln": 23000, "minEur": 4195.1, "maxEur": 5360.2, "minUsd": 4797.9, "maxUsd": 6130.4}
],
"salaryMin": 22000,
"salaryMax": 28000,
"salaryCurrency": "pln",
"salaryPeriod": "month",
"salaryGross": false,
"categoryId": 1,
"companyLogo": "https://public.justjoin.it/companies/logos/original/upvanta.jpg",
"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.0009 per job returned — 1,000 jobs ≈ $0.90, the cheapest JustJoin.it scraper on the Apify Store. No start fee, 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.

Is this Actor useful to you? A short review on the Actor's Reviews tab helps other users find it — it takes a minute and is genuinely appreciated.