# PDF scraper API — $0.005 per document

> PDF scraper API: Every PDF and Office document a domain publishes, converted to clean. $0.005 per delivered document, nothing delivered means nothing charged.

[Home](https://quanticdata.io/)/[Collectors](https://quanticdata.io/collectors/)/*PDF scraper API*

# PDF scraper API

A PDF scraper API that works on a whole website instead of one file: you pass a domain and get back every PDF, Word, Excel and CSV document it publishes, each one already converted to structured Markdown with its headings, tables, lists and links intact. One row per document, with title, author, page count and word count — billed per document delivered.

By [Aldo Morese](https://quanticdata.io/about/), founder of QuanticData · Published Aug 21, 2026 · Updated Sep 3, 2026

[Get my free API key](https://app.quanticdata.io/register) [See the request](/collectors/pdf-scraper-api/#integration)

$0.005 per delivered document · $2 free every month · Failed runs never billed

POST /v1/scraper/collectors/site_documents/run

```
$ curl $QD/site_documents/run \
    -H "Authorization: Bearer $QD_API_KEY" \
    -d '{"domain": "bitcoin.org", "doc_types": ["pdf"], "max_results": 5}'
{ "status": "done", "count": 5,
  "results": [
    {
      "url": "…",
      "source": "…",
      "kind": "…",
      "title": "…" } ],
  "cost": 0.025 }
# 5 documents × $0.005 · nothing delivered, nothing charged
```

You send domain and doc_types; the run goes out through a residential exit and comes back as documents with source, kind and title — 11 fields on every row — and you are billed $0.005 for each document actually delivered, nothing for a run that delivers none.

**$0.005 / document**400 documents on the free $2 every month

**Semantic input**domain, doc_types, max_chars_per_doc — no URL lists

**Up to 50**documents per run, pagination handled for you

**No browser**read over HTTP/TLS — cheaper and faster than rendering

On this page: [Try it](/collectors/pdf-scraper-api/#try) [What it is](/collectors/pdf-scraper-api/#what) [Limits](/collectors/pdf-scraper-api/#caps) [Output fields](/collectors/pdf-scraper-api/#output) [Inputs](/collectors/pdf-scraper-api/#input) [Pricing](/collectors/pdf-scraper-api/#pricing) [Integration](/collectors/pdf-scraper-api/#integration) [Use cases](/collectors/pdf-scraper-api/#use-cases) [Versus the alternatives](/collectors/pdf-scraper-api/#compare) [FAQ](/collectors/pdf-scraper-api/#faq)

Try it

## Site documents → Markdown, running now

Change the input and run it against the live collector — nothing to install, no sign-up.

Run it from your own code, on your own inputs

Same collector, same rows — $2 of free API credit every month, no card.

[Get my free API key](https://app.quanticdata.io/register)

## What a PDF scraper API does

Scraping PDFs from a site is two problems wearing one name. The first is finding them: the whitepaper is linked from the homepage, the annual report only from the sitemap, and the ones that matter are never in the same place twice. The second is reading them: `pdf-parse` and friends hand you a flat dump where a two-column paper interleaves its columns, a table becomes a smear of numbers and the running header repeats on every page. This collector does both — link discovery on the homepage first, then the sitemap only if it still needs documents, and a layout-aware conversion built on positioned text runs rather than a flat dump.

The converter is the part you would not want to write. Headings come from clustering the real font sizes, cross-checked against the PDF outline when the file has one; bold, italic and monospace come from the font names; tables are rebuilt as GFM only where columns actually line up, which is what keeps justified paragraphs out; two-column pages are split on the gutter and read column by column; recurring headers, footers and page numbers are dropped; hyphenated line breaks are repaired and paragraphs rejoined across pages; and link annotations are remapped onto the text they covered. What lands in your pipeline is Markdown a model can read, not a wall of characters. Only documents hosted on the domain you asked for are fetched — a harvest of `acme.com` never wanders off to a third-party CDN.

Input is meaning, not a URL *domain* *doc_types* *max_chars_per_doc* *country* *max_results*

## Limits, in plain numbers

Everything that bounds one run of this collector. No hidden throttles.

Max per run

50 documents

Price

$0.005 / document

Per 1,000

$5.00

Failed runs

Free zero rows, zero charge

Free every month

$2 no card

Rate limit

60 req/min on the free tier

## What one document looks like

Every delivered document carries these fields. Nullable means the source did not publish it — the field stays empty instead of being guessed.

| Field | Type | What it holds |
| --- | --- | --- |
| `url` | string | Document URL. |
| `source` | string | Where the link was found: page \| sitemap. |
| `kind` | string | pdf \| docx \| xlsx \| csv. |
| `title` | string · nullable | Document title (PDF metadata or first heading). |
| `markdown` | string | The document converted to Markdown (headings, tables, lists, links). |
| `chars` | integer | Markdown length in characters. |
| `words` | integer | Word count of the Markdown. |
| `pages` | integer · nullable | Page count (PDF only). |
| `author` | string · nullable | Author from document metadata, when present. |
| `scanned_pages` | integer | Image-only pages with no text layer (no OCR applied). |
| `truncated` | boolean | True when the content hit max_chars_per_doc or the page cap. |

## Inputs

The whole request. Anything you leave out falls back to the default shown in the catalog.

| Input | Type | Required | What it does |
| --- | --- | --- | --- |
| `domain` | string | yes | Domain or site URL to harvest documents from. |
| `doc_types` | array | no | Which document types to collect (default pdf + docx). |
| `max_chars_per_doc` | integer | no | Cap on the Markdown returned per document (1,000–200,000). |
| `country` | string | no | ISO 3166-1 alpha-2 code — proxy exit geo and Google locale (gl). Omit for the default pool. |
| `max_results` | integer | no | How many documents to deliver at most (1–50). You pay only for delivered documents. |

Pricing

## PDF scraper API pricing

$0.005 per delivered document. A run that delivers nothing costs nothing: blocked pages, challenges and retries are on us, and the $2 monthly allowance covers about 400 documents before you spend anything.

**$0.005**per delivered document*$5 per 1,000 delivered documents*

**400 documents**on the free allowance*$2 every month, no card*

**Zero rows**zero charge*blocks, captchas and retries are on us*

**−30%**on volume tiers*the catalog returns your key's price*

### Pay as you go

$0/mo

- $2 free credit / month

- 60 requests / min

- List unit prices

### Starter

$19/mo

- $15 free credit / month

- 300 requests / min

- 10% off unit prices

Most popular

### Growth

$79/mo

- $50 free credit / month

- 600 requests / min

- 20% off unit prices

### Scale

$299/mo

- $250 free credit / month

- 1,200 requests / min

- 30% off unit prices

Same wallet, same key and same $2 monthly allowance as every other [Data API](https://quanticdata.io/web-data-api-for-ai/). Prices are launch pricing read live from the billing config — `GET /v1/scraper/collectors` returns the price your key actually pays.

Integration

## One POST, typed rows

Base URL `https://api.quanticdata.io/v1`, Bearer auth, the same key as every other Data API. Endpoint: `POST /v1/scraper/collectors/site_documents/run`.

```
curl -X POST https://api.quanticdata.io/v1/scraper/collectors/site_documents/run \
  -H "Authorization: Bearer $QD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"domain":"bitcoin.org","doc_types":["pdf"],"max_results":5}'
```

```
import requests

r = requests.post(
    "https://api.quanticdata.io/v1/scraper/collectors/site_documents/run",
    headers={"Authorization": f"Bearer {QD_API_KEY}"},
    json={
        "domain": "bitcoin.org",
        "doc_types": [
            "pdf"
        ],
        "max_results": 5
    },
    timeout=120,
)
for row in r.json()["payload"]["results"]:
    print(row)
```

```
const res = await fetch(
  "https://api.quanticdata.io/v1/scraper/collectors/site_documents/run",
  {
    method: "POST",
    headers: {
      Authorization: `Bearer ${process.env.QD_API_KEY}`,
      "Content-Type": "application/json",
    },
    body: JSON.stringify({"domain":"bitcoin.org","doc_types":["pdf"],"max_results":5}),
  },
);
const { payload } = await res.json();
console.table(payload.results);
```

```
claude mcp add quanticdata \
  -e QUANTICDATA_API_KEY=qd_live_your_key_here \
  -- npx -y quanticdata-mcp

# then, in the chat:
> run the site_documents collector with domain="bitcoin.org" and doc_types=["pdf"]
```

## What people build with the PDF scraper API

Three shapes of work this endpoint was designed around.

### RAG ingestion

Point it at a regulator, a vendor or your own site and the corpus arrives as Markdown with headings preserved, which is exactly the structure a chunker needs to split on. Set `pdf.pageMarkers`-style limits with `max_chars_per_doc` and each row stays inside your context budget.

### Due diligence and research

Every whitepaper, prospectus, price list and datasheet a company publishes, in one call — with the source URL on each row so a quote can always be traced back to the document it came from.

### Document monitoring

Re-run on a schedule and diff by URL: new filings and updated brochures show up as new or changed rows, without a crawler to maintain.

## PDF scraper API versus rolling your own

The differences that actually cost time when you build this in-house.

|  | DIY scraper | This collector |
| --- | --- | --- |
| Finding the documents | Your own crawler, plus a sitemap parser | Homepage links first, sitemap only if more are needed |
| Reading a PDF | Flat text dump — columns interleaved, tables destroyed | Layout-aware Markdown: headings, GFM tables, lists, links |
| Scope | Whatever your crawler wanders into | Same-site only, on the registrable domain you asked for |

## What people search for

Live autocomplete demand around Site documents → Markdown, pulled with our own Keyword ideas collector.

Searches: [pdf scraper api](/collectors/pdf-scraper-api/#try) [pdf parser api](/collectors/pdf-scraper-api/#try) [pdf to text api](/collectors/pdf-scraper-api/#try) [pdf to text converter api](/collectors/pdf-scraper-api/#try) [pdf to text extractor api](/collectors/pdf-scraper-api/#try) [pdf to text ocr api](/collectors/pdf-scraper-api/#try) [pdf parser api free](/collectors/pdf-scraper-api/#try) [how to scrape a pdf](/collectors/pdf-scraper-api/#try) [pdf scraper github](/collectors/pdf-scraper-api/#try) [pdf scraper ai](/collectors/pdf-scraper-api/#try) [pdf scraper library](/collectors/pdf-scraper-api/#try) [pdf scraper python library](/collectors/pdf-scraper-api/#try) [pdf scraper javascript](/collectors/pdf-scraper-api/#try) [pdf scraper open source](/collectors/pdf-scraper-api/#try) [pdf scraper software](/collectors/pdf-scraper-api/#try) [apify pdf scraper](/collectors/pdf-scraper-api/#try)

The same call you would paste into a terminal: a Bearer key, domain, doc_types and max_chars_per_doc in the body, and back the envelope every QuanticData endpoint returns — type, message, payload — where count is how many documents arrived and usage.cost_usd is $0.025, which is 5 × $0.005. A run that delivers nothing costs nothing. The key is good for 60 req/min on the free tier.

## Sources and standards

The platform documentation and standards this collector is built against — check any claim on this page against the primary source:

- [PDF Association: ISO 32000-2 (PDF 2.0), the PDF specification](https://pdfa.org/resource/iso-32000-2/)

- [Mozilla: PDF.js, the PDF renderer this parser is built on](https://mozilla.github.io/pdf.js/)

## FAQ

Questions we get about the PDF scraper API.

[Something else? Ask us →](mailto:hello@quanticdata.io)

### Which document types does it collect?

PDF and DOCX by default; XLSX and CSV are available through `doc_types`. PDFs go through the layout-aware engine, Word files keep their formatting, and spreadsheets come back as Markdown tables.

### What happens with scanned PDFs?

They are delivered like any other document, and the row tells you the truth about them: `scanned_pages` counts the image-only pages with no text layer. No OCR is applied and none is faked — a scan comes back with the text it actually contains, and you decide whether to send it to an OCR step.

### How long can one document be?

As long as you allow: `max_chars_per_doc` runs from 1,000 to 200,000 characters and defaults to 40,000. When a document is cut at that limit the row carries `truncated: true`, so a shortened conversion is never mistaken for a short document.

### Does it fetch documents hosted somewhere else?

No. Discovery is fenced to the registrable domain you passed, so links pointing at a third-party host are skipped rather than fetched. That keeps the bill, and the legal surface, on the site you actually asked about.

### Is there a free PDF scraper API?

Every account gets $2 of credit every month with no card, which is about 400 delivered documents on this endpoint at $0.005 each. It renews monthly, and a run that delivers nothing is never billed — so a failed or blocked attempt does not eat the allowance.

### How much does one run cost?

Multiply the rows you actually receive by $0.005. A run capped at 50 documents — the maximum for this collector — costs $0.25 if every row comes back, and less when the source has fewer. Volume tiers take up to 30% off, and `GET /v1/scraper/collectors` returns the price your key actually pays.

## Run the PDF scraper API now

$2 of free credit every month, no card. Your key returns its own prices from `GET /v1/scraper/collectors`.

[Get my free API key](https://app.quanticdata.io/register)

Related: [All 81 collectors](https://quanticdata.io/collectors/) [arXiv API](https://quanticdata.io/collectors/arxiv-api/) [SEC EDGAR API](https://quanticdata.io/collectors/sec-edgar-api/) [OpenAlex API](https://quanticdata.io/collectors/academic-paper-api/) [PDF to Markdown (free tool)](https://quanticdata.io/tools/pdf-to-markdown/) [Crawl &amp; Map](https://quanticdata.io/crawl-map/) [Documentation](https://quanticdata.io/docs/)

## Also on this site

Quantic**Data**

Residential proxies & web data APIs for AI.

#### Proxies

- [Residential Basic](https://quanticdata.io/residential-proxies/#basic)

- [Residential Premium](https://quanticdata.io/residential-proxies/#plans)

- [Cheap Residential](https://quanticdata.io/cheap-residential-proxies/)

- [Mobile Proxies](https://quanticdata.io/mobile-proxies/)

- [Datacenter Proxies](https://quanticdata.io/datacenter-proxies/)

- [ISP Proxies](https://quanticdata.io/isp-proxies/)

- [Rotating Proxies](https://quanticdata.io/rotating-proxies/)

- [Sneaker Proxies](https://quanticdata.io/sneaker-proxies/)

- [SOCKS5 Proxies](https://quanticdata.io/socks5-proxies/)

- [IPv6 Proxies](https://quanticdata.io/ipv6-proxies/)

- [Proxy locations](https://quanticdata.io/proxies/)

#### Data APIs

- [MCP Server](https://quanticdata.io/mcp-server/)

- [Web Scraper API](https://quanticdata.io/web-scraping-api/)

- [SERP API](https://quanticdata.io/serp-api/)

- [Collectors](https://quanticdata.io/collectors/)

- [Web Data for AI](https://quanticdata.io/web-data-api-for-ai/)

- [Quantic AI](https://quanticdata.io/ai-web-scraping-service/)

- [Browser AI Agents](https://quanticdata.io/browser-ai/)

- [Crawl & Map](https://quanticdata.io/crawl-map/)

- [SEO Audit](https://quanticdata.io/seo-audit/)

#### Use cases

- [Company data](https://quanticdata.io/scrape-company-data/)

- [Price monitoring](https://quanticdata.io/competitor-price-monitoring/)

- [Market research](https://quanticdata.io/market-research-data/)

- [Real estate data](https://quanticdata.io/real-estate-data-scraping/)

- [Scrape job postings](https://quanticdata.io/scrape-job-postings/)

#### Company

- [Documentation](https://quanticdata.io/docs/)

- [Blog](https://quanticdata.io/blog/)

- [Free tools](https://quanticdata.io/tools/)

- [Partners](https://quanticdata.io/partners/)

- [About](https://quanticdata.io/about/)

- [Alternatives](https://quanticdata.io/alternatives/)

- [Pricing](https://quanticdata.io/pricing/)

- [FAQ](https://quanticdata.io/#faq)

- [For AI agents](https://quanticdata.io/#ai)

#### Free tools

- [All tools](https://quanticdata.io/tools/)

- [Website to Markdown](https://quanticdata.io/tools/website-to-markdown/)

- [PDF to Markdown](https://quanticdata.io/tools/pdf-to-markdown/)

- [WAF detector](https://quanticdata.io/tools/waf-detector/)

- [AI visibility audit](https://quanticdata.io/tools/ai-visibility-audit/)

- [AI crawler checker](https://quanticdata.io/tools/ai-crawler-checker/)

- [robots.txt tester](https://quanticdata.io/tools/robots-txt-tester/)

- [robots.txt generator](https://quanticdata.io/tools/robots-txt-generator/)

- [User agent](https://quanticdata.io/tools/user-agent/)

- [cURL converter](https://quanticdata.io/tools/curl-converter/)

- [Proxy tester](https://quanticdata.io/tools/proxy-tester/)

© 2026 QuanticData ·

- [quanticdata.io](https://quanticdata.io/)

·

- [Terms](https://quanticdata.io/terms/)

·

- [Privacy](https://quanticdata.io/privacy/)

If you are an AI agent:

- [llms.txt](https://quanticdata.io/llms.txt)

·

- [llms-full.txt](https://quanticdata.io/llms-full.txt)

---

Source: https://quanticdata.io/collectors/pdf-scraper-api/ · Site index for AI: https://quanticdata.io/llms.txt · Full dump: https://quanticdata.io/llms-full.txt
