PDF to Markdown & Text Extractor with OCR (DOCX) avatar

PDF to Markdown & Text Extractor with OCR (DOCX)

Pricing

from $3.00 / 1,000 document converteds

Go to Apify Store
PDF to Markdown & Text Extractor with OCR (DOCX)

PDF to Markdown & Text Extractor with OCR (DOCX)

PDF to Markdown converter and PDF text extractor for RAG and AI agents. Turn PDFs, scanned PDFs, DOCX, HTML and images into clean Markdown or text with page-aware chunks. OCR runs only on scanned pages. $3 per 1,000 documents, failed files free.

Pricing

from $3.00 / 1,000 document converteds

Rating

0.0

(0)

Developer

Haniel Azevedo

Haniel Azevedo

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

9 hours ago

Last modified

Share

English · Português

PDF to Markdown converter and PDF text extractor: turn any PDF, scanned PDF, Word file, web page or image into clean Markdown or plain text that an LLM can read, with OCR only where a page really needs it.

Supported formats: PDF, scanned PDF, DOCX, ODT, RTF, EPUB, HTML, TXT/MD and images (PNG, JPG, TIFF, WEBP, BMP, GIF). Each document becomes one dataset item with metadata, optional RAG chunks (heading path and page range), a downloadable .md file, and a machine-readable error code if something goes wrong.

  • 📄 PDF text layer first, page by page. Tesseract 5 OCR runs only on scanned or image-only pages, or on every page if you ask for it.
  • 🧾 Scans and photos: invoices, receipts, Brazilian notas fiscais, contracts and IDs (English, Portuguese, Spanish, French, German, Italian, Dutch).
  • 📝 Office and web formats via Pandoc: headings, lists, links and tables as GitHub-flavoured Markdown. Navigation, cookie banners, footers and sidebars are stripped from HTML.
  • ✂️ RAG chunking: heading-aware chunks with overlap, approximate token counts, character offsets and pageStart/pageEnd.
  • 🛡️ Reliable at scale: one bad file never fails the run. Hard size, page and time limits, SSRF protection, and stable error codes for automatic retries.
  • 💸 $3 per 1,000 documents, plus $0.01 per OCR page. Failed documents are free. PDF pages with a text layer are never charged as OCR.

Who it's for

  • AI and RAG builders loading document libraries into Pinecone, Weaviate, Qdrant, pgvector or LangChain/LlamaIndex pipelines, with page citations.
  • AI agents and LLM apps (GPT, Claude, Grok, Llama) that need clean Markdown instead of noisy PDF text, which also uses fewer tokens.
  • Back-office automation: invoices, receipts and notas fiscais (DANFE) OCR'd and passed to an extraction prompt or regex.
  • Docs and knowledge-base teams moving DOCX, ODT, EPUB and HTML to Markdown for docs sites, wikis, Notion or Obsidian.
  • Legal, compliance and research: bulk text from contracts, tenders, court filings and papers, ready for search and review.

Try it

Click Start without changing anything. The default input converts a real 15-page research paper (PDF) and a Wikipedia article (HTML):

{
"urls": [
"https://arxiv.org/pdf/1706.03762v7",
"https://en.wikipedia.org/wiki/Markdown"
]
}

It finishes in about 10 seconds and returns 2 items: about 38,000 characters of Markdown from the PDF, with # Attention Is All You Need, ### Abstract and the numbered section headings, and the Wikipedia page as Markdown with its tables. No OCR is needed, so the run costs $0.006. An empty input {} does the same. Then replace the URLs with your own, or upload files in the Files field.

How to convert PDF to Markdown (step by step)

  1. Open the Input tab and paste one or more PDF, DOCX or web page links into Document URLs, or upload files in Upload files.
  2. Keep Output format on markdown (or choose text for plain text).
  3. Leave OCR mode on auto: pages with a text layer are read directly and only scanned pages go through OCR. Set OCR languages if your scans aren't English or Portuguese.
  4. For RAG, turn on Split into RAG chunks and set the chunk size and overlap.
  5. Optional: set Maximum cost per run in the run options to cap spend.
  6. Click Start. When the run finishes, open the Output tab, download the .md files from the key-value store, or export the dataset as JSON, CSV or Excel.

Input

Use any combination of these:

FieldWhat it does
urlsPublic http(s) links. The format is detected from the file content, not the extension.
filesFiles uploaded in the Apify Console (stored in a key-value store).
keyValueStoreId (+ keyValueStoreKeys)Convert every record in one of your key-value stores (up to 1,000), or only the keys you list. The Actor gets read-only access to that store only.
outputFormatmarkdown (default) or text.
ocrModeauto (default: OCR only pages with no usable text), always, or never.
ocrLanguagesTesseract codes joined with +. Default eng+por.
maxPagesConvert only the first N pages per document (this caps OCR cost).
enableChunking, chunkSize, chunkOverlapRAG chunks. Defaults: off, 1,500 and 150 characters.
includeContentInDatasetSet to false to keep only metadata and the .md file link in the dataset.
maxFileSizeMb, timeoutSecondsPerDocument, maxConcurrencyLimits. Defaults: 50 MB, 600 s, 2 documents in parallel.
{
"urls": [
"https://example.com/contract.docx",
"https://example.com/scanned-invoice.jpg"
],
"outputFormat": "markdown",
"ocrMode": "auto",
"ocrLanguages": "eng+por",
"maxPages": 200,
"enableChunking": true,
"chunkSize": 1500,
"chunkOverlap": 150
}

API example (synchronous, returns the dataset items):

curl -X POST "https://api.apify.com/v2/acts/hanielazevedo~document-to-markdown-ocr/run-sync-get-dataset-items" \
-H "Authorization: Bearer $APIFY_TOKEN" -H 'Content-Type: application/json' \
-d '{"urls":["https://arxiv.org/pdf/1706.03762v7"]}'

Use with AI agents (MCP) and Python

MCP: add this Actor as a tool in Claude Desktop, Cursor, VS Code or any MCP client through the Apify MCP server: https://mcp.apify.com?tools=hanielazevedo/document-to-markdown-ocr (sign in with your Apify account or pass your API token). The agent sees the input schema and can run the Actor and read the dataset itself.

Python (pip install apify-client):

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("hanielazevedo/document-to-markdown-ocr").call(run_input={
"urls": [
"https://arxiv.org/pdf/1706.03762v7"
],
"outputFormat": "markdown",
"enableChunking": True
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)

Each item has the Markdown in item["markdown"] and, with chunking on, the RAG chunks in item["chunks"]. The run-sync-get-dataset-items endpoint above does the same in one HTTP call.

Sample output

One item per document. This is the PDF item from a run with the default input (Markdown shortened, the rest unchanged). The full Markdown is also saved as a .md file in the run's key-value store and linked in outputFileUrl.

{
"index": 0,
"url": "https://arxiv.org/pdf/1706.03762v7",
"source": "url",
"filename": "1706.03762v7.pdf",
"mimeType": "application/pdf",
"detectedFormat": "pdf",
"bytes": 2215244,
"status": "success",
"format": "markdown",
"title": null,
"pages": 15,
"pagesProcessed": 15,
"ocrPagesUsed": 0,
"ocrConfidence": null,
"characters": 38296,
"words": 5804,
"markdown": "### Provided proper attribution is provided, Google hereby grants permission to reproduce the tables and figures in this paper solely for use in journalistic or scholarly works.\n\n# Attention Is All You Need\n\nAshish Vaswani∗\nGoogle Brain\navaswani@google.com\n\n…\n\n### Abstract\n\nThe dominant sequence transduction models are based on complex recurrent or convolutional neural networks that include an encoder and a decoder. …\n\n### Introduction\n\n…",
"text": null,
"outputFileKey": "0001-1706.03762v7.md",
"outputFileUrl": "https://api.apify.com/v2/key-value-stores/<run-store-id>/records/0001-1706.03762v7.md?signature=…",
"chunkCount": null,
"chunks": null,
"warnings": [],
"error": null,
"errorCode": null,
"durationMs": 2075,
"charged": {"document-converted": 1, "ocr-page": 0}
}

The Wikipedia item from the same run: "detectedFormat": "html", "title": "Markdown - Wikipedia", 42,527 characters, Markdown tables, and one warning: {"code": "IMAGES_REMOVED", "message": "2 embedded image(s) removed (alt text kept). …"}.

With enableChunking: true, each item also has chunks such as:

{"index": 0, "text": "# Attention Is All You Need\n\n…", "chars": 1480, "approxTokens": 370,
"headings": ["Attention Is All You Need"], "startChar": 0, "endChar": 1480, "pageStart": 1, "pageEnd": 1}

A failed document still produces an item, so you can match inputs to outputs:

{"url": "https://example.com/broken.pdf", "status": "failed", "errorCode": "CORRUPT_FILE",
"error": {"code": "CORRUPT_FILE", "message": "PDF could not be opened: …", "retryable": false},
"charged": {"document-converted": 0, "ocr-page": 0}}

The OUTPUT record in the key-value store holds the run totals: total, succeeded, partial, failed, ocrPages, characters and stoppedByBudget.

Status values

  • success: fully converted.
  • partial: converted with something missing, for example OCR stopped by your max run cost or a per-document timeout. The text that was extracted is returned and charged as one document.
  • failed: nothing usable was extracted. Never charged.

Error codes (errorCode, document not charged)

CodeMeaningRetry?
INVALID_INPUT / INVALID_URLEmpty entry, not http(s), or credentials in the URLno
BLOCKED_URLResolves to a private, loopback, link-local or cloud-metadata address (SSRF protection)no
DNS_ERRORThe hostname does not resolvemaybe
DOWNLOAD_FAILED / DOWNLOAD_TIMEOUTNetwork or TLS error, too many redirects, or too slowyes
NOT_FOUNDHTTP 404/410, or the key-value store record does not existno
ACCESS_DENIEDThe run cannot read that key-value store: pick it in the Key-value store field so read access is grantedno
HTTP_ERRORAny other non-2xx response (retryable: true for 408/429/5xx)see flag
FILE_TOO_LARGE / EMPTY_FILEBigger than maxFileSizeMb, or 0 bytesno
UNSUPPORTED_FORMATFor example legacy .doc, .xls, ZIP or videono
CORRUPT_FILE / ENCRYPTED_PDFCannot be parsed, or password-protectedno
TOO_MANY_PAGESAbove the 2,000-page hard limitno
CONVERSION_TIMEOUT / CONVERSION_FAILEDThe converter ran out of time before any output, or failed unexpectedlymaybe
NO_TEXT_FOUNDNothing extractable (for example a scan with ocrMode: never)no
BUDGET_EXCEEDEDYour Maximum cost per run was reached before this documentyes, with a higher limit

Warning codes (warnings[].code)

PAGES_TRUNCATED, OCR_SKIPPED_OCR_MODE_NEVER, OCR_LIMITED_BY_BUDGET, OCR_PAGE_FAILED, OCR_LOW_CONFIDENCE (mean below 60), OCR_LANGUAGE_UNSUPPORTED, TIMEOUT_PARTIAL_OUTPUT, CONTENT_TRUNCATED_IN_DATASET (the full file is still in outputFileUrl), CHUNKS_MOVED_TO_KEY_VALUE_STORE (see chunksUrl), IMAGES_REMOVED, LOW_TEXT_YIELD.

How much does it cost to convert PDF to Markdown?

Pay per event:

EventPriceWhen
apify-actor-start$0.00005Once per run, per GB of memory (default 1 GB)
document-converted$0.003Each document converted (success or partial). Failed documents are free.
ocr-page$0.01Each page or image actually run through OCR. Pages with a text layer are free.

There is no separate charge for platform compute. Worked examples:

JobCalculationCost
The default input (1 PDF + 1 web page)2 × $0.003$0.006
1,000 digital PDFs, DOCX or HTML files1,000 × $0.003$3.00
1,000 single-page scanned invoices (JPG or scanned PDF)1,000 × ($0.003 + $0.01)$13.00
One 300-page digital PDFpage count doesn't matter with a text layer$0.003
One 50-page scanned PDF with maxPages: 10$0.003 + 10 × $0.01$0.103

Set Maximum cost per run in the run options to cap spend. The Actor reserves budget before each OCR page, never charges beyond your limit, and marks what it skipped (OCR_LIMITED_BY_BUDGET or BUDGET_EXCEEDED).

Limits

  • File size: 50 MB by default, 100 MB maximum. Pages per document: 2,000 maximum. Timeout per document: 600 s by default, 3,600 s maximum.
  • Up to 10,000 URLs per run, and up to 1,000 records per key-value store.
  • OCR renders pages at about 300 DPI, capped at 40 MP per page, at roughly 1 page per second with the default 1 GB memory. Use 2–4 GB for large OCR batches.
  • Dataset items larger than about 8 MB keep the full content only in the key-value store file (with a warning).
  • Not supported: legacy binary .doc/.xls/.ppt, PPTX and XLSX, handwriting, and math formula reconstruction. Images inside documents are dropped (alt text is kept). PDF tables without ruling lines come out as text in reading order, not as Markdown tables.
  • Only public URLs are fetched. Private network and cloud-metadata addresses are blocked on every redirect hop.

How it compares

This ActorTypical alternatives on the Store
Price per digital document$0.003, any page countTwo other PDF converter Actors checked on 31 Oct 2026: $0.005 per PDF plus a $0.005 start fee, and $0.02 per PDF plus $0.001 per page
OCR$0.01 per OCR'd page, only on pages with no usable text layer$0.015 per OCR page in the first of those two
FormatsPDF, scans, images, DOCX, ODT, RTF, EPUB, HTML, TXTOften PDF-only or images-only
FailuresPer-document error codes, free, never fail the runOften a generic error or a failed run
RAGHeading-aware chunks with page rangesOften absent or fixed-size

FAQ

What happens when a file fails? That document gets status: "failed", an errorCode from the table above and a retryable flag, and it is not charged. The other documents keep going, and the run still succeeds. An input with no documents at all fails straight away with an Input error message.

What are the limits? 50 MB per file by default (100 MB maximum), 2,000 pages per document, 600 s per document by default, 10,000 URLs per run. See Limits. Use maxPages to convert only the first pages of large scans.

Can I schedule it or watch a folder? There is no built-in monitor mode. Each run converts the documents you give it. For recurring jobs, create an Apify Schedule or Task that points at a key-value store or URL list, or trigger runs from a webhook in your own pipeline.

Where do the documents come from, and is it legal? Only from the URLs, uploads or key-value stores you supply. The Actor does not crawl or search the web. You are responsible for having the right to process the files. Your data is processed inside your own Apify run, kept only in that run's storage under your account's retention settings, and not used for training.

Which output formats do I get? Markdown (default) or plain text, inline in the dataset (JSON, CSV, Excel, XML or RSS export) and as a .md/.txt file per document. RAG chunks are optional.

Does it integrate with my stack? Yes: the Apify API and SDKs (Python, JavaScript), run-sync-get-dataset-items for one-call conversion, webhooks, Zapier, Make, n8n, LangChain and LlamaIndex Apify loaders, and the Apify MCP server for AI agents. It is pay-per-event only, needs limited permissions and has no Standby.

Why did a PDF use OCR, and how good is it? In auto mode, a page is OCR'd only when it has no text layer, almost no text, or garbled text (broken font encodings). Tesseract 5 handles Portuguese accents (ç, ã, é) well on clean scans (about 95% mean confidence on our test invoices). Low-quality photos get the OCR_LOW_CONFIDENCE warning. Use ocrMode: never to turn OCR off.

Are tables preserved? Which licences are used? Tables in DOCX, ODT, HTML and EPUB become GitHub pipe tables (merged cells are flattened). PDF tables are detected where ruling lines exist; otherwise their text is kept in reading order. Only permissive open-source tools run in-process (pdfminer.six, pdfplumber, pypdfium2, Pillow, httpx, Tesseract). Pandoc (GPL-2.0+) runs as a separate, unmodified program. No AGPL components. See NOTICE.md.

Other Actors by Haniel


Português

Conversor de PDF para Markdown e extrator de texto: transforme qualquer PDF, PDF escaneado, arquivo Word, página web ou imagem em Markdown limpo ou texto simples para LLMs, com OCR só onde a página realmente precisa.

Formatos: PDF, PDF escaneado, DOCX, ODT, RTF, EPUB, HTML, TXT/MD e imagens (PNG, JPG, TIFF, WEBP, BMP, GIF). Cada documento vira um item do dataset com metadados, chunks para RAG opcionais (títulos e intervalo de páginas), um arquivo .md para download e um código de erro legível por máquina quando algo dá errado.

  • 📄 Camada de texto do PDF primeiro, página por página. O OCR (Tesseract 5) roda só nas páginas escaneadas ou sem texto, ou em todas, se você pedir.
  • 🧾 Digitalizações e fotos: notas fiscais (DANFE), recibos, contratos e documentos, em português, inglês, espanhol, francês, alemão, italiano e holandês.
  • 📝 Formatos Office e web via Pandoc: títulos, listas, links e tabelas em Markdown (GFM). Em páginas HTML, menus, banners de cookies, rodapés e barras laterais são removidos.
  • ✂️ Chunking para RAG: chunks por seção, com sobreposição, contagem aproximada de tokens e pageStart/pageEnd.
  • 💸 US$ 3 por 1.000 documentos, mais US$ 0,01 por página com OCR. Documentos com falha não são cobrados.

Para quem é

  • Quem monta RAG e IA: bibliotecas de documentos para Pinecone, Weaviate, Qdrant, pgvector, LangChain ou LlamaIndex, com citação de página.
  • Agentes de IA e apps com LLM que precisam de Markdown limpo em vez de texto bagunçado de PDF (e gastam menos tokens).
  • Automação de backoffice: OCR de notas fiscais, boletos e recibos para extrair campos com prompt ou regex.
  • Times de documentação: DOCX, ODT, EPUB e HTML para Markdown (sites de docs, wikis, Notion, Obsidian).
  • Jurídico, compliance e pesquisa: texto em massa de contratos, editais, processos e artigos.

Experimente

Clique em Start sem mudar nada. A entrada padrão converte um artigo científico real de 15 páginas (PDF) e um artigo da Wikipédia (HTML):

{
"urls": [
"https://arxiv.org/pdf/1706.03762v7",
"https://en.wikipedia.org/wiki/Markdown"
]
}

Termina em cerca de 10 segundos com 2 itens: cerca de 38 mil caracteres de Markdown do PDF, com # Attention Is All You Need, ### Abstract e os títulos das seções, e a página da Wikipédia em Markdown com tabelas. Sem OCR, a execução custa US$ 0,006. A entrada vazia {} faz o mesmo. Depois troque as URLs pelas suas ou envie arquivos no campo Files.

Como converter PDF para Markdown (passo a passo)

  1. Na aba Input, cole links de PDF, DOCX ou páginas web em Document URLs, ou envie arquivos em Upload files.
  2. Mantenha Output format em markdown (ou text para texto simples).
  3. Deixe OCR mode em auto: páginas com texto são lidas direto e só as escaneadas passam por OCR. Ajuste OCR languages se precisar.
  4. Para RAG, ative Split into RAG chunks e defina tamanho e sobreposição dos chunks.
  5. Opcional: defina Maximum cost per run para limitar o gasto.
  6. Clique em Start e baixe os arquivos .md ou exporte o dataset em JSON, CSV ou Excel.

Entrada

urls, files (upload pelo Console) e/ou keyValueStoreId (+ keyValueStoreKeys). Opções: outputFormat (markdown ou text), ocrMode (auto, always ou never), ocrLanguages (padrão eng+por), maxPages, enableChunking, chunkSize, chunkOverlap, includeContentInDataset, maxFileSizeMb, timeoutSecondsPerDocument e maxConcurrency. Veja a tabela e o exemplo na seção em inglês.

Exemplo de saída

Um item por documento, com url, filename, mimeType, pages, ocrPagesUsed, characters, words, markdown/text, chunks, warnings, error/errorCode, outputFileUrl (link do .md) e charged. O JSON acima, em inglês, é o item real do PDF de uma execução com a entrada padrão: 15 páginas, 0 páginas com OCR, 38.296 caracteres, "status": "success", "charged": {"document-converted": 1, "ocr-page": 0}.

Códigos de erro

Documentos com falha recebem status: "failed", um errorCode e o campo retryable, e não são cobrados: INVALID_URL, BLOCKED_URL (endereço privado, proteção SSRF), DNS_ERROR, DOWNLOAD_FAILED/DOWNLOAD_TIMEOUT (tente de novo), NOT_FOUND, ACCESS_DENIED, HTTP_ERROR, FILE_TOO_LARGE/EMPTY_FILE, UNSUPPORTED_FORMAT, CORRUPT_FILE/ENCRYPTED_PDF, TOO_MANY_PAGES, CONVERSION_TIMEOUT/CONVERSION_FAILED, NO_TEXT_FOUND e BUDGET_EXCEEDED. O significado de cada um está na tabela em inglês.

Quanto custa converter PDF para Markdown?

EventoPreçoQuando
apify-actor-startUS$ 0,00005Uma vez por execução, por GB de memória (padrão 1 GB)
document-convertedUS$ 0,003Por documento convertido. Falhas são grátis.
ocr-pageUS$ 0,01Por página ou imagem que passou por OCR. Páginas com texto não pagam OCR.
TarefaCálculoCusto
Entrada padrão (1 PDF + 1 página web)2 × US$ 0,003US$ 0,006
1.000 PDFs digitais, DOCX ou HTML1.000 × US$ 0,003US$ 3,00
1.000 notas fiscais escaneadas de uma página1.000 × (US$ 0,003 + US$ 0,01)US$ 13,00
Um PDF digital de 300 páginaso número de páginas não importaUS$ 0,003
Um PDF escaneado de 50 páginas com maxPages: 10US$ 0,003 + 10 × US$ 0,01US$ 0,103

Use Maximum cost per run para limitar o gasto: o Actor nunca cobra acima do limite e marca o que ficou de fora (OCR_LIMITED_BY_BUDGET ou BUDGET_EXCEEDED).

Limites

Até 50 MB por arquivo (máximo 100 MB), 2.000 páginas por documento, 600 s por documento (máximo 3.600 s), 10.000 URLs por execução e 1.000 registros por key-value store. Não suporta .doc/.xls/.ppt antigos, PPTX, XLSX ou manuscritos. Imagens dentro dos documentos são descartadas (o texto alternativo é mantido). Tabelas de PDF sem linhas de grade saem como texto.

Perguntas frequentes

E quando um arquivo falha? O documento recebe status: "failed", um errorCode e retryable, e não é cobrado. Os outros continuam e a execução termina com sucesso. Uma entrada sem nenhum documento falha logo com a mensagem Input error.

Quais são os limites? 50 MB por arquivo (até 100 MB), 2.000 páginas, 600 s por documento e 10.000 URLs por execução. Use maxPages para converter só as primeiras páginas de digitalizações grandes.

Dá para agendar ou monitorar uma pasta? Não há modo de monitoramento. Cada execução converte os documentos informados. Para rotinas, crie um Schedule ou Task da Apify apontando para um key-value store ou lista de URLs, ou dispare execuções por webhook.

De onde vêm os documentos? É legal? Só das URLs, uploads ou key-value stores que você informa; o Actor não navega nem busca na web. Você é responsável por ter o direito de processar os arquivos. Eles ficam só no armazenamento da sua execução, conforme a retenção da sua conta, e não são usados para treinamento.

Quais formatos de saída? Markdown (padrão) ou texto, no dataset (exportável em JSON, CSV, Excel, XML ou RSS) e como arquivo .md/.txt por documento. Chunks para RAG são opcionais.

Integra com o quê? API e SDKs da Apify (Python, JavaScript), run-sync-get-dataset-items, webhooks, Zapier, Make, n8n, loaders da Apify no LangChain e no LlamaIndex, e o servidor MCP da Apify para agentes de IA.

Por que usou OCR? Funciona em português? No modo auto, só quando a página não tem texto, tem pouquíssimo texto ou tem texto corrompido. Com por, a acentuação sai correta em digitalizações limpas (cerca de 95% de confiança média nos nossos testes).

Licenças? Apenas software livre permissivo em processo (MIT, Apache-2.0, BSD, HPND). O Pandoc (GPL-2.0+) roda como programa externo, sem modificações. Nenhum componente AGPL. Veja NOTICE.md.

Uso com agentes de IA (MCP) e Python

MCP: adicione este Actor como ferramenta no Claude Desktop, Cursor, VS Code ou outro cliente MCP pelo servidor MCP da Apify: https://mcp.apify.com?tools=hanielazevedo/document-to-markdown-ocr. O agente lê o schema de entrada, roda o Actor e lê o dataset.

Python (pip install apify-client): veja o exemplo na seção em inglês.

Outros Actors do Haniel