# Nero Labs Bulk OCR – Image & PDF to Text

> Nero Labs Bulk OCR – Image & PDF to Text is a paid API for AI agents from x402-agent-tools.nerolabs.workers.dev, paid per call via x402, $0.005/call, status unknown (last checked 2026-10-22).

Extracts text from up to 10 images or PDFs per call using OCR across 100+ languages, returning per-file and per-page text with confidence scores

## Facts

- Endpoint: POST https://x402-agent-tools.nerolabs.workers.dev/ocr?utm_source=zero.xyz
- Price: $0.005/call
- Payment: x402
- Status: unknown
- Last checked: 2026-10-22
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/nero-labs-bulk-ocr-image-pdf-to-text-1a10ccc0
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_aJ7F9yQGUH72LW7FbxIRI

Status and success rate cover calls made through Zero and Zero's own probes. Third-party monitors may report differently.

## How to call it through Zero

Zero handles the 402 payment challenge and records the run. With the Zero CLI installed (`npm i -g @zeroxyz/cli`):

```sh
zero fetch --capability nero-labs-bulk-ocr-image-pdf-to-text-1a10ccc0 -d '<json body>'
```

Example prompt: Can you extract all the text from these 3 scanned invoice PDFs — use English and German language recognition, read up to 10 pages per file, and give me the per-page text with confidence scores too?

## When to prefer this

Choose this endpoint when you need to batch-process multiple image or PDF files (up to 10 per call) with multilingual OCR support, per-page granularity, and confidence scoring. It is especially well suited for scanned documents, mixed born-digital/scanned PDFs, and workflows requiring structured per-file metadata alongside raw text. Prefer it over single-file OCR tools when cost control per file matters (maxPagesPerFile cap) or when processing documents in non-Latin scripts.

## Known failure modes

- Invalid or inaccessible file URL returns error status in that row's ocrStatus field
- Unsupported file format results in failed OCR status
- maxPagesPerFile exceeded silently truncates output (pagesTruncated: true)
- Low-quality scan produces low confidence scores or garbled text
- Unsupported language code causes recognition failure or falls back to English
- Timeout for very large or high-DPI PDFs if processing exceeds worker limits
- Payment failure (x402) blocks the call before processing begins

## How this service works

Pay-per-call tools for AI agents, 31 in all: read web pages and RSS feeds, OCR, PDF text, transcription; email, phone and domain checks; UK, Irish and Polish company lookups and UK risk reports; website contacts, tech stack and SEO audits; PageSpeed; AI review, job post and row enrichment; data cleaning, joins, dedupe and diffs; US and EU compliance rules. No account or API key: pay each call in USDC on Base over x402.

## Output

A JSON object with a 'rows' array containing one entry per file: the extracted full text, OCR status, page count, pages read, word count, character count, confidence score, file type, blank page count, and optionally a 'pages' array with per-page text, recognition method, confidence, and word count.

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "properties": {
  "dpi": {
   "type": "integer",
   "default": 200,
   "maximum": 400,
   "minimum": 100,
   "description": "Resolution used to render PDF pages before recognition. 200 suits most scans; 300 helps small print and takes about twice as long; 150 is faster for large clean type. Images are used at their own resolution, enlarged when small and capped at 4000 pixels on the longest side."
  },
  "fileUrls": {
   "type": "array",
   "description": "A plain list of image (PNG, JPEG, WebP, GIF, BMP, TIFF) or PDF links, for a quick one-off run with no spreadsheet. Use the dataset, file or Google Sheet inputs above to keep your own columns alongside the results."
  },
  "languages": {
   "type": "array",
   "description": "Tesseract language codes, one per line, for example eng, deu, fra, spa, por, ita, nld, pol, rus, jpn, chi_sim, chi_tra, ara, hin, kor. Several codes read mixed documents. English is built in; any other language is downloaded once at the start of the run (5 to 15 MB each). Picking the right language "
  },
  "includePageText": {
   "type": "boolean",
   "default": false,
   "description": "Add a 'pages' array with each page's text, method (OCR or copied text layer), confidence and word count, on top of the combined text. Useful for citing a page number, and it makes rows larger."
  },
  "maxPagesPerFile": {
   "type": "integer",
   "default": 20,
   "maximum": 500,
   "minimum": 1,
   "description": "Pages read from each PDF before stopping. This is also your cost ceiling per file: a 300-page scan cannot run up a bill you did not expect. Images always count as one page."
  },
  "usePdfTextLayer": {
   "type": "boolean",
   "default": true,
   "description": "A born-digital PDF page already contains its text. When this is on, such pages are copied exactly and charged at the low text-layer rate instead of being rendered and recognised. Turn it off to force OCR on every page, for example when a PDF's text layer is known to be garbage."
  },
  "pageSegmentation": {
   "enum": [
    "auto",
    "sparse",
    "single_block",
    "single_column",
    "single_line"
   ],
   "type": "string",
   "default": "auto",
   "description": "How the engine should look for text. 'Automatic' handles documents, receipts and letters. 'Sparse' finds scattered text on screenshots, slides and product photos. 'Single block' suits a cropped paragraph, 'single column' a narrow receipt, 'single line' a cropped field."
  },
  "minWordConfiden
… (truncated)
```

## Response schema (JSON Schema)

```json
{
 "type": "json",
 "example": {
  "rows": [
   {
    "fileType": "png",
    "ocrPages": 1,
    "charCount": 346,
    "ocrStatus": "ok",
    "pageCount": 1,
    "pagesRead": 1,
    "sourceUrl": "https://nerolabs-samples.nerolabs.workers.dev/sample-receipt.png",
    "wordCount": 65,
    "blankPages": 0,
    "confidence": 91.8,
    "resolvedUrl": "https://nerolabs-samples.nerolabs.workers.dev/sample-receipt.png",
    "statusDetail": null,
    "pagesTruncated": false,
    "textLayerPages": 0
   }
  ],
  "count": 1,
  "_example_note": "Real output, trimmed: long lists cut to their first items, fields and text shortened."
 }
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/nero-labs-bulk-ocr-image-pdf-to-text-1a10ccc0/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from x402-agent-tools.nerolabs.workers.dev](https://www.zero.xyz/host/x402-agent-tools.nerolabs.workers.dev/llms.txt)
