PDF Data Extractor
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)
Claude Code
npx skills add gooseworks-ai/goose-skills --skill pdf-processor -g -a claude-codeClaude Code (manual)
mkdir -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-processorWindows (PowerShell)
New-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" -ForceClaude.ai / desktop
Codex, Cursor, other agents
Connects with Agent Alley MCP · agentalley.io/mcp
Files included
SKILL.md4.1 KBskill.meta.json281 B
Read the files here
gooseworks-ai/
SKILL.md
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 · 205 listings
Similar skills
See all →
SkillAPI Interface Design
AgentVersion-Specific Docs Lookup
SkillAdaptyv Bio Foundry API
Skill.NET Backend Developer
SkillGemini Agent API Guide
SkillGemini Notebook AutomationMore from gooseworks-ai
SkillAd Angle Miner
SkillAd Campaign Analyzer
SkillLead Quality Analyzer
SkillMessage Match Auditor
SkillAI Search Visibility
SkillAmazon Product Search