Extract Text from Image URLs — Image OCR Scraper avatar

Extract Text from Image URLs — Image OCR Scraper

Pricing

from $15.00 / 1,000 ocr images

Go to Apify Store
Extract Text from Image URLs — Image OCR Scraper

Extract Text from Image URLs — Image OCR Scraper

Extract text from image URLs in bulk: screenshots, receipts, menus and scans. Returns recognized text and a confidence score. USD 20 per 1,000 images.

Pricing

from $15.00 / 1,000 ocr images

Rating

0.0

(0)

Developer

Muhammad Afzal

Muhammad Afzal

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

0

Monthly active users

15 days ago

Last modified

Features

Limited permissions

Share

Image OCR Scraper extracts text from images you link to (screenshots, scanned pages, menus, labels, receipts) and returns the recognized text with a 0–100 confidence score for each image, for developers, researchers, and AI agents that already have direct image URLs. It costs USD 20 per 1,000 images on the FREE pricing tier (USD 0.02 per image), with no start fee, and images that fail are not charged.

OCR runs inside the Actor, so your images are not sent to an outside OCR service. It reads printed text in English, German, French, or Spanish.

What does Image OCR Scraper return?

It returns one dataset row per image URL, in the order you supplied them, plus a run summary.

FieldWhat it contains
statussucceeded or failed
imageUrlThe image URL you supplied
languageLanguage used for recognition: eng, deu, fra, or spa
textAll recognized text, with line breaks kept; empty on failed rows
confidenceMean recognition confidence from 0 to 100, or null
bytesDownloadedSize of the downloaded image
contentTypeContent type reported by the image host, such as image/png
processedAtUTC time the image was processed
errorReason for a failed row

The OUTPUT and SUMMARY records in the key-value store hold the same counts: results, succeeded, failed, images not processed, whether the run stopped at your maximum charge, OCR image events charged, language, and URLs requested.

How do I extract text from an image URL?

Paste one or more direct image links and choose the language. The Actor downloads each image, runs OCR, and writes the text.

InputDefaultAccepted values
imageUrlsRequired; prefilled with one sample text image1–25 http or https URLs that point directly at an image
languageengeng (English), deu (German), fra (French), spa (Spanish)
requestTimeoutSeconds305–120 seconds per download
userAgentA descriptive client nameUp to 200 characters, for hosts that require one
{
"imageUrls": [
"https://example.com/scans/receipt-0412.png",
"https://example.com/menus/lunch.jpg"
],
"language": "eng",
"requestTimeoutSeconds": 30
}

Each download is tried up to three times with a short back-off. Images are processed one after another, and the language data is loaded once at the start of each run, so the first image takes longest.

When should you use it, and when not?

Use it when:

  • an agent or workflow has image URLs and needs plain text from them;
  • you are turning screenshots, scanned forms, menus, posters, or product labels into searchable text;
  • you need a confidence score to decide which results to review by hand.

Do not use it when:

  • You have a web page, not an image. HTML pages are not supported. Use HTML to JSON Smart Parser for page content.
  • You need article text from news or blog pages. Use Smart Article Extractor.
  • You need structured receipt or invoice fields such as totals and line items. This Actor returns raw text only.
  • You need PDFs, handwriting, or tables rebuilt as rows. These are outside its scope.
  • The image needs a login or sits behind hotlink or bot protection. The Actor does not bypass access controls.

Use it from an AI assistant

Image OCR Scraper works from Claude, ChatGPT, Cursor, or any other MCP client through Apify's MCP server. Add https://mcp.apify.com/?tools=muhammadafzal/image-ocr-scraper to your client and ask, for example: "Read the text from these three menu photos and list each dish with its price."

Run it with the API

JavaScript (apify-client):

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('muhammadafzal/image-ocr-scraper').call({
imageUrls: ['https://example.com/scans/receipt-0412.png'],
language: 'eng',
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
for (const row of items) console.log(row.status, row.confidence, row.text);

Python (apify-client 3.x):

import os
from apify_client import ApifyClient
client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("muhammadafzal/image-ocr-scraper").call(
run_input={"imageUrls": ["https://example.com/menus/lunch.jpg"], "language": "eng"}
)
for row in client.dataset(run.default_dataset_id).iterate_items():
print(row["status"], row.get("confidence"), row["text"][:80])

Output example

The first row is from the default input, run on 2026-10-27 (about 4 seconds at 1 GB). The second is an illustrative failed download.

[
{
"status": "succeeded",
"imageUrl": "https://upload.wikimedia.org/wikipedia/commons/7/70/Example.png",
"language": "eng",
"text": "This is just\nan example.",
"confidence": 91,
"bytesDownloaded": 2335,
"contentType": "image/png",
"processedAt": "2026-10-27T03:16:07.814Z"
},
{
"status": "failed",
"imageUrl": "https://example.com/missing.png",
"language": "eng",
"text": "",
"confidence": null,
"bytesDownloaded": null,
"contentType": null,
"processedAt": "2026-10-27T03:16:08.112Z",
"error": "Image host returned HTTP 404"
}
]

Pricing: how much does image OCR cost?

You pay only for images that were downloaded and read successfully. There is no start fee, and Apify platform usage is included.

EventFREEBRONZESILVERGOLD, PLATINUM, DIAMOND
OCR image (primary event)USD 0.02USD 0.019USD 0.018USD 0.015
Per 1,000 imagesUSD 20.00USD 19.00USD 18.00USD 15.00
  • Default run, 1 image, FREE tier: USD 0.02.
  • Full run, 25 images, FREE tier: 25 × USD 0.02 = USD 0.50 (USD 0.375 on GOLD).

Rows with status: "failed" (download, size, or OCR errors) are saved for your records and are not charged.

Charge limits: each image is saved to the dataset before it is charged, so every charged image is in your results. When your run's maximum total charge cannot cover another image, the run stops cleanly before downloading it and reports the remaining count as notProcessed in OUTPUT.

Accuracy and limits

  • Up to 25 image URLs per run and 25 MB per image.
  • Large images take longer: a 7 MB PNG took about 2.5 minutes at the default 1 GB memory on 2026-10-27. Raise the run's memory for more CPU and faster processing.
  • Clear, high-contrast, upright printed text gives the best results. Low resolution, rotation, decorative fonts, and handwriting lower accuracy.
  • confidence is the OCR engine's own estimate, not a guarantee. Review low-scoring rows.
  • Common raster formats such as PNG, JPEG, WebP, and BMP work. PDF and SVG files are not supported.
  • Only one language is used per run. Run mixed-language batches separately.

FAQ

How do I extract text from many images at once?

Put up to 25 direct image URLs in imageUrls. For more, start several runs or loop over batches with the API.

Which languages can it read?

English, German, French, and Spanish. Choose one per run with language.

Is my image sent to an outside OCR service?

No. The Actor downloads the image from your URL and runs OCR inside its own container.

Can it read handwriting?

It is built for printed text. Handwriting usually returns low confidence and many errors.

Does it pull totals and line items out of receipts?

No. It returns the receipt's raw text. Parse the fields you need from text in your own workflow.

Can it find the images on a website for me?

No. It needs direct image URLs. Collect the URLs with another tool first, then pass them in.

What does a confidence of 91 mean?

The engine's average certainty for the words it read was 91 out of 100. Lower scores are worth checking by hand.

Only process images you are allowed to access and use. Respect each host's terms and access rules, and handle any personal data in the extracted text under the privacy laws that apply to you.

Last verified: 2026-10-27