多语言、多货币全球发票识别与提取——精准提取发票号、日期、供应商、采购方、货币、税额及总计等信息。
Powered by Laiye ADP (Agentic Document Processing), this skill delivers intelligent, high-precision parsing and information extraction for standard and non-standard invoices, bills, and vouchers from all regions worldwide. It supports all file types including electronic PDFs, scanned documents, and photographs, and outputs standardized structured JSON data for seamless integration with business processes and downstream automation.
New users receive 100 free credits per month (refreshed monthly) for invoice extraction and other document processing scenarios. Limited-Time Offer: Use the invoice extraction feature for the first time and receive an additional 1,000 free pages of global invoice extraction — limited to the first 100 users only, first come first served! ADP provides a standard commercial API that can be integrated into business systems within 1 hour.
Register now: Global | China Mainland
Why choose us?
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 IntentRecommended CommandRecognize an invoice image/PDF (URL)adp extract url <URL> --app-id <ID>Recognize a local invoice fileadp extract local <file-path> --app-id <ID>Recognize a Base64-encoded invoiceadp extract base64 <base64> --app-id <ID> --file-name <filename.ext>
Batch Recognition
User IntentRecommended CommandBatch recognize invoices in a local folderadp extract local <folder-path> --app-id <ID>Batch recognize multiple URLsadp extract url <URL-list-file> --app-id <ID>
Async Processing
User IntentRecommended CommandSubmit a large file asynchronouslyadp extract url <URL> --app-id <ID> --asyncAsync batch processingadp extract local <folder-path> --app-id <ID> --async Query async task resultadp 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.
bash
# Method 1: npm (recommended, cross-platform)
npm install -g @laiye-adp/agentic-doc-parse-and-extract-cli
bash
# 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
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):
bash
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_typeTypeDescription0Out-of-the-box (OOTB)Platform built-in, app_id prefixed with ootb_, ready to use without creation1CustomUser-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.
bash
# 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", or "Bill" in the returned list, and record its app_id:
json
[
{
"app_id": "ootb_*****c8d1",
"app_label": [
"Invoice",
"Receipt",
"Information Extraction",
"High accuracy",
"High-speed extraction"
],
"app_name": "Invoice/Receipt",
"app_type": 0
}
]
In the example above,
"app_id": "ootb_*****c8d1"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:
bash
# 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.
bash
adp extract url https://example.com/invoice.pdf --app-id <invoice-app-id>
bash
adp extract local ./invoice.pdf --app-id <invoice-app-id>
bash
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.
json
[
{
"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_keyfield_name (example)Descriptioninvoice_numberInvoice NumberInvoice numberinvoice_dateInvoice DateInvoice datedue_dateDue DatePayment due datecurrencyCurrencyCurrency (e.g., USD, EUR, GBP, JPY, etc.)supplier_nameSupplier NameSupplier / seller namesupplier_addressSupplier AddressSupplier / seller addresssupplier_vat_numberSupplier VAT NumberSupplier tax ID (e.g., Japan T-prefixed registration number)buyer_nameBuyer NameBuyer / purchaser name (some invoices use customer_name)buyer_addressBuyer AddressBuyer / purchaser addresscustomer_nameCustomer NameCustomer / buyer name (alternates with buyer_name depending on invoice type)customer_vat_numberCustomer VAT NumberCustomer tax ID; returns "No result" when not recognizedsubtotalSubtotalSubtotal amount (before tax; some invoices use total_without_tax)total_without_taxTotal (excl. tax)Total excluding tax (alternates with subtotal depending on invoice type)tax_amountTax AmountTax amountvat_rateVAT RateVAT rate (e.g., 10%, 13%)total_amountTotal AmountTotal amount (including tax)amount_dueAmount DueAmount due (may equal total_amount)
Table Fields (Line Items):
field_keyfield_name (example)Descriptionline_itemsLine ItemsLine items tableline_items_item_codeItem CodeProduct / item code; returns "No result" when not recognizedline_items_descriptionDescriptionProduct / service descriptionline_items_quantityQuantityQuantityline_items_unit_priceUnit PriceUnit priceline_items_amountAmountLine amount (some invoices use line_items_total_amount)line_items_total_amountTotal AmountLine total amount (alternates with line_items_amount depending on invoice type)
Each field object contains the following properties:
PropertyTypeDescriptionfield_keystringField identifier (machine-readable)field_namestringField name (human-readable, localized based on document language)field_valuesarrayExtraction result array (present for regular fields)field_values[].field_valuestringExtracted value; empty string or "No result" when not recognizedfield_values[].field_confidencenumberConfidence score (0.0–1.0); 0.0 indicates not recognized / low confidencefield_values[].referencesarraySource location references (coordinates or text snippets)field_confidencenumberOverall confidence score (table-level for table fields)table_valuesarray[array]Only present for table fields. 2D array: each row is a line item, each cell contains field_name, field_key, field_values
How to distinguish field types: If table_values is present → table field, read from table_values; otherwise → regular field, read from field_values.
bash
adp extract local ./invoices/ --app-id <invoice-app-id> --export ./results/
Response summary:
json
{
"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:
FieldTypeDescriptiontotalnumberTotal number of filessuccessnumberNumber of successfully processed filesfailednumberNumber of failed filesoutput_dirstringAbsolute path to the output directoryfilesarrayProcessing result list for each filefiles[].inputstringInput filenamefiles[].outputstringOutput result filename ( .json on success, .error.json on failure)files[].statusstringProcessing status: "success" or "failed"``files[].errorstringOnly present on failure; describes the failure reason
bash
# 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>
bash
# 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:
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:
FieldTypeDescriptiontypestringError type identifier (e.g., AUTH_ERROR, PARAM_ERROR, NOT_FOUND, etc.)messagestringError descriptionfixstringSuggested fix actionretryablebooleanWhether the operation can be retried ( true = retryable, false = requires manual intervention)detailsobjectError context information
Exit CodeMeaning0Success1General error2Parameter error3Resource not found4Permission / authentication error5Conflict6Partial failure (some succeeded, some failed in batch processing)
ItemDescriptionInvoice/receipt extraction cost1.5 credits/pageMonthly free quota100 credits per month (usable for invoice extraction and other document processing), resets at the beginning of each monthLimited-time offerUse 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 servedCheck balanceadp creditTop upLog in to the ADP portal: Global | China Mainland, HK, Macau, Taiwan
Global invoice recognition is just one of many out-of-the-box capabilities offered by the Laiye ADP platform. Built on large model general understanding capabilities, ADP provides intelligent processing solutions covering all document categories:
CapabilityDescriptionTypical ScenariosGlobal Invoice/Receipt ExtractionAutomatically recognizes and extracts 10+ key fields including invoice number, date, amount, taxes, and line items; supports multi-language and multi-currency invoice extractionCross-border accounts payable automation, expense reimbursement managementChina Domestic Bill ExtractionRecognizes 30+ common bill types including VAT invoices, taxi receipts, train tickets, flight itineraries, fiscal invoices; supports multi-page/multi-bill recognition and verificationDomestic bill recognition, domestic invoice verificationOrder ExtractionSupports various purchase order formats; extracts order number, products, quantities, prices, logistics information, etc.Procurement automation, supply chain integrationID & Credential ExtractionADP supports 11 common Chinese credentials including ID cards, HK/Macau/Taiwan travel permits, Chinese passports, bank cards, household registers, driver's licenses, vehicle registration certificates, vehicle qualification certificates, account opening permits, and business licensesAccount opening review, compliance checks, batch credential data entryDocument ParsingConverts PDFs, images, and Office documents into structured data while preserving layout and hierarchical relationshipsLong document analysis, contract review, knowledge extractionCustom ExtractionCreate custom extraction apps with proprietary fields and recognition logic for non-standard documentsEnterprise-specific forms, industry-customized documents
All capabilities above can be accessed through the same ADP CLI tool, sharing the ADP API Key and credit system.
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.