# en-japan Job Scraper — Japan Jobs, Salaries & Hiring Companies (`youfuxu/en-japan-tenshoku-jobs-scraper`) Actor

Scrape job listings from エン転職 (employment.en-japan.com), one of Japan's largest career-change job boards. Titles, companies, yen salary ranges, locations, employment type, posting dates and full requirements as clean JSON.

- **URL**: https://apify.com/youfuxu/en-japan-tenshoku-jobs-scraper.md
- **Developed by:** [Youfu Xu](https://apify.com/youfuxu) (community)
- **Categories:** Jobs, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## en-japan (エン転職) Job Scraper — Japan jobs, yen salaries & hiring companies

Get clean, structured job data from **[エン転職 / en-japan](https://employment.en-japan.com)** — one of Japan's largest career-change (転職) job boards, with tens of thousands of live openings from regular employers in every prefecture, not just tech. Search any keyword in Japanese or English and download the results as JSON, CSV or Excel. No login, no browser, no proxy setup.

### What you get

Run it with the default input and results look like this:

```json
{
  "jobId": 1434391,
  "url": "https://employment.en-japan.com/desc_1434391/",
  "title": "ITエンジニア◆在宅8割／案件強制ナシ／AI案件多数／賞与年3回／年収200万UP事例有／副業可",
  "companyName": "株式会社エーエスエル",
  "employmentType": "正社員",
  "location": "■本社／東京都港区浜松町2-4-1 世界貿易センタービルディング南館26階",
  "salaryText": "＜前給保証＞月給30万円～70万円＋賞与年3回　【年収例】650万円／入社3年",
  "salaryMin": 300000,
  "salaryMax": 700000,
  "salaryCurrency": "JPY",
  "salaryPeriod": "month",
  "description": "アクセンチュアグループだから、“かなう”こと。\n広がる案件と変わらないエンジニアファースト。\n2025年、アクセンチュアグループへ参画。…",
  "jobSummary": "＜パブリッククラウド案件6割＞インフラ構築やシステム開発、もしくはPMOとしてのマネジメント業務を担当。…",
  "requirements": "＜学歴不問／未経験・第二新卒歓迎＞■なんらかの開発・インフラのご経験◎リモート勤務も可能です！",
  "tags": ["職種未経験OK", "業種未経験OK", "学歴不問", "完全週休2日", "残業月20h以内", "内定まで2週間", "転勤なし"],
  "badges": [],
  "hasProReport": true,
  "hasInterview": true,
  "reporterComment": "元エンジニアの代表が、幅広い＆質が高い案件を豊富に用意し…",
  "postedAt": "2026-08-03",
  "deadline": "2026-09-27",
  "photoUrls": ["https://empimg.en-japan.com/image/workcontents/1434001/min_1434391_01_pic1.jpg"],
  "scrapedAt": "2026-08-21T02:19:40.554Z"
}
```

**23 fields per job by default**, including the job summary, requirements, the employment type, en-japan's condition tags (未経験OK, 完全週休2日, 転勤なし …), the listing period (posted date and deadline) and the salary line **already converted from Japanese 万円 notation to plain yen numbers** — `月給30万円～70万円` becomes `salaryMin: 300000`, `salaryMax: 700000`, `salaryPeriod: "month"`; `年俸制320万円～400万円` becomes `3200000 / 4000000 / "year"`.

Turn on **Include detail page data** and each job grows to **54 fields**: the complete 募集要項 (full job description, detailed requirements, hiring background, work hours, holidays, benefits, salary notes), the **annualised salary range en-japan publishes in its structured markup** (`annualSalaryMin` / `annualSalaryMax` — comparable across postings even when one quotes monthly pay and another yearly), prefecture and city, industry, education requirement, plus the company profile (founded, representative, capital, headcount, revenue, business, offices, affiliates, website) and the hiring process, application method, interview location and contact.

### Who uses this

- **Recruiters & RPO teams** — see which Japanese companies are hiring for which roles, at what pay, with the posting deadline so you know how long the req has been open
- **Salary benchmarking** — numeric `salaryMin` / `salaryMax` / `salaryPeriod` out of the box, plus an annualised range in detail mode; no regex over 万円 strings on your side
- **B2B lead generation** — every row carries the hiring company; detail mode adds capital, headcount, revenue, representative and website, which is exactly the firmographic data a sales list needs
- **Job aggregators & alert bots** — poll a keyword on a schedule, diff `jobId` against yesterday's run, and you have a new-postings feed
- **Labour-market research** — measure how many employers in Japan are hiring for AI, nursing, logistics, sales or accounting roles right now, and how many of them welcome career changers (`職種未経験OK`)

### How to use

1. Enter a **keyword** — `python`, `エンジニア`, `営業`, `経理`, `看護師`, or a company name. Required: en-japan returns nothing for an empty search
2. Optionally pick **employment types** — regular employee (正社員), contract, outsourcing, dispatch, part-time…
3. Set **Max jobs** (default 50; en-japan pages 50 at a time)
4. Optionally enable **Include detail page data** for the full requirements, benefits, annualised salary and company profile
5. Run, then download from the **Dataset** tab as JSON / CSV / Excel, or pull it through the Apify API

#### Example input

```json
{
  "keyword": "エンジニア",
  "employmentTypes": ["10"],
  "maxItems": 300,
  "includeDetails": true
}
```

### Output fields

| Field | Description |
| --- | --- |
| `jobId` | en-japan's numeric job ID (stable; use it to de-duplicate between runs) |
| `url` | Link to the job page |
| `title` | Job title as shown in the listing (en-japan titles usually carry the main selling points after ◆) |
| `companyName` | Hiring company |
| `employmentType` | 正社員 / 契約社員 / … as labelled on the card |
| `location` | Work location text from the listing |
| `salaryText` | Salary line exactly as published |
| `salaryMin` / `salaryMax` | Parsed from `salaryText`, in yen (`null` when the listing gives no figure) |
| `salaryCurrency` | `JPY` |
| `salaryPeriod` | `month`, `year`, `day` or `hour` — whichever the listing quotes |
| `description` | The listing's headline copy and teaser paragraph |
| `jobSummary` | 仕事内容 summary from the card |
| `requirements` | 応募資格 summary from the card |
| `tags` | Condition tags such as 職種未経験OK, 学歴不問, 完全週休2日, 残業月20h以内, 転勤なし |
| `badges` | `NEW` and/or `ENDING_SOON` when en-japan flags the listing |
| `hasProReport` / `hasInterview` | Whether en-japan's own reporter covered the employer / an interview article is attached |
| `reporterComment` | The en-japan reporter's one-paragraph take on the role |
| `postedAt` / `deadline` | Listing period (掲載期間) as ISO dates |
| `photoUrls` | Listing photos |
| `scrapedAt` | ISO timestamp of the scrape |

Detail mode adds: `employmentTypeCode` (schema.org value, e.g. `FULL_TIME`), `prefecture`, `city`, `industry`, `annualSalaryMin`, `annualSalaryMax`, `educationRequirements`, `companyId`, `jobDescription`, `requirementsDetail`, `hiringBackground`, `employmentTypeDetail`, `workLocationDetail`, `workHours`, `salaryDetail`, `holidays`, `benefits`, `companyFounded`, `companyRepresentative`, `companyCapital`, `companyEmployees`, `companyRevenue`, `companyBusiness`, `companyOffices`, `companyAffiliates`, `companyWebsite`, `hiringProcess`, `applicationMethod`, `interviewLocation`, `contact`, and `extraSections` (any employer-specific 募集要項 rows, keyed by their Japanese heading).

### Limitations

- The salary parser reads the **first** pay statement in the line. Listings that quote two tiers (e.g. `未経験者：月給24万円以上／経験者：月給35万円以上`) return the first tier; the full text is always in `salaryText`, and detail mode adds the site's own annualised range
- `location` is the free-text 勤務地 line from the card. For a clean prefecture / city pair, enable detail mode
- en-japan serves 50 jobs per page; a 5,000-job export is about 100 list requests plus one request per job in detail mode, paced at roughly one request per second
- Content is Japanese. Keywords in English work because many listings mention technologies and company names in Latin script

### Notes on reliability

- Pure HTTP — no headless browser, no proxy needed, so runs are fast and cheap (1 GB of memory is plenty)
- Automatic back-off on HTTP 429 / 5xx and polite delays between requests keep long exports running
- Jobs are de-duplicated by `jobId`, and the run stops by itself when it reaches the end of the result set

### Legal

This Actor collects only publicly visible job listings for research, recruiting and market-analysis purposes. You are responsible for complying with en-japan's terms of use and applicable law when you use the data.

# Actor input Schema

## `keyword` (type: `string`):

Free-text search — a skill, job title or company name. Japanese or English both work: <code>python</code>, <code>エンジニア</code>, <code>営業</code>, <code>経理</code>, <code>楽天</code>. Required: en-japan returns nothing for an empty search.

## `employmentTypes` (type: `array`):

Optional. Restrict to one or more employment types (same filter as the site's 雇用形態 checkboxes). Leave empty for all.

## `maxItems` (type: `integer`):

Maximum number of jobs to return (en-japan pages 50 at a time). Keep it small for a quick test, raise it for a full export.

## `includeDetails` (type: `boolean`):

Visit each job page to add the full 募集要項: complete job description, detailed requirements, hiring background, work hours, holidays, benefits, the annualised salary range en-japan publishes, prefecture/city, industry, plus company profile (founded, capital, headcount, revenue, representative, website) and the hiring process. One extra request per job, so it is slower — the list already includes title, company, salary, location, employment type, posting dates and a summary without it.

## Actor input object example

```json
{
  "keyword": "python",
  "employmentTypes": [],
  "maxItems": 50,
  "includeDetails": false
}
```

# Actor output Schema

## `datasetItemsJson` (type: `string`):

All scraped records as a JSON array.

## `datasetItemsCsv` (type: `string`):

All scraped records as a CSV file.

## `datasetItemsXlsx` (type: `string`):

All scraped records as an Excel workbook.

## `dataset` (type: `string`):

The default dataset of this run in Apify Console.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "keyword": "python",
    "maxItems": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("youfuxu/en-japan-tenshoku-jobs-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "keyword": "python",
    "maxItems": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("youfuxu/en-japan-tenshoku-jobs-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "keyword": "python",
  "maxItems": 50
}' |
apify call youfuxu/en-japan-tenshoku-jobs-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,youfuxu/en-japan-tenshoku-jobs-scraper"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/mE0DaSPjVkF4vBQ9Y/builds/yf5ZgVpNl5Uzfyyc0/openapi.json
