* * * OCR API FOR PYTHON * * *
OCR API for Python.
pip install pennyocr, three lines, and any PDF or image becomes markdown or plain text. No model downloads, no CUDA, no Tesseract compilation — the GPU is our problem.
START FREE — 100 PAGES
$0.75 / 1,000 PAGES
1,333 PAGES PER DOLLAR · NO CREDIT CARD
01 / TRY IT
ONE ENDPOINT.
POST a file, get JSON back — the extracted text, per page and joined. PDF, PNG, JPEG, WebP or TIFF.
curl https://api.pennyocr.com/v1/ocr \
-H "Authorization: Bearer $PENNYOCR_API_KEY" \
-F "file=@receipt.jpg"
# $0.75 per 1,000 pages, first 100 free02 / USE CASES
THE WHOLE INTEGRATION.
INSTALL
pip install pennyocr — one dependency (httpx). Python 3.9+.
THREE LINES
from pennyocr import PennyOCR · client = PennyOCR(api_key=...) · client.ocr('invoice.pdf').text
PER-PAGE RESULTS
result.page_results gives page-by-page text for citations, chunking and pagination-aware pipelines.
OPENAI SDK WORKS TOO
Prefer the openai package? Point base_url at https://api.pennyocr.com/v1 and send image_url parts to model pennyocr-markdown.
03 / PRICE CHECK
HALF THE PRICE OF THE BIG CLOUDS.
Per 1,000 pages, public list prices, first tier.
PENNYOCR$0.75
AWS TEXTRACT$1.50
GOOGLE CLOUD VISION$1.50
AZURE DOC INTELLIGENCE$1.50
YOU KEEP50%
SYNC OR ASYNC?
The SDK is sync (httpx). For async today, call the REST endpoint with httpx.AsyncClient — it's one multipart POST. Async SDK is coming.
HOW DO ERRORS WORK?
PennyOCRError with a status_code: 401 bad key, 402 out of credits (buy more on the dashboard), 413 too large, 422 unreadable file.
WHERE'S THE SOURCE?
The SDK is tiny and readable — one file, MIT licensed. What you POST is what runs; zero retention by default.
ALSO ON THE MENU