Skip to the content.

Image to Text OCR: Extract Text from Images & Screenshots

β–Ά Run it on Apify: no install, no login to any data source. Apify’s free plan includes monthly credit, enough for small runs.

Turn images into text with OCR: photos of documents, scans, receipts, screenshots, slides, signs and product labels. Paste image links and get the text of each one, its OCR confidence and, optionally, every line with its position. 100+ languages, PNG, JPEG, WebP, GIF, BMP and AVIF.

Who uses it

How to use it

  1. Paste one or more image URLs (direct links to the image files).
  2. Set OCR languages if the text is not in English (for example spa, deu or eng+fra).
  3. Pick Scattered text for screenshots, signs or labels; keep Document for pages and receipts.
  4. Click Start. Download the results as JSON, CSV or Excel, or read them through the API.

Input fields

Field What it does Default
Image URLs Direct links to PNG, JPEG, WebP, GIF, BMP or AVIF files β€”
OCR languages Tesseract codes joined with +, e.g. eng, spa, eng+deu, chi_sim eng
Text layout Document (paragraphs, columns) or Scattered text (screenshots, signs) Document
Include lines with positions Adds each line with confidence and bounding box off
Minimum confidence Skip (and don’t pay for) images read with lower confidence 0
Max file size (MB) Larger files are skipped 20

Input example

{
    "imageUrls": [
        "https://tesseract.projectnaptha.com/img/eng_bw.png"
    ],
    "languages": "eng",
    "layout": "auto",
    "includeLines": true
}

Output

One result per image:

{
    "url": "https://tesseract.projectnaptha.com/img/eng_bw.png",
    "fileName": "eng_bw.png",
    "contentType": "image/png",
    "width": 1486,
    "height": 668,
    "languages": "eng",
    "text": "Mild Splendour of the various-vested Night!\nMother of wildly-working visions! hail\n...",
    "characters": 351,
    "words": 58,
    "confidence": 92,
    "hasText": true,
    "lines": [
        { "text": "Mild Splendour of the various-vested Night!", "confidence": 95, "x": 38, "y": 34, "width": 1256, "height": 77 }
    ],
    "extractedAt": "2026-11-08T01:00:00.000Z"
}

Output fields

Field Meaning
text All the text found, line breaks kept
confidence Average OCR confidence, 0–100 (above ~80 is usually clean text)
hasText false when no readable text was found
words / characters Size of the extracted text
lines Each line with its confidence and box (x, y, width, height), when enabled
width / height Original image size in pixels
fileName, contentType, fileSizeBytes File details
ocrMs Time spent on the image

Images that could not be read (broken links, web pages instead of images, files over the size limit) are not saved or charged; the SUMMARY record lists each one with the reason.

Pricing

$0.002 per image read, plus a tiny start fee. 1,000 images cost about $2.00. Failed images and images below your Minimum confidence cost nothing.

FAQ

Which OCR engine does it use? Tesseract, the open-source OCR engine, with its LSTM models. It works offline inside the Actor: your images are not sent to Google, OpenAI or any other third party.

Does it read handwriting? Clear block letters often work; cursive handwriting usually gives low confidence. Use Minimum confidence to drop poor results.

Can it read scanned PDFs? Use the PDF to Text & Markdown Extractor: it reads digital PDFs exactly and runs the same OCR on scanned pages.

How do I process images from my computer? Upload them anywhere that gives a direct link (for example an Apify key-value store, Google Cloud Storage, S3 or Dropbox with a direct-download link) and paste the links.

How do I get better accuracy? Set the right language, use images where letters are at least ~15 px tall, and pick Scattered text for screenshots and labels. Small images are upscaled automatically.

Is it fast? A typical image takes 1–3 seconds. For thousands of images, give the run 2–4 GB of memory.

Limitations

Use it from your code, AI agents and automations

Python

from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("richiedc95/image-to-text-ocr").call(run_input={
    "imageUrls": [
        "https://tesseract.projectnaptha.com/img/eng_bw.png"
    ],
    "languages": "eng",
    "layout": "auto",
    "includeLines": True
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

JavaScript

import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('richiedc95/image-to-text-ocr').call({
    "imageUrls": [
        "https://tesseract.projectnaptha.com/img/eng_bw.png"
    ],
    "languages": "eng",
    "layout": "auto",
    "includeLines": true
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();

Process new images automatically

  1. Click Save as a new task with your input.
  2. Run it on a schedule, or trigger it with an integration when another Actor finishes (for example, OCR every image a scraper just collected).
  3. Read the latest results from one stable URL:
https://api.apify.com/v2/actor-tasks/<TASK_ID>/runs/last/dataset/items?token=<YOUR_APIFY_TOKEN>&status=SUCCEEDED&format=json

Run it

Document APIs: PDF to Text and Image OCR Β· All data APIs