# Manga Release, Licensing & Availability Intelligence (`obliging_persimmon_cki/manga-release-licensing-intelligence`) Actor

Track public manga licensing signals, localized editions, official availability, releases, prices, and stock across supported markets.

- **URL**: https://apify.com/obliging\_persimmon\_cki/manga-release-licensing-intelligence.md
- **Developed by:** [Dung Huynh](https://apify.com/obliging_persimmon_cki) (community)
- **Categories:** E-commerce, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

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

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

## Manga Release, Licensing & Availability Intelligence

Track public manga metadata, market licensing signals, localized editions, official availability, releases, prices, stock, release gaps, and run-to-run changes across US/English and Vietnam/Vietnamese.

### What this Actor does

The runnable `titleLookup` mode resolves a manga work, enriches supported markets, and emits one normalized `titleMarketSnapshot` per resolved title-market pair. It uses public metadata, publisher/catalog pages, and optional configured retailer pages. It does not download manga chapters or pages.

The Actor writes snapshots incrementally and always writes `RUN_SUMMARY` and `CHANGE_REPORT` when the Actor reaches its reporting path. It does not publish automatically or change pricing automatically.

### Who it is for

- Manga retailers and price-comparison services.
- Publishers and licensing teams.
- Libraries, catalog applications, and discovery products.
- Collectors and market researchers.

### Supported markets

- `US-en` — United States, English.
- `VN-vi` — Vietnam, Vietnamese.

### Supported sources

| Market | Metadata | Licensing/availability | Optional offers |
| --- | --- | --- | --- |
| US/en | Kitsu; Open Library fallback | VIZ public catalog/product pages | Barnes & Noble public product pages |
| VN/vi | Kitsu with vetted Vietnamese aliases; Open Library fallback | Kim Đồng public catalog/product pages | Fahasa public product pages |

Source access remains permission-gated by the Phase 0 compliance notes. Source failure or absence is reported with provenance and does not become an `unlicensed` claim.

### Title lookup

Use the default input for a one-title, one-market run. Add titles and supported markets to retrieve multiple snapshots. Matching is conservative: low-confidence or ambiguous candidates are not auto-selected, and a metadata failure never creates a fabricated record.

### Publisher calendar

`publisherCalendar` is present in the input schema for forward compatibility but is not runnable in this version. Publisher pages are currently used as market enrichment for `titleLookup`.

### Availability monitoring

`availabilityMonitor` is reserved for a later phase. The current `titleLookup` mode can collect optional public offers when `includeRetailOffers` is enabled and `editionUrls` contains allowlisted product URLs.

### Input examples

- [`samples/input.default.json`](samples/input.default.json) — Store-style default; no proxy, secret, or retailer crawl.
- [`samples/input.us-vn.json`](samples/input.us-vn.json) — one Vietnamese alias across both markets.
- [`samples/input.retail.json`](samples/input.retail.json) — opt-in Barnes & Noble/Fahasa offer collection.

Change detection additionally requires `detectChanges: true` and a `previousDatasetId`.

### Output example

See [`samples/output.default.json`](samples/output.default.json) for a representative matched snapshot. Each snapshot has a stable `actorOutputSchemaVersion`, `recordType`, work identity, market, nested evidence, warnings, sources, and flattened fields for table/CSV use.

The Actor also writes:

- `RUN_SUMMARY` — counts, duration, warnings, and source failures.
- `CHANGE_REPORT` — detected changes or an explicit disabled-by-default empty report.

### Licensing statuses

- `licenseSignalFound` — a tested public publisher/catalog signal was found.
- `licensed` — reserved for a future source that provides an explicit licensed status.
- `unknown` — the tested sources did not provide enough evidence.

The Actor does not emit `unlicensed`. A missing result is not proof that a work is unlicensed, and a retailer listing alone is not licensing proof.

### Edition matching

Edition IDs incorporate work, market, language, ISBN, title, publisher, edition type, format, and volume evidence. ISBN-identical listings merge when compatible. Paperback, ebook, hardcover, standard, omnibus, deluxe, box-set, and special editions remain distinguishable. Missing identity evidence is treated conservatively.

### Release-gap calculation

Enable `includeReleaseGap` to compare the latest original standard volume with the latest localized standard volume when both are comparable. Ongoing works without a reliable original latest-volume signal return `calculated: false` and `volumeGap: null`. Omnibus, deluxe, box-set, special, art-book, spin-off, guide, and novel labels are excluded. Calculated gaps include provenance for both sides.

### Change detection

Enable `detectChanges` with a previous dataset ID. Snapshots match by `workId + marketCode`; editions match by `editionId`; offers match by provider/offer identity and edition. Supported changes include new license signals, publisher changes, new volumes, official reading links, new offers, price changes, stock changes, preorder openings, and release-date changes. Timestamps, source request order, and warning order are ignored.

### Price and stock handling

Prices remain numeric with their source currency (`USD` or `VND` in the tested examples). Stock is normalized to `inStock`, `outOfStock`, `preorder`, `backorder`, `discontinued`, or `unknown`. Unmatched retailer offers remain explicitly marked with `OFFER_UNMATCHED_EDITION` rather than being silently assigned to an edition. Retailer stock can vary by region and time.

### Dataset views

The dataset schema provides:

- Overview — flattened title, market, license, release, availability, price, and stock fields.
- Licensing — license evidence and sources.
- Availability — official links and retail summary.
- Provenance — match, warnings, source records, and observation time.
- Detected changes — per-snapshot change summary.

The output schema links to the default dataset, `RUN_SUMMARY`, and `CHANGE_REPORT` through Apify Console templates.

### Cost and runtime

The default path uses no proxy or secret, disables retailer collection, and has 180-second soft / 240-second hard deadlines. Ten local exact-default repetitions completed successfully; the slowest observed wall time was 8.05 seconds. Optional retailer and change-detection settings add source work. See [`docs/COST_REPORT.md`](docs/COST_REPORT.md).

### Known limitations

- Coverage depends on public source availability and source policy/terms.
- The Actor returns metadata and public availability signals; it does not download chapters, pages, images, or OCR content.
- `notFound` or `unknown` does not prove a title is unlicensed.
- Release dates and stock information can change after collection.
- Retailer stock may vary by delivery region.
- Omnibus and special-edition matching may require manual review.
- Publisher calendar and availability-monitor modes are not runnable yet.

### Responsible use

Use only where collection and downstream use are lawful. Respect robots instructions, terms, rate limits, and source attribution. Do not use this Actor to obtain or redistribute manga content. Users remain responsible for validating source permissions and the accuracy or freshness of decisions based on the data.

### FAQ

#### Does this Actor download manga?

No. It collects metadata and public availability or commerce signals only.

#### Does `unknown` mean unlicensed?

No. It means the tested sources did not provide sufficient evidence.

#### Why is an offer unmatched?

The retailer page did not expose enough ISBN/edition evidence to safely assign it. The offer is retained with a warning for review.

#### Can I use all input modes now?

No. `titleLookup` is the current runnable mode; calendar and monitoring modes are roadmap items.

#### Can the Actor publish or change pricing?

No. Publication and pricing decisions are intentionally outside the Actor.

### Roadmap

1. Implement publisher-calendar and availability-monitor modes.
2. Expand source permission review and tested market coverage.
3. Add larger live benchmark coverage and source schema-change detection.
4. Improve manual-review exports for difficult edition families.

### Store keywords

`manga data`, `manga release tracker`, `manga licensing`, `manga availability`, `manga price tracker`, `manga stock monitor`, `manga publisher data`, `manga volume releases`, `localized manga editions`, `manga ISBN`, `official manga availability`, `manga release gap`, `manga market intelligence`, `English manga releases`, `Vietnamese manga releases`.

Recommended categories: **E-commerce** primary and **Other** secondary.

# Actor input Schema

## `mode` (type: `string`):

Choose a mode. The current runnable path is titleLookup; publisherCalendar and availabilityMonitor are reserved for later phases.

## `titles` (type: `array`):

Titles to resolve. Vietnamese and English aliases are accepted.

## `markets` (type: `array`):

Initial supported market-language pairs: US/en and VN/vi.

## `publisherUrls` (type: `array`):

Optional public publisher pages reserved for publisherCalendar mode.

## `editionUrls` (type: `array`):

Known public edition URLs used by optional retailer collection; availabilityMonitor is reserved for a later phase.

## `dateFrom` (type: `string`):

Optional ISO date for publisher calendar mode.

## `dateTo` (type: `string`):

Optional ISO date for publisher calendar mode.

## `maxTitles` (type: `integer`):

Maximum unique title queries.

## `maxEditionsPerTitle` (type: `integer`):

Maximum normalized editions retained for each work.

## `maxOffersPerEdition` (type: `integer`):

Maximum retailer offers retained for each edition.

## `includeMetadata` (type: `boolean`):

Include canonical manga work metadata.

## `includeLicensing` (type: `boolean`):

Include public market-specific licensing signals when supported.

## `includeOfficialAvailability` (type: `boolean`):

Include public official publisher or reader availability signals.

## `includeRetailOffers` (type: `boolean`):

Collect supported public retailer price and stock data. Disabled for the Store auto-test.

## `includeReleaseGap` (type: `boolean`):

Calculate a release gap only when comparable original and localized volumes are available.

## `detectChanges` (type: `boolean`):

Compare snapshots with a previous dataset.

## `previousDatasetId` (type: `string`):

Required when change detection is enabled.

## `normalizedOutputLanguage` (type: `string`):

Use English labels or preserve original-language labels where supported.

## `preserveOriginalText` (type: `boolean`):

Preserve source-language titles and product labels.

## `requestTimeoutSecs` (type: `integer`):

Per-source request timeout.

## `maxConcurrency` (type: `integer`):

Maximum concurrent source operations in later enrichment phases.

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

Optional Apify Proxy settings. The default path does not require a proxy.

## `debug` (type: `boolean`):

Enable bounded diagnostic logging without raw source content.

## Actor input object example

```json
{
  "mode": "titleLookup",
  "titles": [
    "One Piece"
  ],
  "markets": [
    {
      "countryCode": "US",
      "languageCode": "en"
    }
  ],
  "publisherUrls": [],
  "editionUrls": [],
  "dateFrom": "",
  "dateTo": "",
  "maxTitles": 1,
  "maxEditionsPerTitle": 3,
  "maxOffersPerEdition": 2,
  "includeMetadata": true,
  "includeLicensing": true,
  "includeOfficialAvailability": true,
  "includeRetailOffers": false,
  "includeReleaseGap": false,
  "detectChanges": false,
  "previousDatasetId": "",
  "normalizedOutputLanguage": "en",
  "preserveOriginalText": true,
  "requestTimeoutSecs": 25,
  "maxConcurrency": 2,
  "proxyConfiguration": {
    "useApifyProxy": false
  },
  "debug": false
}
```

# Actor output Schema

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

Market-level manga licensing, release, availability, pricing, and stock records in the default dataset.

## `runSummary` (type: `string`):

Run counts, source status, warnings, and performance information.

## `changeReport` (type: `string`):

New releases, price changes, stock changes, publisher changes, and new availability signals.

# 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 = {
    "mode": "titleLookup",
    "titles": [
        "One Piece"
    ],
    "markets": [
        {
            "countryCode": "US",
            "languageCode": "en"
        }
    ],
    "maxTitles": 1,
    "includeMetadata": true,
    "includeLicensing": true,
    "includeOfficialAvailability": true,
    "includeRetailOffers": false,
    "includeReleaseGap": false,
    "detectChanges": false,
    "normalizedOutputLanguage": "en",
    "preserveOriginalText": true,
    "requestTimeoutSecs": 25,
    "maxConcurrency": 2,
    "proxyConfiguration": {
        "useApifyProxy": false
    },
    "debug": false
};

// Run the Actor and wait for it to finish
const run = await client.actor("obliging_persimmon_cki/manga-release-licensing-intelligence").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 = {
    "mode": "titleLookup",
    "titles": ["One Piece"],
    "markets": [{
            "countryCode": "US",
            "languageCode": "en",
        }],
    "maxTitles": 1,
    "includeMetadata": True,
    "includeLicensing": True,
    "includeOfficialAvailability": True,
    "includeRetailOffers": False,
    "includeReleaseGap": False,
    "detectChanges": False,
    "normalizedOutputLanguage": "en",
    "preserveOriginalText": True,
    "requestTimeoutSecs": 25,
    "maxConcurrency": 2,
    "proxyConfiguration": { "useApifyProxy": False },
    "debug": False,
}

# Run the Actor and wait for it to finish
run = client.actor("obliging_persimmon_cki/manga-release-licensing-intelligence").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 '{
  "mode": "titleLookup",
  "titles": [
    "One Piece"
  ],
  "markets": [
    {
      "countryCode": "US",
      "languageCode": "en"
    }
  ],
  "maxTitles": 1,
  "includeMetadata": true,
  "includeLicensing": true,
  "includeOfficialAvailability": true,
  "includeRetailOffers": false,
  "includeReleaseGap": false,
  "detectChanges": false,
  "normalizedOutputLanguage": "en",
  "preserveOriginalText": true,
  "requestTimeoutSecs": 25,
  "maxConcurrency": 2,
  "proxyConfiguration": {
    "useApifyProxy": false
  },
  "debug": false
}' |
apify call obliging_persimmon_cki/manga-release-licensing-intelligence --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,obliging_persimmon_cki/manga-release-licensing-intelligence"
        }
    }
}

```

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/83gDW2lymhUGKqN4i/builds/4HedL5zIh507TopRa/openapi.json
