markmaton

HTML→MARKDOWN PARSER CORE

HTML in.
Markdown out.

markmaton is a lightweight parser core for agent workflows. Feed it page HTML from your fetcher or browser — get back clean Markdown, metadata, links, images, and quality signals.

FIG 1.0 — CONVERSION

page.html — abridged

<html lang="en">
  <head>
    <title>Shipping Faster With Queues</title>
    <meta name="description" content="How Acme…" />
  </head>
  <body>
    <header><nav><a href="/">Acme</a></nav></header>
    <div class="cookie-banner">We use cookies. … </div>
    <main>
      <article>
        <h1>Shipping Faster With Queues</h1>
        <p>We cut p95 job latency by 60% …</p>
        <p>The full breakdown is in our
           <a href="/posts/queue-first-design">post</a>.</p>
        <pre><code class="language-python"></code></pre>
        <img srcset="… latency-chart.png 2x" />
      </article>
      <aside class="related"><a href="/posts/retry-storms"></aside>
    </main>
    <footer>© 2026 Acme Corp</footer>
    <script>window.analytics.track("pageview");</script>
  </body>
</html>

page.md

# Shipping Faster With Queues
 
We cut p95 job latency by 60% after moving
webhook delivery to a queue-first design.
 
The full breakdown is in our
[queue-first design post](https://…)
 
```python
def enqueue(job):
    queue.push(job, delay=backoff(…))
```
 
![Latency chart](https://…latency-chart.png)

Struck lines are stripped before conversion. Links and images resolve against the page URL.

PIPELINE

The last mile of a web pipeline

You already have a way to visit pages. markmaton is the step that turns what they return into something an agent can use.

Your fetcher

Playwright, fetch, Firecrawl — anything that returns HTML

markmaton

Strips chrome, converts, resolves, scores

Your agent

Clean Markdown, metadata, and a quality gate

A parser, not a crawler — no network, no browser control, no LLM calls.

STRUCTURED OUTPUT

More than Markdown

JSON mode returns everything a pipeline needs to decide what to keep.

markdown
Main content as clean Markdown.
html_clean
The distilled content HTML, links resolved.
metadata
Title, description, canonical URL, language, author.
links · images
Absolute URLs, resolved against the page URL.
quality
Counts and scores to gate downstream use.

response — real output, trimmed

{
  "metadata": {
    "title": "Shipping Faster With Queues · Acme Engineering",
    "language": "en"
  },
  "links": ["https://…/queue-first-design"],
  "images": ["https://…/latency-chart.png"],
  "quality": {
    "quality_score": 0.7255,
    "link_density": 0.004,
    "used_main_content": true
  }
}

INSTALL

Start parsing

WITH PIP

pip install markmaton

WITH UV

uv tool install markmaton

CONVERT A PAGE

markmaton convert --html-file page.html --url https://example.com/article

Python CLI and API around a fast Go engine. Quickstart and Python API in the README.

ALTERNATIVES

How it compares

markdownify

Converts HTML to Markdown, but does no main-content extraction or metadata collection. markmaton does both in one step.

readability-lxml

Distills main content as cleaned HTML — you still add a converter and a metadata layer. markmaton returns the full response in one call.

trafilatura

A broader framework with its own fetching and discovery. markmaton is deliberately narrower: a parser core behind your fetcher.