Install
openclaw skills install adp-global-invoice-extraction-fastHigh-performance API for global invoice recognition. Each page is parsed in 5 seconds with reliable high-concurrency support. It extracts full invoice data and returns structured JSON directly, ideal for financial automation and cross-border document processing.
openclaw skills install adp-global-invoice-extraction-fastDeveloped by the ADP Intelligent Document Processing team of Laiye Technology. Tailored for global cross-border finance, automation, system integration and high-concurrency production scenarios, it delivers low-latency, high-throughput, full-format and multi-language intelligent extraction for invoices, bills and receipts. It fully supports structured standard documents, unstructured overseas purchase invoices and receipts. Whether it is electronic PDFs, scanned copies or images, each page can be parsed and output as standardized JSON structured data in as fast as 5 seconds. It supports enterprise-level batch processing and 7×24 stable service, empowering end-to-end workflow automation, intelligent reconciliation and data warehousing.
⚡ Ultra-fast Processing: Each page is parsed within 5 seconds. It supports large-scale concurrent calls to meet high-intensity processing requirements in production environments.
✅ Enterprise-grade High-throughput Architecture: Low-latency response and stable processing for massive files.
🌐 Multi-language Support: Recognizes invoices and receipts in English, Japanese, Korean, German, French, Thai and hundreds of other languages.
📄 Full-format Compatibility: Adapts to VAT invoices worldwide, tax documents from Southeast Asia, unstructured receipts and mixed-format vouchers.
🎯 Over 99% Extraction Accuracy: Accurately extracts key fields and greatly reduces costs for manual verification, translation and data entry.
🤖 Continuous AI Optimization: The model keeps iterating and improving based on business data, and supports customized adaptation for enterprises.
| User Group | Usage Scenarios |
|---|---|
| Enterprise Finance & Shared Service Center | Batch processing of multi-language documents for automated bookkeeping, settlement and reconciliation. |
| System Integrators | API integration with up to 10 concurrent requests and low latency, complying with production-level SLA requirements. |
| Developers & Technical Teams | Integrate high-performance ADP API to build stable and efficient automated document processing workflows. |
adp config get to check credentials. If not configured, prompt the user to provide an API Key.adp app-id list --app-type 0, find the invoice extraction app, and record its app_id (prefixed with ootb_). For subsequent runs, prefer adp app-id cache.adp extract url <URL> --app-id <invoice-app-id> or adp extract local <file-path> --app-id <invoice-app-id>.Single Invoice Recognition
| User Intent | Recommended Command |
|---|---|
| Recognize an invoice image/PDF (URL) | adp extract url <URL> --app-id <ID> |
| Recognize a local invoice file | adp extract local <file-path> --app-id <ID> |
| Recognize a Base64-encoded invoice | adp extract base64 <base64> --app-id <ID> --file-name <filename.ext> |
Batch Recognition
| User Intent | Recommended Command |
|---|---|
| Batch recognize invoices in a local folder | adp extract local <folder-path> --app-id <ID> |
| Batch recognize multiple URLs | adp extract url <URL-list-file> --app-id <ID> |
Async Processing
| User Intent | Recommended Command |
|---|---|
| Submit a large file asynchronously | adp extract url <URL> --app-id <ID> --async |
| Async batch processing | adp extract local <folder-path> --app-id <ID> --async |
| Query async task result | adp extract query <task_id> |
Concurrency Limit: Free users support a maximum of 2 documents for concurrent processing, while paid users support up to 10 documents concurrently.
# Method 1: npm (recommended, cross-platform)
npm install -g @laiye-adp/agentic-doc-parse-and-extract-cli
# Method 2: Shell script (Linux / macOS, when npm is unavailable)
curl -fsSL https://raw.githubusercontent.com/laiye-ai/adp-cli/main/scripts/adp-init.sh | bash
# Method 3: PowerShell script (Windows, when npm is unavailable)
irm https://raw.githubusercontent.com/laiye-ai/adp-cli/main/scripts/adp-init.ps1 | iex
Or download prebuilt binaries from GitHub Releases.
Register and obtain an API Key (100 free credits per month + limited-time bonus: 1,000 free invoice extraction pages):
adp config set --api-key <your-api-key>
adp config set --api-base-url https://adp.laiye.com
adp config get
ADP provides out-of-the-box built-in extraction apps for global invoices/receipts, supporting multiple languages and currencies with no additional configuration required.
ADP apps are divided into two categories, distinguished by the app_type field:
app_type | Type | Description |
|---|---|---|
0 | Out-of-the-box (OOTB) | Platform built-in, app_id prefixed with ootb_, ready to use without creation |
1 | Custom | User-created extraction apps with user-defined app_id |
Invoice recognition is an out-of-the-box app and can be queried using --app-type 0.
# Query OOTB apps only (recommended)
adp app-id list --app-type 0
# Or query all apps
adp app-id list
Find the app whose app_label contains "Invoice", "Receipt", "high accuracy", high-speed extraction in the returned list, and record its app_id:
[
{
"app_id": "ootb_*****d9e2",
"app_label": [
"Invoice",
"Receipt",
"global invoices",
"high accuracy",
"high-speed extraction"
],
"app_name": "Invoice/Receipt",
"app_type": 0
}
]
In the example above,
"app_id": "ootb_*****d9e2"is the global invoice extraction app.app_typeof0indicates an out-of-the-box app;1indicates a custom app.
After the initial query, prefer using cache for subsequent requests to avoid redundant API calls:
# Use cache for subsequent calls
adp app-id cache
Important: Each account's app_id is unique and fixed — it will not change unless the user explicitly deletes the app. It is recommended that the Agent save the invoice app's app_id in context and reuse it directly in subsequent calls.
adp extract url https://example.com/invoice.pdf --app-id <invoice-app-id>
adp extract local ./invoice.pdf --app-id <invoice-app-id>
adp extract base64 <base64-string> --app-id <invoice-app-id> --file-name <filename.ext>
ADP automatically supports invoice recognition in 100+ languages across all regions globally and automatically detects currencies. Extraction results are returned as unified structured JSON. The response contains two types of fields: regular fields and table fields (line items).
The following example is a simplified format showing only core fields. The full response also includes
field_confidence(confidence score) andreferences(source location) metadata — see "Common Field Structure" below for details.
[
{
"field_key": "invoice_number",
"field_name": "Invoice Number",
"field_values": [
{
"field_value": "INV-2026-003721"
}
]
},
{
"field_key": "invoice_date",
"field_name": "Invoice Date",
"field_values": [
{
"field_value": "2026-03-15"
}
]
},
{
"field_key": "due_date",
"field_name": "Due Date",
"field_values": [
{
"field_value": "2026-04-15"
}
]
},
{
"field_key": "currency",
"field_name": "Currency",
"field_values": [
{
"field_value": "USD"
}
]
},
{
"field_key": "supplier_name",
"field_name": "Supplier Name",
"field_values": [
{
"field_value": "Acme Global Trading Co., Ltd."
}
]
},
{
"field_key": "supplier_address",
"field_name": "Supplier Address",
"field_values": [
{
"field_value": "1234 Commerce Blvd, Suite 500, San Francisco, CA 94105, USA"
}
]
},
{
"field_key": "buyer_name",
"field_name": "Buyer Name",
"field_values": [
{
"field_value": "Eastern International Trading Co., Ltd."
}
]
},
{
"field_key": "buyer_address",
"field_name": "Buyer Address",
"field_values": [
{
"field_value": "1000 Lujiazui Ring Road, Pudong New Area, Shanghai"
}
]
},
{
"field_key": "subtotal",
"field_name": "Subtotal",
"field_values": [
{
"field_value": "8,500.00"
}
]
},
{
"field_key": "tax_amount",
"field_name": "Tax Amount",
"field_values": [
{
"field_value": "680.00"
}
]
},
{
"field_key": "total_amount",
"field_name": "Total Amount",
"field_values": [
{
"field_value": "9,180.00"
}
]
},
{
"field_key": "line_items",
"field_name": "Line Items",
"field_confidence": 0.98,
"table_values": [
[
{
"field_name": "Description",
"field_key": "line_items_description",
"field_values": [
{
"field_value": "Industrial Sensor Module X200"
}
]
},
{
"field_name": "Quantity",
"field_key": "line_items_quantity",
"field_values": [
{
"field_value": "50"
}
]
},
{
"field_name": "Unit Price",
"field_key": "line_items_unit_price",
"field_values": [
{
"field_value": "120.00"
}
]
},
{
"field_name": "Amount",
"field_key": "line_items_amount",
"field_values": [
{
"field_value": "6,000.00"
}
]
}
],
[
{
"field_name": "Description",
"field_key": "line_items_description",
"field_values": [
{
"field_value": "Connector Kit CK-50 (Pack of 100)"
}
]
},
{
"field_name": "Quantity",
"field_key": "line_items_quantity",
"field_values": [
{
"field_value": "25"
}
]
},
{
"field_name": "Unit Price",
"field_key": "line_items_unit_price",
"field_values": [
{
"field_value": "100.00"
}
]
},
{
"field_name": "Amount",
"field_key": "line_items_amount",
"field_values": [
{
"field_value": "2,500.00"
}
]
}
]
]
}
]
Note:
field_keyandfield_nameare always returned in English.field_valueis multilingual — its content reflects the language of the source document (e.g., Chinese invoices return Chinese values, Japanese invoices return Japanese values). Different regions/types of invoices may return different field sets — the following lists all known fields.
Regular Fields:
| field_key | field_name (example) | Description |
|---|---|---|
invoice_number | Invoice Number | Invoice number |
invoice_date | Invoice Date | Invoice date |
due_date | Due Date | Payment due date |
currency | Currency | Currency (e.g., USD, EUR, GBP, JPY, etc.) |
supplier_name | Supplier Name | Supplier / seller name |
supplier_address | Supplier Address | Supplier / seller address |
supplier_vat_number | Supplier VAT Number | Supplier tax ID (e.g., Japan T-prefixed registration number) |
buyer_name | Buyer Name | Buyer / purchaser name (some invoices use customer_name) |
buyer_address | Buyer Address | Buyer / purchaser address |
customer_name | Customer Name | Customer / buyer name (alternates with buyer_name depending on invoice type) |
customer_vat_number | Customer VAT Number | Customer tax ID; returns "No result" when not recognized |
subtotal | Subtotal | Subtotal amount (before tax; some invoices use total_without_tax) |
total_without_tax | Total (excl. tax) | Total excluding tax (alternates with subtotal depending on invoice type) |
tax_amount | Tax Amount | Tax amount |
vat_rate | VAT Rate | VAT rate (e.g., 10%, 13%) |
total_amount | Total Amount | Total amount (including tax) |
amount_due | Amount Due | Amount due (may equal total_amount) |
Table Fields (Line Items):
| field_key | field_name (example) | Description |
|---|---|---|
line_items_item_code | Item Code | Product / item code; returns "No result" when not recognized |
line_items_description | Description | Product / service description |
line_items_quantity | Quantity | Quantity |
line_items_unit_price | Unit Price | Unit price |
line_items_amount | Amount | Line amount (some invoices use line_items_total_amount) |
line_items_total_amount | Total Amount | Line total amount (alternates with line_items_amount depending on invoice type) |
Each field object contains the following properties:
| Property | Type | Description |
|---|---|---|
field_key | string | Field identifier (e.g., invoice_number) |
field_name | string | Field name (e.g., "Invoice Number") |
field_values | array | List of extracted values (supports multiple values for fields that may have multiple entries, such as line items) |
field_values[].field_value | string | Extracted value (the actual content extracted from the document) |
field_values[].field_confidence | float | Confidence score for the extracted value (range: 0.0 to 1.0, where 1.0 indicates highest confidence) |
field_values[].references | array | List of reference points in the document that support the extracted value (e.g., bounding boxes, page numbers, or text snippets where the value was found) |
line_items_item_code | string | Code or SKU of the line item (if applicable) |
line_items_description | string | Description of the line item (if applicable) |
line_items_quantity | string | Quantity of the line item (if applicable) |
line_items_unit_price | string | Unit price of the line item (if applicable) |
line_items_total_amount | string | Total amount of the line item (if applicable) |
line_items_tax_rate | string | Tax rate for the line item (if applicable) |
line_items_tax | string | Tax amount for the line item (if applicable) |
How to distinguish field types: If table_values is present → table field, read from table_values; otherwise → regular field, read from field_values.
adp extract local ./invoices/ --app-id <invoice-app-id> --export ./results/
Response summary:
{
"total": 10,
"success": 9,
"failed": 1,
"output_dir": "/absolute/path/to/results",
"files": [
{
"input": "invoice-001.pdf",
"output": "invoice-001.pdf.json",
"status": "success"
},
{
"input": "invoice-002.pdf",
"output": "invoice-002.pdf.json",
"status": "success"
},
{
"input": "damaged.pdf",
"output": "damaged.pdf.error.json",
"status": "failed",
"error": "File is corrupted or unreadable"
}
]
}
Batch Response Summary Fields:
| Field | Type | Description |
|---|---|---|
total | number | Total number of files |
success | number | Number of successfully processed files |
failed | number | Number of failed files |
output_dir | string | Absolute path to the output directory |
files | array | Processing result list for each file |
files[].input | string | Input filename |
files[].output | string | Output result filename (.json on success, .error.json on failure) |
files[].status | string | Processing status: "success" or "failed" |
files[].error | string | Only present on failure; describes the failure reason |
# Submit async task
adp extract url https://example.com/invoice.pdf --app-id <invoice-app-id> --async
# Query task result
adp extract query <task_id>
# Check installation
adp version
# View configuration
adp config get
# List all apps
adp app-id list
# List OOTB apps only (app_type=0)
adp app-id list --app-type 0
# Use cached apps
adp app-id cache
# Check credit balance
adp credit
# Invoice extraction (URL)
adp extract url <file-URL> --app-id <invoice-app-id>
# Invoice extraction (local file)
adp extract local <file-path> --app-id <invoice-app-id>
# Invoice extraction (Base64)
adp extract base64 <base64-string> --app-id <invoice-app-id> --file-name <filename.ext>
# Batch extraction
adp extract local <folder-path> --app-id <invoice-app-id> --export <output-path>
# Async extraction
adp extract url <file-URL> --app-id <invoice-app-id> --async
# Query async result
adp extract query <task_id>
When a command fails, stderr outputs structured JSON:
{
"type": "AUTH_ERROR",
"message": "Authentication error: invalid API key",
"fix": "Check your API key is correct and has not expired.",
"retryable": false,
"details": {"context": "extract"}
}
Error Response Fields:
| Field | Type | Description |
|---|---|---|
type | string | Error type identifier (e.g., AUTH_ERROR, PARAM_ERROR, NOT_FOUND, etc.) |
message | string | Error description |
fix | string | Suggested fix action |
retryable | boolean | Whether the operation can be retried (true = retryable, false = requires manual intervention) |
details | object | Error context information |
| Exit Code | Meaning |
|---|---|
| 0 | Success |
| 1 | General error |
| 2 | Parameter error |
| 3 | Resource not found |
| 4 | Permission / authentication error |
| 5 | Conflict |
| 6 | Partial failure (some succeeded, some failed in batch processing) |
| Item | Description |
|---|---|
| Invoice/receipt extraction cost | 1.5 credits/page |
| Monthly free quota | 100 credits per month (usable for invoice extraction and other document processing), resets at the beginning of each month |
| Limited-time offer | Use invoice extraction for the first time and receive an additional 1,000 free pages of global invoice extraction — limited to the first 100 users, first come first served |
| Check balance | adp credit |
| Top up | Log in to the ADP portal: Global | China Mainland, HK, Macau, Taiwan |
Meanwhile, Laiye Technology, the parent company of ADP products, has obtained ISO/IEC 27001:2022 Information Security Management System Certification and SOC 2 Independent Audit Certification, providing end-to-end security and compliance assurance for your document data processing.
For the full list of capabilities, visit:
app_id is unique and fixed within an account. It is recommended to save it and reuse directly — no need to query every time.Copyright 2026 [Laiye Technology (Beijing) Co., Ltd.] All rights reserved.