JustJoin.it Tech Job Scraper
Pricing
from $0.56 / 1,000 results
JustJoin.it Tech Job Scraper
Scrapes tech job offers from JustJoin.it, Poland's largest IT job board. Filter by location and one of 25 tech categories; returns salary by currency, required and nice-to-have skills, experience level, workplace type, company info, GPS coordinates and full job descriptions.
Pricing
from $0.56 / 1,000 results
Rating
0.0
(0)
Developer
Ibnu Adzim
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
11 days ago
Last modified
Categories
Share
JustJoin.it Tech Job Scraper (Poland)
Scrapes tech job offers from JustJoin.it — Poland's largest IT job board.
Public data only. No login, no cookies, no browser. No bot challenge of any kind — 6 of 6 TLS profiles returned clean 200s on every surface, including a bogus path (which answers a clean 404, not a challenge).
The one thing you need to know before using this
page= does nothing. JustJoin.it's search page is client-side
infinite-scroll: the server always embeds the SAME freshest ~100 offers for a
given (location, category, keyword) combination, whatever page number you ask
for. There is no HTTP-only way to page past that — the client-side "load
more" call was searched for across all 45 Next.js chunks referenced by the
page and never found.
So this actor does not offer a page input at all. Coverage comes from
diversifying the query: run several locations, or narrow with category
/ keyword, rather than expecting one broad search to page through
everything. Each SEARCH_SUMMARY row reports likelyMoreThanCap: true when
a query returned the full 100-offer cap, as a signal that narrowing it further
would surface more.
What you get
Three record types share one dataset, told apart by recordType.
JOB — one row per offer
Search rows already carry a rich structured summary: title, company (name + logo), city, GPS coordinates, salary broken out per currency (PLN, EUR, USD, GBP, CHF) and contract type, experience level, workplace type (remote / hybrid / office), working time, required and nice-to-have skills, publish and expiry dates, and the apply URL.
With Fetch full job descriptions on (the default), each row also gets
jobPostingJsonLd — JustJoin.it's Schema.org JobPosting record, verbatim,
with the full plain-text description.
SEARCH_SUMMARY — one row per location searched
The filters actually sent, how many offers came back, and whether this query hit the 100-offer cap.
ERROR — one row per input that could not be processed
Every input maps to at least one row, so nothing disappears silently.
Input
| Field | What it does |
|---|---|
| Locations | all-locations, or a city slug (warszawa, wroclaw, krakow…) — one search each |
| Category | one of 25 verified tech categories, or any |
| Keyword | free-text search box filter |
| Max offers per location | 0 = unlimited, meaning up to the ~100-offer cap per query |
| Fetch full job descriptions | full HTML→text description via one extra request per offer |
| Min interval between requests | the speed control — 0.3s default |
Example
{"locations": ["all-locations", "warszawa", "wroclaw"],"category": "python","keyword": "senior","maxItems": 100,"includeJobDetails": true}
Notes on reliability
- No WAF. All surfaces answered 200 on
chrome124,chrome120,safari17_0,chrome99_androidandfirefox133. - Location and category are both honest. An unrecognised slug — alone or
combined (
warszawa/bogus-category) — answers a clean HTTP 404, never a silently widened baseline. A bogus keyword answers HTTP 200 with zero offers, also honest. - Speed is controlled by request rate, not concurrency, same design as
the other actors in this portfolio —
maxConcurrencyabsorbs latency variance,minRequestIntervalis the actual throttle. - Residential proxy pinned to Poland is the cloud default.
Known limits
- ~100 offers per (location, category, keyword) combination, always the freshest ones — see "the one thing you need to know" above. There is no offset/cursor this actor can reach HTTP-only.
- The flight stream's own copy of the description is a chunked text-protocol reference this actor does not reassemble; the detail pass uses the page's JSON-LD block instead, which carries the same text unchunked. If you don't need the full description, list-only mode is one request per location regardless.