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.
$0.005 per delivered document · $2 free every month · Failed runs never billed
$ 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
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.
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.
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.
Pay as you go
- $2 free credit / month
- 60 requests / min
- List unit prices
Starter
- $15 free credit / month
- 300 requests / min
- 10% off unit prices
Growth
- $50 free credit / month
- 600 requests / min
- 20% off unit prices
Scale
- $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. 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/.
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}'
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.
Sources and standards
The platform documentation and standards this collector is built against — check any claim on this page against the primary source:
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.