# Japan Food Import Compliance Signals (`japan_signal_lab/japan-food-import-risk-signals`) Actor

Monitor official Japan food-import violations and inspection notices in source-backed English JSON for exporters, suppliers, and compliance teams.

- **URL**: https://apify.com/japan_signal_lab/japan-food-import-risk-signals.md
- **Developed by:** [Japan Signal Lab](https://apify.com/japan_signal_lab) (community)
- **Categories:** Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $15.00 / 1,000 food import risk signal emitteds

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 Food Import Compliance Signals

### Problem

Japan food-import compliance teams must track changing Japanese-language publications across violation workbooks, inspection-order notices, and monitoring notices. A static directory cannot show which official signal changed or retain the evidence needed for a review.

### What you get

A current, source-backed English JSON feed of official MHLW imported-food violation records, inspection-order updates, and monitoring-inspection updates. Each item preserves the Japanese evidence link, source date, signal type, country only when stated in the source, and a conservative English summary.

### Who it is for

Food and food-contact-material exporters, overseas supplier-compliance teams, inspection and testing providers, Japanese import-support firms, and AI compliance workflows that need a review queue.

### Example: try it in under a minute

The prefilled 30-day, three-country input is a focused starter search and has produced real Dataset signals in the verified product run. Clear the country filter to monitor all source countries, or tune the lookback window for your workflow.

### Why manual monitoring is difficult

The official sources are published in Japanese, change independently, and are not a ready-made English event feed. The Actor normalizes only what the source states and preserves the original evidence for a human follow-up.

### Official source

[MHLW imported-food violation records](https://www.mhlw.go.jp/stf/seisakunitsuite/bunya/kenkou_iryou/shokuhin/yunyu_kanshi/ihan/index.html) and the [MHLW import-food monitoring portal](https://www.mhlw.go.jp/stf/seisakunitsuite/bunya/kenkou_iryou/shokuhin/yunyu_kanshi/kanshi/index.html).

### Pricing example

The Store currently starts at **$15 per 1,000 emitted food-import signals**. Use the Pricing tab as the current authority.

### How to monitor Japan food import compliance updates

Schedule this Actor for source-backed changes that need triage, such as an official violation record or inspection update. It is an early review signal for supplier and import workflows, not a legal opinion, a clearance decision, or a product-recall substitute.

**Official Japan food-import risk signals for overseas suppliers, in auditable English JSON.** The Actor monitors a deliberately small MHLW source set and returns what the official source reported, who it explicitly names by country when available, when it was published, and the original Japanese evidence link.

It is for food and food-contact-material exporters, overseas seller/compliance teams, testing and inspection companies, Japanese import-support firms, and AI compliance workflows that need to route a source-backed review task. It is not a Japan import-clearance engine, a legal opinion, a certificate, or a decision that a shipment is admissible.

### What it returns

The feed joins three current official MHLW publication types:

1. Published imported-food Food Sanitation Act violation records.
2. Inspection-order implementation notices.
3. Monitoring-inspection implementation notices.

Every Dataset item includes a stable `eventType`, priority, source-country values only when directly extracted from Japanese official text, Japanese official scope, a fixed English source-backed summary, publication date, source URL, document URL where present, retrieval time, and processed-source attribution.

```json
{
  "eventType": "violation_detected",
  "riskLevel": "medium",
  "affectedProductCategory": "food",
  "productNameJa": "生鮮亜麻の種子",
  "sourceCountries": [{ "name": "India", "iso2": "IN", "sourceTextJa": "インド" }],
  "hazardOrReasonJa": "シアン化合物 180 mg/kg 検出",
  "englishSummary": "MHLW published an imported-food Food Sanitation Act violation record involving India...",
  "requiredActionSummary": "Treat this as a historical official record...",
  "legalDetermination": "not_provided",
  "source": {
    "sourceKind": "violation_list",
    "sourcePublicationDate": "2026-08-24",
    "officialDocumentUrl": "https://www.mhlw.go.jp/content/001741833.xlsx",
    "sourcePageUrl": "https://www.mhlw.go.jp/stf/seisakunitsuite/bunya/kenkou_iryou/shokuhin/yunyu_kanshi/ihan/index.html"
  }
}
```

`productNameEnglish` is intentionally `null`. The MVP does not invent a translation for a product description that was not published in English. `englishSummary` is a fixed, conservative event envelope; the Japanese original evidence is retained for the exact scope.

### Safety and legal boundary

- `inspection_order_updated` is not silently recast as a new order, cancellation, or legal consequence. The original notice title controls.
- `inspection_order_exemption_updated` is used only where the Japanese official title explicitly refers to an inspection-order exemption list.
- An official violation record is historical evidence, not a finding about another exporter, producer, or shipment.
- The Actor never republishes the violation workbook's manufacturer, shipper, importer, or cause/remedy company fields.
- No LLM is used. English summaries, country projection, and priority are deterministic templates around retained official facts.

### Official sources and permitted use

The source of truth is the MHLW imported-food violation page and the MHLW import-food monitoring portal:

- [Published violation records](https://www.mhlw.go.jp/stf/seisakunitsuite/bunya/kenkou_iryou/shokuhin/yunyu_kanshi/ihan/index.html)
- [Inspection-order and monitoring-notice portal](https://www.mhlw.go.jp/stf/seisakunitsuite/bunya/kenkou_iryou/shokuhin/yunyu_kanshi/kanshi/index.html)
- [MHLW terms of use / Government of Japan Standard Terms of Use (PDL 1.0)](https://www.mhlw.go.jp/chosakuken/)

MHLW says its content is available under the Government of Japan Standard Terms of Use (Version 2.0 / PDL 1.0), unless a page states otherwise. This Actor retains source attribution and identifies its data as processed. Before adding a new source or redistributing a source-specific attachment, check the page for an exception or separate rights statement. The Actor uses only MHLW-hosted HTTPS links discovered from those pages; it reads the current link chain and one current violation workbook per run, enforces a 20-second timeout and byte limits, and does not crawl PDFs or use a non-public API.

`https://www.mhlw.go.jp/robots.txt` does not disallow these target paths as checked on 2026-08-27 JST. Robots rules are not a copyright licence; they are observed alongside the explicit terms above.

### Input

```json
{
  "lookbackDays": 30,
  "maxResults": 500,
  "signalTypes": ["violation_detected", "inspection_order_updated", "inspection_order_exemption_updated", "monitoring_updated"],
  "sourceCountries": ["China", "South Korea", "United States"],
  "includeViolationCases": true,
  "includeInspectionOrders": true,
  "includeMonitoringUpdates": true
}
```

- `lookbackDays` is 1–365 and applies to the official publication date.
- `sourceCountries` accepts an English name or ISO-2 code only for source countries that can be directly derived from official Japanese text. Leave it blank to retain unclassified records too.
- `maxResults` limits output after filtering. The bounded source scan is still three primary publications at most.

### Why this product / competitive boundary

This is not a recall feed. It also does not compete head-on with a Japanese importer workflow. Japan-focused importer tools such as [シルシさん](https://shirushi.seni8.jp/) provide a Japanese shipment workflow and country/category warning experience. Global food regulatory services such as [FoodChain ID](https://www.foodchainid.com/services/regulatory) provide broad regulatory intelligence. The differentiated product is a small, current, **MHLW-first English JSON feed** that preserves original evidence and can be consumed by overseas supplier or agent workflows.

Direct catalog checks on 2026-08-27 JST found no matching Japan MHLW food-import inspection/violation feed in Apify Store searches for `MHLW food import` and `Japan import inspection`; RapidAPI search for `Japan food import` returned no result. That is a search result, not a claim that no substitute exists.

Public price evidence supports paid demand for the underlying Japanese import-compliance work: [Powerspot lists product/ingredient checks and quarantine consulting](https://powerspot-japan.com/import-to-japan/) and [Sapporo Public Health Research Institute lists imported-food testing fees](https://www.sapporohokeniryo.or.jp/contents/syokuhin/kensa/kensa_yunyuu.html). This Actor sells an early, machine-readable source signal—not a replacement for their laboratory or advisory services.

### Frequency and recurring value

The MHLW FY2025 consolidated violation workbook contained **803** published cases (about **67/month**). The FY2025 inspection-order and monitoring-notice lists contained **88** and **76** PDF notices, respectively (about **14/month** combined). That is enough continuing change volume for a supplier-side monitoring feed, particularly when a user filters to a country, ingredient, hazard, or product group downstream.

On 2026-08-27 JST, the live 365-day E2E scanned three current primary publications, observed 313 source rows, and emitted the first 100 bounded results with no source failures. The current source pages are dynamic public publications; these counts are an observed sample, not a future-volume guarantee.

### Pay per event pricing

The code permits PPE only when the Console contract matches exactly:

| Event | Billed unit | Price |
| --- | --- | ---: |
| `official-publication-scanned` | Each of the current violation workbook, inspection-order list, or monitoring-notice list actually scanned | $0.030 |
| `food-import-risk-signal-emitted` | Each Dataset item emitted after filters | $0.015 |

Do not add `apify-default-dataset-item`: it would duplicate the emitted-signal charge. With all three sources enabled, the source component is $0.09/run; a 10-signal run is $0.24. A 30-day daily monitor that averages three signals/day is approximately $4.05/month before Apify platform costs. This is the product's configured billable-unit model; use the Store Pricing tab for current customer-facing pricing.

### Development and verification

```bash
npm ci
npm test
npm run build
npm run e2e:live
APIFY_LOCAL_STORAGE_DIR=storage npm start
npm audit --json
```

Verified locally on 2026-08-27 JST:

- Unit tests: 4/4 passed.
- TypeScript build: passed.
- Live source E2E: 3 primary MHLW publications, 313 source rows, 100 bounded result samples, zero source failures.
- Full Actor local run: 3 publications, 313 rows, 10 output signals, `SUMMARY` written, no company identity fields in Dataset output.
- Dependency audit: 0 vulnerabilities after upgrading `fast-xml-parser` to 5.11.0.

The private GitHub source and Apify Cloud build/run were verified on 2026-08-27 JST. The Actor is now Public in Apify Store with active pay-per-event pricing; the Store Pricing tab is authoritative.

# Actor input Schema

## `lookbackDays` (type: `integer`):

The prefilled 30-day window keeps the first result set current and reviewable. Extend it for historical research.

## `maxResults` (type: `integer`):

Hard output limit after date, event-type and country filters.

## `signalTypes` (type: `array`):

Use generic updated-event types where the MHLW notice itself does not safely establish an addition, removal, or legal consequence.

## `sourceCountries` (type: `array`):

The prefilled countries create a focused first result set. Clear this field to include all countries and source records without a classified country.

## `includeViolationCases` (type: `boolean`):

Include rows from the current MHLW imported-food violation workbook. Supplier, shipper and importer fields are deliberately not emitted.

## `includeInspectionOrders` (type: `boolean`):

Include current official MHLW inspection-order notices and inspection-order exemption updates.

## `includeMonitoringUpdates` (type: `boolean`):

Include current official MHLW monitoring-inspection plan and related notice updates.

## Actor input object example

```json
{
  "lookbackDays": 30,
  "maxResults": 500,
  "signalTypes": [
    "violation_detected",
    "inspection_order_updated",
    "inspection_order_exemption_updated",
    "monitoring_updated"
  ],
  "sourceCountries": [
    "China",
    "South Korea",
    "United States"
  ],
  "includeViolationCases": true,
  "includeInspectionOrders": true,
  "includeMonitoringUpdates": true
}
```

# Actor output Schema

## `signals` (type: `string`):

No description

## `summary` (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 = {
    "lookbackDays": 30,
    "maxResults": 500,
    "signalTypes": [
        "violation_detected",
        "inspection_order_updated",
        "inspection_order_exemption_updated",
        "monitoring_updated"
    ],
    "sourceCountries": [
        "China",
        "South Korea",
        "United States"
    ],
    "includeViolationCases": true,
    "includeInspectionOrders": true,
    "includeMonitoringUpdates": true
};

// Run the Actor and wait for it to finish
const run = await client.actor("japan_signal_lab/japan-food-import-risk-signals").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 = {
    "lookbackDays": 30,
    "maxResults": 500,
    "signalTypes": [
        "violation_detected",
        "inspection_order_updated",
        "inspection_order_exemption_updated",
        "monitoring_updated",
    ],
    "sourceCountries": [
        "China",
        "South Korea",
        "United States",
    ],
    "includeViolationCases": True,
    "includeInspectionOrders": True,
    "includeMonitoringUpdates": True,
}

# Run the Actor and wait for it to finish
run = client.actor("japan_signal_lab/japan-food-import-risk-signals").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 '{
  "lookbackDays": 30,
  "maxResults": 500,
  "signalTypes": [
    "violation_detected",
    "inspection_order_updated",
    "inspection_order_exemption_updated",
    "monitoring_updated"
  ],
  "sourceCountries": [
    "China",
    "South Korea",
    "United States"
  ],
  "includeViolationCases": true,
  "includeInspectionOrders": true,
  "includeMonitoringUpdates": true
}' |
apify call japan_signal_lab/japan-food-import-risk-signals --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,japan_signal_lab/japan-food-import-risk-signals"
        }
    }
}
```

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/o3AYwwOlbf2IbfY4Q/builds/t8Qx6XGXf5AqiOl5b/openapi.json
