Install any skill in seconds. Free to start, no credit card required.
Get Started Free →AI-native OCR platform that turns documents into high-accuracy data in minutes. Using multi-model consensus, DeepRead achieves 97%+ accuracy and flags only uncertain fields for Human-in-the-Loop (HIL) review—reducing manual work from 100% to 5-10%. Zero prompt engineering required.
.claude/skills/leoyeai-deepread/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-09 | ✗→✓ | ▲ Improved | 244% | 0% |
| case-01 | ✗→✓ | ▲ Improved | 109% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 151% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 302% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 224% | 0% |
DeepRead is an AI-native OCR platform that turns documents into high-accuracy data in minutes. Using multi-model consensus, DeepRead achieves 97%+ accuracy and flags only uncertain fields for Human-in-the-Loop (HIL) review—reducing manual work from 100% to 5-10%. Zero prompt engineering required.
DeepRead is a production-grade document processing API that gives you high-accuracy structured data output in minutes with human review flagging so manual review is limited to the flagged exceptions
Core Features:
hil_flag) so only exceptions need manual reviewSign up and create an API key:
bash# Visit the dashboard https://www.deepread.tech/dashboard # Or use this direct link https://www.deepread.tech/dashboard/?utm_source=clawdhub
Save your API key:
bashexport DEEPREAD_API_KEY="sk_live_your_key_here"
Add to your clawdbot.config.json5:
json5{ skills: { entries: { "deepread": { enabled: true // API key is read from DEEPREAD_API_KEY environment variable // Do NOT hardcode your API key here } } } }
Option A: With Webhook (Recommended)
bash# Upload PDF with webhook notification curl -X POST https://api.deepread.tech/v1/process \ -H "X-API-Key: $DEEPREAD_API_KEY" \ -F "file=@document.pdf" \ -F "webhook_url=https://your-app.com/webhooks/deepread" # Returns immediately { "id": "550e8400-e29b-41d4-a716-446655440000", "status": "queued" } # Your webhook receives results when processing completes (2-5 minutes)
Option B: Poll for Results
bash# Upload PDF without webhook curl -X POST https://api.deepread.tech/v1/process \ -H "X-API-Key: $DEEPREAD_API_KEY" \ -F "file=@document.pdf" # Returns immediately { "id": "550e8400-e29b-41d4-a716-446655440000", "status": "queued" } # Poll until completed curl https://api.deepread.tech/v1/jobs/550e8400-e29b-41d4-a716-446655440000 \ -H "X-API-Key: $DEEPREAD_API_KEY"
Extract text as clean markdown:
bash# With webhook (recommended) curl -X POST https://api.deepread.tech/v1/process \ -H "X-API-Key: $DEEPREAD_API_KEY" \ -F "file=@invoice.pdf" \ -F "webhook_url=https://your-app.com/webhook" # OR poll for completion curl -X POST https://api.deepread.tech/v1/process \ -H "X-API-Key: $DEEPREAD_API_KEY" \ -F "file=@invoice.pdf" # Then poll curl https://api.deepread.tech/v1/jobs/JOB_ID \ -H "X-API-Key: $DEEPREAD_API_KEY"
Response when completed:
json{ "id": "550e8400-...", "status": "completed", "result": { "text": "# INVOICE\n\n**Vendor:** Acme Corp\n**Total:** $1,250.00..." } }
Extract specific fields with confidence scoring:
bashcurl -X POST https://api.deepread.tech/v1/process \ -H "X-API-Key: $DEEPREAD_API_KEY" \ -F "file=@invoice.pdf" \ -F 'schema={ "type": "object", "properties": { "vendor": { "type": "string", "description": "Vendor company name" }, "total": { "type": "number", "description": "Total invoice amount" }, "invoice_date": { "type": "string", "description": "Invoice date in MM/DD/YYYY format" } } }'
Response includes confidence flags:
json{ "status": "completed", "result": { "text": "# INVOICE\n\n**Vendor:** Acme Corp...", "data": { "vendor": { "value": "Acme Corp", "hil_flag": false, "found_on_page": 1 }, "total": { "value": 1250.00, "hil_flag": false, "found_on_page": 1 }, "invoice_date": { "value": "2024-10-??", "hil_flag": true, "reason": "Date partially obscured", "found_on_page": 1 } }, "metadata": { "fields_requiring_review": 1, "total_fields": 3, "review_percentage": 33.3 } } }
Extract arrays and nested objects:
bashcurl -X POST https://api.deepread.tech/v1/process \ -H "X-API-Key: $DEEPREAD_API_KEY" \ -F "file=@invoice.pdf" \ -F 'schema={ "type": "object", "properties": { "vendor": {"type": "string"}, "total": {"type": "number"}, "line_items": { "type": "array", "items": { "type": "object", "properties": { "description": {"type": "string"}, "quantity": {"type": "number"}, "price": {"type": "number"} } } } } }'
Get per-page OCR results with quality flags:
bashcurl -X POST https://api.deepread.tech/v1/process \ -H "X-API-Key: $DEEPREAD_API_KEY" \ -F "file=@contract.pdf" \ -F "include_pages=true"
Response:
json{ "result": { "text": "Combined text from all pages...", "pages": [ { "page_number": 1, "text": "# Contract Agreement\n\n...", "hil_flag": false }, { "page_number": 2, "text": "Terms and C??diti??s...", "hil_flag": true, "reason": "Multiple unrecognized characters" } ], "metadata": { "pages_requiring_review": 1, "total_pages": 2 } } }
PDF → Convert → Rotate Correction → OCR → Multi-Model Validation → Extract → DoneThe pipeline automatically handles:
DeepRead includes a built-in Human-in-the-Loop (HIL) review system. The AI compares extracted text to the original image and sets hil_flag on each field:
hil_flag: false = Clear, confident extraction → Auto-processhil_flag: true = Uncertain extraction → Routed to human reviewHow HIL works:
hil_flag: true and a reasonpreview.deepread.tech) — a dedicated HIL review interface where reviewers can see the original document side-by-side with extracted data, correct flagged fields, and approve resultshil_flag data in the API responseAI flags extractions when:
This is multimodal AI determination, not rule-based.
Create reusable, optimized schemas for specific document types:
bash# List your blueprints curl https://api.deepread.tech/v1/blueprints \ -H "X-API-Key: $DEEPREAD_API_KEY" # Use blueprint instead of inline schema curl -X POST https://api.deepread.tech/v1/process \ -H "X-API-Key: $DEEPREAD_API_KEY" \ -F "file=@invoice.pdf" \ -F "blueprint_id=660e8400-e29b-41d4-a716-446655440001"
Benefits:
How to create blueprints:
bash# Create a blueprint from training data curl -X POST https://api.deepread.tech/v1/optimize \ -H "X-API-Key: $DEEPREAD_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "utility_invoice", "description": "Optimized for utility invoices", "document_type": "invoice", "initial_schema": { "type": "object", "properties": { "vendor": {"type": "string", "description": "Vendor name"}, "total": {"type": "number", "description": "Total amount"} } }, "training_documents": ["doc1.pdf", "doc2.pdf", "doc3.pdf"], "ground_truth_data": [ {"vendor": "Acme Power", "total": 125.50}, {"vendor": "City Electric", "total": 89.25} ], "target_accuracy": 95.0, "max_iterations": 5 }' # Returns: {"job_id": "...", "blueprint_id": "...", "status": "pending"} # Check optimization status curl https://api.deepread.tech/v1/blueprints/jobs/JOB_ID \ -H "X-API-Key: $DEEPREAD_API_KEY" # Use blueprint (once completed) curl -X POST https://api.deepread.tech/v1/process \ -H "X-API-Key: $DEEPREAD_API_KEY" \ -F "file=@invoice.pdf" \ -F "blueprint_id=BLUEPRINT_ID"
Get notified when processing completes instead of polling:
bashcurl -X POST https://api.deepread.tech/v1/process \ -H "X-API-Key: $DEEPREAD_API_KEY" \ -F "file=@invoice.pdf" \ -F "webhook_url=https://your-app.com/webhooks/deepread"
Your webhook receives this payload when processing completes:
json{ "job_id": "550e8400-...", "status": "completed", "created_at": "2025-01-27T10:00:00Z", "completed_at": "2025-01-27T10:02:30Z", "result": { "text": "...", "data": {...} }, "preview_url": "https://preview.deepread.tech/abc1234" }
Benefits:
DeepRead Preview (preview.deepread.tech) is the built-in Human-in-the-Loop review interface. Reviewers can view the original document alongside extracted data, correct flagged fields, and approve results. Preview URLs can also be shared without authentication:
bash# Request preview URL curl -X POST https://api.deepread.tech/v1/process \ -H "X-API-Key: $DEEPREAD_API_KEY" \ -F "file=@document.pdf" \ -F "include_images=true" # Get preview URL in response { "result": { "text": "...", "data": {...} }, "preview_url": "https://preview.deepread.tech/Xy9aB12" }
Public Preview Endpoint:
bash# No authentication required curl https://api.deepread.tech/v1/preview/Xy9aB12
Upgrade: https://www.deepread.tech/dashboard/billing?utm_source=clawdhub
Every response includes quota information:
X-RateLimit-Limit: 2000
X-RateLimit-Remaining: 1847
X-RateLimit-Used: 153
X-RateLimit-Reset: 1730419200✅ Recommended: Webhook notifications
bashcurl -X POST https://api.deepread.tech/v1/process \ -H "X-API-Key: $DEEPREAD_API_KEY" \ -F "file=@document.pdf" \ -F "webhook_url=https://your-app.com/webhook"
Only use polling if:
✅ Good: Descriptive field descriptions
json{ "vendor": { "type": "string", "description": "Vendor company name. Usually in header or top-left of invoice." } }
❌ Bad: No description
json{ "vendor": {"type": "string"} }
Only if you can't use webhooks, poll every 5-10 seconds:
pythonimport time import requests def wait_for_result(job_id, api_key): while True: response = requests.get( f"https://api.deepread.tech/v1/jobs/{job_id}", headers={"X-API-Key": api_key} ) result = response.json() if result["status"] == "completed": return result["result"] elif result["status"] == "failed": raise Exception(f"Job failed: {result.get('error')}") time.sleep(5)
Separate confident fields from uncertain ones:
pythondef process_extraction(data): confident = {} needs_review = [] for field, field_data in data.items(): if field_data["hil_flag"]: needs_review.append({ "field": field, "value": field_data["value"], "reason": field_data.get("reason") }) else: confident[field] = field_data["value"] # Auto-process confident fields save_to_database(confident) # Send uncertain fields to review queue if needs_review: send_to_review_queue(needs_review)
quota_exceededjson{"detail": "Monthly page quota exceeded"}
Solution: Upgrade to PRO or wait until next billing cycle.
invalid_schemajson{"detail": "Schema must be valid JSON Schema"}
Solution: Ensure schema is valid JSON and includes type and properties.
file_too_largejson{"detail": "File size exceeds 50MB limit"}
Solution: Compress PDF or split into smaller files.
failedjson{"status": "failed", "error": "PDF could not be processed"}
Common causes:
json{ "type": "object", "properties": { "invoice_number": { "type": "string", "description": "Unique invoice ID" }, "invoice_date": { "type": "string", "description": "Invoice date in MM/DD/YYYY format" }, "vendor": { "type": "string", "description": "Vendor company name" }, "total": { "type": "number", "description": "Total amount due including tax" }, "line_items": { "type": "array", "items": { "type": "object", "properties": { "description": {"type": "string"}, "quantity": {"type": "number"}, "price": {"type": "number"} } } } } }
json{ "type": "object", "properties": { "merchant": { "type": "string", "description": "Store or merchant name" }, "date": { "type": "string", "description": "Transaction date" }, "total": { "type": "number", "description": "Total amount paid" }, "items": { "type": "array", "items": { "type": "object", "properties": { "name": {"type": "string"}, "price": {"type": "number"} } } } } }
json{ "type": "object", "properties": { "parties": { "type": "array", "items": {"type": "string"}, "description": "Names of all parties in the contract" }, "effective_date": { "type": "string", "description": "Contract start date" }, "term_length": { "type": "string", "description": "Duration of contract" }, "termination_clause": { "type": "string", "description": "Conditions for termination" } } }
Ready to start? Get your free API key at https://www.deepread.tech/dashboard/?utm_source=clawdhub
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-09 | fail→pass | 8,363 | 3,713 | -56% | 1 | 1 | 0% | 1,835 | 6,308 | +244% | 0 | 0 | — |
case-01 | fail→pass | 13,225 | 4,989 | -62% | 1 | 1 | 0% | 3,165 | 6,603 | +109% | 0 | 0 | — |
case-02 | fail→pass | 11,823 | 8,412 | -29% | 1 | 1 | 0% | 3,059 | 7,665 | +151% | 0 | 0 | — |
case-03 | fail→pass | 6,013 | 4,564 | -24% | 1 | 1 | 0% | 1,615 | 6,496 | +302% | 0 | 0 | — |
case-04 | fail→pass | 11,168 | 5,100 | -54% | 1 | 1 | 0% | 1,919 | 6,225 | +224% | 0 | 0 | — |
case-05 | fail→pass | 7,377 | 2,740 | -63% | 1 | 1 | 0% | 1,220 | 5,836 | +378% | 0 | 0 | — |
case-06 | fail→pass | 12,276 | 8,930 | -27% | 1 | 1 | 0% | 1,234 | 6,045 | +390% | 0 | 0 | — |
case-07 | fail→pass | 10,923 | 3,538 | -68% | 1 | 1 | 0% | 2,449 | 6,155 | +151% | 0 | 0 | — |
case-08 | fail→pass | 12,212 | 3,328 | -73% | 1 | 1 | 0% | 2,226 | 6,042 | +171% | 0 | 0 | — |
case-10 | fail→pass | 7,897 | 1,325 | -83% | 1 | 1 | 0% | 1,503 | 5,514 | +267% | 0 | 0 | — |
case-11 | fail→pass | 6,701 | 1,935 | -71% | 1 | 1 | 0% | 1,405 | 5,700 | +306% | 0 | 0 | — |
case-12 | fail→pass | 9,619 | 1,967 | -80% | 1 | 1 | 0% | 1,905 | 5,607 | +194% | 0 | 0 | — |
case-13 | fail→pass | 13,507 | 2,089 | -85% | 1 | 1 | 0% | 2,592 | 5,778 | +123% | 0 | 0 | — |
case-14 | fail→pass | 7,667 | 1,775 | -77% | 1 | 1 | 0% | 1,355 | 5,552 | +310% | 0 | 0 | — |
case-15 | pass→pass | 5,342 | 1,306 | -76% | 1 | 1 | 0% | 1,076 | 5,558 | +417% | 0 | 0 | — |
case-16 | fail→fail | 8,849 | 1,692 | -81% | 1 | 1 | 0% | 1,481 | 5,571 | +276% | 0 | 0 | — |
case-17 | fail→pass | 8,857 | 2,353 | -73% | 1 | 1 | 0% | 1,669 | 5,795 | +247% | 0 | 0 | — |
case-18 | pass→pass | 10,039 | 4,392 | -56% | 1 | 1 | 0% | 2,084 | 6,169 | +196% | 0 | 0 | — |
case-19 | fail→pass | 8,306 | 3,181 | -62% | 1 | 1 | 0% | 1,706 | 5,922 | +247% | 0 | 0 | — |
case-20 | fail→pass | 11,002 | 2,552 | -77% | 1 | 1 | 0% | 1,985 | 5,780 | +191% | 0 | 0 | — |
case-21 | fail→pass | 12,771 | 1,802 | -86% | 1 | 1 | 0% | 2,352 | 5,699 | +142% | 0 | 0 | — |
case-22 | pass→pass | 3,166 | 1,371 | -57% | 1 | 1 | 0% | 568 | 5,507 | +870% | 0 | 0 | — |
case-23 | fail→pass | 7,889 | 2,575 | -67% | 1 | 1 | 0% | 1,549 | 5,794 | +274% | 0 | 0 | — |
case-24 | pass→pass | 8,317 | 3,444 | -59% | 1 | 1 | 0% | 2,079 | 6,105 | +194% | 0 | 0 | — |
case-25 | fail→fail | 11,673 | 5,153 | -56% | 1 | 1 | 0% | 2,597 | 6,454 | +149% | 0 | 0 | — |
case-26 | pass→pass | 12,280 | 6,248 | -49% | 1 | 1 | 0% | 2,350 | 6,743 | +187% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 26 cases were attempted. The headline lift of +73 percentage points is the difference between those two pass rates over the 26 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.