# Japan Invoice Number Checker - T-Number Lookup (`1rrock/japan-invoice-lookup`) Actor

Bulk-check Japanese qualified invoice registration numbers (適格請求書発行事業者 登録番号, T + 13 digits) against official National Tax Agency data: registered, revoked or expired, name, address, dates. Search issuers by name and prefecture. No API key, no proxy. $1.50 per 1,000 results.

- **URL**: https://apify.com/1rrock/japan-invoice-lookup.md
- **Developed by:** [1rrock](https://apify.com/1rrock) (community)
- **Categories:** Business, Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.50 / 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

### What is Japan Invoice Number Checker?

**Japan Invoice Number Checker** bulk-verifies Japanese **qualified invoice issuer registration numbers** (適格請求書発行事業者 登録番号, **T-numbers**: `T` + 13 digits) against the **official National Tax Agency (NTA / 国税庁) open data**. Paste any number of T-numbers and see for each one whether it is **registered, revoked or expired**, with the issuer's name, address, prefecture and registration dates. You can also **search issuers by company name and prefecture** to find a supplier's T-number. No application ID, no API key and no proxy needed.

インボイス制度の登録番号（T＋13桁）を国税庁の公表データで一括確認できます。取消・失効の判定、名称・都道府県での検索に対応しています。

- ✅ **Official data**: NTA month-end full file plus every daily diff file published since then, merged automatically.
- ✅ **Bulk T-number check**: one output row per input number, including `not_found`, `invalid_format` and `invalid_check_digit`, so you can reconcile every invoice.
- ✅ **Name search**: find corporations and associations by name (contains / starts with / exact), filtered by prefecture.
- ✅ **No Web-API application ID**: reads the NTA bulk download files, so you don't have to apply for API access.
- ✅ **Cheap and predictable**: **$1.50 per 1,000 results**, platform usage included.

### Use cases for T-number verification

- 🧾 **Invoice compliance (インボイス制度)**: check that the registration number on each supplier invoice is valid before claiming input tax credit (仕入税額控除).
- 🏭 **Supplier and vendor master clean-up**: flag suppliers whose registration was revoked (取消) or expired (失効).
- 🤖 **AP automation**: plug the check into accounts-payable or OCR pipelines through the API.
- 🔎 **KYC / KYB enrichment**: confirm a Japanese counterparty's official name and head-office address.
- 🗂️ **CRM enrichment**: find the T-number of known companies with the name search.

### What data does the T-number lookup return?

| Field | Meaning |
|---|---|
| `registrationNumber`, `corporateNumber`, `input` | Normalized T-number, the 13-digit corporate number (法人番号), and what you typed |
| `found`, `registered`, `status` | `registered`, `revoked`, `expired`, `scheduled`, `deleted_from_registry`, `not_found`, `invalid_format`, `invalid_check_digit` |
| `name`, `kana`, `tradeName`, `popularNamePreviousName` | Name (氏名又は名称) and other published names |
| `address`, `addressHeadOffice`, `prefecture`, `prefectureCode`, `cityCode` | Published address (所在地) and codes |
| `registrationDate`, `disposalDate`, `expireDate`, `updateDate` | Registered on, revoked on (取消年月日), expired on (失効年月日), last update |
| `personType`, `entityCategory`, `country` | Corporation / individual, domestic / foreign |
| `history[]`, `historyCount` | Earlier registration events (optional) |
| `dataAsOf`, `diffsAppliedThrough`, `sourceFiles` | Snapshot date and the latest daily diff applied |
| `source`, `sourceUrl`, `license`, `licenseUrl`, `attribution`, `processingNote`, `retrievedAt` | Source and the required 出典 / 加工 notice |

`status` is computed for the run date (JST): `revoked` if `disposalDate` ≤ today, `expired` if `expireDate` ≤ today, `scheduled` if `registrationDate` > today.

### How to check Japanese invoice registration numbers in bulk

1. Click **Try for free** (or **Start**) on this page.
2. Paste your T-numbers into **Registration numbers (T-numbers)**, one per line. The leading `T`, hyphens, spaces and full-width digits are all accepted, and the check digit is validated.
3. Optionally enter a **Name search** (e.g. `トヨタ自動車`) and pick **Prefectures** to find issuers by name.
4. Click **Start**. Four company numbers take about 25 seconds on the default 512 MB memory.
5. Open the **Output** tab or export the results as **JSON, CSV, Excel, XML or HTML**.

#### Input example

```json
{
  "registrationNumbers": ["T7010401022916", "1180301018771"],
  "nameQuery": "トヨタ自動車",
  "prefectures": ["23"],
  "maxItems": 50
}
```

| Field | Description |
|---|---|
| `registrationNumbers` | List of T-numbers. One record per number. |
| `nameQuery` | Optional name search (corporations & associations), ≥ 2 characters. NFKC/width/case/space-insensitive. |
| `nameMatch` | `contains` (default), `startsWith`, `exact`. |
| `prefectures` | Optional JIS codes `01`–`47` (`00` = foreign) to filter name search and narrow downloads. |
| `onlyRegistered` | Name search: drop revoked/expired issuers. |
| `maxItems` | Max dataset records (default 100, up to 50,000). Raise it when you check more than 100 T-numbers. |
| `includeIndividuals` | Also scan sole-proprietor files if a number is not found among corporations (default true). |
| `applyDailyDiffs` | Merge daily diff files since the month-end snapshot (default true). |
| `includeHistory` | Add history entries. |
| `includeNotFound` | Output `found:false` records for unknown / invalid numbers (default true). |

#### Output example

Field names follow the NTA resource definition (リソース定義書 1.5):

```json
{
  "input": "T7010401022916",
  "registrationNumber": "T7010401022916",
  "corporateNumber": "7010401022916",
  "found": true,
  "registered": true,
  "status": "registered",
  "name": "日本電気株式会社",
  "kana": null,
  "nameWithheld": false,
  "address": "東京都港区芝５丁目７番１号",
  "addressHeadOffice": "東京都港区芝５丁目７番１号",
  "prefectureCode": "13",
  "prefecture": "東京都",
  "cityCode": "13103",
  "registrationDate": "2023-10-01",
  "updateDate": "2021-10-29",
  "disposalDate": null,
  "expireDate": null,
  "personType": "corporation",
  "entityCategory": "corporation",
  "country": "domestic",
  "processLabel": "new_registration",
  "matchedBy": "registrationNumber",
  "dataAsOf": "2026-09-30",
  "diffsAppliedThrough": "2026-10-06",
  "sourceFiles": ["h_all_20260930_csv_002.zip"],
  "source": "National Tax Agency Japan - Qualified Invoice Issuer Publication Site (国税庁適格請求書発行事業者公表サイト), bulk download data",
  "sourceUrl": "https://www.invoice-kohyo.nta.go.jp/download/zenken",
  "license": "Public Data License v1.0 (公共データ利用規約 第1.0版)",
  "licenseUrl": "https://www.digital.go.jp/resources/open_data/public_data_license_v1.0",
  "attribution": "出典：国税庁適格請求書発行事業者公表サイト（国税庁）（https://www.invoice-kohyo.nta.go.jp/download/）、PDL1.0（https://www.digital.go.jp/resources/open_data/public_data_license_v1.0）。全件・差分データをもとにApifyアクター「japan-invoice-lookup」（1rrock）が加工して作成",
  "retrievedAt": "2026-10-07T05:30:45Z"
}
```

### How much does it cost to check T-numbers?

This Actor uses **pay-per-result** pricing: **$1.50 per 1,000 results** ($0.0015 per record), with Apify platform usage already included. Apify also charges a tiny Actor start fee of $0.00005 per run per GB of memory.

- **What counts as a result?** Every record written to the dataset. Each input T-number produces one record, **including `not_found` and invalid numbers** (useful for invoice verification). If you don't want to pay for those, set **`includeNotFound: false`**. Each name-search hit is also one result, capped by `maxItems` (default 100).
- **Temporary failures are not charged.** If the NTA download site is unreachable or returns an error, the run fails with a clear message instead of writing error rows, so you are never charged for a source outage (records already found before the error are kept).
- **How many numbers fit in one run?** At the default `maxItems` of **100**, one run outputs at most 100 records (extra numbers are skipped with a warning). Set `maxItems` up to 50,000 to check more in a single run. Run time depends on which NTA files must be read, not on how many numbers you give: corporate numbers usually finish in well under a minute to a few minutes, so thousands of numbers fit in the default 30-minute timeout. Sole-proprietor numbers that need the individuals files take longer; if a very large job times out, raise the run timeout or split it into several runs.
- **Examples:** checking 1,000 supplier T-numbers (with `maxItems: 1000`) ≈ $1.50. The default input (4 numbers) ≈ $0.006.
- **Free plan:** Apify's free plan includes $5 of monthly usage, which covers about 3,000 results.

### Use the invoice number API from Python, JavaScript or no-code tools

**Python** ([apify-client](https://docs.apify.com/api/client/python)):

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("1rrock/japan-invoice-lookup").call(
    run_input={"registrationNumbers": ["T7010401022916", "T1180301018771"]}
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["registrationNumber"], item["status"], item.get("name"))
```

**JavaScript / Node.js** ([apify-client](https://docs.apify.com/api/client/js)):

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('1rrock/japan-invoice-lookup').call({
    registrationNumbers: ['T7010401022916', 'T1180301018771'],
    includeNotFound: true,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((i) => console.log(i.registrationNumber, i.status, i.name));
```

**HTTP (one call, returns the results):**

```bash
curl -X POST "https://api.apify.com/v2/acts/1rrock~japan-invoice-lookup/run-sync-get-dataset-items?token=<YOUR_APIFY_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{"registrationNumbers": ["T7010401022916"]}'
```

**No-code:** connect the Actor to [Zapier](https://docs.apify.com/platform/integrations/zapier), [Make](https://docs.apify.com/platform/integrations/make), Google Sheets (with [Google Sheets Import & Export](https://apify.com/lukaskrivka/google-sheets)), webhooks and [other integrations](https://docs.apify.com/platform/integrations). For a monthly supplier re-check, run it on a [schedule](https://docs.apify.com/platform/schedules). AI agents can call it through the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp).

### How it works

The NTA publishes the whole register as downloadable CSV zip files (https://www.invoice-kohyo.nta.go.jp/download/). The Actor reads the download pages, fetches only the files it needs (diffs → associations → corporate regional groups → individuals only if still not found), streams the CSV inside each zip with constant memory, and stops reading a file as soon as it has passed the requested numbers (the files are sorted by number). It does **not** use the site's per-number search page (scraping it is prohibited by the site's terms) or the Web-API (which requires an application ID).

Measured on the Apify platform with the default 512 MB memory: 4 company numbers ≈ 25 s (≈ 41 MB downloaded); a nationwide name search plus an individual T-number ≈ 2 min (≈ 125 MB downloaded). Peak memory stays below ~100 MB. Giving the run more memory also gives it more CPU, which makes large scans faster.

### FAQ

#### Is it legal to use this data?

Yes. The NTA publishes the bulk data under the **Public Data License 1.0 (PDL1.0)**, which is compatible with CC BY 4.0 and allows commercial use with attribution and a note when the data was processed. Every record includes the required 出典 / 加工 text. The Actor does not scrape the per-number search page, which the site's terms prohibit.

#### How fresh is the data?

Month-end full data plus daily diffs. The NTA publishes diffs after 06:00 JST on the next working day, so registrations processed today appear tomorrow. Each record shows `dataAsOf` and `diffsAppliedThrough`.

#### Why is the name empty for some numbers?

**Sole proprietors:** since Sept 2022 the NTA removes names, trade names, kana and published addresses of individuals from the bulk files. For individual T-numbers you get the registration status and dates only (`name: null`, `nameWithheld: true`), and individuals cannot be searched by name. Use the official site (https://www.invoice-kohyo.nta.go.jp/) to view an individual's name.

#### Can I check whether a number was valid on a past invoice date?

The record includes `registrationDate`, `disposalDate` and `expireDate`, so you can compare them with your invoice date. With `includeHistory` you also get earlier registration events. Only the latest name and address are in the bulk data.

#### Are there limits?

`maxItems` (default 100) caps the records per run; it can be raised to 50,000. Large nationwide name searches download more files and take longer (about 2 minutes). For more than 50,000 records, split the job into several runs (for example by prefecture).

#### Personal data

The NTA warns that republishing personal information (names, registration numbers) without consent may conflict with Japan's Act on the Protection of Personal Information. Use results for verification, not for publishing lists of individuals.

### Data source and license

出典：国税庁適格請求書発行事業者公表サイト（国税庁）（https://www.invoice-kohyo.nta.go.jp/download/）、
[PDL1.0](https://www.digital.go.jp/resources/open_data/public_data_license_v1.0).
This actor downloads, merges and normalizes the NTA full and diff data files (加工して作成). It is
not an official NTA service and the NTA is not responsible for its output. Site terms of use: https://www.invoice-kohyo.nta.go.jp/terms-of-use.html

#### 日本語概要

適格請求書発行事業者の登録番号（T＋13桁）を国税庁公表サイトの全件・差分ダウンロードデータで一括確認する
Apifyアクターです。アプリケーションID不要。名称検索・都道府県絞り込み・取消/失効判定に対応。個人事業者の
氏名等はダウンロードデータで削除されているため、個人については登録状況と日付のみ返します。

### Other actors by 1rrock

Official open-data company lookups, all at $1.50 per 1,000 results:

- 🇯🇵 [Japan Company Data API - gBizINFO Corporate Lookup](https://apify.com/1rrock/japan-gbizinfo-lookup): Japanese company profiles by corporate number (法人番号) or name, with capital, employees and subsidies.
- 🇧🇷 [Brazil CNPJ Lookup - Receita Federal Company Data](https://apify.com/1rrock/brazil-cnpj-lookup): bulk consulta CNPJ with razão social, situação cadastral, CNAE and QSA.
- 🇲🇽 [Mexico Business Directory - INEGI DENUE Lookup](https://apify.com/1rrock/mexico-denue-lookup): search 6M+ Mexican establishments by name, keyword, state or GPS radius.
- 🇨🇴 [Colombia NIT Lookup - RUES Company Registry Search](https://apify.com/1rrock/colombia-nit-lookup): consulta NIT in bulk and new-company lead lists from Colombia's official RUES registry.
- 🇹🇼 [Taiwan Company Lookup - 統一編號 GCIS Registry Search](https://apify.com/1rrock/taiwan-company-lookup): Taiwanese companies by 統一編號 or name with capital, directors and new-company lists.

# Actor input Schema

## `registrationNumbers` (type: `array`):

Qualified invoice issuer registration numbers (登録番号): 'T' + 13 digits. The leading T, hyphens, spaces and full-width digits are accepted. The check digit is validated. One output record per number (found, not_found or invalid).

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

Maximum number of dataset records (results). T-number lookups and name-search hits both count.

## `nameQuery` (type: `string`):

Search corporations and unincorporated associations by name (氏名又は名称), e.g. 'トヨタ自動車' or 'ソニー'. Matching is NFKC-normalized (full/half width), case- and space-insensitive. Individuals cannot be searched by name because the NTA removes sole-proprietor names from the bulk files. Minimum 2 characters.

## `nameMatch` (type: `string`):

How nameQuery is matched.

## `prefectures` (type: `array`):

Restrict name-search results to these prefectures (head-office / published address). Also narrows which regional files are downloaded. Does not affect T-number lookups.

## `onlyRegistered` (type: `boolean`):

Name search only: drop revoked / expired / deleted issuers from the results.

## `includeIndividuals` (type: `boolean`):

If a T-number is not found among corporations/associations, also scan the individual issuer files (~35 MB more download). Individuals' names/addresses are withheld in the bulk data.

## `applyDailyDiffs` (type: `boolean`):

Apply the NTA daily diff files published since the month-end full data, so new registrations, revocations and changes from this month are included.

## `includeHistory` (type: `boolean`):

Add the past-history entries (latest=0 rows: earlier registration / change events) for each issuer.

## `includeNotFound` (type: `boolean`):

Emit a record with found=false for numbers that are invalid or not in the NTA data (useful for invoice verification). Each such record counts as a result; turn this off to pay only for numbers that were found.

## Actor input object example

```json
{
  "registrationNumbers": [
    "T7010401022916",
    "T5010401067252",
    "T6010401020516",
    "T1180301018771"
  ],
  "maxItems": 100,
  "nameMatch": "contains",
  "onlyRegistered": false,
  "includeIndividuals": true,
  "applyDailyDiffs": true,
  "includeHistory": false,
  "includeNotFound": true
}
```

# Actor output Schema

## `results` (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 = {
    "registrationNumbers": [
        "T7010401022916",
        "T5010401067252",
        "T6010401020516",
        "T1180301018771"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("1rrock/japan-invoice-lookup").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 = { "registrationNumbers": [
        "T7010401022916",
        "T5010401067252",
        "T6010401020516",
        "T1180301018771",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("1rrock/japan-invoice-lookup").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 '{
  "registrationNumbers": [
    "T7010401022916",
    "T5010401067252",
    "T6010401020516",
    "T1180301018771"
  ]
}' |
apify call 1rrock/japan-invoice-lookup --silent --output-dataset

```

## MCP server setup

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

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/FcPliumGe3BveRFgG/builds/qkPO1La1Ob7ufGbLO/openapi.json
