Iteration Layer
Document to Markdown

Convert documents and images to clean markdown

Send a PDF, image, or document — get clean markdown back. No schema required. The same OCR pipeline that powers Document Extraction, exposed as a standalone API.

No credit card required — start with free trial credits

Zero data retention · GDPR Made & hosted in the EU 50 free test requests No credit card required 14-day money-back guarantee

One output feeds the next

Document to Markdown is part of a complete content pipeline. One key, one credit pool, and structured JSON responses designed to chain together.

Fits into your existing stack

Native SDKs for Node, Python, and Go. OpenAPI spec for everything else. MCP server for AI agents and Claude Code skills. n8n and Zapier coming soon.

Mix and match freely

Extract data from a document, generate visuals from the results, then compile everything into a finished report. Mix, match, and build your own pipeline.

Three steps to your first conversion

01

Send your document

Upload a PDF, image, or office document via URL or base64. Any supported format works in the same endpoint.

  • PDF, Word, Excel, images, and scanned documents
  • Base64 or URL file input
  • Single endpoint for all formats
02

We parse, OCR, and describe

The document is parsed, scanned pages are run through OCR, and tables are extracted. Image files also receive a natural language description of their visual content.

  • Automatic OCR for scanned pages and photos
  • Tables converted to markdown table syntax
  • Image files get a visual content description
03

Get clean markdown

Receive a JSON result with the file name, MIME type, and extracted markdown. Image files also include a plain-language description field.

  • Clean markdown preserving document structure
  • Suitable for LLM pipelines and RAG ingestion
  • Image description for visual content

Intelligent Parsing

The API automatically selects the best parsing approach for your document. Dense tables, multi-column layouts, and mixed content are handled without any configuration.

Clean Markdown Output

Headings, paragraphs, tables, and lists are preserved as clean markdown syntax. The output is ready to display, embed in a knowledge base, or pass to an LLM — no post-processing needed.

Deep Content Understanding

Images and scanned documents aren't treated as pixel grids to OCR. The API understands what they depict — product photos, charts, diagrams — and returns a natural language description alongside the extracted text.

Built-In OCR

Scanned PDFs and image files are automatically run through OCR. You get readable markdown regardless of whether the source is text or pixels.

All Document Formats

PDF, DOCX, XLSX, CSV, TXT, HTML, PNG, JPEG, GIF, and WebP — all handled by the same endpoint. No format-specific setup or pre-processing required.

Stop building workflows from scratch

Browse ready-made recipes for real-world document and image workflows. Pick one, tweak it, ship it.

One n8n node for your entire pipeline

Zapier Coming Soon

Most n8n document workflows chain three or four separate services. The Iteration Layer community node covers extraction, transformation, and generation in a single install — wire up multi-step pipelines visually instead of writing glue code.

Start building right now

One API call, one credit deducted. Chains naturally with our other APIs — pipe the output of one into the next without glue code. You'll be up and running in minutes.

  • Full OpenAPI 3.1 specification available for code generation and IDE integration.
  • MCP server support for seamless integration with AI agents and tools.
  • Comprehensive documentation with examples for every field type and edge case.
Request
curl -X POST \
  https://api.iterationlayer.com/document-to-markdown/v1/convert \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "file": {
    "type": "url",
    "name": "invoice.pdf",
    "url": "https://example.com/invoice.pdf"
  }
}'
Response
{
  "success": true,
  "data": {
    "name": "invoice.pdf",
    "mime_type": "application/pdf",
    "markdown": "# Invoice\n\n**Invoice Number:** INV-2024-0042\n\n**Date:** 2024-03-15\n\n| Description | Qty | Unit Price | Total |\n|---|---|---|---|\n| Consulting | 10h | $100.00 | $1,000.00 |\n| Support | 5h | $80.00 | $400.00 |\n\n**Total: $1,400.00**"
  }
}
Request
import { IterationLayer } from "iterationlayer";

const client = new IterationLayer({
  apiKey: "YOUR_API_KEY",
});

const result = await client.convertToMarkdown({
  file: {
    type: "url",
    name: "invoice.pdf",
    url: "https://example.com/invoice.pdf",
  },
});
Response
{
  "success": true,
  "data": {
    "name": "invoice.pdf",
    "mime_type": "application/pdf",
    "markdown": "# Invoice\n\n**Invoice Number:** INV-2024-0042\n\n**Date:** 2024-03-15\n\n| Description | Qty | Unit Price | Total |\n|---|---|---|---|\n| Consulting | 10h | $100.00 | $1,000.00 |\n| Support | 5h | $80.00 | $400.00 |\n\n**Total: $1,400.00**"
  }
}
Request
from iterationlayer import IterationLayer

client = IterationLayer(
    api_key="YOUR_API_KEY"
)

result = client.convert_to_markdown(
    file={
        "type": "url",
        "name": "invoice.pdf",
        "url": "https://example.com/invoice.pdf",
    }
)
Response
{
  "success": true,
  "data": {
    "name": "invoice.pdf",
    "mime_type": "application/pdf",
    "markdown": "# Invoice\n\n**Invoice Number:** INV-2024-0042\n\n**Date:** 2024-03-15\n\n| Description | Qty | Unit Price | Total |\n|---|---|---|---|\n| Consulting | 10h | $100.00 | $1,000.00 |\n| Support | 5h | $80.00 | $400.00 |\n\n**Total: $1,400.00**"
  }
}
Request
import il "github.com/iterationlayer/sdk-go"

client := il.NewClient("YOUR_API_KEY")

result, err := client.ConvertToMarkdown(il.ConvertRequest{
  File: il.NewFileFromURL(
    "invoice.pdf",
    "https://example.com/invoice.pdf",
  ),
})
Response
{
  "success": true,
  "data": {
    "name": "invoice.pdf",
    "mime_type": "application/pdf",
    "markdown": "# Invoice\n\n**Invoice Number:** INV-2024-0042\n\n**Date:** 2024-03-15\n\n| Description | Qty | Unit Price | Total |\n|---|---|---|---|\n| Consulting | 10h | $100.00 | $1,000.00 |\n| Support | 5h | $80.00 | $400.00 |\n\n**Total: $1,400.00**"
  }
}

Official SDKs for every major language

Install the SDK, set your API key, and start chaining requests. Full type safety, automatic retries, and idiomatic error handling included.

Your data stays in the EU

Your data is processed on EU servers and never stored beyond temporary logs. Zero retention, GDPR-compliant by design, with a Data Processing Agreement available for every customer. Learn more about our security practices .

No data storage

We don't store your files or processing results. Logs are automatically deleted after 90 days.

EU-hosted infrastructure

All processing runs on servers located in the European Union. Your data never leaves the EU.

GDPR-compliant by design

Full compliance with EU data protection regulations. Data Processing Agreement available for all customers.

Pricing

Start with free trial credits. No credit card required.

Developer

For individuals & small projects

$29.99 /per month
  • 1,000 credits / month
    That's either: 1,000 image transformations 500 document generations 500 image generations 500 sheet generations 200 document extractions (5-page docs) 200 markdown conversions (5-page docs)
  • All APIs included
  • Free trial credits per API
  • Email support
  • Budget caps per key
  • Optional auto top-up
Most Popular

Startup

Save 40%

For growing teams

$119.99 /per month
  • 5,000 credits / month
    That's either: 5,000 image transformations 2,500 document generations 2,500 image generations 2,500 sheet generations 1,000 document extractions (5-page docs) 1,000 markdown conversions (5-page docs)
  • All APIs included
  • Free trial credits per API
  • Priority support
  • Budget caps per key
  • Optional auto top-up

Business

Save 47%

For high-volume workloads

$319.99 /per month
  • 15,000 credits / month
    That's either: 15,000 image transformations 7,500 document generations 7,500 image generations 7,500 sheet generations 3,000 document extractions (5-page docs) 3,000 markdown conversions (5-page docs)
  • All APIs included
  • Free trial credits per API
  • Priority support
  • Budget caps per key
  • Optional auto top-up

Frequently asked questions

What file formats are supported?
The API accepts PDF, DOCX, XLSX, CSV, TXT, HTML, PNG, JPEG, GIF, and WebP. Scanned documents are processed with built-in OCR.
What is the difference between this and Document Extraction?
Document to Markdown runs only the ingestion step — it converts files to clean markdown. Document Extraction builds on this by also applying a schema to extract specific fields as structured JSON. Use Document to Markdown when you want the content itself; use Document Extraction when you want specific named values.
Why does the markdown include an image description?
For image files, the API runs both OCR (to extract any text) and a vision model (to describe the visual content). The description is returned as a separate field so you can use it in your own downstream processing.
How many files can I send per request?
Up to 20 files per request. Each file gets its own result in the response array. The order of results matches the order of the input files.
Is the output suitable for LLMs?
Yes. The markdown format is the same used internally by the Document Extraction API as input to LLM extraction. Tables, structure, and content are preserved in a way that models read reliably.

Still evaluating?

See how we compare — and where the competition still wins. Choosing the right tool shouldn't require a week of research.