# Wantedly Scraper — Japan Startup Jobs, Companies & Salaries (`youfuxu/wantedly-japan-jobs-scraper`) Actor

Scrape job posts from Wantedly (wantedly.com), Japan's largest startup recruiting platform. Titles, hiring companies, locations, hiring types, What/Why/How texts, applicant and view counts, disclosed salary ranges — as clean JSON. HTTP-only, no proxy.

- **URL**: https://apify.com/youfuxu/wantedly-japan-jobs-scraper.md
- **Developed by:** [Youfu Xu](https://apify.com/youfuxu) (community)
- **Categories:** Jobs, Lead generation
- **Stats:** 1 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/actors/running/actors-in-store.md#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

## Wantedly Scraper — Japan startup & tech jobs, hiring companies, applicant counts

Get clean, structured job data from **[Wantedly](https://www.wantedly.com)** — Japan's largest startup and tech recruiting platform, with 180,000+ live posts from early-stage startups to listed companies. Search any keyword in English or Japanese, filter by hiring type, region and occupation, and download the results as JSON, CSV or Excel. No login, no browser, no proxy.

### What you get

Run it with the default input and each row looks like this (texts shortened here):

```json
{
  "url": "https://www.wantedly.com/projects/2539114",
  "title": "Claude Code×Copilot標準装備のAI-native開発環境",
  "lookingFor": "フルスタック/開発リーダー候補",
  "occupationCategory": "システムエンジニア",
  "occupationGroup": "エンジニアリング",
  "companyName": "株式会社リチェルカ",
  "companyUrl": "https://www.wantedly.com/companies/company_6358176",
  "companyLogoUrl": "https://d2v9k5u4v94ulw.cloudfront.net/.../108215f1-9e52-43a6-97bc-d6786c...",
  "location": "東京都港区芝浦4-11-17 中野スプリングビル 6階",
  "prefecture": "東京",
  "latitude": 35.6415596,
  "longitude": 139.7471618,
  "hiringTypes": ["Mid-career"],
  "hiringTypesJa": ["中途"],
  "employmentType": "Mid-career",
  "featureTags": ["オンライン面談OK", "話したい人を指名できる"],
  "publishedAt": "2026-08-20T13:44:51.624Z",
  "lastEditedAt": "2026-08-20T13:06:51.630Z",
  "status": "OPEN",
  "applicantCount": 0,
  "bookmarkCount": 0,
  "pageViews": 9,
  "description": "■ 募集の背景\n日本の製造業・流通業のサプライチェーンは、いまだにFAX・電話・紙帳票が中心の世界です…",
  "whatWeDo": "受発注領域を最適化するAgentic ERP「RECERQA」を開発・提供…",
  "whyWeDo": "企業間の受発注業務は、あらゆる産業の根幹を支えるオペレーションです…",
  "howWeDo": "◉ AIネイティブな開発：Claude Code・GitHub Copilotを全エンジニアが日常的に活用…",
  "salaryText": "",
  "scrapedAt": "2026-08-21T07:12:28.894Z"
}
```

**44 fields per post by default** — including the full *こんなことやります* description and the company's **What / Why / How** texts, applicant, bookmark and page-view counts, the office address with coordinates, hiring types in both English and Japanese, and Wantedly's feature tags — all from a single listing request, no detail-page visits needed.

Turn on **Include detail page data** and each post also gets:

- **Disclosed pay** — Wantedly hides salary from the listing, but many posts carry a statutory disclosure block (職業安定法). Where it exists you get `salaryMin` / `salaryMax` / `salaryPeriod` (`year`, `month`, `hour`) as numbers in JPY plus the original text, e.g. `年収 4,000,000円〜4,800,000円`. In our test runs roughly half of mid-career posts had numbers.
- **Legal employer details** — `legalEmployerName`, `legalWorkDuties`, `legalWorkLocation`, `legalAddress`
- **Company facts** — `companyWebsite`, `companyFoundedOn`, `companyEmployeeCount`, `companyAddress`, `companyFounder`, `companyIndustries`
- **Skill tags** — `categoryTags` such as `["Python", "AWS", "MySQL", "フロントエンド"]`
- **Team** — `memberCount`, `memberPositions`, and `members` (name, position, leader flag) as shown on the post

### Who uses this

- **Recruiters & sourcing teams** — find which Japanese startups are hiring for which roles right now, and how many people have already applied
- **Lead generation** — every row carries the hiring company, its Wantedly profile, logo, office address and (in detail mode) website, founding date, headcount and founder
- **Salary & market research** — the only public source of numeric pay for a large slice of Japanese startup roles, already parsed into `salaryMin` / `salaryMax`
- **Job boards & alert bots** — sort by `recent`, run it on a schedule, diff against yesterday's dataset
- **Competitive intelligence** — watch a competitor's hiring (filter by occupation and area), read their What / Why / How messaging, track `applicantCount` and `pageViews` over time

### How to use

1. Enter a **keyword** — `python`, `React`, `データサイエンティスト`, `PM` all work; separate several with commas
2. Optionally narrow by **hiring type** (new graduate / internship / mid-career / side job / freelance / part-time), **area** (Tokyo, Osaka, Nagoya, Kyoto, Fukuoka, Sapporo and regions), **occupation** (11 groups, 50 roles) and **feature tags** (e.g. raised 100M+ yen, online interview OK)
3. Pick a **sort order** — `recent` for monitoring, `popular` for the most applied-to posts
4. Set **Max jobs** and, if you want pay and company facts, enable **Include detail page data**
5. Run, then download from the **Dataset** tab as JSON / CSV / Excel, or pull it through the Apify API

#### Example input

```json
{
  "keyword": "python",
  "hiringTypes": ["mid_career"],
  "areas": ["tokyo"],
  "occupationType": "jp__web_engineer",
  "order": "popular",
  "maxItems": 200,
  "includeDetails": true
}
```

### Output fields

| Field | Description |
| --- | --- |
| `url`, `id` | Post URL and Wantedly project id |
| `title`, `lookingFor` | Post title and the role line shown under it |
| `occupationCategory`, `occupationGroup` | Wantedly's occupation taxonomy (e.g. Web engineer / Engineering) |
| `companyName`, `companyId`, `companySlug`, `companyUrl`, `companyLogoUrl`, `companyTwitter` | Hiring company |
| `location`, `locationLine1`, `locationLine2`, `prefecture`, `latitude`, `longitude`, `country` | Office address |
| `hiringTypes`, `hiringTypesJa`, `hiringTypeCodes`, `employmentType` | New graduate / Internship / Mid-career / Side job / Freelance / Part-time |
| `featureTags`, `featureTagCodes` | Wantedly listing tags (online interview OK, students welcome, funded 100M+ yen…) |
| `publishedAt`, `lastEditedAt`, `status` | ISO timestamps and lifecycle state |
| `applicantCount`, `bookmarkCount`, `supporterCount`, `pageViews` | Engagement counters as shown on the post |
| `coverImageUrl` | Cover image |
| `description`, `whatWeDo`, `whyWeDo`, `howWeDo` | Full plain-text body and the company's What / Why / How sections |
| `salaryDisclosed`, `salaryText`, `salaryMin`, `salaryMax`, `salaryCurrency`, `salaryPeriod`, `salaryType`, `salaryNote` | Pay — empty unless the post carries a disclosure block (detail mode) |
| `legalEmployerName`, `legalWorkDuties`, `legalWorkLocation`, `legalAddress` | Statutory disclosure block (detail mode) |
| `companyWebsite`, `companyFoundedOn`, `companyEmployeeCount`, `companyAddress`, `companyFounder`, `companyIndustries`, `companyTags`, `companyFeatureTags` | Company facts (detail mode) |
| `categoryTags` | Skill / topic tags (detail mode) |
| `memberCount`, `memberPositions`, `members` | Team members shown on the post (detail mode) |
| `scrapedAt` | When the row was collected |

### Why this scraper

- **Complete fields, one request** — reads the same structured search API the Wantedly site renders from, so 100 posts with descriptions, counts and addresses arrive in a single call instead of one page load per post
- **Parsed salary** — the disclosure block is turned into sortable numbers; other Wantedly scrapers return no pay at all
- **Works in Japanese and English** — the same keyword box the site uses, so `機械学習` and `machine learning` both work
- **Cheap to run** — HTTP only, 1 GB of memory is plenty, no residential proxies
- **Polite & resilient** — paces requests and backs off automatically on 429 / 5xx, refreshes its guest token when it expires

### Limitations

- **Salary is only available where the company disclosed it.** Wantedly does not show pay on listings by design; posts without a disclosure block return empty salary fields rather than a misleading `0`
- **1,000 results per search.** Wantedly stops serving results past the 1,000th for any query. Split large exports with hiring type, area or occupation filters
- Posts are Japan-focused; the `country` field is included in case Wantedly's other markets appear
- Counters (`applicantCount`, `pageViews`) are the public numbers shown on the post at scrape time

### Legal

This Actor collects only publicly available job posts and company information that Wantedly shows to anonymous visitors. You are responsible for using the data in compliance with Wantedly's terms and applicable law, including personal-data rules for the team member names shown on posts.

# Actor input Schema

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

What to search for, in English or Japanese: <code>python</code>, <code>React</code>, <code>データサイエンティスト</code>, <code>PM</code>. Separate several keywords with commas (<code>python, django</code>). Can be left empty only when at least one filter below is set.

## `hiringTypes` (type: `array`):

Limit to one or more hiring types. Leave empty for all.

## `areas` (type: `array`):

Limit to one or more regions of Japan. Leave empty for nationwide.

## `occupationType` (type: `string`):

Limit to one occupation group or a specific role inside it. Leave empty for all.

## `featureTags` (type: `array`):

Wantedly's own listing tags, e.g. only companies that raised 100M+ yen or accept online interviews.

## `order` (type: `string`):

<code>recent</code> = newest first (best for monitoring), <code>popular</code> = most applied-to, <code>mixed</code> = Wantedly's recommended order.

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

Maximum number of job posts to return. Wantedly serves at most 1,000 results per search — use the filters to split bigger exports.

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

Also fetch each post's statutory disclosure block (numeric salary range where the company published one, work duties, work location, legal employer) plus company website, founding date, headcount, address, industries, category tags and team members. Adds about one request per post; the listing alone already includes title, company, location, hiring type, What/Why/How texts, applicant and view counts.

## Actor input object example

```json
{
  "keyword": "python",
  "hiringTypes": [],
  "areas": [],
  "occupationType": "",
  "featureTags": [],
  "order": "recent",
  "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/wantedly-japan-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/wantedly-japan-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/wantedly-japan-jobs-scraper --silent --output-dataset

```

## MCP server setup

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