Piotr VassevPiotr Vassev

How to Compare Just Join IT Job Offers and Salary Ranges

The Just Join IT Scraper collects jobs with skills, work arrangement, locations, and contract-specific salary ranges. I maintain the Actor. This guide builds a shortlist of senior B2B roles around Warszawa and explains how to compare the salary data.

One posting can contain more than one contract option. A useful salary comparison therefore needs a row per contract option as well as a record of the original job.

How to Scrape Just Join IT Job Listings

Define a comparable set of offers

The example filters to senior, full-time B2B offers, with PLN selected and a minimum salary of 18,000. These are screening choices, not a claim about prevailing pay. limit: 50 caps returned offers.

If you want one technology, use the Actor's technology dropdown. Its JSON input is named lang and expects a numeric string, not a field called technology. Omit it for a cross-technology sample or copy the dropdown's generated value rather than guessing.

The currency enum includes an unusual GNP entry. This guide uses the unambiguous PLN setting. Do not silently substitute a guessed GBP option in an API integration; verify that mode separately if you need it.

Budget for the sample

Pricing as of September 6, 2026. The active price is $0.001 per returned job. Fifty results would cost $0.05. Check current Actor pricing and the run charge breakdown; these calculations describe Actor events, and separately billed platform or proxy resources may also apply.

Collect fifty filtered job offers

Open the Actor on Apify. In Input, switch to the JSON editor and paste:

{
  "currency": "PLN",
  "limit": 50,
  "experience": "senior",
  "employmentType": "b2b",
  "workingTimes": "full_time",
  "salaryMin": 18000,
  "city": "Warszawa"
}

Click Start, then open the completed run’s output dataset.

Inspect the first rows for experienceLevel, workplaceType, and employmentTypes. A city filter and a remote-work arrangement answer different questions. Read the actual location requirements before deciding that a remote posting is suitable from anywhere.

Export JSON for the first review. A flat CSV alone can conceal multiple contract options or turn nested salary arrays into hard-to-read strings.

Read the returned fields

FieldHow to use it
slugJob identifier used by the source
linkSource job-page link
titleJob title
requiredSkillsRequired skill list
workplaceTypeRemote or office arrangement
experienceLevelAdvertised seniority
employmentTypesNested salary and contract options
multilocationNested office locations

The documented sample includes slug as the identifier and link as the job-page link. Do not build a pipeline around a nonexistent url field. multilocation can contain several offices for the same posting.

Within employmentTypes, retain from, to, currency, type, unit, and gross. The sample shows the same numeric bounds for different contract types with different gross flags, so those numbers do not have the same meaning on their own. Converted fields such as fromEur do not replace checking the original currency and pay unit.

Historical just join it scraper output

Flatten offers without double-counting jobs

Keep an untouched JSON export. Create a working table with one row for each employment-type entry, carrying the job slug, title, company, and source link into every row. Add a contract-option identifier if your destination requires unique rows.

Filter that table to one contract type, currency, pay unit, and gross basis. Remove rows with missing salary bounds from numeric summaries, but count and report them separately. Do not fill an undisclosed salary with zero.

For a job shortlist, compare required skills and seniority before sorting by the top of the salary range. Read the posting to check whether the upper bound applies to the candidate profile you have in mind. A range endpoint is not a guaranteed offer.

For a market summary, count unique slugs when reporting job volume and contract-option rows when reporting salary observations. Do not count a multilocation posting once for every office and label that total separate vacancies.

The example's salary minimum deliberately excludes lower-paid and potentially undisclosed offers. Remove that filter in a separate run if the purpose changes to measuring the overall advertised salary distribution. Keep the original filter settings with each exported dataset.

Troubleshoot over-filtered searches

If no offers appear, remove the salary threshold, then the city or technology restriction while keeping the sample small. Check the accented city spelling used on the site. Missing nested salary values can be valid source data rather than an extraction failure.

When a spreadsheet cannot expand employmentTypes, use the JSON export or a tool that supports nested records. Concatenating all contract options into one numeric salary column will produce misleading comparisons.

To extend the research beyond Just Join IT, see the LinkedIn job guide and Dice hiring-data guide. Keep source coverage separate in combined counts.

For processing nested Just Join IT salary data, see the Node.js example. Use the current input fields above if the example differs.

Frequently asked questions

Which input selects technology?

The deployed JSON field is lang and takes a numeric string. Use the Console dropdown to select and copy the correct value.

Can I average every salary field together?

No. Separate contract type, currency, pay unit, and gross basis, and leave undisclosed salaries out of numeric summaries.

What identifies a job in the output?

Use slug as the job identifier. The documented sample includes link for the source job page.

Piotr Vassev

Piotr Vassev

Founder of FalconScrape. Building production-grade web scraping systems and data automation pipelines for businesses worldwide.

Connect on LinkedIn