{
  "capturedAt": "2026-09-12T18:53:07.247Z",
  "environment": {
    "platform": "darwin",
    "architecture": "arm64",
    "node": "v22.21.1"
  },
  "versions": {
    "@firecrawl/pdf-inspector": "1.17.0",
    "@llamaindex/liteparse": "2.14.3",
    "@opendataloader/pdf": "2.5.7",
    "@opendocsg/pdf2md": "0.3.0",
    "unpdf": "1.8.1",
    "pdf-parse": "2.4.5"
  },
  "fixtures": [
    {
      "file": "text-layer.pdf",
      "sha256": "a63eaf9159fd8d6bce6d7ac62f06dc3dbbf04ce06df971d98c8250e90a8fb7e9"
    },
    {
      "file": "tables.pdf",
      "sha256": "fbd6f75e92b935de336d3af6a716d9eaeb930031a531da1ffeb99353f5721cb1"
    },
    {
      "file": "ragged-table.pdf",
      "sha256": "96fb353b91c7fbfdb4d34a4c0c658c5990ce343bbe2b7e1c770705eaac53de32"
    },
    {
      "file": "multi-column.pdf",
      "sha256": "43379d0ef2c66d04388b2341aca9b433fb2a1762650b5b102a36f038a7fedb4a"
    }
  ],
  "results": [
    {
      "fixture": "text-layer.pdf",
      "parserId": "pdf-inspector",
      "status": "ok",
      "medianMs": 1,
      "samplesMs": [
        29,
        0,
        1
      ],
      "markdown": "<!-- Page 1 -->\n\n# Quarterly Report\n\n## Revenue grew 12% year over year.\n",
      "table": null,
      "readingOrder": null,
      "error": null
    },
    {
      "fixture": "text-layer.pdf",
      "parserId": "liteparse",
      "status": "ok",
      "medianMs": 112,
      "samplesMs": [
        349,
        109,
        112
      ],
      "markdown": "<!-- Page 1 -->\n\nQuarterly Report\n\nRevenue grew 12% year over year.",
      "table": null,
      "readingOrder": null,
      "error": null
    },
    {
      "fixture": "text-layer.pdf",
      "parserId": "opendataloader",
      "status": "ok",
      "medianMs": 182,
      "samplesMs": [
        332,
        182,
        178
      ],
      "markdown": "<!-- Page 1 -->\n\n# Quarterly Report\n\nRevenue grew 12% year over year.",
      "table": null,
      "readingOrder": null,
      "error": null
    },
    {
      "fixture": "text-layer.pdf",
      "parserId": "pdf2md",
      "status": "ok",
      "medianMs": 4,
      "samplesMs": [
        64,
        4,
        3
      ],
      "markdown": "# Quarterly Report \n\nRevenue grew 12% year over year. \n\n\n",
      "table": null,
      "readingOrder": null,
      "error": null
    },
    {
      "fixture": "text-layer.pdf",
      "parserId": "unpdf",
      "status": "ok",
      "medianMs": 2,
      "samplesMs": [
        2,
        2,
        1
      ],
      "markdown": "<!-- Page 1 -->\n\nQuarterly Report\nRevenue grew 12% year over year.",
      "table": null,
      "readingOrder": null,
      "error": null
    },
    {
      "fixture": "text-layer.pdf",
      "parserId": "pdf-parse",
      "status": "ok",
      "medianMs": 2,
      "samplesMs": [
        64,
        2,
        1
      ],
      "markdown": "<!-- Page 1 -->\n\nQuarterly Report\nRevenue grew 12% year over year.",
      "table": null,
      "readingOrder": null,
      "error": null
    },
    {
      "fixture": "tables.pdf",
      "parserId": "pdf-inspector",
      "status": "ok",
      "medianMs": 2,
      "samplesMs": [
        2,
        1,
        2
      ],
      "markdown": "<!-- Page 1 -->\n\n# Financial Summary\n\n|Region|Q1|Q2|Q3|\n|---|---|---|---|\n|North|120|145|160|\n|South|98|102|115|\n|East|210|198|225|\n",
      "table": {
        "matched": 9,
        "expected": 9,
        "percent": 100,
        "tableFound": true
      },
      "readingOrder": null,
      "error": null
    },
    {
      "fixture": "tables.pdf",
      "parserId": "liteparse",
      "status": "ok",
      "medianMs": 144,
      "samplesMs": [
        146,
        144,
        143
      ],
      "markdown": "<!-- Page 1 -->\n\n# Financial Summary\n\n| Region | Q1 | Q2 | Q3 |\n|---|---|---|---|\n| North | 120 | 145 | 160 |\n| South | 98 | 102 | 115 |\n| East | 210 | 198 | 225 |",
      "table": {
        "matched": 9,
        "expected": 9,
        "percent": 100,
        "tableFound": true
      },
      "readingOrder": null,
      "error": null
    },
    {
      "fixture": "tables.pdf",
      "parserId": "opendataloader",
      "status": "ok",
      "medianMs": 180,
      "samplesMs": [
        207,
        180,
        180
      ],
      "markdown": "<!-- Page 1 -->\n\n# Financial Summary\n\nRegion Q1 Q2 Q3 North 120 145 160 South 98 102 115 East 210 198 225",
      "table": {
        "matched": 0,
        "expected": 9,
        "percent": 0,
        "tableFound": false
      },
      "readingOrder": null,
      "error": null
    },
    {
      "fixture": "tables.pdf",
      "parserId": "pdf2md",
      "status": "ok",
      "medianMs": 4,
      "samplesMs": [
        5,
        3,
        4
      ],
      "markdown": "# Financial Summary \n\nRegion Q1 Q2 Q3 North 120 145 160 South 98 102 115 East 210 198 225 \n\n\n",
      "table": {
        "matched": 0,
        "expected": 9,
        "percent": 0,
        "tableFound": false
      },
      "readingOrder": null,
      "error": null
    },
    {
      "fixture": "tables.pdf",
      "parserId": "unpdf",
      "status": "ok",
      "medianMs": 1,
      "samplesMs": [
        2,
        1,
        1
      ],
      "markdown": "<!-- Page 1 -->\n\nFinancial Summary\nRegion Q1 Q2 Q3\nNorth 120 145 160\nSouth 98 102 115\nEast 210 198 225",
      "table": {
        "matched": 0,
        "expected": 9,
        "percent": 0,
        "tableFound": false
      },
      "readingOrder": null,
      "error": null
    },
    {
      "fixture": "tables.pdf",
      "parserId": "pdf-parse",
      "status": "ok",
      "medianMs": 2,
      "samplesMs": [
        2,
        1,
        2
      ],
      "markdown": "<!-- Page 1 -->\n\nFinancial Summary\nRegion Q1 Q2 Q3\nNorth 120 145 160\nSouth 98 102 115\nEast 210 198 225",
      "table": {
        "matched": 0,
        "expected": 9,
        "percent": 0,
        "tableFound": false
      },
      "readingOrder": null,
      "error": null
    },
    {
      "fixture": "ragged-table.pdf",
      "parserId": "pdf-inspector",
      "status": "ok",
      "medianMs": 2,
      "samplesMs": [
        4,
        1,
        2
      ],
      "markdown": "<!-- Page 1 -->\n\n# Q3 Results by Region\n\n|Region|Manager|Q1|Q2|Q3|Notes|\n|---|---|---|---|---|---|\n|North|Alice Chen|120|145|160|strong|\n|South||98|102|115||\n|East|Bob Lee|210|198|225|recovering|\n|West|Dana|88||99|pending|\n",
      "table": {
        "matched": 20,
        "expected": 20,
        "percent": 100,
        "tableFound": true
      },
      "readingOrder": null,
      "error": null
    },
    {
      "fixture": "ragged-table.pdf",
      "parserId": "liteparse",
      "status": "ok",
      "medianMs": 215,
      "samplesMs": [
        216,
        214,
        215
      ],
      "markdown": "<!-- Page 1 -->\n\n# Q3 Results by Region\n\n| Region | Manager | Q1 | Q2 | Q3 | Notes |\n|---|---|---|---|---|---|\n| North | Alice Chen | 120 | 145 | 160 | strong |\n| South |  | 98 | 102 | 115 |  |\n| East | Bob Lee | 210 | 198 | 225 | recovering |\n| West | Dana | 88 |  | 99 | pending |",
      "table": {
        "matched": 20,
        "expected": 20,
        "percent": 100,
        "tableFound": true
      },
      "readingOrder": null,
      "error": null
    },
    {
      "fixture": "ragged-table.pdf",
      "parserId": "opendataloader",
      "status": "ok",
      "medianMs": 185,
      "samplesMs": [
        186,
        185,
        183
      ],
      "markdown": "<!-- Page 1 -->\n\n# Q3 Results by Region\n\nRegion Manager Q1 Q2 Q3 Notes North Alice Chen 120 145 160 strong South 98 102 115 East Bob Lee 210 198 225 recovering West Dana 88 99 pending",
      "table": {
        "matched": 0,
        "expected": 20,
        "percent": 0,
        "tableFound": false
      },
      "readingOrder": null,
      "error": null
    },
    {
      "fixture": "ragged-table.pdf",
      "parserId": "pdf2md",
      "status": "ok",
      "medianMs": 3,
      "samplesMs": [
        3,
        3,
        4
      ],
      "markdown": "# Q3 Results by Region \n\nRegion Manager Q1 Q2 Q3 Notes North Alice Chen 120 145 160 strong South 98 102 115 East Bob Lee 210 198 225 recovering West Dana 88 99 pending \n\n\n",
      "table": {
        "matched": 0,
        "expected": 20,
        "percent": 0,
        "tableFound": false
      },
      "readingOrder": null,
      "error": null
    },
    {
      "fixture": "ragged-table.pdf",
      "parserId": "unpdf",
      "status": "ok",
      "medianMs": 1,
      "samplesMs": [
        2,
        1,
        1
      ],
      "markdown": "<!-- Page 1 -->\n\nQ3 Results by Region\nRegion Manager Q1 Q2 Q3 Notes\nNorth Alice Chen 120 145 160 strong\nSouth 98 102 115\nEast Bob Lee 210 198 225 recovering\nWest Dana 88 99 pending",
      "table": {
        "matched": 0,
        "expected": 20,
        "percent": 0,
        "tableFound": false
      },
      "readingOrder": null,
      "error": null
    },
    {
      "fixture": "ragged-table.pdf",
      "parserId": "pdf-parse",
      "status": "ok",
      "medianMs": 2,
      "samplesMs": [
        2,
        2,
        3
      ],
      "markdown": "<!-- Page 1 -->\n\nQ3 Results by Region\nRegion Manager Q1 Q2 Q3 Notes\nNorth Alice Chen 120 145 160 strong\nSouth 98 102 115\nEast Bob Lee 210 198 225 recovering\nWest Dana 88 99 pending",
      "table": {
        "matched": 0,
        "expected": 20,
        "percent": 0,
        "tableFound": false
      },
      "readingOrder": null,
      "error": null
    },
    {
      "fixture": "multi-column.pdf",
      "parserId": "pdf-inspector",
      "status": "ok",
      "medianMs": 3,
      "samplesMs": [
        3,
        3,
        3
      ],
      "markdown": "<!-- Page 1 -->\n\n# On Reading Order\n\nLeft column line 1. Left column line 2. Left column line 3. Left column line 4. Left column line 5. Left column line 6. Left column line 7. Left column line 8. Left column line 9. Left column line 10. Left column line 11. Left column line 12. Left column line 13. Left column line 14. Left column line 15. Left column line 16. Left column line 17. Left column line 18. Left column line 19. Left column line 20.\n\nRight column line 1. Right column line 2. Right column line 3. Right column line 4. Right column line 5. Right column line 6. Right column line 7. Right column line 8. Right column line 9. Right column line 10. Right column line 11. Right column line 12. Right column line 13. Right column line 14. Right column line 15. Right column line 16. Right column line 17. Right column line 18. Right column line 19. Right column line 20.\n",
      "table": null,
      "readingOrder": {
        "linesFound": 40,
        "expectedLines": 40,
        "columnOrderPreserved": true
      },
      "error": null
    },
    {
      "fixture": "multi-column.pdf",
      "parserId": "liteparse",
      "status": "ok",
      "medianMs": 745,
      "samplesMs": [
        745,
        744,
        745
      ],
      "markdown": "<!-- Page 1 -->\n\n# On Reading Order\n\nLeft column line 1. Left column line 2. Left column line 3. Left column line 4. Left column line 5. Left column line 6. Left column line 7. Left column line 8. Left column line 9. Left column line 10. Left column line 11. Left column line 12. Left column line 13. Left column line 14. Left column line 15. Left column line 16. Left column line 17. Left column line 18. Left column line 19. Left column line 20.\n\nRight column line 1. Right column line 2. Right column line 3. Right column line 4. Right column line 5. Right column line 6. Right column line 7. Right column line 8. Right column line 9. Right column line 10. Right column line 11. Right column line 12. Right column line 13. Right column line 14. Right column line 15. Right column line 16. Right column line 17. Right column line 18. Right column line 19. Right column line 20.",
      "table": null,
      "readingOrder": {
        "linesFound": 40,
        "expectedLines": 40,
        "columnOrderPreserved": true
      },
      "error": null
    },
    {
      "fixture": "multi-column.pdf",
      "parserId": "opendataloader",
      "status": "ok",
      "medianMs": 196,
      "samplesMs": [
        197,
        196,
        192
      ],
      "markdown": "<!-- Page 1 -->\n\n# On Reading Order\n\n- Left column line 1. Right column line 1.\n- Left column line 2. Right column line 2.\n- Left column line 3. Right column line 3.\n- Left column line 4. Right column line 4.\n- Left column line 5. Right column line 5.\n- Left column line 6. Right column line 6.\n- Left column line 7. Right column line 7.\n- Left column line 8. Right column line 8.\n- Left column line 9. Right column line 9.\n- Left column line 10. Right column line 10.\n- Left column line 11. Right column line 11.\n- Left column line 12. Right column line 12.\n- Left column line 13. Right column line 13.\n- Left column line 14. Right column line 14.\n- Left column line 15. Right column line 15.\n- Left column line 16. Right column line 16.\n- Left column line 17. Right column line 17.\n- Left column line 18. Right column line 18.\n- Left column line 19. Right column line 19.\n- Left column line 20. Right column line 20.",
      "table": null,
      "readingOrder": {
        "linesFound": 40,
        "expectedLines": 40,
        "columnOrderPreserved": false
      },
      "error": null
    },
    {
      "fixture": "multi-column.pdf",
      "parserId": "pdf2md",
      "status": "ok",
      "medianMs": 4,
      "samplesMs": [
        5,
        4,
        4
      ],
      "markdown": "# On Reading Order \n\nLeft column line 1. Right column line 1. Left column line 2. Right column line 2. Left column line 3. Right column line 3. Left column line 4. Right column line 4. Left column line 5. Right column line 5. Left column line 6. Right column line 6. Left column line 7. Right column line 7. Left column line 8. Right column line 8. Left column line 9. Right column line 9. Left column line 10. Right column line 10. Left column line 11. Right column line 11. Left column line 12. Right column line 12. Left column line 13. Right column line 13. Left column line 14. Right column line 14. Left column line 15. Right column line 15. Left column line 16. Right column line 16. Left column line 17. Right column line 17. Left column line 18. Right column line 18. Left column line 19. Right column line 19. Left column line 20. Right column line 20. \n\n\n",
      "table": null,
      "readingOrder": {
        "linesFound": 40,
        "expectedLines": 40,
        "columnOrderPreserved": false
      },
      "error": null
    },
    {
      "fixture": "multi-column.pdf",
      "parserId": "unpdf",
      "status": "ok",
      "medianMs": 1,
      "samplesMs": [
        1,
        2,
        1
      ],
      "markdown": "<!-- Page 1 -->\n\nOn Reading Order\nLeft column line 1. Right column line 1.\nLeft column line 2. Right column line 2.\nLeft column line 3. Right column line 3.\nLeft column line 4. Right column line 4.\nLeft column line 5. Right column line 5.\nLeft column line 6. Right column line 6.\nLeft column line 7. Right column line 7.\nLeft column line 8. Right column line 8.\nLeft column line 9. Right column line 9.\nLeft column line 10. Right column line 10.\nLeft column line 11. Right column line 11.\nLeft column line 12. Right column line 12.\nLeft column line 13. Right column line 13.\nLeft column line 14. Right column line 14.\nLeft column line 15. Right column line 15.\nLeft column line 16. Right column line 16.\nLeft column line 17. Right column line 17.\nLeft column line 18. Right column line 18.\nLeft column line 19. Right column line 19.\nLeft column line 20. Right column line 20.",
      "table": null,
      "readingOrder": {
        "linesFound": 40,
        "expectedLines": 40,
        "columnOrderPreserved": false
      },
      "error": null
    },
    {
      "fixture": "multi-column.pdf",
      "parserId": "pdf-parse",
      "status": "ok",
      "medianMs": 2,
      "samplesMs": [
        2,
        2,
        2
      ],
      "markdown": "<!-- Page 1 -->\n\nOn Reading Order\nLeft column line 1. Right column line 1.\nLeft column line 2. Right column line 2.\nLeft column line 3. Right column line 3.\nLeft column line 4. Right column line 4.\nLeft column line 5. Right column line 5.\nLeft column line 6. Right column line 6.\nLeft column line 7. Right column line 7.\nLeft column line 8. Right column line 8.\nLeft column line 9. Right column line 9.\nLeft column line 10. Right column line 10.\nLeft column line 11. Right column line 11.\nLeft column line 12. Right column line 12.\nLeft column line 13. Right column line 13.\nLeft column line 14. Right column line 14.\nLeft column line 15. Right column line 15.\nLeft column line 16. Right column line 16.\nLeft column line 17. Right column line 17.\nLeft column line 18. Right column line 18.\nLeft column line 19. Right column line 19.\nLeft column line 20. Right column line 20.",
      "table": null,
      "readingOrder": {
        "linesFound": 40,
        "expectedLines": 40,
        "columnOrderPreserved": false
      },
      "error": null
    }
  ]
}
