# Lawson Japan Product Scraper (`mrdoe/lawson-japan-scraper`) Actor

Extract Lawson Japan's own-brand product catalogue — rice balls, bento, sandwiches, bakery, sweets and coffee. Get name, tax-included price, calorie count, full nutrition table, allergens, release date, category and photo for every item. Browse by category or pull specific product details. No login.

- **URL**: https://apify.com/mrdoe/lawson-japan-scraper.md
- **Developed by:** [MrDoe](https://apify.com/mrdoe) (community)
- **Categories:**
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.70 / 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.
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

### What does Lawson Japan Product Scraper do?

**Lawson Japan Product Scraper extracts [Lawson](https://www.lawson.co.jp)'s own-brand ("オリジナル商品") product catalogue** - rice balls, bento, sandwiches, bakery, sweets, coffee, and more - straight from lawson.co.jp. For each product you get the name, tax-included price, calorie count, full nutrition table, highlighted allergens, release date, category, and photo. No login, no API key.

Run it on Apify for scheduled runs, a REST API, and integrations with Google Sheets, Make, Zapier and more.

#### Two operations

| Operation | What it does | Key input |
| --- | --- | --- |
| **Browse a category** | Lists every product currently shown in one Lawson category (or all categories) | `category` / `categories` |
| **Product details** | Full detail for specific products | `productId` / `productIds` |

### Why use it?

- **New-product tracking** - Lawson refreshes its line-up weekly; watch a category for `isNew` items and release dates.
- **Price and nutrition monitoring** - tax-included price, kcal, protein/fat/carbs/salt per product.
- **Allergen data** - the highlighted allergens from Lawson's 28-item allergen table, per product.
- **Menu / competitive research** - a clean nationwide snapshot of a major Japanese convenience-store chain's food range.

### Data it extracts

| Field | Description |
| --- | --- |
| `productId` | Lawson's numeric product id |
| `name` | Product name (Japanese) |
| `priceWithTax` | Lawson standard price, tax included (JPY, integer) |
| `currency` | Always `JPY` |
| `kcal` | Calories per package |
| `nutrition` | Full nutrition map (熱量, たんぱく質, 脂質, 炭水化物, 糖質, 食物繊維, 食塩相当量) - details only |
| `allergens` | Highlighted allergens from the 28-item table - details only |
| `description` | Product blurb - details only |
| `contentAmount` | 規格（内容量）, e.g. "1食" - details only |
| `isNew`, `badge`, `releaseDate` | New-product flag, badge text, parsed release date (`YYYY-MM-DD`) |
| `category`, `categoryLabel`, `breadcrumbs` | Category slug + Japanese label + breadcrumb trail |
| `image` | Product photo URL |
| `productUrl` | Canonical lawson.co.jp detail URL |

### How to use it

1. Pick an **Operation**: *Browse a category* or *Product details*.
2. For browsing, choose a **Category** (or *All categories*, or list several under *Categories - batch*). Optionally add a **Product name filter**.
3. For details, paste one or more **Product ids or URLs**.
4. Set **Max items** if you want to cap a browse run.
5. Click **Start**. Download as JSON, CSV, Excel or HTML, or pull from the API.

### Input

| Field | Type | Description |
| --- | --- | --- |
| `operation` | string | `search` or `productDetails` (required) |
| `category` | string | One category slug or `all` |
| `categories` | array | Several slugs; include `all` to sweep everything |
| `productName` | string | Case-insensitive name filter (search) |
| `productId` / `productIds` | string / array | Product id(s) or detail URL(s) |
| `maxItems` | integer | Row cap for search (default 20) |
| `proxyConfiguration` | object | Proxy settings (default Apify proxy is enough) |

### Output

Each dataset row is one product. Download in JSON, HTML, CSV or Excel.

```json
{
  "_operation": "productDetails",
  "productId": "1531086",
  "name": "プレミアムおにぎり　わさび醤油仕立ての漬けサーモン(アトランティックサーモン)",
  "priceWithTax": 257,
  "currency": "JPY",
  "kcal": 210,
  "description": "脂のりのよいアトランティックサーモンを使用。漬けのとろっとした食感がワンランク上の味わい。わさび醤油がアクセント。※海苔はついていない商品です。",
  "contentAmount": "1食",
  "nutrition": { "熱量": "210kcal", "たんぱく質": "5.5g", "脂質": "2.5g", "炭水化物": "41.7g", "糖質": "40.8g", "食物繊維": "0.9g", "食塩相当量": "1.69g" },
  "allergens": ["小麦", "さけ", "大豆"],
  "isNew": true,
  "badge": "NEW",
  "releaseDate": null,
  "category": "オリジナル商品",
  "breadcrumbs": ["商品・おトク情報", "オリジナル商品", "プレミアムおにぎり　わさび醤油仕立ての漬けサーモン(アトランティックサーモン)"],
  "image": "https://www.lawson.co.jp/recommend/original/detail/img/l819066.png",
  "productUrl": "https://www.lawson.co.jp/recommend/original/detail/1531086_1996.html",
  "status": "success"
}
```

### Known limitations

- **Own-brand catalogue only.** This scrapes Lawson's "オリジナル商品" pages - not third-party/national-brand goods, and not the Loppi or Uber Eats/Wolt delivery menus.
- **Nationwide info, not per-store.** Lawson publishes product data centrally; regional-availability caveats are in the page notes but there is no per-store stock signal.
- Some products (especially not-yet-released items) have no nutrition or allergen table yet; those fields come back empty.
- Prices are the "Lawson standard price" (recommended franchise price); individual stores may differ.
- Product ids rotate as the line-up refreshes - an old id returns a single `status: "error"` row.

### FAQ

**Do I need an account or key?** No.

**Is scraping this legal?** It collects only public product-catalogue data, no personal data. You are responsible for complying with Lawson's site terms and applicable law.

**Can it get store locations?** Not this Actor - it's product data only.

# Actor input Schema

## `operation` (type: `string`):

Which Lawson data to scrape. One operation per run.

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

Which own-brand category to list for the search operation. Choose "All categories" to sweep every category in one run.

## `categories` (type: `array`):

Several category slugs in one run (e.g. rice, bento, dessert). Wins over "Category" when filled. Include "all" to sweep every category.

## `productName` (type: `string`):

Only return products whose name contains this text (case-insensitive, Japanese or English). Applies to the search operation.

## `productId` (type: `string`):

A Lawson product id (the number in a detail URL) or a full lawson.co.jp product detail URL. Used by the productDetails operation. Leave blank to have the Actor pick a current product.

## `productIds` (type: `array`):

Several product ids or detail URLs in one run. Wins over "Product id" when filled.

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

Caps total rows for the search operation (productDetails always returns one row per id). Default 20.

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

Lawson's catalogue is public and lightly trafficked; the default Apify proxy is plenty.

## Actor input object example

```json
{
  "operation": "search",
  "category": "rice",
  "productName": "",
  "maxItems": 20,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `products` (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 = {
    "maxItems": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("mrdoe/lawson-japan-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 = { "maxItems": 20 }

# Run the Actor and wait for it to finish
run = client.actor("mrdoe/lawson-japan-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 '{
  "maxItems": 20
}' |
apify call mrdoe/lawson-japan-scraper --silent --output-dataset

```

## MCP server setup

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