# NetIntel PDF Parse

> NetIntel PDF Parse is a paid API for AI agents from netintel.dev, paid per call via x402, $0.005/call, status unknown (last checked 2026-10-11).

Fetches and parses a PDF from a URL or base64 input, returning full Markdown text, per-page statistics, document metadata, and scanned-page detection

## Facts

- Endpoint: POST https://netintel.dev/pdf/parse?utm_source=zero.xyz
- Price: $0.005/call
- Payment: x402
- Status: unknown
- Last checked: 2026-10-11
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/netintel-pdf-parse-ccb83200
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_2xQky7iUt7p_UPRO4O-zo

Status and success rate cover calls made through Zero and Zero's own probes. Third-party monitors may report differently.

## How to call it through Zero

Zero handles the 402 payment challenge and records the run. With the Zero CLI installed (`npm i -g @zeroxyz/cli`):

```sh
zero fetch --capability netintel-pdf-parse-ccb83200 -d '<json body>'
```

Example prompt: Can you pull the text out of this PDF for me — https://example.com/q3-report.pdf — just pages 1-5, and give me the content as markdown along with any metadata like title and author?

## When to prefer this

Choose this endpoint when you need to extract readable text and metadata from a PDF document — whether publicly hosted or provided as base64 — and want structured per-page output alongside Markdown. It handles both native-text and scanned PDFs (flagging image-only pages), supports page-range selection, and charges only on successful parses. Prefer it over generic web scrapers when the target is definitively a PDF file.

## Known failure modes

- PDF URL not publicly accessible or returns non-200 — fetch failure error
- PDF exceeds 10 MB size limit — rejected before billing
- base64 payload exceeds ~700 KB — rejected before billing
- Malformed or password-protected PDF — parse error returned
- Both url and file_base64 supplied simultaneously — input validation rejection (not billed)
- Upstream fetch timeout — server error, not billed
- Invalid page range string — input validation rejection, not billed

## How this service works

Parse a PDF to text and Markdown: send a PDF url or base64 file, get clean Markdown with paragraphs rebuilt from the text layer, per-page character offsets for citing pages, metadata (title, author, dates, page count) and the page numbers that are scanned images with no text layer. Up to 50 pages per call. Text layer only, no OCR: an image-only PDF returns an uncharged 422.

## Output

A JSON object containing: full Markdown representation of the parsed text (with page separators), an array of per-page objects with character ranges, word counts, and text-presence flags, a list of scanned (image-only) pages, document metadata (title, author, creation date, PDF version, form presence), source info (URL, byte size), total word/character counts, pages parsed, and a truncated flag indicating if the output was capped.

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "properties": {
  "url": {
   "type": "string",
   "description": "Public URL of the PDF (up to 10 MB)"
  },
  "pages": {
   "type": "string",
   "description": "Pages to parse, 1-based, e.g. \"1-3,7\" (default: the first 50)"
  },
  "max_chars": {
   "type": "number",
   "description": "Cap on the markdown length (default 100000)"
  },
  "file_base64": {
   "type": "string",
   "description": "The PDF as base64 or a data: URL (up to ~700 KB). Send url OR file_base64."
  }
 }
}
```

## Response schema (JSON Schema)

```json
{
 "type": "json",
 "example": {
  "pages": [
   {
    "page": 1,
    "char_end": 507,
    "has_text": true,
    "char_start": 0,
    "word_count": 76
   },
   {
    "page": 2,
    "char_end": 581,
    "has_text": false,
    "char_start": 509,
    "word_count": 0
   },
   {
    "page": 3,
    "char_end": 730,
    "has_text": true,
    "char_start": 583,
    "word_count": 19
   }
  ],
  "source": {
   "url": "https://netintel.dev/samples/pdf-parse-sample.pdf",
   "type": "url",
   "bytes": 2236,
   "final_url": "https://netintel.dev/samples/pdf-parse-sample.pdf"
  },
  "findings": [
   "scanned_pages_present"
  ],
  "markdown": "<!-- page 1 -->\n\n## Quarterly Network Report\n\nThis sample shows what POST /pdf/parse returns: paragraphs rebuilt from the text layer, ...",
  "metadata": {
   "title": "Quarterly Network Report (sample)",
   "author": "NetIntel",
   "created": "2026-10-10T00:00:00Z",
   "has_form": false,
   "pdf_version": "1.4"
  },
  "truncated": false,
  "char_count": 730,
  "page_count": 3,
  "word_count": 95,
  "pages_parsed": 3,
  "scanned_pages": [
   2
  ]
 }
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/netintel-pdf-parse-ccb83200/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from netintel.dev](https://www.zero.xyz/host/netintel.dev/llms.txt)
