# Japan Search Open Heritage Metadata - CC0/PDM, Per Object (`nexgensignal/japan-search-open-heritage-records`) Actor

Japan Search open-rights (Public Domain Mark or CC0) heritage object metadata as clean per-record data - id, title, type, date, institution and rights. ~945,789 objects. Japanese text verbatim; contributor names dropped. $0.05 per record.

- **URL**: https://apify.com/nexgensignal/japan-search-open-heritage-records.md
- **Developed by:** [NexGen Signal](https://apify.com/nexgensignal) (community)
- **Categories:** Business, Developer tools, Other
- **Stats:** 2 total users, 1 monthly users, 50.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $33.50 / 1,000 heritage object records

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?

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

## Japan Search Open Heritage Metadata - CC0/PDM, Per Object

Japan Search's openly-licensed heritage metadata as clean, per-object records - **one record per object**
whose rights are **Public Domain Mark (PDM)** or **CC0**. Museum, library and archive object metadata -
title, type, date, institution and rights - aggregated across Japan's cultural databases, with Japanese text
delivered verbatim.

### What one record represents

The source is **Japan Search** (jpsearch.go.jp), the national aggregator, via its `jps-cross` cross-search
API. This cell is scoped to objects whose rights are Public Domain Mark or CC0. Each record is **one object**:
its id, title (Japanese, and English where provided), category, object type (image, text, sound, ...), date
text, location, the providing institution, the rights value, an access flag, a description and a link to the
object at its source.

### Coverage and volume

The live open-rights set is **945,789 objects** - **855,083** under Public Domain Mark and **90,706** under
CC0 (measured at build time from the API's rights facet). The Actor sweeps both rights values and delivers
their union.

**Sol's Wave-3 index put this door at 945,789 CC0/PDM records; measured live at build time the two rights
facets sum to exactly 945,789 (855,083 PDM + 90,706 CC0) - matching the index.**

The Actor pages the `jps-cross` API 100 objects at a time, sweeping the PDM slice and then the CC0 slice, and
stops as soon as your **Maximum records** cap is met.

### Licence and rights

This cell delivers **only** objects whose rights are PDM or CC0 - open, public-domain-equivalent terms. The
rights filter (`f-rights=pdm` and `f-rights=cc0`) is **baked into the query**, not a buyer option, and a
per-record assertion **rejects any object whose rights are not PDM or CC0** (verified with a planted-row test).
Japan Search API use is governed by the Japan Search policy:

> Japan Search API use is governed by https://jpsearch.go.jp/en/policy. This cell delivers ONLY objects whose rights are Public Domain Mark (pdm) or CC0; the rights filter is baked into the query. Metadata is aggregated from contributing institutions, cited via the provider/database fields.

Rights apply to the object's contents as marked by the contributing institution; the `rights`, `provider` and
`database` fields let you attribute and trace each object to its source.

### Person-data policy

Japan Search objects can carry contributor, creator-person, donor and rights-holder-person fields. This Actor
**structurally excludes** all of them: the `contributor` field and any creator/donor/rights-holder person data
are never read. The institutional fields that are kept - `provider`, `owner_org`, `database` - are
organisations, never persons, and a per-record assertion rejects any contributor/creator/donor/person field
(verified with a planted-field test). Object titles and descriptions are historical/cataloguing text about the
artefact, delivered verbatim. No natural-person data is processed.

### Interpretation caveat

One record per Japan Search cross-search object whose rights are Public Domain Mark or CC0 (~945,789: 855,083 PDM + 90,706 CC0). Heritage object metadata: id, title (Japanese verbatim + English where provided), category, type, date text, location, providing institution, rights, description, link. Japanese text is delivered verbatim. Contributor, creator-person, donor and rights-holder-person fields are structurally excluded.

Values are reproduced verbatim from the API; the Actor never rewrites a field, and **Japanese text is delivered
as-is with no transliteration** - relabelling would be a modification. The `date_text` is the source's own
period/date string (often an era name), not a normalised date. A field the source leaves empty is delivered as
null.

### Data quality and freshness

The `record_id` is the object id, so the dataset is safe to diff, deduplicate or upsert. Every run re-reads the
live API, so the data is as fresh as Japan Search aggregates, and each record's `observed_at` stamp dates the
snapshot. The run's `RUN_RECEIPT` records the per-rights totals alongside how many records were delivered and
charged.

### Provenance and compliance

Every run reads `jpsearch.go.jp/robots.txt` at runtime; the gate result (URL, status, byte length, SHA-256 of
the policy) is written to the run's `RUN_RECEIPT`, and the `jps-cross` path (outside the portal's disallowed
`/data/`, `/rdf/`, `/term/`, `/entity/` paths) is confirmed crawlable before any data request. The API is
keyless. The Actor never bypasses a block or fetches through a mirror.

### Inputs

- **Maximum records** (`maxRecords`) - hard cap on heritage-object records delivered and billed.

### Output

Records land in the Actor's default dataset and export as JSON, CSV, Excel or via the Apify API. A tabular
**overview view** surfaces object id, title, English title, type, date text, provider and rights.

### Fields in detail

The record leads with `object_id` and `title` (plus `title_en`), then `category`, `object_type`, `date_text`,
`location`, the institution fields `provider`/`owner_org`/`database`, the `rights` value, `access` and
`contents_access`, `description`, `link_url` and `thumbnail_url`. The provenance block closes every record.

### Typical uses

Archive, licensing and digital-collection teams use this cell to find commercially reusable heritage metadata -
one queryable table of nearly a million PDM/CC0 objects across Japan's cultural institutions, filterable by
type, provider or era, with a link back to each object at its source. Because the rights are baked to
public-domain-equivalent terms, every row is safe to reuse, and the provider/database fields let you attribute
per object. A scheduled run keeps a downstream heritage index current as Japan Search aggregates more
collections.

### Scaling and limits

Set **Maximum records** low to sample or high to pull toward the full ~945,000-object set. The Actor pages the
API 100 objects at a time across the two rights slices and delivers incrementally, so memory stays flat and you
are billed only for what is delivered. Re-running picks up newly aggregated open-rights objects, and each
record's `observed_at` stamp dates the snapshot.

### Cross-database aggregation

Japan Search is an aggregator: it federates metadata from hundreds of museum, library, archive and academic
databases across Japan into one cross-search profile (`jps-cross`). The `provider` and `database` fields on
every record tell you which contributing institution and source database the object came from, so you can
attribute per object and, if you need the fullest record, follow `link_url` back to the source. This cell reads
the normalised cross-search layer, which gives a consistent field set across every contributing database - one
shape to load, regardless of which institution holds the object.

### Working with the Japanese metadata

Titles, descriptions, date text and location are delivered exactly as the source holds them, which for the
great majority of objects means Japanese. The Actor does not transliterate or translate - relabelling a value
would be a modification, and the discipline of this fleet is verbatim reproduction - but it does carry the
English title (`title_en`) wherever the source provides one. The `date_text` is typically an era-based period
string (for example a Japanese period name plus a century) rather than an ISO date, faithful to how heritage
cataloguers record provenance. If you need romanised or normalised values, do it downstream; the record gives
you the authoritative source strings to work from. This verbatim discipline is what lets an archive or
licensing team trust the record as evidence of what the institution actually published, rather than as a
lossy paraphrase - the difference between metadata you can cite and metadata you have to re-check.

### Sibling Actors

It sits beside the fleet-1 Japan press-release cell (news vs heritage metadata). It shares its engineering - the runtime robots gate, offset paging with the rights filter
baked in, push-then-charge billing and verbatim-value discipline - with the fleet's other public-data records
Actors, and stays distinct from the Japan press-release cell (news vs heritage metadata).

# Actor input Schema

## `maxRecords` (type: `integer`):

Maximum heritage-object records delivered and billed. You are billed only for records delivered. About 945,789 objects carry Public Domain Mark or CC0 rights (855,083 PDM + 90,706 CC0).

## Actor input object example

```json
{
  "maxRecords": 500
}
```

# Actor output Schema

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

The delivered Japan Search open heritage object record.

# 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 = {
    "maxRecords": 500
};

// Run the Actor and wait for it to finish
const run = await client.actor("nexgensignal/japan-search-open-heritage-records").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 = { "maxRecords": 500 }

# Run the Actor and wait for it to finish
run = client.actor("nexgensignal/japan-search-open-heritage-records").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 '{
  "maxRecords": 500
}' |
apify call nexgensignal/japan-search-open-heritage-records --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,nexgensignal/japan-search-open-heritage-records"
        }
    }
}

```

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/XZdlP9xlCusF81i15/builds/4ycWiA2cgvukwYV8b/openapi.json
