# Google Lens OCR API - Image to Text & Coordinates (`thodor/google-lens-ocr`) Actor

Google Lens OCR API. Extract text from images with word, line and paragraph bounding boxes in pixels, plus object detection and translation.

- **URL**: https://apify.com/thodor/google-lens-ocr.md
- **Developed by:** [Thodor](https://apify.com/thodor) (community)
- **Categories:** SEO tools, Automation, Developer tools
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.99 / 1,000 ocrs

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/platform/actors/running/actors-in-store#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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js/docs.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/integrations/mcp.md).

If your project is in a different language, use 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 Google Lens OCR API - Image to Text & Coordinates do?

This actor is an **image to text API** powered by **Google Lens OCR**. Give it any image URL — a screenshot, a photo, a scan, a manga page, an invoice — and it returns the extracted text together with **bounding box coordinates for every word, line and paragraph**, the detected language, and the objects Lens found in the picture. Google offers no official Lens API — this actor is the programmatic way to use Lens OCR.

Most OCR tools give you a wall of text and leave you guessing where any of it came from. The coordinates are what make the output *usable*: they let you overlay a translation back onto the original image, black out personal data, build a searchable PDF, or map a form label to the value sitting next to it.

It is a clean, JSON-first OCR API for developers. Try it from the Apify Console, call it from the [Apify API](https://docs.apify.com/api/v2), schedule it, or wire it into n8n, Zapier, Make, or your own pipeline.

#### How fast is this OCR API?

**Typically 0.5 to 1 second per image.** Measured on real images: a 900x300 PNG returned in 566 ms, an 800x400 PNG in 642 ms, and a 2878x1918 JPEG photo in 766 ms, each including the time to download the source file.

Images are processed in parallel, so a batch costs little more than the slowest image in it.

> **Looking for reverse image search instead?** This actor does text only. If
> you want to find *where an image appears online* — every page carrying it,
> plus the original source image URL — use
> [Reverse Image Search API - Google Lens](https://apify.com/thodor/google-lens-exact-matches).

### Why use this Google Lens OCR API?

- **Coordinates at three levels.** Bounding boxes for every word, every line *and* every paragraph — not just words. Returned in normalized form, centre form, and pixels, so you never have to redo the maths.
- **Objects and salient regions, not just text.** Lens also reports the objects it detects and the visually important region of the image. Useful for smart cropping and subject detection, and returned even when an image contains no text at all.
- **Built-in translation.** Set a target language and get the translated text back alongside the original, with the source language detected automatically.
- **Right-to-left and vertical scripts.** Each paragraph carries its own `writing_direction` and `language`, so Arabic, Hebrew and vertical Japanese come back correctly ordered rather than scrambled.
- **Math as LaTeX.** Words recognised as formulas are flagged and, where Lens provides it, returned as LaTeX.
- **Fast and cheap to run.** Images are processed in parallel and a run costs little more than the wall time of the slowest image.

### What the bounding boxes are for

This is the part that separates a usable OCR API from a text dump.

**Translation overlay.** To render a translation back into a manga speech bubble, a comic panel, or a photographed sign, you need to know exactly where the original text sat. Word and line boxes plus `writing_direction` give you that, including vertical Japanese.

**Redaction and PII removal.** Find the text, get its box, black it out. Coordinates turn OCR into an image redaction step you can run before storing or sharing a document.

**Searchable PDFs.** A scan becomes searchable by laying an invisible text layer over the image at the right coordinates. Without boxes you cannot position that layer.

**Forms, invoices and tables.** Spatial relationships are the whole game in document data extraction — a label means nothing until you know which value sits to the right of it, or which cell shares a row.

**Screenshot and UI automation.** Locate a button or a field by its text, then act on its pixel coordinates.

**Smart cropping.** The salient-region and detected-object boxes tell you where the subject of a photo is, which is what you want when generating thumbnails.

### How to use this image to text API

1. Open the actor in the [Apify Console](https://console.apify.com/).
2. Paste one or more image URLs into the **Image URLs** field. JPEG, PNG, WebP and GIF all work.
3. Optionally open **🌍 Translation & language** and pick a **Translate to** language from the dropdown.
4. Click **Start**, then download the dataset as JSON, CSV, Excel or HTML.

#### Image to text API example — Python

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")

run = client.actor("thodor/google-lens-ocr").call(run_input={
    "imageUrls": ["https://example.com/screenshot.png"],
    "translateTo": "en",
})

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["text"])
    for para in item["paragraphs"]:
        for line in para["lines"]:
            print(line["text"], line["bounding_box"]["pixels"])
````

#### Image to text API example — JavaScript

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

const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });

const run = await client.actor('thodor/google-lens-ocr').call({
    imageUrls: ['https://example.com/screenshot.png'],
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((i) => console.log(i.text, i.word_count));
```

### Input

| Field | Type | Required | Description |
|---|---|---|---|
| `imageUrls` | array of URLs | yes | Images to extract text from |
| `translateTo` | string | no | ISO 639-1 target language. Leave empty to skip translation |
| `language` | string | no (default `en`) | ISO 639-1 hint for the text in the image |
| `region` | string | no (default `US`) | ISO 3166-1 alpha-2 hint for locale-specific formatting |

In the Apify Console, `translateTo`, `language` and `region` sit under the collapsible **🌍 Translation & language** section as searchable dropdowns.

### Output

You can download the dataset in various formats such as **JSON**, **HTML**, **CSV**, or **Excel**, or read it as a spreadsheet directly from the Apify Console.

![Google Lens OCR API output in the Apify Console: one dataset row per image with the extracted text, word, line and paragraph counts, detected language and detected objects](https://api.apify.com/v2/key-value-stores/LHcvkclm26dcJvwP1/records/google-lens-ocr-output-example.png)

*Each input image becomes one dataset row: the extracted text, word / line / paragraph counts, detected language and detected objects — as it appears in the Apify Console.*

One dataset record per successfully processed image. Failed images are never charged and never appear in the dataset — each failure is logged, and the failed URLs with the reason are saved to the `FAILURES` record in the run's key-value store.

```json
{
  "image_url": "https://example.com/invoice.png",
  "text": "Invoice 12345\n\nTotal due $99.50",
  "language": "en",
  "paragraph_count": 2,
  "line_count": 2,
  "word_count": 6,
  "paragraphs": [
    {
      "text": "Invoice 12345",
      "language": "en",
      "writing_direction": "LEFT_TO_RIGHT",
      "bounding_box": {
        "x": 0.2489, "y": 0.2499, "width": 0.5011, "height": 0.19,
        "center_x": 0.4994, "center_y": 0.3449, "rotation": 0.0,
        "coordinate_type": "NORMALIZED",
        "pixels": { "x": 224, "y": 75, "width": 451, "height": 57 }
      },
      "lines": [
        {
          "text": "Invoice 12345",
          "words": [
            { "text": "Invoice", "separator": " ", "bounding_box": { "pixels": { "x": 224, "y": 75, "width": 227, "height": 57 } } }
          ]
        }
      ]
    }
  ],
  "objects": [
    { "id": "SalientRegion-Top", "kind": "salient_region",
      "bounding_box": { "pixels": { "x": 178, "y": 70, "width": 547, "height": 154 } } }
  ],
  "image_width": 900,
  "image_height": 300
}
```

#### Data fields

| Field | Description |
|---|---|
| `image_url` | The image that was processed |
| `text` | Full extracted text, paragraphs separated by blank lines |
| `language` | Detected language of the text |
| `paragraph_count` / `line_count` / `word_count` | Counts for quick filtering |
| `paragraphs[]` | Paragraph objects, each with `text`, `language`, `writing_direction`, `bounding_box` and `lines[]` |
| `paragraphs[].lines[].words[]` | Each word with `text`, `separator`, `bounding_box`, `type`, and `latex` when it is a formula |
| `objects[]` | Detected objects and salient regions with bounding boxes |
| `translation` | Translated text with source and target language, when `translateTo` is set |
| `image_width` / `image_height` / `image_size_bytes` | Source image properties |

Every `bounding_box` carries both normalized coordinates (`x`, `y`, `width`, `height`, plus `center_x` / `center_y` and `rotation`) and a `pixels` object with the same box in image pixels.

### Use cases for image to text and OCR

**Manga translator and comic translator workflows.** Extract Japanese, Korean or Chinese text from a page, get the box for each speech bubble, translate it, and render the result back in place. `writing_direction` handles vertical text correctly, which is what makes a manga translator workable rather than a scrambled mess.

**Screenshot to text.** Extract text from screenshots at scale — support tickets, chat logs, error messages, dashboards — instead of retyping them.

**Invoice OCR and receipt scanning.** Extract line items, totals and dates from scanned documents. Coordinates let you map each label to the value beside it rather than guessing from reading order.

**Document data extraction and table parsing.** Reconstruct table structure from cell positions, and pull structured fields out of forms.

**Image redaction and PII removal.** Locate names, addresses, card numbers or ID numbers and use their boxes to black them out before the image is stored or shared.

**Searchable PDF creation.** Lay an invisible, correctly positioned text layer over a scanned page so it becomes searchable.

**Accessibility and reading order.** Use paragraph geometry and writing direction to reconstruct a sensible reading sequence for screen readers.

**Smart cropping and thumbnails.** Use the salient-region box to crop around the subject instead of the centre of the frame.

### Google Lens OCR vs Cloud Vision API vs Tesseract

| | This actor | Google Cloud Vision | Tesseract |
|---|---|---|---|
| Extracted text | yes | yes | yes |
| Detected language | automatic | automatic | set manually |
| **Word** bounding boxes | yes | yes | yes |
| **Line** bounding boxes | yes | no — words and paragraphs only | yes |
| **Paragraph** bounding boxes | yes | yes | yes |
| Pixel *and* normalized coordinates | both | pixels only | pixels only |
| Rotation angle per box | yes | corner points only | no |
| Detected objects & salient regions | yes | separate feature, billed per call | no |
| Writing direction per paragraph | yes | no | no |
| Math formulas as LaTeX | yes | no | no |
| Built-in translation | yes | no — separate Translate API | no |
| Accuracy on photos & angled text | strong | strong | weak |
| Setup | paste an image URL | GCP project, billing, API key | install and self-host |

Cloud Vision is cheaper per image at scale, but you need a GCP project, billing and an API key before your first request, and there is no line level and no translation. Tesseract is free, but you host it yourself, feed it the language up front, and accuracy drops sharply on photographs. This actor is an image URL in, JSON out.

The object and salient-region boxes are the unusual one: they are returned even when an image contains **no text at all**, so a blank image still produces a meaningful record.

### How much does OCR cost?

Pay-per-result pricing: you pay per image processed, with no subscription, no monthly minimum and no per-run start fee. Apify's free plan includes $5 of platform credit every month, which is enough to trial this comfortably. Images that fail are not charged. See the **Pricing** tab for current rates.

### Tips and advanced options

- **Send the largest version of the image you have.** OCR accuracy falls off quickly on small or heavily compressed images; text under roughly 15 pixels tall is unreliable.
- **Set `language` when the text is not Latin script.** It is a hint, not a filter, and it measurably improves accuracy on Japanese, Arabic, Thai and Cyrillic.
- **Coordinates are normalized *and* pixel.** Use `pixels` for cropping and drawing; use the normalized values if you plan to resize the image afterwards.
- **Schedule it.** Use [Apify Schedules](https://docs.apify.com/platform/schedules) and [Webhooks](https://docs.apify.com/platform/integrations/webhooks) to OCR new images automatically as they arrive.

### FAQ

**Is this Google Lens OCR API free to try?** Yes — you can try it for free, no credit card required. Apify's free plan includes $5 of platform credit every month, enough for roughly 1,250 images at current rates.

**How accurate is Google Lens OCR?** Very good on printed text in reasonable lighting, including photos taken at an angle, and strong on non-Latin scripts. Handwriting, very low-resolution images, heavy compression artefacts and stylised display fonts all reduce accuracy.

**What languages are supported?** Lens detects the language automatically and handles more than 100, including right-to-left scripts such as Arabic and Hebrew and vertical Japanese. You can supply a `language` hint to improve accuracy.

**Can it translate the text it finds?** Yes. Set `translateTo` to a language code and the output includes a `translation` object with the translated text plus the detected source language.

**Does it return coordinates for the text?** Yes, for every word, line and paragraph, in both normalized and pixel form, with a rotation value for text that is not horizontal.

**Can it read handwriting?** Partially. Neat handwriting sometimes works; cursive and messy handwriting generally does not. This is a limitation of the underlying recognition, not of the actor.

**What image formats work?** JPEG, PNG, WebP and GIF. Animated GIFs are treated as their first frame. If your image host serves AVIF or HEIC by content negotiation, convert it first.

**Is OCR on images legal?** Extracting text from images you own or are otherwise entitled to process is ordinary data processing. What matters is what the images contain and what you do with the results — if you process documents containing personal data, handle the output under whatever privacy rules apply to you, such as GDPR or CCPA.

**Can this find where an image appears online?** No — this actor reads text out of images and nothing else. For reverse image search, exact matches and the original source image URL of every page using a picture, use [Reverse Image Search API - Google Lens](https://apify.com/thodor/google-lens-exact-matches) instead. The two are deliberately separate: OCR finishes in under a second, while reverse image search is a heavier job with different pricing.

**Why did an image return no text?** Either it genuinely contains none, or the text is too small, too low-contrast, or too distorted to recognise. The `objects` array is still populated in that case, so a blank result is still a real result. Images that fail outright (unreachable URL, unsupported format) are not charged and don't appear in the dataset — the run log and the `FAILURES` record in the key-value store list them with the reason.

***

*Last updated: July 2026.*

# Actor input Schema

## `imageUrls` (type: `array`):

Images to extract text from. Screenshots, photos, scans, documents — JPEG, PNG, WebP or GIF.

## `translateTo` (type: `string`):

Translate the extracted text into this language. Leave on 'No translation' to keep the original only.

## `language` (type: `string`):

Language of the text in the image. A hint, not a filter — improves accuracy on non-Latin scripts.

## `region` (type: `string`):

Affects locale-specific formatting such as dates and currency.

## Actor input object example

```json
{
  "imageUrls": [
    "https://placehold.co/900x300/000000/FFFFFF/png?text=Invoice+12345"
  ],
  "translateTo": "",
  "language": "en",
  "region": "US"
}
```

# 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 = {
    "imageUrls": [
        "https://placehold.co/900x300/000000/FFFFFF/png?text=Invoice+12345"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("thodor/google-lens-ocr").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 = { "imageUrls": ["https://placehold.co/900x300/000000/FFFFFF/png?text=Invoice+12345"] }

# Run the Actor and wait for it to finish
run = client.actor("thodor/google-lens-ocr").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "imageUrls": [
    "https://placehold.co/900x300/000000/FFFFFF/png?text=Invoice+12345"
  ]
}' |
apify call thodor/google-lens-ocr --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=thodor/google-lens-ocr",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Google Lens OCR API - Image to Text & Coordinates",
        "description": "Google Lens OCR API. Extract text from images with word, line and paragraph bounding boxes in pixels, plus object detection and translation.",
        "version": "0.0",
        "x-build-id": "UZtxdCRFVOyhj6z5I"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/thodor~google-lens-ocr/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-thodor-google-lens-ocr",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/thodor~google-lens-ocr/runs": {
            "post": {
                "operationId": "runs-sync-thodor-google-lens-ocr",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/thodor~google-lens-ocr/run-sync": {
            "post": {
                "operationId": "run-sync-thodor-google-lens-ocr",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "imageUrls"
                ],
                "properties": {
                    "imageUrls": {
                        "title": "Image URLs",
                        "type": "array",
                        "description": "Images to extract text from. Screenshots, photos, scans, documents — JPEG, PNG, WebP or GIF.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "translateTo": {
                        "title": "Translate to",
                        "enum": [
                            "",
                            "af",
                            "sq",
                            "am",
                            "ar",
                            "hy",
                            "az",
                            "be",
                            "bn",
                            "bs",
                            "bg",
                            "my",
                            "ca",
                            "zh",
                            "hr",
                            "cs",
                            "da",
                            "nl",
                            "en",
                            "et",
                            "tl",
                            "fi",
                            "fr",
                            "ka",
                            "de",
                            "el",
                            "gu",
                            "he",
                            "hi",
                            "hu",
                            "is",
                            "id",
                            "ga",
                            "it",
                            "ja",
                            "kn",
                            "kk",
                            "km",
                            "ko",
                            "ky",
                            "lo",
                            "lv",
                            "lt",
                            "mk",
                            "ms",
                            "ml",
                            "mr",
                            "mn",
                            "ne",
                            "no",
                            "fa",
                            "pl",
                            "pt",
                            "pa",
                            "ro",
                            "ru",
                            "sr",
                            "si",
                            "sk",
                            "sl",
                            "es",
                            "sw",
                            "sv",
                            "ta",
                            "te",
                            "th",
                            "tr",
                            "uk",
                            "ur",
                            "uz",
                            "vi",
                            "cy"
                        ],
                        "type": "string",
                        "description": "Translate the extracted text into this language. Leave on 'No translation' to keep the original only.",
                        "default": ""
                    },
                    "language": {
                        "title": "Language hint",
                        "enum": [
                            "af",
                            "sq",
                            "am",
                            "ar",
                            "hy",
                            "az",
                            "be",
                            "bn",
                            "bs",
                            "bg",
                            "my",
                            "ca",
                            "zh",
                            "hr",
                            "cs",
                            "da",
                            "nl",
                            "en",
                            "et",
                            "tl",
                            "fi",
                            "fr",
                            "ka",
                            "de",
                            "el",
                            "gu",
                            "he",
                            "hi",
                            "hu",
                            "is",
                            "id",
                            "ga",
                            "it",
                            "ja",
                            "kn",
                            "kk",
                            "km",
                            "ko",
                            "ky",
                            "lo",
                            "lv",
                            "lt",
                            "mk",
                            "ms",
                            "ml",
                            "mr",
                            "mn",
                            "ne",
                            "no",
                            "fa",
                            "pl",
                            "pt",
                            "pa",
                            "ro",
                            "ru",
                            "sr",
                            "si",
                            "sk",
                            "sl",
                            "es",
                            "sw",
                            "sv",
                            "ta",
                            "te",
                            "th",
                            "tr",
                            "uk",
                            "ur",
                            "uz",
                            "vi",
                            "cy"
                        ],
                        "type": "string",
                        "description": "Language of the text in the image. A hint, not a filter — improves accuracy on non-Latin scripts.",
                        "default": "en"
                    },
                    "region": {
                        "title": "Region hint",
                        "enum": [
                            "AR",
                            "AU",
                            "AT",
                            "BD",
                            "BE",
                            "BR",
                            "BG",
                            "CA",
                            "CL",
                            "CN",
                            "CO",
                            "HR",
                            "CZ",
                            "DK",
                            "EG",
                            "EE",
                            "FI",
                            "FR",
                            "DE",
                            "GR",
                            "HK",
                            "HU",
                            "IS",
                            "IN",
                            "ID",
                            "IE",
                            "IL",
                            "IT",
                            "JP",
                            "KE",
                            "LV",
                            "LT",
                            "MY",
                            "MX",
                            "MA",
                            "NL",
                            "NZ",
                            "NG",
                            "NO",
                            "PK",
                            "PE",
                            "PH",
                            "PL",
                            "PT",
                            "RO",
                            "RU",
                            "SA",
                            "RS",
                            "SG",
                            "SK",
                            "SI",
                            "ZA",
                            "KR",
                            "ES",
                            "LK",
                            "SE",
                            "CH",
                            "TW",
                            "TH",
                            "TR",
                            "UA",
                            "AE",
                            "GB",
                            "US",
                            "UY",
                            "VN"
                        ],
                        "type": "string",
                        "description": "Affects locale-specific formatting such as dates and currency.",
                        "default": "US"
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
