[
  {
    "id": "post-000",
    "title": "I benchmarked every PDF-to-Markdown tool. Then I built a router.",
    "slug": "benchmarking-pdf-extractors",
    "description": "No single PDF extraction tool wins at everything. I tested PyMuPDF, Docling, Marker, Surya, and Gemini Flash across 4 categories — then built pdfmux.",
    "target_keywords": ["pdf to markdown python", "pdf extraction python", "pdf parser python"],
    "tags": ["benchmark", "pdf-extraction", "python", "rag", "llm"],
    "priority": 1,
    "phase": 1,
    "cluster": "A",
    "status": "published",
    "content_type": "benchmark",
    "word_count_target": 2000,
    "evergreen": true,
    "published_date": "2026-03-06",
    "url": "/blog/benchmarking-pdf-extractors/",
    "added_by": "seed",
    "added_date": "2026-03-06",
    "notes": "Launch post. Establishes benchmarking credibility."
  },
  {
    "id": "post-001",
    "title": "How to give your AI agent the ability to read any PDF",
    "slug": "mcp-server-pdf-tutorial",
    "description": "Step-by-step tutorial for adding PDF processing to Claude, Cursor, or any AI agent using pdfmux's built-in MCP server.",
    "target_keywords": ["mcp server pdf", "ai agent pdf extraction", "claude pdf processing"],
    "tags": ["mcp", "ai-agent", "tutorial", "python"],
    "priority": 1,
    "phase": 1,
    "cluster": "B",
    "status": "queued",
    "content_type": "tutorial",
    "word_count_target": 2000,
    "evergreen": true,
    "published_date": null,
    "url": null,
    "added_by": "seed",
    "added_date": "2026-03-06",
    "notes": "MCP ecosystem growing fast, thin content exists. Definitive tutorial opportunity."
  },
  {
    "id": "post-002",
    "title": "What 'self-healing' PDF extraction actually looks like",
    "slug": "self-healing-pdf-extraction",
    "description": "How pdfmux audits every page, detects broken extraction, and re-extracts automatically — with real before/after examples.",
    "target_keywords": ["self-healing pdf extraction", "pdf confidence scoring python", "python pdf pipeline"],
    "tags": ["architecture", "pdf-extraction", "python", "deep-dive"],
    "priority": 2,
    "phase": 1,
    "cluster": "A",
    "status": "queued",
    "content_type": "architecture",
    "word_count_target": 2000,
    "evergreen": true,
    "published_date": null,
    "url": null,
    "added_by": "seed",
    "added_date": "2026-03-06",
    "notes": "Core differentiator. Explains the audit pipeline with real data. Also serves as contributor on-ramp."
  },
  {
    "id": "post-003",
    "title": "Which PDF extractor should you use? An honest guide",
    "slug": "which-pdf-extractor-to-use",
    "description": "An honest comparison of PyMuPDF, Docling, Marker, Surya, Unstructured, and LlamaParse — when to use each, with real benchmarks.",
    "target_keywords": ["which pdf extractor to use python", "unstructured io alternative", "llamaparse alternative", "best pdf parser for rag"],
    "tags": ["comparison", "pdf-extraction", "python", "rag"],
    "priority": 3,
    "phase": 1,
    "cluster": "A",
    "status": "queued",
    "content_type": "comparison",
    "word_count_target": 2200,
    "evergreen": false,
    "published_date": null,
    "url": null,
    "added_by": "seed",
    "added_date": "2026-03-06",
    "notes": "Decision guide. Captures comparison keywords. Honest about when NOT to use pdfmux."
  },
  {
    "id": "post-004",
    "title": "90% of your PDFs convert in 10ms. Here's what to do about the other 10%.",
    "slug": "90-percent-pdfs-convert-instantly",
    "description": "Most PDFs are digital and extract instantly. The hard part is the 10% that need OCR. Here's how pdfmux handles both automatically.",
    "target_keywords": ["pdf extraction python", "pdf to markdown python", "pdf parser python"],
    "tags": ["pdf-extraction", "python", "performance", "ocr"],
    "priority": 4,
    "phase": 1,
    "cluster": "A",
    "status": "queued",
    "content_type": "benchmark",
    "word_count_target": 1800,
    "evergreen": true,
    "published_date": null,
    "url": null,
    "added_by": "seed",
    "added_date": "2026-03-06",
    "notes": "The 90/10 insight. Viral potential — surprising stat that reframes the problem."
  },
  {
    "id": "post-005",
    "title": "pdfmux + LangChain: RAG pipeline with per-page confidence scores",
    "slug": "pdfmux-langchain-rag-pipeline",
    "description": "Build a RAG pipeline that knows which pages to trust. LangChain integration with pdfmux's confidence scoring for reliable retrieval.",
    "target_keywords": ["langchain pdf loader", "rag pdf processing", "rag document ingestion python"],
    "tags": ["langchain", "rag", "tutorial", "python", "llm"],
    "priority": 5,
    "phase": 2,
    "cluster": "B",
    "status": "queued",
    "content_type": "tutorial",
    "word_count_target": 2000,
    "evergreen": true,
    "published_date": null,
    "url": null,
    "added_by": "seed",
    "added_date": "2026-03-06",
    "notes": "Integration tutorial. Drives LangChain ecosystem traffic. Companion to integration PR."
  },
  {
    "id": "post-006",
    "title": "I processed 1,000 PDFs with pdfmux. Here's what the confidence data reveals.",
    "slug": "1000-pdfs-confidence-data",
    "description": "Real data from processing 1,000 PDFs — confidence score distributions, extractor routing patterns, and what breaks most often.",
    "target_keywords": ["pdf extraction accuracy comparison", "pdf confidence scoring python"],
    "tags": ["benchmark", "data", "pdf-extraction", "python"],
    "priority": 6,
    "phase": 2,
    "cluster": "A",
    "status": "queued",
    "content_type": "benchmark",
    "word_count_target": 2200,
    "evergreen": false,
    "published_date": null,
    "url": null,
    "added_by": "seed",
    "added_date": "2026-03-06",
    "notes": "Competitive moat content. Only pdfmux can publish routing decision data. HN potential."
  },
  {
    "id": "post-007",
    "title": "The hidden cost of using one PDF tool for everything",
    "slug": "hidden-cost-single-pdf-tool",
    "description": "Using a single PDF extractor means silent failures on 10-15% of documents. Here's the data on what you're missing.",
    "target_keywords": ["pdf extraction not working python", "ocr accuracy python improve"],
    "tags": ["pdf-extraction", "python", "troubleshooting", "rag"],
    "priority": 7,
    "phase": 2,
    "cluster": "A",
    "status": "queued",
    "content_type": "troubleshooting",
    "word_count_target": 1800,
    "evergreen": true,
    "published_date": null,
    "url": null,
    "added_by": "seed",
    "added_date": "2026-03-06",
    "notes": "Pain-point content. Targets developers whose pipelines silently fail."
  },
  {
    "id": "post-008",
    "title": "Extract tables from PDF in Python — zero config",
    "slug": "extract-tables-pdf-python",
    "description": "How to extract tables from PDFs in Python with 97.9% accuracy using pdfmux. Auto-routes to Docling for tables, PyMuPDF for everything else.",
    "target_keywords": ["extract tables from pdf python", "pdf table extraction broken"],
    "tags": ["tables", "pdf-extraction", "python", "tutorial"],
    "priority": 8,
    "phase": 2,
    "cluster": "C",
    "status": "queued",
    "content_type": "tutorial",
    "word_count_target": 1800,
    "evergreen": true,
    "published_date": null,
    "url": null,
    "added_by": "seed",
    "added_date": "2026-03-06",
    "notes": "High-volume keyword. Practical tutorial that shows the routing advantage."
  },
  {
    "id": "post-009",
    "title": "Processing scanned PDFs in Python: the complete guide",
    "slug": "scanned-pdf-python-guide",
    "description": "The complete guide to extracting text from scanned PDFs in Python — OCR setup, accuracy optimization, and handling mixed digital/scanned documents.",
    "target_keywords": ["scanned pdf to text python", "pdf ocr python"],
    "tags": ["ocr", "scanned-pdf", "python", "tutorial"],
    "priority": 9,
    "phase": 3,
    "cluster": "C",
    "status": "queued",
    "content_type": "tutorial",
    "word_count_target": 2200,
    "evergreen": true,
    "published_date": null,
    "url": null,
    "added_by": "seed",
    "added_date": "2026-03-06",
    "notes": "Long-tail capture. Targets developers with scanned document problems."
  },
  {
    "id": "post-010",
    "title": "LlamaIndex + pdfmux: document processing for RAG",
    "slug": "llamaindex-pdfmux-rag",
    "description": "Build a LlamaIndex RAG pipeline with pdfmux as the document reader. Per-page confidence scores flow through to your vector store.",
    "target_keywords": ["llamaindex pdf", "llm pdf processing"],
    "tags": ["llamaindex", "rag", "tutorial", "python", "llm"],
    "priority": 10,
    "phase": 3,
    "cluster": "B",
    "status": "queued",
    "content_type": "tutorial",
    "word_count_target": 2000,
    "evergreen": true,
    "published_date": null,
    "url": null,
    "added_by": "seed",
    "added_date": "2026-03-06",
    "notes": "LlamaIndex ecosystem traffic. Companion to integration PR."
  },
  {
    "id": "post-011",
    "title": "Chunking PDFs for RAG: getting the boundaries right",
    "slug": "chunking-pdfs-for-rag",
    "description": "Why naive text splitting destroys RAG accuracy. How pdfmux's section-aware chunking preserves document structure with token estimates.",
    "target_keywords": ["chunking pdf for rag", "pdf for rag pipeline"],
    "tags": ["rag", "chunking", "python", "llm", "tutorial"],
    "priority": 11,
    "phase": 3,
    "cluster": "C",
    "status": "queued",
    "content_type": "tutorial",
    "word_count_target": 2000,
    "evergreen": true,
    "published_date": null,
    "url": null,
    "added_by": "seed",
    "added_date": "2026-03-06",
    "notes": "RAG-specific content. Targets the chunking pain point."
  },
  {
    "id": "post-012",
    "title": "pdfmux vs Unstructured vs LlamaParse vs Docling: a real comparison",
    "slug": "pdfmux-vs-unstructured-llamaparse-docling",
    "description": "Honest feature and performance comparison of pdfmux, Unstructured, LlamaParse, and Docling for PDF extraction in production pipelines.",
    "target_keywords": ["unstructured vs llamaparse", "best pdf parser for rag"],
    "tags": ["comparison", "pdf-extraction", "rag", "python"],
    "priority": 12,
    "phase": 3,
    "cluster": "D",
    "status": "queued",
    "content_type": "comparison",
    "word_count_target": 2500,
    "evergreen": false,
    "published_date": null,
    "url": null,
    "added_by": "seed",
    "added_date": "2026-03-06",
    "notes": "Multi-competitor comparison. Captures cross-competitor search traffic."
  },
  {
    "id": "post-013",
    "title": "Which Python PDF library should you use in 2026?",
    "slug": "best-python-pdf-library-2026",
    "description": "A developer's guide to choosing the right Python PDF library in 2026 — from simple text extraction to full LLM pipeline integration.",
    "target_keywords": ["best python library for pdf extraction 2026", "pdf parser python", "python pdf library"],
    "tags": ["comparison", "python", "pdf-extraction", "guide"],
    "priority": 13,
    "phase": 3,
    "cluster": "D",
    "status": "queued",
    "content_type": "comparison",
    "word_count_target": 2200,
    "evergreen": false,
    "published_date": null,
    "url": null,
    "added_by": "seed",
    "added_date": "2026-03-06",
    "notes": "Annual roundup. Time to PyCon content sprint."
  },
  {
    "id": "post-014",
    "title": "Why your PDF extraction is broken (and how to fix it)",
    "slug": "why-pdf-extraction-broken",
    "description": "The 5 most common reasons PDF extraction fails silently — and how to detect and fix each one with confidence scoring.",
    "target_keywords": ["pdf extraction not working python", "pdf extraction wrong text order"],
    "tags": ["troubleshooting", "pdf-extraction", "python"],
    "priority": 14,
    "phase": 3,
    "cluster": "D",
    "status": "queued",
    "content_type": "troubleshooting",
    "word_count_target": 1800,
    "evergreen": true,
    "published_date": null,
    "url": null,
    "added_by": "seed",
    "added_date": "2026-03-06",
    "notes": "Pain-point content. Targets frustrated developers searching for solutions."
  },
  {
    "id": "post-015",
    "title": "We don't compete with Docling, Marker, or PyMuPDF. We use them.",
    "slug": "meta-tool-narrative",
    "description": "Why pdfmux routes to the best extractor per page instead of trying to be one. The meta-tool approach to PDF extraction.",
    "target_keywords": ["pdf extraction python", "self-healing pdf extraction"],
    "tags": ["architecture", "pdf-extraction", "python", "philosophy"],
    "priority": 15,
    "phase": 3,
    "cluster": "D",
    "status": "queued",
    "content_type": "architecture",
    "word_count_target": 1800,
    "evergreen": true,
    "published_date": null,
    "url": null,
    "added_by": "seed",
    "added_date": "2026-03-06",
    "notes": "Brand narrative. The meta-tool argument. Disarms competitor comparisons."
  }
]
