Extract text, tables, and structured data from documents
PDF Processor - Extract Data from PDFs

Process PDFs - extract text, tables, and structured data from documents
---
name: pdf-processor
description: Process PDFs - extract text, tables, and structured data from documents
source: orthogonal
---
# PDF Processor - Extract Data from PDFs
## Setup
Read your credentials from ~/.gooseworks/credentials.json:
```bash
export GOOSEWORKS_API_KEY=$(python3 -c "import json;print(json.load(open('$HOME/.gooseworks/credentials.json'))['api_key'])")
export GOOSEWORKS_API_BASE=$(python3 -c "import json;print(json.load(open('$HOME/.gooseworks/credentials.json')).get('api_base','https://api.gooseworks.ai'))")
```
If ~/.gooseworks/credentials.json does not exist, tell the user to run: `npx gooseworks login`Overview
If ~/.gooseworks/credentials.json does not exist, tell the user to run: npx gooseworks login
Manual install (npx, ZIP)
npx skills add gooseworks-ai/goose-skills --skill pdf-processor -g -a claude-codemkdir -p ~/.claude/skills && curl -sL https://codeload.github.com/gooseworks-ai/goose-skills/tar.gz/615c685f34f8 \
| tar -xz -C ~/.claude/skills --strip-components=4 goose-skills-615c685f34f8/skills/research-tools/capabilities/pdf-processorNew-Item -ItemType Directory -Force "$HOME\.claude\skills" | Out-Null; Invoke-WebRequest "https://m.agentalley.io/zip/72ef8b99f2fd1e9271dc/pdf-processor.zip" -OutFile "$env:TEMP\pdf-processor.zip"; Expand-Archive "$env:TEMP\pdf-processor.zip" -DestinationPath "$HOME\.claude\skills" -ForceConnects with Agent Alley MCP · agentalley.io/mcp
Files included
SKILL.md4.1 KBskill.meta.json281 B
Read the files here
gooseworks-ai/
Show the full text128 lines
PDF Processor - Extract Data from PDFs
Setup
Read your credentials from ~/.gooseworks/credentials.json:
export GOOSEWORKS_API_KEY=$(python3 -c "import json;print(json.load(open('$HOME/.gooseworks/credentials.json'))['api_key'])")
export GOOSEWORKS_API_BASE=$(python3 -c "import json;print(json.load(open('$HOME/.gooseworks/credentials.json')).get('api_base','https://api.gooseworks.ai'))")
If ~/.gooseworks/credentials.json does not exist, tell the user to run: npx gooseworks login
All endpoints use Bearer auth: -H "Authorization: Bearer $GOOSEWORKS_API_KEY"
Extract text, tables, and structured data from PDF documents.
Workflow
Step 1: Fetch PDF Content
Use Linkup to fetch PDF URLs:
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
-H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"api":"linkup","path":"/fetch","body":{"url":"https://example.com/document.pdf"}}'
Step 2: Extract with AI
Use ScrapeGraph to extract specific content:
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
-H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"api":"scrapegraph","path":"/v1/smartscraper"}'
"website_url": "https://example.com/report.pdf",
"user_prompt": "Extract all financial figures, tables, and key metrics from this document"
}'
Step 3: Extract Tables
Get structured table data:
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
-H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"api":"riveter","path":"/v1/run"}'
"input": {
"urls": ["https://example.com/report.pdf"]
},
"output": {
"tables": {"prompt": "Extract all tables with titles, headers, and rows", "contexts": ["urls"]}
}
}'
Step 4: Convert to Markdown
Get readable markdown output:
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
-H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"api":"scrapegraph","path":"/v1/markdownify","body":{"website_url":"https://example.com/document.pdf"}}'
Example Usage
# Extract data from financial report
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
-H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"api":"scrapegraph","path":"/v1/smartscraper"}'
"website_url": "https://example.com/annual-report.pdf",
"user_prompt": "Extract revenue, profit, and key business metrics with their values"
}'
# Extract invoice data
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
-H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"api":"riveter","path":"/v1/run"}'
"input": {"urls": ["https://example.com/invoice.pdf"]},
"output": {
"vendor": {"prompt": "Vendor name", "contexts": ["urls"]},
"amount": {"prompt": "Total amount", "contexts": ["urls"]},
"date": {"prompt": "Invoice date", "contexts": ["urls"]}
}
}'
Tips
- Specify exact data you need for better extraction
- Use schemas for consistent structured output
- Handle multi-page documents in chunks
- Verify extracted numbers against source
Discover More
List all endpoints, or add a path for parameter details:
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/search \
-H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"prompt":"linkup API endpoints"}' api show riveter
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/search \
-H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"prompt":"scrapegraph API endpoints"}'
Example: `curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/details \
-H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"api":"olostep","path":"/v1/scrapes`"}' for endpoint parameters.
| 1 | |
| 2 | name pdf-processor |
| 3 | description Process PDFs - extract text, tables, and structured data from documents |
| 4 | source orthogonal |
| 5 | |
| 6 | |
| 7 | |
| 8 | # PDF Processor - Extract Data from PDFs |
| 9 | |
| 10 | ## Setup |
| 11 | |
| 12 | Read your credentials from ~/.gooseworks/credentials.json: |
| 13 | |
| 14 | export GOOSEWORKS_API_KEY=$(python3 -c "import json;print(json.load(open('$HOME/.gooseworks/credentials.json'))['api_key'])") |
| 15 | export GOOSEWORKS_API_BASE=$(python3 -c "import json;print(json.load(open('$HOME/.gooseworks/credentials.json')).get('api_base','https://api.gooseworks.ai'))") |
| 16 | |
| 17 | |
| 18 | If ~/.gooseworks/credentials.json does not exist, tell the user to run: `npx gooseworks login` |
| 19 | |
| 20 | All endpoints use Bearer auth: `-H "Authorization: Bearer $GOOSEWORKS_API_KEY"` |
| 21 | |
| 22 | |
| 23 | Extract text, tables, and structured data from PDF documents. |
| 24 | |
| 25 | ## Workflow |
| 26 | |
| 27 | ### Step 1: Fetch PDF Content |
| 28 | Use Linkup to fetch PDF URLs: |
| 29 | |
| 30 | |
| 31 | curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \ |
| 32 | -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \ |
| 33 | -H "Content-Type: application/json" \ |
| 34 | -d '{"api":"linkup","path":"/fetch","body":{"url":"https://example.com/document.pdf"}}' |
| 35 | |
| 36 | |
| 37 | ### Step 2: Extract with AI |
| 38 | Use ScrapeGraph to extract specific content: |
| 39 | |
| 40 | |
| 41 | curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \ |
| 42 | -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \ |
| 43 | -H "Content-Type: application/json" \ |
| 44 | -d '{"api":"scrapegraph","path":"/v1/smartscraper"}' |
| 45 | "website_url": "https://example.com/report.pdf", |
| 46 | "user_prompt": "Extract all financial figures, tables, and key metrics from this document" |
| 47 | }' |
| 48 | |
| 49 | |
| 50 | ### Step 3: Extract Tables |
| 51 | Get structured table data: |
| 52 | |
| 53 | |
| 54 | curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \ |
| 55 | -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \ |
| 56 | -H "Content-Type: application/json" \ |
| 57 | -d '{"api":"riveter","path":"/v1/run"}' |
| 58 | "input": { |
| 59 | "urls": ["https://example.com/report.pdf"] |
| 60 | }, |
| 61 | "output": { |
| 62 | "tables": {"prompt": "Extract all tables with titles, headers, and rows", "contexts": ["urls"]} |
| 63 | } |
| 64 | }' |
| 65 | |
| 66 | |
| 67 | ### Step 4: Convert to Markdown |
| 68 | Get readable markdown output: |
| 69 | |
| 70 | |
| 71 | curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \ |
| 72 | -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \ |
| 73 | -H "Content-Type: application/json" \ |
| 74 | -d '{"api":"scrapegraph","path":"/v1/markdownify","body":{"website_url":"https://example.com/document.pdf"}}' |
| 75 | |
| 76 | |
| 77 | ## Example Usage |
| 78 | |
| 79 | |
| 80 | # Extract data from financial report |
| 81 | curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \ |
| 82 | -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \ |
| 83 | -H "Content-Type: application/json" \ |
| 84 | -d '{"api":"scrapegraph","path":"/v1/smartscraper"}' |
| 85 | "website_url": "https://example.com/annual-report.pdf", |
| 86 | "user_prompt": "Extract revenue, profit, and key business metrics with their values" |
| 87 | }' |
| 88 | |
| 89 | # Extract invoice data |
| 90 | curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \ |
| 91 | -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \ |
| 92 | -H "Content-Type: application/json" \ |
| 93 | -d '{"api":"riveter","path":"/v1/run"}' |
| 94 | "input": {"urls": ["https://example.com/invoice.pdf"]}, |
| 95 | "output": { |
| 96 | "vendor": {"prompt": "Vendor name", "contexts": ["urls"]}, |
| 97 | "amount": {"prompt": "Total amount", "contexts": ["urls"]}, |
| 98 | "date": {"prompt": "Invoice date", "contexts": ["urls"]} |
| 99 | } |
| 100 | }' |
| 101 | |
| 102 | |
| 103 | ## Tips |
| 104 | |
| 105 | Specify exact data you need for better extraction |
| 106 | Use schemas for consistent structured output |
| 107 | Handle multi-page documents in chunks |
| 108 | Verify extracted numbers against source |
| 109 | |
| 110 | ## Discover More |
| 111 | |
| 112 | List all endpoints, or add a path for parameter details: |
| 113 | |
| 114 | |
| 115 | curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/search \ |
| 116 | -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \ |
| 117 | -H "Content-Type: application/json" \ |
| 118 | -d '{"prompt":"linkup API endpoints"}' api show riveter |
| 119 | curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/search \ |
| 120 | -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \ |
| 121 | -H "Content-Type: application/json" \ |
| 122 | -d '{"prompt":"scrapegraph API endpoints"}' |
| 123 | |
| 124 | Example: `curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/details \ |
| 125 | -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \ |
| 126 | -H "Content-Type: application/json" \ |
| 127 | -d '{"api":"olostep","path":"/v1/scrapes`"}' for endpoint parameters. |
| 128 |
Details
- Updated
- Sep 21, 2026
- License
- MIT
- Stars on the repo
- ★ 1,220
- Checked
- Source
- gooseworks-ai/goose-skills ↗
- Creator
- gooseworks-ai · 206 listings
Made with pdf-processor

Similar skills
See all →
SkillGuides stable API and interface design
MCPPulls up-to-date, version-specific library docsContext7
SkillFetch up-to-date documentation and code examples for anyContext7 Documentation Lookup
SkillHow to use the Adaptyv Bio Foundry API and Python SDK
SkillMaster C/.NET backend development patterns for building
SkillGuides the usage of Gemini Interactions API on GeminiGemini Interactions API SkillMore from gooseworks-ai
SkillMine the highest-converting ad angles from customer reviewsAd angle miner
SkillAnalyze ad campaign performance data to identify what'sAd campaign analyzer
SkillFor paid lead-gen and participant-recruitment adsAd lead quality analyzer
SkillAnalyze the message match between your ads and landing pagesAd to landing page auditor
SkillCheck and improve your brand's visibility across AI searchAeo
SkillSearch Amazon products - find items, compare pricesAmazon Product Search