JobKorea Scraper
Pricing
from $3.99 / 1,000 results
JobKorea Scraper
Scrape job listings from JobKorea (잡코리아), South Korea's leading employment platform.
Pricing
from $3.99 / 1,000 results
Rating
0.0
(0)
Developer
Jobs Scraper
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
1
Monthly active users
6 days ago
Last modified
Categories
Share
Overview
Capture employment data from JobKorea (잡코리아), the dominant job search platform in South Korea. This actor interfaces with JobKorea's search system to compile listings including position details, salary information, required qualifications, and company profiles from Korea's dynamic job market.
Features
- Korean job market data extraction at scale
- Chaebol and SME employer coverage
- Career level and experience requirements
- Regional and district-level location filtering
- Authorized Apify Proxy support for regional access and connection reliability
- Explicit challenge/blocked diagnostics without fabricating records
- Bounded detail-page enrichment so large searches finish within the platform run limit
- Deduplication by stable job ID, detail URL, or listing fields
- Listing-only fallback when detail enrichment is unavailable
Supported Inputs
| Field | Type | Default | Description |
|---|---|---|---|
keyword | string | "software engineer" | Search terms for job discovery |
location | string | "서울" | Geographic filter for results |
country | string | "KR" | Country code for proxy routing |
maxItems | integer | 50 | Upper limit on extracted listings |
maxDetailPages | integer | 12 | Maximum detail pages to visit; remaining real listings are returned as listing_only |
timeoutSecs | integer | 600 | Per-request timeout ceiling; the Apify run timeout is configured separately |
proxyEnabled | boolean | true | Toggle proxy rotation on/off |
sortBy | string | "relevance" | Result ordering (relevance/date/salary) |
jobType | string | "" | Employment type filter |
experienceLevel | string | "" | Seniority level filter |
datePosted | string | "" | Recency filter (24h/3d/7d/14d/30d) |
remoteOnly | boolean | false | Restrict to remote positions only |
includeCompanyDetails | boolean | true | Fetch extra company information |
includeSalary | boolean | true | Include compensation data |
Output Format
Each scraped listing produces a JSON object with these fields:
{"jobId": "49630685","jobTitle": "Senior Software Engineer","companyName": "Example Corp","location": "서울","salary": "$120,000 - $160,000","jobType": "Full-time","experienceLevel": "Senior","postedDate": "2025-01-15T10:30:00.000Z","postedDateText": "2025-01-15","applyUrl": "https://www.jobkorea.co.kr/job/12345","companyUrl": "https://www.jobkorea.co.kr/company/example","description": "We are looking for a skilled engineer...","requirements": ["JavaScript", "Node.js", "React"],"benefits": ["Health Insurance", "Remote Work"],"sourcePortal": "JobKorea","country": "KR","extractionStatus": "full","scrapedAt": "2025-01-15T10:30:00.000Z"}
Proxy Handling
Proxy management follows a graduated fallback pattern when an authorized Apify Proxy is enabled.
- Apify Residential Proxy (country-targeted)
- Apify Residential Proxy (any region)
- Apify SHADER/available Apify Proxy route
- Direct connection — last resort when proxy setup is unavailable
Proxy setup does not bypass access controls. If the target returns a challenge or access denial, the run records a blocked diagnostic.
Retry Logic
The crawler uses short, bounded request timeouts and preserves listing data when optional detail enrichment fails.
- Detail enrichment is capped by
maxDetailPages(12 by default) - Detail request failures are converted to
listing_onlyrecords when the listing was real - Blocked status codes and challenge pages are recorded in
RUN_SUMMARYand diagnostics - The dataset count reflects records actually pushed, not requests queued
Access and data integrity
The actor uses public listing pages and authorized proxy configuration. It does not solve CAPTCHA or verification challenges. A challenge is classified as blocked, and no fake or mock jobs are added to the dataset.
When a listing page is accessible but a detail page is not, the listing is still emitted with extractionStatus: "listing_only" and an extractionReason.
Sample Input
{"keyword": "data analyst","location": "서울","maxItems": 25,"maxDetailPages": 8,"proxyEnabled": true,"timeoutSecs": 600,"sortBy": "date","remoteOnly": false}
Sample Output
{"jobTitle": "Data Analyst","companyName": "TechCorp International","location": "서울","salary": "Competitive","jobType": "Full-time","experienceLevel": "Mid-level","postedDate": "2025-01-15T14:22:00.000Z","postedDateText": "1 day ago","applyUrl": "https://www.jobkorea.co.kr/job/example-123","companyUrl": "","description": "Seeking a detail-oriented data analyst to join our growing team...","requirements": ["SQL", "Python", "Tableau"],"benefits": ["Health Insurance", "Flexible Hours"],"sourcePortal": "JobKorea","country": "KR","extractionStatus": "full","scrapedAt": "2025-01-15T14:22:00.000Z"}
Usage
Local Development
# Install dependenciesnpm install# Set Apify token (required for proxy)export APIFY_TOKEN=your_token_here# Run the actor in the Apify local environmentapify run --purge# Validate scraped datanode dataset-validator.js
Apify Platform
# Login to Apifyapify login# Push actor to platformapify push# Run from Apify Console or API
Deployment
- Ensure all dependencies are installed:
npm install - Authenticate with Apify:
apify login - Deploy the actor:
apify push - Configure input in the Apify Console
- Schedule runs or trigger via API / webhooks
Limitations
- Results depend on the portal's current HTML structure; layout changes may require selector updates
- Some job details (salary, benefits) may not be available for all listings
- Rate limiting or verification by the portal may reduce throughput or classify a run as blocked
- JobKorea may modify its public page structure, requiring periodic selector updates
- Maximum items per run is capped at 1000 to prevent excessive resource usage
- Proxy costs apply when using Apify residential or datacenter proxies