PDF Text Extractor - PDF to Text, Markdown & Tables, by Page
Pricing
from $0.70 / 1,000 pdf pages
PDF Text Extractor - PDF to Text, Markdown & Tables, by Page
Extracts the text and tables of PDF files (by link), page by page. No OCR: scanned PDFs come back empty.
Pricing
from $0.70 / 1,000 pdf pages
Rating
0.0
(0)
Developer
Afterstar
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
8 days ago
Last modified
Categories
Share
Bulk PDF to text: paste links to your PDFs, press Start, and get every page's text, its tables and a Markdown version, ready to download as CSV, Excel or JSON. $1.00 per 1,000 PDF pages.
What you get back
One row per PDF page, in page order. Below is page 1 of California's public WARN report (16 pages; a sample file of the pdfplumber project), from our run on 13 October 2026, as returned. That run read 17 pages from two PDFs in 11.8 seconds.
text (first lines):
WARN Report*Summary by Received Date07/01/2015 - 03/25/2016...Notice Date Effective Received Company City No. Of Layoff/Closure06/22/2015 03/25/2016 07/01/2015 Maxim Integrated Product San Jose 150 Closure Permanent06/30/2015 08/29/2015 07/01/2015 McGraw-Hill Education Monterey 137 Layoff Unknown at this time
tables (each table is a list of rows, each row a list of cells; first rows):
[["Notice Date", "Effective", "Received", "Company", "City", "No. Of", "Layoff/Closure"],["06/22/2015", "03/25/2016", "07/01/2015", "Maxim Integrated Product", "San Jose", "150", "Closure Permanent"],["06/30/2015", "08/29/2015", "07/01/2015", "McGraw-Hill Education", "Monterey", "137", "Layoff Unknown at this time"]]
markdown (the page text, then the same table as a Markdown table; the table part, first rows):
| Notice Date | Effective | Received | Company | City | No. Of | Layoff/Closure ||---|---|---|---|---|---|---|| 06/22/2015 | 03/25/2016 | 07/01/2015 | Maxim Integrated Product | San Jose | 150 | Closure Permanent |
Plus page (1), pageCount (16), wordCount (453) and documentTitle (empty for this file).
How to extract text from many PDFs at once (no code)
- Open the tool on Apify and sign in (a free Apify account; Google sign-in works).
- In PDF URLs, paste your links, one per line (up to 50 MB and 500 pages per PDF by default).
- Press Start.
- In the run's Output, click Export and choose CSV, Excel or JSON. You get one row per page.
The links must be PDF files anyone can download (not a Google Drive or Dropbox preview page).
PDF to Markdown, for ChatGPT, Claude or a RAG pipeline
Every page also comes as markdown: the page text, followed by each table on the page as a Markdown table, so a language model also sees the table structure (table cells appear twice: in the text and in the table). Join the pages in page order to get the whole document.
PDF tables to Excel or CSV
Each table on a page comes in tables as rows of cells, and as a Markdown table inside markdown. In a JSON export the rows are ready to use; in a CSV or Excel export Apify spreads nested lists over many columns, so for tables JSON is the easier format. Not every table is detected: tables drawn without ruling lines (common in papers and in some reports) come as plain text lines in text, in reading order.
Scanned PDFs
This tool reads the text that's already in the PDF and has no OCR, so scanned pages come back without text. For scans, use our OCR Image to Text: it reads scanned PDFs page by page in 31 languages.
Use it as a PDF to text API, or from n8n, Make and Zapier
Every run can also be started over Apify's API. This call reads one PDF and returns the rows as JSON when it's done (put your own Apify API token in place of YOUR_TOKEN):
curl -X POST "https://api.apify.com/v2/acts/afterstar~pdf-to-text/run-sync-get-dataset-items?token=YOUR_TOKEN" \-H "Content-Type: application/json" \-d '{"urls": ["https://example.com/report.pdf"]}'
Add &format=csv to the address to get CSV instead of JSON. A synchronous call waits at most 5 minutes; for big batches, start a run (/runs instead of /run-sync-get-dataset-items) and read its dataset when it finishes. Apify's n8n, Make and Zapier integrations run the tool the same way.
What does PDF Text Extractor do?
For each PDF link: one row per page with the page text, the tables as rows, the page text plus its tables as Markdown tables (markdown), the word count, the page count and the document title.
Run it once, or schedule it to list only the pages that changed in your PDFs. The tool remembers what it has seen, in a storage in your own Apify account.
What you get
| Input | Links to PDF files, one per line (up to 50 MB each, up to 500 pages by default) |
| Per page | The page text, its tables as rows, the page text plus its tables as Markdown tables (markdown), word count, page count, document title |
| Schedule | Only the pages that changed since the last run |
| Price | $1.00 per 1,000 PDF pages; on a schedule $1.20 per 1,000 unchanged documents checked |
Use cases
- Turn reports, price lists or regulations into text for AI tools or search.
- Pull tables out of PDF reports into a spreadsheet.
- Watch a set of PDFs and get only the pages that changed.
Input
| Field | What it does |
|---|---|
| PDF URLs | Links to PDF files, one per line |
| Max pages per PDF | Default 500 |
| Output mode | All results, only new results, or new + changed + removed results |
Output
One row per PDF page (page 1 of the WARN report above, as a first run returns it; text, tables and markdown shortened with …, other keys left out):
{"id": "pdf:https://raw.githubusercontent.com/jsvine/pdfplumber/stable/examples/pdfs/ca-warn-report.pdf#p1","changeType": "new","url": "https://raw.githubusercontent.com/jsvine/pdfplumber/stable/examples/pdfs/ca-warn-report.pdf","page": 1,"pageCount": 16,"documentTitle": null,"text": "WARN Report*\nSummary by Received Date\n07/01/2015 - 03/25/2016\n…","tables": [[["Notice Date", "Effective", "Received", "Company", "City", "No. Of", "Layoff/Closure"], ["06/22/2015", "03/25/2016", "07/01/2015", "Maxim Integrated Product", "San Jose", "150", "Closure Permanent"], …]],"markdown": "WARN Report*\n…\n| Notice Date | Effective | Received | Company | City | No. Of | Layoff/Closure |\n…","wordCount": 453}
Every row has every key (null when there's no value). changeType is new, changed, unchanged or
removed; a changed row lists changedFields and the previous values. If a source fails or rate-limits the
request, you get one row with changeType: "status" and a statusCode instead of an error, and it's free.
Schedule it
- Fill in the input and save it as a task.
- Run it once with Baseline only switched on: it remembers the current results and lists nothing. Or skip this and accept that the first scheduled run lists everything once.
- Set Output mode to Only new results or New, changed and removed, and add a schedule.
- Connect an integration (Slack, Google Sheets, Zapier, Make, n8n), or put a webhook URL in the input.
Each saved task keeps its own memory; switching a task between modes keeps it. Each run saves a summary (OUTPUT in
the run's key-value store) with the counts.
Apify webhook template (Integrations → Webhook → payload):
{"datasetUrl": "https://api.apify.com/v2/datasets/{{resource.defaultDatasetId}}/items?clean=true&format=json"}
How much does it cost?
- $1.00 per 1,000 PDF pages listed (on paid Apify plans 10-30% less).
- You pay only this price, no separate Apify platform usage. Apify's free plan includes $5 of credit a month, enough for about 5,000 PDF pages here.
- On a schedule (only new, changed or removed PDF pages): $1.20 per 1,000 unchanged documents checked plus $1.00 per 1,000 new, changed or removed PDF pages.
- Example: 1,000 PDF pages cost $1.00; watching 10 PDFs every day, where none changes, costs about $0.36 a month (plus Apify's start fee: $0.00005 per run).
- Status rows (errors) are free. Set a spending limit on the run and the tool stops there.
Good to know
- No OCR: pages of scanned PDFs have no text. A PDF with no text at all gives a free status row.
- On a schedule, new, changed or removed pages cost $1 per 1,000 and an unchanged document $1.20 per 1,000.
- Files up to 50 MB. The tool follows each site's robots.txt.
How it compares
| Instead of | With this tool |
|---|---|
| Copying text out of a PDF viewer | Every page of every PDF in one table, with tables kept as rows |
| Converting files one by one | A whole list of PDF links in one run, page by page |
| Re-reading reports that change | 'Changes' mode lists only the pages whose text changed |
FAQ
Does it read scanned PDFs? No: it has no OCR, so pages of scanned PDFs come back without text, and a PDF with no text at all gives a free status row. For scans, use our OCR Image to Text.
How are tables returned? Each table comes as rows (a list of cells) and as a Markdown table, next to the page text. Tables drawn without lines (common in papers) and chart frames are not returned as tables; the page text keeps every word in reading order.
Can I upload a PDF? Give a link to the PDF file. The tool follows each site's robots.txt.
How big can a PDF be? Up to 50 MB, and up to 500 pages by default (Max pages per PDF).
What does a schedule cost? New, changed or removed pages cost $1 per 1,000 and an unchanged document $1.20 per 1,000.
Source: the PDF files you link to. Extraction by pdfplumber (MIT).
More Afterstar tools
- Audio Transcription & Speech to Text - Video, Podcasts, SRT: Turns audio and video files (your own uploads, direct file links, public podcast feeds) into text and subtitles (SRT/VTT) in ~99 languages, on the open-source Whisper model, run inside the tool (no API key).
Found a problem or need a field? Open an issue on the Issues tab.