# Image to Text OCR: Extract Text from Images \[$2.40/1K 💰] (`cybermax/image-to-text-ocr`) Actor

💰 $2.40 per 1,000 images, no start fee; no-text images and failures free. Image to text OCR for screenshots, scans, photos and receipts in 100+ languages: clean text with confidence, plus lines and words with bounding boxes. Auto clean-up for low-contrast images. New-images-only monitor.

- **URL**: https://apify.com/cybermax/image-to-text-ocr.md
- **Developed by:** [CyberMax](https://apify.com/cybermax) (community)
- **Categories:** AI, Developer tools, MCP servers
- **Features:** Limited permissions
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$2.40 / 1,000 image reads

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

## Inkscry: Image to Text OCR (Extract Text from Images)

#### Get the text out of screenshots, scans, photos and receipts, in 100+ languages

Inkscry reads the text in your images with the Tesseract OCR engine and returns it as clean text with a confidence score, plus every **line** (and optionally every **word**) with its **bounding box**. It cleans each image first (fixes phone rotation, removes transparency, boosts contrast, upscales small screenshots), which noticeably improves accuracy on real-world pictures. **$2.40 per 1,000 images, no start fee.**

**[▶ Try it now with a prefilled input](https://apify.com/cybermax/image-to-text-ocr)** · $0.0024 per image (100 images = $0.24) · images with no text are free · Apify's free plan includes $5 of credit a month

**Built for:** teams digitising scanned pages, receipts, invoices and forms · marketers and researchers pulling text from screenshots, ads and social images · developers who need an OCR API without running Tesseract · AI agents that must "read" an image before reasoning about it

**Real output** (real run on Apify, 10 Nov 2026: 3 links in 4.7 s at 2 GB, platform cost $0.0006; the photo with no text and the PDF link were not charged):

| Image | Text (start) | Confidence | Words |
|---|---|---|---|
| Tesseract sample page (eng_bw.png, 1486×668) | Mild Splendour of the various-vested Night! / Mother of wildly-working visions! hail / I watch thy gliding, while with watery light… | 93 | 64 |
| Example.jpg (a photo, no text) | (no text found: not charged) | 0 | 0 |

```json
{"imageUrls": ["https://tesseract.projectnaptha.com/img/eng_bw.png"]}
```

### What you get for each image

| Field | What it is |
|---|---|
| `imageUrl`, `status` | The image and `ok`, `no-text` or `error`. |
| `text` | The text in reading order; paragraphs separated by a blank line. |
| `confidence` | Average OCR confidence, 0–100. |
| `lines` | Each line: `text`, `confidence` and `bbox` (`x`, `y`, `width`, `height` in original pixels). |
| `wordBoxes` | Each word with confidence and box (when `includeWords` is on). |
| `words`, `characters` | Size of the text found. |
| `width`, `height`, `format`, `fileSizeBytes` | About the image. |
| `languages` | The OCR languages used. |
| `sha256`, `change` | Image fingerprint; `new` or `changed` in monitor mode. |
| `error` | Why an image failed (404, not an image, too big). |

### Ready-made inputs

| Job | Input |
|---|---|
| **Screenshot to text** | `{"imageUrls": ["https://example.com/screenshot.png"]}` |
| **German and English scans** | `{"imageUrls": ["https://example.com/brief.jpg"], "languages": ["German", "English"]}` |
| **Japanese / Chinese** | `{"imageUrls": ["https://example.com/menu.jpg"], "languages": ["Japanese"]}` |
| **Receipts with word boxes** | `{"imageUrls": ["https://example.com/receipt.jpg"], "includeWords": true, "minConfidence": 60}` |
| **Signs, labels and memes** | `{"imageUrls": ["https://example.com/sign.jpg"], "layout": "sparse"}` |
| **New images only, daily** | `{"imageUrls": ["https://example.com/daily-chart.png"], "monitor": true}` |

### Use cases

- **Document digitisation:** scanned letters, forms, book pages and faxes to searchable text.
- **Receipts and invoices:** read totals, dates and vendor names; word boxes let you pick fields by position.
- **Screenshots and social images:** pull quotes, prices and captions out of images for analysis.
- **Accessibility and SEO:** draft alt text and transcripts for image-heavy pages.
- **AI agents:** give an LLM the text inside an image in one tool call.

Combine with [Picpail](https://apify.com/cybermax/bulk-image-downloader) to collect every image on a website, then read them all with Inkscry.

### Run it on a schedule

1. Save your input with `"monitor": true` as a **task**.
2. **Schedules → Create**: daily (cron `0 6 * * *`).
3. Add an integration (email, Slack, webhook to Make/Zapier/n8n). Only new or changed images come back; unchanged ones are free.

### Integrations

- **API (curl):**
  ```bash
  curl -X POST "https://api.apify.com/v2/acts/cybermax~image-to-text-ocr/run-sync-get-dataset-items?token=YOUR_TOKEN" \
    -H "Content-Type: application/json" -d '{"imageUrls": ["https://tesseract.projectnaptha.com/img/eng_bw.png"]}'
  ```
- **Python:** `ApifyClient(token).actor("cybermax/image-to-text-ocr").call(run_input={"imageUrls": [...], "languages": ["English"]})`
- **Make, Zapier, n8n:** Apify app or node, run `cybermax/image-to-text-ocr`, map `text` and `confidence` into Sheets, Airtable or your LLM step.
- **AI agents (MCP):** `https://mcp.apify.com?actors=cybermax/image-to-text-ocr`.

### Why Inkscry

| | Inkscry | Typical image OCR Actor on the Store |
|---|---|---|
| Image clean-up | Rotation, transparency, contrast and small-image upscaling built in | Often raw image only |
| Output | Text + confidence + line and word boxes in original pixels | Often text only |
| Languages | 100+ (any Tesseract language), several at once | Often English or a short list |
| No-text images | Free | Usually charged |
| Monitor mode | Only new or changed images | Rare |
| Price | **$2.40 per 1,000 images, no start fee** | $2.50–$5 per 1,000 images, most with start fees (Store prices on 10 Nov 2026) |

### FAQ

**How accurate is it?** Printed text in clear images is usually read at 90%+ confidence. Handwriting, very stylised fonts and blurry photos are harder for any OCR engine; check `confidence` and use `minConfidence` to drop noise.

**Can it read PDFs?** PDFs with a text layer are faster and cheaper with [Pageshuck: PDF to Text & Markdown](https://apify.com/cybermax/pdf-to-text). For scanned pages, export them as images and read them here.

**What sizes work?** Up to 25 MB per image by default (100 MB max) and 120 megapixels.

**Is it legal?** Inkscry reads images you link to. Use it on images you own or may process; it collects nothing else and stores nothing after your run.

**Why not Google Vision or AWS Textract?** They need a cloud account and API keys and bill per 1,000 pages at higher prices; Inkscry runs on your Apify account with no extra setup.

### Also from CyberMax

- [Pageshuck: PDF to Text & Markdown](https://apify.com/cybermax/pdf-to-text) · PDF, Word and PowerPoint to text.
- [Picpail: Bulk Image Downloader](https://apify.com/cybermax/bulk-image-downloader) · every image from a list of pages.
- [Pixkiln: Image Converter & Compressor](https://apify.com/cybermax/image-converter) · resize and convert images in bulk.

Found this useful? A quick rating helps others find it.

© 2026 CyberMax. All rights reserved.

# Actor input Schema

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

Direct links to images: JPEG, PNG, WebP, GIF, TIFF, BMP, AVIF/HEIF or SVG. Links to files in an Apify key-value store work too.

## `languages` (type: `array`):

Language(s) in the images, as names (German, Japanese, Chinese Simplified) or Tesseract codes (deu, jpn, chi_sim). Several languages = slower; list only those you need.

## `includeLines` (type: `boolean`):

Each text line with its confidence and bounding box (x, y, width, height in original image pixels).

## `includeWords` (type: `boolean`):

Every word with confidence and bounding box, e.g. for redaction or field extraction.

## `minConfidence` (type: `integer`):

Drop words read with lower confidence (noise in photos). 0 = keep everything.

## `enhance` (type: `boolean`):

Fixes rotation from camera EXIF, flattens transparency, converts to greyscale, stretches contrast and upscales small images. Improves accuracy on screenshots and phone photos.

## `layout` (type: `string`):

How text is laid out in the image. Auto suits documents and screenshots.

## `maxFileSizeMb` (type: `integer`):

Larger files are skipped and reported, not charged.

## `monitor` (type: `boolean`):

Skips images whose file has not changed since the last monitor run with the same list. Unchanged images are not charged.

## `monitorKey` (type: `string`):

Optional name for this watchlist's saved state.

## Actor input object example

```json
{
  "imageUrls": [
    "https://tesseract.projectnaptha.com/img/eng_bw.png"
  ],
  "languages": [
    "English"
  ],
  "includeLines": true,
  "includeWords": false,
  "minConfidence": 0,
  "enhance": true,
  "layout": "auto",
  "maxFileSizeMb": 25,
  "monitor": false
}
```

# Actor output Schema

## `results` (type: `string`):

No description

## `summary` (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 = {
    "imageUrls": [
        "https://tesseract.projectnaptha.com/img/eng_bw.png"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("cybermax/image-to-text-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://tesseract.projectnaptha.com/img/eng_bw.png"] }

# Run the Actor and wait for it to finish
run = client.actor("cybermax/image-to-text-ocr").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 '{
  "imageUrls": [
    "https://tesseract.projectnaptha.com/img/eng_bw.png"
  ]
}' |
apify call cybermax/image-to-text-ocr --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,cybermax/image-to-text-ocr"
        }
    }
}
```

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/LLzARhCPi3SNE3U9N/builds/EkZdlISBe0tL1xs4A/openapi.json
