# Japan Crowdfunding Scraper - Makuake, CAMPFIRE (`jpopendata/japan-crowdfunding`) Actor

Japanese crowdfunding projects from CAMPFIRE and Makuake in one English schema: goal, amount raised, percent funded, backers, dates, status and reward price range. Search by keyword, category and status, or paste project URLs. Facts only. Unofficial; not affiliated.

- **URL**: https://apify.com/jpopendata/japan-crowdfunding.md
- **Developed by:** [JP Open Data](https://apify.com/jpopendata) (community)
- **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/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

## Japan Crowdfunding Scraper — Makuake, CAMPFIRE

Collect project data from the Japanese reward-crowdfunding platforms **CAMPFIRE** (camp-fire.jp) and **Makuake** (makuake.com) in **one English-language format**: goal, amount raised, percent funded, number of backers, start and end dates, days left, status (live / upcoming / successful / ended), funding model and the **price range of the rewards**.

Use it to:

- spot fast-growing Japanese projects (gadgets, outdoor, food, beauty…) for **import, distribution or retail deals**;
- compare how products perform on the two platforms;
- track a list of projects day by day (schedule the run with your project URLs);
- research categories, pricing and funding goals for your own campaign.

One record = one project. Facts only: no descriptions, images, reward texts, backer names or comments.

### Quick start — verified input

Live projects from both platforms, 15 in total (split between the two):

```json
{
    "sites": ["campfire", "makuake"],
    "status": "live",
    "maxItems": 15
}
```

Gadget projects on CAMPFIRE, most funded first:

```json
{
    "sites": ["campfire"],
    "category": "technology",
    "sort": "most_funded",
    "maxItems": 40
}
```

Specific projects (any status, either platform):

```json
{
    "projectUrls": [
        "https://camp-fire.jp/projects/975280/view",
        "https://www.makuake.com/project/seris/",
        "https://www.makuake.com/project/legsupport/"
    ]
}
```

### Input

| Field | What it does |
|---|---|
| `sites` | `campfire`, `makuake` (any spelling: "CAMPFIRE", "マクアケ"). Empty = both. `maxItems` is shared evenly. |
| `status` | `live` (default), `upcoming`, `ended` (incl. successful), `successful` (ended with the goal reached), `any`. |
| `category` | Optional: `technology`, `product`, `fashion`, `food`, `beauty`, `art`, `music`, `sports`, `outdoor`, `film`, `publishing`, `anime`, `game`, `social-good`, `local`, `business`, `entertainment`, `cars`, `pets`, `challenge`. Japanese labels work too ("ガジェット", "フード"). |
| `keyword` | Optional search words. Japanese works best ("イヤホン", "キャンプ"). |
| `sort` | CAMPFIRE result order: `popular` (default), `newest`, `ending_soon`, `most_funded`. |
| `projectUrls` | Project pages to read directly (up to 1,000). When set, every listed page is read and the filters above (and `maxItems`) are ignored. |
| `maxItems` | Maximum number of project records for the run (1–5,000), shared evenly between the platforms. |
| `maxApiRequests` | Hard cap on requests to the platforms. `0` = automatic (recommended). |
| `proxyConfiguration` | Not needed normally. If a platform refuses Apify's datacenter IPs, use Apify Proxy RESIDENTIAL with country JP. |

#### What each platform supports

| | CAMPFIRE | Makuake |
|---|---|---|
| How projects are found | the site's own search | the site's sitemap, newest launch first |
| `keyword` / `category` | searched by the site | checked after reading each project page |
| `status` live / upcoming / ended | live, upcoming (ended: paste URLs) | live, upcoming, ended |
| Start and end date | dates | date and time |
| Creator name | organisations only | organisations only |

Makuake's own project lists load from a part of the site that its robots.txt closes to crawlers, so this actor reads Makuake's public sitemap instead: projects come **newest launch first**, and keyword/category filters are applied after each project page is read. A filtered Makuake search therefore needs more requests and may return fewer projects. For ended Makuake projects the actor starts with projects that launched more than 100 days ago.

### Output

```json
{
    "source": "CAMPFIRE (camp-fire.jp) public project pages",
    "sourceUrl": "https://camp-fire.jp/",
    "license": "Publicly available data — unofficial tool; users are responsible for compliance with the source site's terms",
    "retrievedAt": "2026-10-12T20:00:00.000Z",
    "site": "campfire",
    "siteName": "CAMPFIRE",
    "projectId": "975280",
    "projectUrl": "https://camp-fire.jp/projects/975280/view",
    "title": "イヤホン×カメラ×AI次世代3in1ワイヤレスイヤホン「JS-12 PRO」",
    "titleRedacted": false,
    "category": "テクノロジー・ガジェット",
    "categoryEn": "technology",
    "categoriesEn": ["technology"],
    "tags": ["テクノロジー・ガジェット"],
    "creatorName": null,
    "creatorNameWithheld": true,
    "creatorWithheldReason": "not_an_organisation",
    "goalJpy": 200000,
    "raisedJpy": 5763960,
    "percentFunded": 2881,
    "backers": 355,
    "fundingModel": "all_in",
    "status": "live",
    "goalReached": true,
    "startDate": "2026-09-20",
    "endDate": "2026-10-31",
    "daysLeft": 18,
    "rewardCount": 4,
    "rewardMinPriceJpy": 16200,
    "rewardMaxPriceJpy": 33750,
    "detailsWithheld": false,
    "foundVia": "search"
}
```

- `status`: `live`, `upcoming`, `successful` (ended with raised ≥ goal), `ended` (ended below the goal), `unknown`.
- `categoryEn` is the project's main category in English; `categoriesEn` lists every category its category label and tags belong to (a Makuake beauty project tagged スポーツ has both `beauty` and `sports`). The `category` filter matches `categoriesEn`.
- `percentFunded` is rounded down, as the platforms show it. All amounts are Japanese yen.
- `fundingModel`: `all_or_nothing` or `all_in` (null when the page does not say).
- `detailsWithheld: true` — an upcoming Makuake project: its public page shows only the title and the creator, so the goal, dates and rewards are left empty.
- The run's key-value store has a `RUN_SUMMARY` with per-platform counts and any stop reason.

#### Creator names

The creator is shown only when the name is clearly an **organisation** (株式会社, 合同会社, 一般社団法人, Inc., Ltd., a university, a local government…). Individuals, nicknames and brand handles are left out: `creatorName` is null and `creatorNameWithheld` is true. If an individual's name also appears in the title, it is replaced with `[creator name withheld]` (`titleRedacted: true`).

### Common input mistakes

| Mistake | Use instead |
|---|---|
| `"sites": ["kickstarter"]` | Only `campfire` and `makuake` are supported. |
| `"status": "ended"` with only CAMPFIRE | CAMPFIRE's search lists live and upcoming projects only — paste ended CAMPFIRE projects into `projectUrls`. |
| `"category": "outdoor"` with only CAMPFIRE | CAMPFIRE has no outdoor category; add `makuake` (its projects are checked one by one). |
| A profile or list page in `projectUrls` | Use project pages: `https://camp-fire.jp/projects/<id>/view`, `https://www.makuake.com/project/<name>/`. |
| A long English keyword | The sites are Japanese: try a Japanese or shorter keyword. |

### Empty results?

- The keyword or category matched nothing right now (the run succeeds with 0 items and a warning; nothing is charged).
- With a keyword or category, Makuake projects are checked one by one; within the request budget there may be no match. Raise `maxApiRequests` or drop the filter.
- A pasted project was removed or made private (HTTP 404): it is skipped and listed in `RUN_SUMMARY`.

### How it works

- Only public pages; no login, no cookies, no CAPTCHA or bot-check workarounds.
- Every request is checked against the site's robots.txt first; pages the sites close to crawlers (for example Makuake's `/api/` and comment pages) are never requested.
- One request at a time, at least 1.5 seconds apart, with a hard request budget; `Retry-After` is respected and refusals stop the platform instead of retrying hard.
- If a platform stops early (refusal, time limit, budget), the records already collected are kept and the run ends with `complete: false` in `RUN_SUMMARY`.
- Speed: about 1.5–2 seconds per project (one page per project plus list pages). The Quick start takes under a minute; 1,000 projects take roughly 30–40 minutes — raise the run timeout above the default 1 hour for runs of more than about 1,500 projects.

### Legal and data notice

- **Unofficial tool — not affiliated with, endorsed or sponsored by the operators of CAMPFIRE or Makuake, or their partners.** Platform names are used only to describe the source of the data.
- It reads **publicly available** project facts only. You are responsible for complying with each platform's terms of use and with the laws that apply to your use of the data (for example copyright, unfair competition and privacy law). Some platforms restrict commercial reuse or re-publication of their content in their terms; check them before you publish or resell the data.
- **Personal data / GDPR:** the output is designed to contain no personal data — individual creators are withheld, and no backer information is collected. If you combine the data with other sources, you are the controller of any personal data that results.
- Attribution: each record names its source (`source`, `sourceUrl`) and the time it was retrieved (`retrievedAt`). Please keep the source attribution when you share the data.

# Actor input Schema

## `sites` (type: `array`):

Which platforms to read. Valid values: campfire (camp-fire.jp), makuake (www.makuake.com). Spelling is forgiving ("CAMPFIRE", "マクアケ"…). Empty = both. maxItems is shared evenly between them.

## `status` (type: `string`):

live = accepting backers now (default). upcoming = announced, not started (Makuake shows only the title for these). ended = finished, successful or not (Makuake; for CAMPFIRE paste ended projects into Project URLs). successful = ended with the goal reached. any = no status filter.

## `category` (type: `string`):

Optional. One of: technology, product, fashion, food, beauty, art, music, sports, outdoor, film, publishing, anime, game, social-good, local, business, entertainment, cars, pets, challenge. Japanese labels work too ("ガジェット", "フード"). Platforms without that category are skipped (e.g. CAMPFIRE has no outdoor). Empty = all categories.

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

Optional. Searched with CAMPFIRE's own search (Japanese works best, e.g. "イヤホン", "キャンプ"). Makuake has no robots-allowed search, so Makuake projects are read newest-launch first and kept only when every word appears in the title or tags. Empty = no keyword.

## `sort` (type: `string`):

Order of CAMPFIRE search results. Makuake projects are always read newest launch first.

## `projectUrls` (type: `array`):

Optional. Project pages to read directly, one per line, from either platform: https://camp-fire.jp/projects/<id>/view, https://www.makuake.com/project/<name>/. Works for live, upcoming and ended projects. When set, only these pages are read — all of them — and the filters above and Max projects are ignored. Up to 1,000 per run.

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

Maximum number of project records for the whole run (shared evenly between the platforms; one record per project). 1-5000. Not used with Project URLs: every listed page is read.

## `maxApiRequests` (type: `integer`):

Hard cap on requests to the platforms for the whole run (one request per project page plus list/sitemap pages). 0 = automatic from Max projects (recommended). Requests are made one at a time, at least 1.5 s apart.

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

Optional. Not needed normally. If a platform refuses Apify's datacenter IPs, use Apify Proxy RESIDENTIAL with country JP.

## Actor input object example

```json
{
  "sites": [
    "campfire",
    "makuake"
  ],
  "status": "live",
  "category": "",
  "keyword": "",
  "sort": "popular",
  "projectUrls": [],
  "maxItems": 15,
  "maxApiRequests": 0,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `records` (type: `string`):

One record per crowdfunding project with source attribution (source, sourceUrl, license, retrievedAt) on every item.

# 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 = {
    "sites": [
        "campfire",
        "makuake"
    ],
    "status": "live",
    "category": "",
    "keyword": "",
    "sort": "popular",
    "projectUrls": [],
    "maxItems": 15,
    "maxApiRequests": 0,
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("jpopendata/japan-crowdfunding").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 = {
    "sites": [
        "campfire",
        "makuake",
    ],
    "status": "live",
    "category": "",
    "keyword": "",
    "sort": "popular",
    "projectUrls": [],
    "maxItems": 15,
    "maxApiRequests": 0,
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("jpopendata/japan-crowdfunding").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 '{
  "sites": [
    "campfire",
    "makuake"
  ],
  "status": "live",
  "category": "",
  "keyword": "",
  "sort": "popular",
  "projectUrls": [],
  "maxItems": 15,
  "maxApiRequests": 0,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call jpopendata/japan-crowdfunding --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,jpopendata/japan-crowdfunding"
        }
    }
}
```

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/Y1HErgyRfJhXHCdXF/builds/fI89iexVbQ2JjJusQ/openapi.json
