Skip to main content
AI Autopilot — +6% throughput and $781K annual profit gain in a 25-day controlled pilot. Brasil Mineral #441 (Jul 2024).See Pilot Results
Brainiall
  • Products
  • Sectors
  • Demo
  • Pilot Results
  • Why Us
Sign InTry Live Demo
Brainiall
AI that runs the real economy. Mining. Industrial. Voice. Bootstrapped since 2019.
Products
  • AI Autopilot
  • Specialist AIs
Sectors
  • Industrial
  • Mining
  • Energy
  • Technology
Company
  • About
  • Why Choose Us
  • Pilot Results
  • Articles
  • Changelog
  • Contact Us
Resources
  • Pricing
  • Developer APIs
  • Docs
  • Integrations
  • Compare
  • Trust Center
  • DPA
  • MSA
  • Status

Stay updated

Specialist AI insights, delivered weekly.

© 2026 Brainiall, Inc. All rights reserved.
Privacy PolicyTerms of Use

Free tool

PDF to Markdown

Turn digital PDFs into clean Markdown. First 15 pages, no signup.

Brainiall Document engine

Convert a digital PDF to Markdown in the browser with the Brainiall Document engine. Free for pages 1–15. For full documents and OCR, use the API.

This free tool converts pages 1–15 of digital PDFs up to 8 MB. Scanned pages are not OCR'd here.

Larger documents → API

Automate this via API

Same Brainiall Document engine. Drop this into your ingest pipeline — no wrapper library required.

Get an API keyAPI docs
curl
curl https://api.brainiall.com/v1/document/pdf-to-markdown/base64 \
  -H "Authorization: Bearer $BRAINIALL_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Accept: text/markdown, text/plain, application/json" \
  -d '{"pdf":"'"$(base64 < report.pdf | tr -d '\n')"'","page_range":"1-15"}'
RAG pipeline

Convert, then chunk. Point the chunks at your own embedding index.

import os, json, base64, urllib.request

API = "https://api.brainiall.com/v1/document/pdf-to-markdown/base64"

def pdf_to_markdown(path, page_range="1-15"):
    with open(path, "rb") as handle:
        payload = json.dumps({
            "pdf": base64.b64encode(handle.read()).decode("ascii"),
            "page_range": page_range,
        }).encode("utf-8")
    req = urllib.request.Request(
        API,
        data=payload,
        headers={
            "Authorization": f"Bearer {os.environ['BRAINIALL_API_KEY']}",
            "Content-Type": "application/json",
            "Accept": "text/markdown, text/plain, application/json",
        },
        method="POST",
    )
    with urllib.request.urlopen(req) as resp:
        return resp.read().decode("utf-8")

def chunk_for_index(markdown, max_chars=1200):
    chunks, buf, size = [], [], 0
    for block in markdown.split("\n\n"):
        if size + len(block) > max_chars and buf:
            chunks.append("\n\n".join(buf))
            buf, size = [], 0
        buf.append(block)
        size += len(block)
    if buf:
        chunks.append("\n\n".join(buf))
    return chunks

# markdown = pdf_to_markdown("report.pdf")
# chunks = chunk_for_index(markdown)
# send each chunk to your embedding index

How it works

  1. Upload a digital PDF

    Text-layer PDFs only. The free tool takes the first 15 pages, up to 8 MB.

  2. The engine returns Markdown

    Headings, lists, and tables come back as text you can index.

  3. Pipe it into retrieval

    Copy the curl or the pipeline snippet. Same contract as this page, without the 15-page cap.

Questions

Upload a digital PDF (up to 8 MB). The Brainiall Document engine converts pages 1–15 and returns Markdown you can copy or download.