# En-Japan Scraper - Japan Jobs, Salaries & Companies (`scrapewise/en-japan-scraper`) Actor

Scrape En-Japan (employment.en-japan.com) jobs in Japan by prefecture, keyword, contract type and salary: title, company, salary range, work locations, requirements, working hours, benefits, industry and dates. All 47 prefectures, Tokyo in full. Error rows are free.

- **URL**: https://apify.com/scrapewise/en-japan-scraper.md
- **Developed by:** [Scrapewise Data](https://apify.com/scrapewise) (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 $0.76 / 1,000 job delivereds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## En-Japan Scraper: Japan jobs with salary, locations, requirements and benefits

En-Japan Scraper collects **job listings from En-Japan (employment.en-japan.com)**, a major career-change job board
in Japan, with more than 28,000 live listings across all 47 prefectures and over 6,000 in Tokyo alone. You search by
prefecture, keyword, contract type and minimum salary, and every job comes back as one clean row: title, company,
contract type, salary range in yen, work locations, tags such as "no experience needed", the posting and expiry dates
and the link. With full details on (the default) each job also gets the complete description, requirements, working
hours, benefits and industry.

Searches that match more than 2,000 jobs (Tokyo without filters has over 6,000) are covered in full: the Actor goes
past the 2,000-result limit of the site search and still delivers every job once.

No account, cookies or browser needed. It is used to:

- build Japanese job boards, newsletters and alert bots for a niche (sales jobs in Osaka, engineer jobs in Tokyo);
- research salaries, benefits and hiring demand by industry, contract type or prefecture;
- find companies that are hiring right now, with their industry and work locations, for sales and recruiting work.

### At a glance

| What | Price |
|---|---|
| Job delivered | **US$ 1.00 per 1,000 jobs** (US$ 0.001 each) on the Free plan, lower on paid plans |
| Run start | US$ 0.005 per run |

- 500 jobs with full details = **about US$ 0.51** on the Free plan.
- Paid Apify plans get a lower price per job automatically (Bronze, Silver, Gold and above).
- Full details are included in the job price; there is no extra event for them.
- Error rows, duplicates and jobs already delivered in earlier runs (`onlyNew`) are never charged. `maxItems` is a
  hard cap, and a spending limit set on the run stops it cleanly with everything delivered so far.

### Quick start

Sales jobs in Tokyo with a salary of at least 5 million yen:

```json
{
  "prefectures": ["Tokyo"],
  "keywords": ["営業"],
  "minAnnualSalary": 500,
  "maxItems": 100
}
```

Every job in Tokyo (6,000+), list data only, for a fast and cheap sweep:

```json
{
  "prefectures": ["Tokyo"],
  "includeDetails": false,
  "maxItems": 0
}
```

A single job or a search link copied from the site:

```json
{
  "startUrls": [
    "https://employment.en-japan.com/desc_1446913/",
    "https://employment.en-japan.com/search/search_list/?areaid=27&keywordtext=%E7%B5%8C%E7%90%86"
  ]
}
```

An empty input runs a small example (sales jobs in Tokyo, 50 jobs) so you can see the output right away.

### Input

| Field | What it does |
|---|---|
| `prefectures` | One or more of the 47 prefectures, by English name (Tokyo, Osaka, Hokkaido...). Empty with a keyword = all of Japan. |
| `keywords` | Words to find in the title, duties and company, one per line, in Japanese for best results (営業, エンジニア, 経理). One search per keyword and prefecture. |
| `employmentTypes` | Full-time, Contract, Dispatch, Temp-to-perm, Part-time, Outsourcing, Other. Empty = all. |
| `minAnnualSalary` | Minimum annual salary in units of 10,000 yen (600 = 6,000,000 yen). Rounded down to the nearest 50. |
| `startUrls` | Search links or single job links from employment.en-japan.com. |
| `includeDetails` | On by default: opens each job for the full description, salary range, requirements, hours and benefits. Off: faster, list fields only. |
| `splitLargeSearches` | On by default: covers every job in searches above 2,000 results. |
| `maxItems` | Hard cap for the whole run (default 50). `0` = no cap. |
| `onlyNew` | Delivers only jobs not seen in earlier runs of the same search. Skipped jobs are free. |
| `proxyConfiguration` | Apify proxy by default. Change it only if you know you need to. |

### Output

One row per job, `type: "job"`. Fields that the listing does not give are left out of the row.

| Field | Content |
|---|---|
| `jobId`, `url` | The En-Japan job number and the link to the job page. |
| `title`, `companyName`, `companyId`, `companyLogo` | The job title and the hiring company. |
| `catchCopy` | The headline sentence the employer put on the listing. |
| `employmentType`, `employmentTypeLabel` | Contract type as code (FULL_TIME, CONTRACTOR...) and as shown on the site (正社員...). |
| `tags` | Badges such as no experience needed, weekends off, no relocation, interview steps. |
| `salaryText` | The salary line as written on the listing. |
| `salaryMin`, `salaryMax`, `salaryCurrency`, `salaryUnit` | Salary range in yen and the pay period (for example YEAR). |
| `location` | The location line as shown in the list. |
| `prefectures`, `workLocations`, `workLocationCount` | Prefectures and cities where the job can be done (first 30 cities) and the total count. |
| `industry` | Industry of the hiring company. |
| `jobSummary`, `requirementsSummary` | Short duties and requirements shown in the list. |
| `description` | Full job description as clean text. |
| `educationRequirements`, `experienceRequirements` | Who the employer is looking for. |
| `workHours`, `benefits` | Working hours and the benefits list. |
| `datePosted`, `validThrough` | Posting start and the date the listing ends (YYYY-MM-DD). |
| `sourceQuery`, `scrapedAt` | The search that found the job and the time of the run. |

#### Example row

```json
{
  "type": "job",
  "jobId": "1442025",
  "url": "https://employment.en-japan.com/desc_1442025/",
  "sourceQuery": "Tokyo / 営業",
  "title": "営業事務",
  "companyName": "カクケイ株式会社",
  "employmentTypeLabel": "正社員",
  "tags": ["正社員", "職種未経験OK", "業種未経験OK", "学歴不問"],
  "salaryText": "月給22万6000円～30万円＋各種手当＋賞与年2回 ★家族手当など福利厚生充実",
  "datePosted": "2026-10-01",
  "validThrough": "2026-11-25",
  "employmentType": ["FULL_TIME"],
  "salaryMin": 3000000,
  "salaryMax": 4500000,
  "salaryCurrency": "JPY",
  "salaryUnit": "YEAR",
  "prefectures": ["東京都"],
  "workLocations": ["東京都 千代田区"],
  "workLocationCount": 1,
  "industry": ["日用品・雑貨"],
  "educationRequirements": "学歴不問",
  "workHours": "9：00～18：00（実働8時間）...",
  "description": "■ 仕事内容\n営業事務（未経験歓迎）◆創業103年の老舗安定企業／年休129日／残業10h以下／服装自由 ..."
}
```

### Errors you may see

Error rows are free and have `type: "error"` with an `errorCode`:

| errorCode | When |
|---|---|
| `INVALID_INPUT` | A prefecture or contract type is not one of the listed values. |
| `INVALID_URL` | A link in `startUrls` is not a search or job link from employment.en-japan.com. |
| `NO_RESULTS` | The search and filters match no job. Try fewer filters or a broader keyword. |
| `NOT_FOUND` | A job page has expired or was removed. |
| `BLOCKED` | The site did not answer for this search. Run it again in a few minutes. |
| `UNEXPECTED` | Something else went wrong. The run ends with what was already collected and nothing more is charged. |

### Integrations, scheduling and AI agents

- **Schedule** the same search daily in [Apify schedules](https://docs.apify.com/platform/schedules) with `onlyNew`
  on, to get a feed of new jobs and pay only for those.
- **Export** as JSON, CSV, Excel or XML, or read the dataset from the [Apify API](https://docs.apify.com/api/v2).
- **Connect** it to Make, n8n, Zapier or Google Sheets through
  [Apify integrations](https://docs.apify.com/platform/integrations).
- **AI agents:** call it as a tool through the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp)
  in Claude, ChatGPT, Cursor or any MCP client, for example "get 100 new sales jobs in Tokyo with a salary of at
  least 5 million yen and list the companies".

### FAQ

**Can I search in English?** Prefectures and contract types take English names. Keywords match the Japanese text of
the listings, so use Japanese words (営業, エンジニア, 経理, 看護).

**How many jobs can I get?** Everything the site lists: about 28,000 across Japan, over 6,000 in Tokyo, about 1,800 in
Osaka. Use `maxItems` to cap a run, or set it to `0` for no cap.

**Does it return the same job twice?** No. A job appearing in several searches of one run is delivered and charged
once. With `onlyNew`, jobs from earlier runs of the same search are skipped for free.

**Why does a prefecture search show jobs in other prefectures?** Some employers list a job in many places at once
(for example nationwide remote roles). Such a job appears in every prefecture it covers; `prefectures` and
`workLocations` show where it can be done.

**What if a run is interrupted?** If the platform restarts the run, jobs already delivered are not delivered or
charged again.

### Limitations

- Text fields are in Japanese as written on the listing; salary and dates are normalized.
- The list view shortens long text such as location and salary; turn on `includeDetails` for the complete text.
- Contact names, e-mail addresses and phone numbers written in free text are replaced with "\[contact removed]".
- Jobs listed in a very large number of places show the first 30 cities and the total count.
- The site changes over time. If a field comes back empty after a site update, run again later or contact support.

### Changelog

- **25 Oct 2026, v0.1:** first release. Search by prefecture, keyword, contract type and minimum salary; full job
  details; complete coverage of searches above 2,000 jobs; `onlyNew` for schedules; free error rows.

# Actor input Schema

## `prefectures` (type: `array`):

Prefectures to search. Tokyo has 6,000+ jobs and is covered in full. Pick several for one run. Leave empty with a keyword to search all of Japan.

## `keywords` (type: `array`):

Words to look for in the job title, duties and company, one per line, in Japanese for best results (for example 営業 for sales or エンジニア). Each keyword is one search per prefecture. Empty = every job in the prefecture.

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

Keep only these contract types. Empty = all.

## `minAnnualSalary` (type: `integer`):

Only jobs whose annual salary reaches at least this amount, in units of 10,000 yen (600 = 6,000,000 yen). Rounded down to the nearest 50.

## `startUrls` (type: `array`):

Optional: a search link (with the filters you set on the site) or a single job link from employment.en-japan.com. A job link returns that one job.

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

On: opens each job page for the full description, salary range, requirements, working hours, benefits, industry and every work location. Off: faster, the row keeps the list fields (title, company, location, salary summary, tags, dates).

## `splitLargeSearches` (type: `boolean`):

On: a search with more than 2,000 jobs (Tokyo without filters has over 6,000) is covered in full, going past the 2,000-result limit of the site search. Only matters when maxItems is large.

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

Hard cap for the whole run, across all searches. 0 = no cap.

## `onlyNew` (type: `boolean`):

On: remembers the jobs delivered in earlier runs of the same search (in your account) and delivers only jobs not seen before. Skipped jobs are free.

## `proxyConfiguration` (type: `object`):

Apify proxy by default. Change it only if you know you need to.

## Actor input object example

```json
{
  "prefectures": [
    "Tokyo"
  ],
  "keywords": [
    "営業"
  ],
  "includeDetails": true,
  "splitLargeSearches": true,
  "maxItems": 50,
  "onlyNew": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `results` (type: `string`):

No description

## `resultsCsv` (type: `string`):

No description

# 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 = {
    "prefectures": [
        "Tokyo"
    ],
    "keywords": [
        "営業"
    ],
    "maxItems": 50,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapewise/en-japan-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 = {
    "prefectures": ["Tokyo"],
    "keywords": ["営業"],
    "maxItems": 50,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("scrapewise/en-japan-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 '{
  "prefectures": [
    "Tokyo"
  ],
  "keywords": [
    "営業"
  ],
  "maxItems": 50,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call scrapewise/en-japan-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scrapewise/en-japan-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/bUdz6D0bfIN6qE6t4/builds/ybSSLOiYe2w8cSAiJ/openapi.json
