· 13 min read
CareerJunction Jobs Scraper: 29 Data Fields per Record (2026)
Extracting data from South Africa's largest job board returns 29 output fields per record, including the full job description, salary bands, and employer details. Each record costs $0.005 on the free-plan price, allowing for high-resolution monitoring of 26 job categories and 27 provinces. The scraper bypasses the site's protection that typically redirects plain HTTP clients to a not-found page, ensuring access to live vacancies without managing browser sessions. This is built for recruitment analysts and lead generation teams targeting the South African labor market, but it is not for those needing direct personal emails of hiring managers which are not disclosed.
Try it before you read further. Apify's free plan includes $5.00 of usage every month with no credit card, enough for up to 1,000 results at $0.005 each before platform usage. Open CareerJunction Jobs Scraper on Apify and run the prefilled example.
How reliable is CareerJunction Jobs Scraper in production?
Across the last 30 days of public runs on the Apify platform, CareerJunction Jobs Scraper recorded 70 runs with the following outcomes.
| Outcome | Runs | Share |
|---|---|---|
| Succeeded | 70 | 100.0% |
| Failed | 0 | 0.0% |
| Aborted by the user | 0 | 0.0% |
| Timed out | 0 | 0.0% |
| Total | 70 | 100.0% |
No run failed or timed out in the last 30 days. Keep a retry and an alert on scheduled runs all the same: a clean month is a record, not a guarantee.
What does it cost to run CareerJunction Jobs Scraper?
Each result costs $0.005 on Apify's free plan, which is $5.00 per 1,000 results. Starting a run is charged separately at $0.005 per GB of Actor memory. Apify also bills the platform usage each run consumes, at the rates of your Apify plan, on top of these charges.
| Apify plan | Per result | Per 1,000 results |
|---|---|---|
| FREE | $0.005 | $5.00 |
| BRONZE | $0.00433 | $4.33 |
| SILVER | $0.00367 | $3.67 |
| GOLD | $0.003 | $3.00 |
| PLATINUM | $0.003 | $3.00 |
| DIAMOND | $0.003 | $3.00 |
Worked example: collecting 10,000 results costs $50.00 in result charges before run-start fees and platform usage. No run failed or timed out in the last 30 days, so the list price is a fair budget; keep a retry in place all the same.
The maxItems control is the primary driver of the bill as it sets the hard cap on the number of result charges. To verify your search logic without significant spend, set this to a low value before running a broad category scrape.
How do you run CareerJunction Jobs Scraper from the API?
The schema marks 1 of its 14 controls as required: mode. Nothing in the payload below is illustrative. Those are the schema's prefilled defaults for CareerJunction Jobs Scraper, so the request works once your token is in place.
Call the synchronous endpoint to start a run and receive dataset items in one request:
curl -X POST "https://api.apify.com/v2/acts/crawlerbros~careerjunction-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"mode":"search"}'
The same run from Python, using the official client:
from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run_input = {
"mode": "search"
}
run = client.actor("crawlerbros~careerjunction-scraper").call(run_input=run_input)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)
And from Node.js:
import { ApifyClient } from 'apify-client'
const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' })
const input = {
"mode": "search"
}
const run = await client.actor('crawlerbros~careerjunction-scraper').call(input)
const { items } = await client.dataset(run.defaultDatasetId).listItems()
console.log(items)
Because the call is synchronous, your client waits for the whole run. Keep it for exploration. For scheduled work, start the run without waiting and collect the dataset afterwards, so network trouble costs you a retry rather than the results.
Which CareerJunction Jobs Scraper inputs matter, and which can you skip?
The mode control switches the Actor between a broad keyword search and fetching specific listings from a list of URLs. Most users should leave the location text field empty unless they need to match a specific suburb like Sandton that is not covered by the broader province regions.
mode(string): What to fetch. Default:"search".keywords(string): Free-text job search query, e.g.developer,accountant,sales manager. Leave empty to browse the latest / a whole category. Default:"developer".category(string): Restrict results to a CareerJunction job category. Default:"".sortBy(string): Order of results (mode=search). Default:"relevance".region(string): Restrict results to a CareerJunction province/region. Applied server-side (same as CareerJunction's own "Location" search filter). Default:"".location(string): Only keep jobs whose location text contains this (e.g.Sandton,Rosebank). Matched client-side against each job's location, case-insensitive substring -- use this for a specific city/suburb not covered by the broaderregionfilter above.minSalary(integer): Drop jobs whose disclosed salary is below this amount. Jobs with an undisclosed salary always pass through (not penalized for missing data).employmentTypes(array): Keep only jobs of these employment type(s), parsed from the listing's own position label. Matched client-side (CareerJunction's own facet is JS-driven, see FAQ). Leave empty for all. Default:[].seniorityLevels(array): Keep only jobs of these seniority level(s), parsed from the listing's own position label. Matched client-side. Leave empty for all. Default:[].employmentEquityOnly(boolean): Only keep jobs explicitly tagged by the employer as an Employment Equity (EE) position. Matched client-side; jobs not tagged EE are never assumed to be non-EE. Default:false.postedWithinDays(integer): Only keep jobs posted within this many days.fetchFullDetails(boolean): Visit each job's detail page for the full description, salary breakdown, employer info, and posting/expiry dates. Turn off for a faster, lighter-weight run using only search-result-card fields (title, company, location, salary snippet). Default:true.
The other 2 controls, with their defaults, are listed in the input schema on CareerJunction Jobs Scraper on Apify.
Fixed-choice controls: mode accepts search (Search / browse jobs), byUrls (Fetch by job listing URLs); category accepts 28 values (default ""), including "" (All categories), adminOfficeSupport (Admin, Office & Support), agricultureFishingForestry (Agriculture, Fishing & Forestry), architectureEngineering (Architecture & Engineering); sortBy accepts relevance, newest (Newest first); region accepts 28 values (default ""), including "" (All regions), workFromHome (Work From Home), gauteng, johannesburgSouth (Johannesburg South).
What does CareerJunction Jobs Scraper return?
The returned records are excellent for building local job boards or salary benchmarks because they include parsed seniority levels and ISO 8601 timestamps. The output does not contain employer email addresses or company profile data.
jobId- CareerJunction's internal listing IDtitle,companyName,companyUrl,companyLogoUrl(permanent URL - see note below),companyLogoUrlOriginal(CareerJunction's original time-limited link, when rehosting succeeded)location,country,countryCodeindustry- employer's industry classificationpositionText- employment type + seniority (e.g. "Permanent Senior position")employmentType,seniorityLevel,isEmploymentEquity- parsed frompositionText(only when the label matches a known pattern)salaryText,salaryMin,salaryMax,salaryCurrency,salaryPeriod(only when disclosed)descriptionHtml,descriptionTextdatePosted,validThrough- ISO 8601 timestampspostedText,expiresText,jobRef- original site-formatted textsourceUrl- canonical listing URLrecordType: "job",scrapedAt
These are the documented fields. Optional ones can be empty on a given record, so measure how often each field your deliverable depends on is populated across a real sample before automating the handoff.
How do you build the workflow end to end?
Open CareerJunction Jobs Scraper and work through these in order. Each step ends with something to check, so a bad configuration surfaces on a small run rather than a scheduled one.
- Set mode to search to browse the latest listings or byUrls to refresh specific job IDs.
- Choose a category like informationTechnology or finance to apply server-side filtering on CareerJunction.
- Select a region such as gauteng or westernCape to narrow results to specific South African provinces.
- Toggle fetchFullDetails to true if your deliverable requires the descriptionHtml and salaryMax fields.
- Input keywords to refine the result set by job title or required skills.
- Set maxItems to 10 for a test run to inspect how the positionText is parsed into seniorityLevel and employmentType.
- Run the scraper and verify the recordType is set to job before scaling to a full category extract.
How do you apply it? Three worked playbooks
These are CareerJunction Jobs Scraper's own documented use cases, each worked through as an operating pattern rather than a description.
Use case 1: Recruitment intelligence
Outcome: Track live South African vacancies by category/location
Configure: mode: "search", category: "informationTechnology", region: "gauteng", sortBy: "newest"
Working method: Initiate a search for the IT category in Gauteng using the newest sort order to identify active hiring. Compare the resulting jobId list against previous datasets to find new vacancies.
Deliverable: A spreadsheet of new IT job openings in Gauteng including companyName and datePosted.
Stop condition: The scraper returns zero results for a known high-volume category filter.
Use case 2: Salary benchmarking
Outcome: Aggregate disclosed salary bands across roles
Configure: mode: "search", keywords: "Accountant", fetchFullDetails: true, minSalary: 15000
Working method: Run a keyword search for a specific role with full details enabled to access structured salary data. Filter the dataset for non-null salaryMin and salaryMax values to calculate market averages.
Deliverable: An aggregated report of salary ranges categorized by seniorityLevel and region.
Stop condition: The frequency of records with disclosed salary data falls below your required sample size.
Use case 3: Talent sourcing
Outcome: Bulk-collect employer contact / job data for outreach
Configure: mode: "search", keywords: "Sales", employmentEquityOnly: true, maxItems: 50
Working method: Filter for Sales roles and enable the employmentEquityOnly flag to identify specific hiring initiatives. Extract companyUrl and companyName to build a target list of active employers.
Deliverable: A CSV list of companies with active EE vacancies and links to their public listings.
Stop condition: The companyUrl field repeatedly returns broken links or generic domain redirects.
What breaks, and how do you design around it?
- Over the last 30 days, 0.0% of public runs failed and 0.0% timed out. Build retries and alerting around those rates rather than assuming every run completes.
When a search query yields more results than the maxItems limit, the Actor will truncate the dataset at your cap. To collect more than 500 items, you must split the task into multiple runs by targeting different provinces or employment types.
When should you not use CareerJunction Jobs Scraper?
Do not use this Actor if you require data from Southeast Asia, where Kalibrr Jobs Scraper is the appropriate tool. If your project focuses on the Middle Eastern market, GulfTalent Jobs Scraper provides better coverage. This scraper is also not suitable for extracting data from CareerJunction's specific company profile pages, which are protected by a bot challenge that blocks plain HTTP access. For global job boards with salary estimates, check Salarship Jobs Scraper.
What should you check before trusting the output?
- Verify that jobId is a numeric string and not null to ensure unique record identification.
- Check that sourceUrl does not lead to a /not-found redirect when opened in a standard browser.
- Confirm salaryMin is an integer when present to allow for mathematical benchmarking.
- Monitor that datePosted follows the ISO 8601 format for accurate chronological sorting.
- Ensure companyName is populated as it is a critical field for employer tracking.
None of this proves a record is correct. It gives a scheduled CareerJunction Jobs Scraper run defined points where it should stop instead of quietly passing bad data downstream.
Frequently asked questions
What is the total cost for 1,000 CareerJunction results?
On the free-plan price, 1,000 results cost $5.00 plus the platform usage fees. The result charge of $0.005 is only applied to items written to the dataset, while a small start fee is charged for the run itself. Apify's free plan includes $5.00 of monthly usage, which effectively covers your first 1,000 results every month without requiring a credit card.
How reliable is this scraper for automated daily runs?
Telemetric data shows that 70 of 70 public runs in the last 30 days succeeded, which is a 100.0% success rate. No runs failed or timed out during this period. This performance indicates that the Actor is stable enough for scheduled recruitment intelligence workflows and automated market monitoring without needing frequent manual oversight or complex retry logic.
Why are salary fields sometimes missing in the results?
The Actor only extracts data that is publicly disclosed by the employer on the original listing. Many South African job postings do not include salary bands. When this information is absent from the site, the salaryMin, salaryMax, and salaryCurrency fields are omitted from the record to ensure the data remains accurate and free of fabricated estimates.
Can I filter for specific cities like Sandton or Rosebank?
Yes. While the region control allows for broad province-level filtering, the location field provides client-side substring matching. By entering a city or suburb name, you can filter the search results to only include listings where the location text contains that specific string, allowing for much finer geographic targeting than the standard server-side categories.
Why do CareerJunction URLs sometimes fail when I curl them?
CareerJunction uses bot-detection that redirects plain HTTP clients to a not-found page if they do not exhibit real browser behavior. This Actor uses a specialized fetcher to bypass these blocks. The sourceUrl in your dataset is correct and will resolve to the live job posting when opened in a standard web browser, even if direct curl commands fail.
Where to go next
When you are ready to run it, open CareerJunction Jobs Scraper on Apify; the free plan covers up to 1,000 results a month.
Start with the CareerJunction Jobs Scraper Actor page for the current input schema, pricing tier, and run history.
Other Actors we maintain for related data:
- Kalibrr Jobs Scraper: Scrape live job listings from Kalibrr.com, Southeast Asia's leading job board (Philippines, Indonesia, Vietnam).
- VietnamWorks Jobs Scraper: Scrape live job listings from VietnamWorks.com, Vietnam's largest job board.
- HelloWork Jobs Scraper: Scrape live job listings from HelloWork.com, one of France's largest job boards.
- GulfTalent Jobs Scraper: Scrape live job listings from GulfTalent.com - the Middle East's leading job board.
- Salarship Jobs Scraper: Scrape Salarship.com - a global job board with salary estimates for 100,000+ positions.
- Talent.com Jobs Scraper: Scrape job listings from Talent.com - search by keyword and location, or fetch full job detail (salary, description, JobPosting metadata) by URL.
- NoFluffJobs Remote Tech Jobs Scraper: Scrape NoFluffJobs.com - a transparent IT job board with 3,800+ active remote tech listings.
- Jobicy Remote Jobs Scraper: Scrape Jobicy.com - a curated remote job board with 1,000+ active listings.
Related guides:
- The Hub Startup Jobs Scraper: 19 Data Fields per Record (2026)
- Himalayas Remote Jobs Scraper: 3 Practical Use Cases
- get in IT Jobs Scraper: Up to 1,000 Free Results a Month (2026)
- NHS Jobs Scraper Operating Guide
Resources
Actor documentation, input schema, and pricing: verified against the published Actor on 2026-09-30.
Actor last updated by its maintainers on 2026-08-07.
Run outcome figures cover the 30 day public window ending 2026-09-30.
Featured actors
CareerJunction Jobs Scraper
Scrape live job listings from CareerJunction.co.za, South Africa's largest job board. Search by keyword and category, filter by location/salary/date, or fetch full job details from listing URLs. No login, no cookies, no paid proxy required.
Run on Apify ↗