VOOZH about

URL: https://apify.com/mrarcode/justjoinit-scraper

⇱ JustjoinIT Scraper Β· Apify


Pricing

from $2.00 / 1,000 job offers

Go to Apify Store

JustjoinIT Scraper

Track new & changed JustJoin.it tech jobs. Incremental monitoring with salary, stack & company data β€” get only what changed, not the same list every run.

Pricing

from $2.00 / 1,000 job offers

Rating

0.0

(0)

Developer

πŸ‘ MrArCode

MrArCode

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

6 days ago

Last modified

Share

JustJoin.it Jobs Scraper & Monitoring

Extract structured job listings from JustJoin.it with salary data, company information, locations, work modes, contract types, full job descriptions, technology tags, and incremental change tracking.

This Actor is designed for recruiters, HR analytics teams, job market researchers, data teams, lead generation workflows, and AI agents that need clean job data from the Polish and international tech labor markets.

What does it do?

This scraper collects job offers from JustJoin.it search pages and returns structured records ready for analysis, automation, monitoring, or AI workflows.

It can work in two modes:

  • Fast listing mode β€” collects core data directly from search results.
  • Full details mode β€” visits each job offer page and enriches the output with full descriptions, requirements, responsibilities, and direct application URLs.

It also supports incremental monitoring, so repeated runs can return only new, updated, reappeared, or expired job offers.

Key features

  • Search JustJoin.it by keyword and location
  • Explode multi-location grouped offers into individual structured records with stable, unique jobId hashes
  • Support for direct single-offer scraping via startUrl (when pointing to a specific /offers/ URL)
  • Filter by contract type, work mode, seniority/position level, voivodeship region, publication period, and salary disclosure
  • Extract salary ranges into structured fields: salaryMin, salaryMax, salaryCurrency, salaryPeriod, salaryRanges
  • Extract contract types, work modes, work schedules, position levels, and remote-work flags
  • Optional full detail enrichment: extract full description, requirements, responsibilities, and direct apply URL
  • Incremental mode with NEW, UPDATED, UNCHANGED, REAPPEARED, and EXPIRED
  • Repost-aware monitoring with optional repost skipping based on role fingerprints
  • Compact output mode for AI agents, MCP workflows, and lightweight automations
  • Optional description truncation to reduce payload size
  • Data quality fields such as detailFetchStatus and dataQualityWarnings
  • Uses Apify residential proxy for Poland when running on the Apify platform

Use cases

  • Monitor new job postings for software engineers, designers, product managers, and other tech roles
  • Track salary trends across tech stacks (e.g., Python, JavaScript, DevOps, QA)
  • Build HR analytics dashboards and track competitor hiring activity
  • Feed job data into AI agents or MCP workflows
  • Export structured job data to spreadsheets, databases, CRMs, ATS systems, or BI tools
  • Detect new, changed, reappeared, and expired offers over time

Input

You can use regular search parameters or provide direct JustJoin.it search or offer URLs.

Basic search example

{
"query":"python",
"location":"Warszawa",
"maxResults":25,
"includeDetails":false
}

Full detail enrichment example

{
"query":"devops",
"location":"KrakΓ³w",
"maxResults":10,
"includeDetails":true
}

Single offer scraping example

{
"startUrl":"https://justjoin.it/offers/tech-corp-senior-python-developer",
"includeDetails":true
}

Incremental monitoring example

{
"query":"react",
"location":"WrocΕ‚aw",
"maxResults":50,
"incremental":true,
"includeUnchanged":false
}

Track expired and reappeared offers

{
"query":"qa",
"location":"Warszawa",
"maxResults":100,
"incremental":true,
"trackExpiration":true,
"includeUnchanged":false
}

Compact AI/MCP output

{
"query":"golang",
"location":"Warszawa",
"maxResults":25,
"compact":true
}

Limit long descriptions

{
"query":"typescript",
"location":"Warszawa",
"maxResults":10,
"includeDetails":true,
"descriptionMaxLength":1000
}

Input fields

FieldTypeDescription
querystringSearch keyword or stack, for example python, devops, product manager.
locationstringCity or area, for example Warszawa, KrakΓ³w, WrocΕ‚aw.
contractTypestringFilter by contract type ID: "0" (UoP), "3" (B2B), "2" (zlecenie), "1" (dzieΕ‚o), etc.
workModestringFilter by working arrangements: full-office, hybrid, home-office, mobile.
positionLevelstringFilter by position level ID: "17" (Junior), "4" (Mid), "18" (Senior), "19" (Expert).
regionstringFilter by Polish province/region ID (1-17), for example "7" (MaΕ‚opolskie).
periodstringFilter by publication period: "1" (24h), "3" (3 days), "7" (7 days), "14", "30".
withSalarybooleanIf enabled, only listings containing disclosed salary ranges will be returned.
maxResultsintegerMaximum number of job records to return. Use 0 for unlimited.
includeDetailsbooleanVisit each job page and enrich the listing with full details. Slower, but returns richer data.
startUrlstringStarting URL on justjoin.it to scrape. Overrides all other search filters.
incrementalbooleanEnables change tracking between runs.
stateKeystringOptional custom state key for separating monitoring contexts.
includeUnchangedbooleanInclude unchanged offers in incremental output. Unchanged records are useful for snapshots.
trackExpirationbooleanDetect expired and reappeared offers. Requires incremental=true.
skipRepostsbooleanSkip detected reposts. Requires trackExpiration=true.
compactbooleanReturn only core fields for AI agents and lightweight workflows.
descriptionMaxLengthintegerTruncate job descriptions to a maximum number of characters. Use 0 for no limit.
proxyConfigurationobjectSpecifies proxy configuration to use (Poland Residential proxy pre-configured).
bypassChargingbooleanRun in dry-run mode without charging billing (useful for testing or local runs).

Output example

{
"jobId":"85a1b8cfec0b1c725b757937a4a3a3646f037fa797dc3b70ae377cd0226ecdc8f",
"offerId":123456,
"title":"Senior Python Developer",
"company":"Tech Corp Sp. z o.o.",
"companyProfileUrl":"https://justjoin.it/brands/tech-corp",
"location":"Warszawa",
"locations":[
{
"city":"Warszawa"
}
],
"allOfferUrls":[
"https://justjoin.it/offers/tech-corp-senior-python-developer-warszawa"
],
"locationCount":1,
"salaryText":"18 000 - 24 000 PLN net/mies.",
"salaryMin":18000.0,
"salaryMax":24000.0,
"salaryCurrency":"PLN",
"salaryPeriod":"month",
"salaryRanges":[
{
"min":18000.0,
"max":24000.0,
"currency":"PLN",
"period":"month"
}
],
"contractTypes":["B2B"],
"workModes":["hybrid"],
"positionLevels":["Senior"],
"isRemote":false,
"technologies":["Python","Django","PostgreSQL"],
"postedDate":"2026-06-20T12:00:00Z",
"url":"https://justjoin.it/offers/tech-corp-senior-python-developer-warszawa",
"portalUrl":"https://justjoin.it",
"source":"justjoin.it",
"changeType":"NEW",
"firstSeenAt":"2026-06-23T12:00:00Z",
"lastSeenAt":"2026-06-23T12:00:00Z",
"detailFetchStatus":"skipped",
"dataQualityWarnings":[]
}

Fields with default or empty values are omitted here for brevity; real records include all fields listed in 'Output fields overview'.

Full details output

When includeDetails=true, the Actor enriches each offer with additional fields:

  • description (full job description body HTML)
  • requirements (full job requirements list or text)
  • responsibilities (full job responsibilities list or text)
  • applyUrl (direct external application link)
  • companyLogoUrl (URL of the company's logo)
  • expirationDate (timestamp of offer expiration)

Example detail fields:

{
"description":"<div>Detailed job description body...</div>",
"requirements":"Strong Python knowledge, Django experience...",
"responsibilities":"Develop new features, write tests...",
"applyUrl":"https://apply.techcorp.com/job-123",
"detailFetchStatus":"success"
}

Compact output

Compact mode is designed for AI agents, MCP workflows, automations, and low-payload integrations.

Enable it with:

{
"compact":true
}

Compact output includes only core fields:

{
"jobId":"85a1b8cfec0b1c725b757937a4a3a3646f037fa797dc3b70ae377cd0226ecdc8f",
"title":"Senior Python Developer",
"company":"Tech Corp Sp. z o.o.",
"location":"Warszawa",
"url":"https://justjoin.it/offers/tech-corp-senior-python-developer-warszawa",
"salaryMin":18000.0,
"salaryMax":24000.0,
"salaryCurrency":"PLN",
"salaryPeriod":"month",
"contractTypes":["B2B"],
"workModes":["hybrid"],
"technologies":["Python","Django","PostgreSQL"],
"changeType":"NEW"
}

Incremental mode

Incremental mode lets you monitor a search over time.

When incremental=true, the Actor stores state between runs and classifies each job offer using changeType.

Supported change types:

changeTypeMeaning
NEWThe offer was not seen in previous runs for this search context.
UPDATEDThe offer was seen before, but selected fields changed.
UNCHANGEDThe offer was already seen and did not change.
REAPPEAREDThe offer was previously marked as expired and appeared again.
EXPIREDThe offer was previously active but is no longer present in a completed scan.

Example: return only new or changed offers

{
"query":"python",
"location":"Warszawa",
"incremental":true,
"includeUnchanged":false,
"maxResults":100
}

Example: include unchanged offers too

{
"query":"python",
"location":"Warszawa",
"incremental":true,
"includeUnchanged":true,
"maxResults":100
}

State key

By default, the Actor automatically creates a state key from the search parameters.

You can also provide a custom stateKey:

{
"query":"python",
"location":"Warszawa",
"incremental":true,
"stateKey":"python-warsaw-monitor"
}

Use stateKey when you want full control over separate monitoring contexts.

Expired and reappeared offers

To track expired and reappeared offers, enable:

{
"incremental":true,
"trackExpiration":true
}

The Actor only detects expired offers after a completed scan. If a scan is interrupted, hits a request error, parser error, budget limit, maxResults, or page safety limit, expired detection is skipped to prevent false positives.

This protects users from fake expiration events.

Repost detection

When trackExpiration=true, the Actor can detect likely reposts using a content fingerprint based on role-identifying fields.

Enable repost skipping with:

{
"incremental":true,
"trackExpiration":true,
"skipReposts":true
}

This is useful when employers repost very similar jobs under new offer IDs.

Data quality fields

Each record includes fields that help you understand how complete the data is:

FieldMeaning
detailFetchStatusskipped, success, or failed (if the fetch failed or empty details were parsed).
dataQualityWarningsList of warnings if enrichment failed or partial data was used.

Example:

{
"detailFetchStatus":"failed",
"dataQualityWarnings":[
"detail page fetch failed after retries; using listing data only"
]
}

Performance notes

includeDetails=false is faster and uses fewer requests.

includeDetails=true performs one additional request per job offer and may take longer, especially for large result sets.

Recommended settings:

  • Use includeDetails=false for broad market monitoring.
  • Use includeDetails=true when you need full descriptions and application URLs.
  • Use compact=true for AI workflows and lightweight automations.
  • Use descriptionMaxLength to reduce output size when using LLMs.

Limitations

  • The Actor extracts publicly available job offer data from JustJoin.it.
  • Full detail enrichment depends on the availability and structure of the individual job offer page.
  • Some offers may not include salary information.
  • Some offers may not include apply URLs.
  • EXPIRED detection requires a completed incremental scan.
  • Repost detection is heuristic and based on content fingerprints.
  • includeDetails=true is slower than listing-only mode.

Responsible usage

Use this Actor responsibly and in accordance with applicable laws, platform terms, and data protection rules.

The Actor is intended for collecting publicly available job listing data. You are responsible for how you use, store, process, and share the extracted data.

Pricing

This is a pay-per-event Actor. You only pay for the job offers successfully scraped, and the per-record price includes all residential proxy and platform usage costs (there is no separate, unexpected proxy bill).

FAQ

Does this Actor support direct JustJoin.it search or offer URLs?

Yes. Use the startUrl field.

Can I monitor only new jobs?

Yes. Use:

{
"incremental":true,
"includeUnchanged":false
}

Can I get full job descriptions?

Yes. Set:

{
"includeDetails":true
}

Can I reduce output size for AI agents?

Yes. Use:

{
"compact":true
}

or use:

{
"descriptionMaxLength":1000
}

Are unchanged records charged?

In incremental mode, unchanged records are intended for snapshot completeness and are not treated as chargeable change events.

Why did I get zero records in incremental mode?

If incremental=true and includeUnchanged=false, a zero-record run usually means there were no new or changed offers for that search context.

Example monitoring workflow

  1. Run the Actor once with incremental=true.
  2. The first run returns offers as NEW.
  3. Schedule the Actor daily or hourly.
  4. Later runs return only changes if includeUnchanged=false.
  5. Use trackExpiration=true to detect offers that disappeared from a completed scan.
  6. Use compact=true if the output is consumed by an AI agent or automation.

Output fields overview

Main fields include:

  • jobId
  • offerId
  • title
  • company
  • companyId
  • companyProfileUrl
  • location
  • coordinates
  • locations
  • allOfferUrls
  • locationCount
  • salaryText
  • salaryMin
  • salaryMax
  • salaryCurrency
  • salaryPeriod
  • salaryRanges
  • contractTypes
  • workModes
  • workSchedules
  • positionLevels
  • isRemote
  • technologies
  • isOneClickApply
  • aiSummary
  • postedDate
  • expirationDate
  • url
  • portalUrl
  • source
  • description
  • requirements
  • responsibilities
  • applyUrl
  • employerId
  • offerLanguage
  • dateOfInitialPublication
  • dateOfLastPublication
  • companyLogoUrl
  • brandColor
  • categories
  • isDirectlyFromEmployer
  • atsUrl
  • isEntirelyRemote
  • isRemoteRecruitment
  • benefits
  • itSpecializations
  • workplaces
  • changeType
  • firstSeenAt
  • lastSeenAt
  • isRepost
  • repostOfId
  • repostDetectedAt
  • detailFetchStatus
  • dataQualityWarnings

You might also like

Praca.pl Jobs Scraper & Hiring Monitor

mrarcode/praca-scraper

Track new & changed Praca.pl job offers. Incremental monitoring with salary, company & contract data β€” get only what changed, not the same list every run.

JustJoin.it Scraper

solidcode/justjoin-it-scraper

[πŸ’° $0.95 / 1K] Extract IT jobs from JustJoin.it β€” salaries, tech stack, company, location, and apply links. Search by keyword and city, filter by category, seniority, contract type, and remote/hybrid/office.

Justjoin Jobs Details Scraper

stealth_mode/justjoin-jobs-details-scraper

Efficiently scrape detailed job listings from JustJoin.it, Poland's leading IT job board. Extract comprehensive data including salaries, tech stacks, company details, and remote work options. Perfect for market research, salary analysis, and recruitment intelligence in the Polish tech industry.

JustJoin.it Job Scraper

unfenced-group/justjoin-scraper

Extract tech job listings from JustJoin.it β€” Poland's largest IT job board with 10,000+ listings. Returns title, company, PLN/EUR salary, tech stack, experience level, remote policy, contract type (B2B/UoP) and city.

πŸ‘ User avatar

Unfenced Group

8

JustJoin Jobs Scraper πŸ’Ό- Tani | Cheap

scrapestorm/justjoin-jobs-scraper---tani-cheap

πŸ” Scrape Mass / Bulk JustJoin.it Job Listings Enter your search URL to collect job offers at scale from JustJoin.it, including job title, company name, location, salary, skills, time left & application URL πŸ’ΌπŸ“„ Perfect for job market analysis, salary benchmarking & tech hiring trend tracking πŸ“ŠπŸš€

3

JustJoin Jobs Scraper - BudΕΌetowy Low-costπŸ’²πŸ”₯πŸ’ΌπŸ‡΅πŸ‡±

delectable_incubator/justjoin-jobs-scraper-budzetowy-low-cost

πŸ” Scrape JustJoin.it job listings at scale. This JustJoin.it Scraper extracts job titles, company names, locations, salaries, required skills, employment types, dates, application deadlines & job URLs. Ideal for tech recruitment, talent sourcing, HR analytics & software hiring trend analysis πŸ’ΌπŸ“ŠπŸš€

JustJoin.it Scraper | Poland Tech Job Board Data

parseforge/justjoin-it-poland-scraper

Export tech job postings from JustJoin.it: title, company, salary, required skills, experience level and location across Poland and CEE. Filter by skill or experience. CSV, Excel, JSON or XML for talent sourcing and salary benchmarking.

Dice.com Job Scraper πŸ’° $0.99/1K β€” U.S. Tech Jobs

blackfalcondata/dice-com-job-scraper

Scrape dice.com - the leading U.S. tech job board. Structured salary (min/max/currency), tech-focused search filters, and job change monitoring. Incremental mode detects new and changed listings.

πŸ‘ User avatar

Black Falcon Data

23

5.0

Shopify Competitor Monitor & Product Research

phantom_coder/shopify-competitor-monitor

Monitor competitor Shopify stores for price changes, new product launches, and app stack updates. Run it on a schedule - you only see what changed, delivered as an AI digest.

3

5.0

Hellowork Jobs Scraper β€” France Job Listings

blackfalcondata/hellowork-scraper

Scrape hellowork.com β€” France's major job board. Salary ranges, structured location data, and incremental change tracking. Incremental mode flags new and changed listings between runs so you only process what moved. Export to JSON or CSV and pipe straight into your pipeline.

πŸ‘ User avatar

Black Falcon Data

32

5.0