Install
openclaw skills install file-to-markdownConvert documents, spreadsheets, images, and structured files into clean, structured Markdown optimized for AI processing without authentication.
openclaw skills install file-to-markdownConvert files into clean, structured, AI-ready Markdown using the markdown.new API powered by Cloudflare Workers AI toMarkdown().
Supports 20+ formats including documents, spreadsheets, images, and structured data.
No authentication required (500 requests/day per IP).
Use this skill whenever you need to:
Common AI workflows:
.pdf.docx.odt.xlsx.xls.xlsm.xlsb.et.ods.numbers.jpg.jpeg.png.webp.svg.txt.md.csv.json.xml.html.htmNotes:
https://markdown.new
Returns plain Markdown text.
GET /:file-url
Example:
curl -s "https://markdown.new/https://example.com/report.pdf"
Returns metadata + Markdown.
GET /:file-url?format=json
Example:
curl -s "https://markdown.new/https://example.com/report.pdf?format=json"
Use when you want structured JSON response.
POST /
Content-Type: application/json
Body:
{
"url": "https://example.com/report.pdf"
}
Example:
curl -s https://markdown.new/ \
-H "Content-Type: application/json" \
-d '{"url": "https://example.com/report.pdf"}'
Use when file is not publicly accessible.
POST /convert
multipart/form-data
Example:
curl -s https://markdown.new/convert \
-F "file=@document.pdf"
{
"success": true,
"url": "https://example.com/report.pdf",
"title": "Quarterly Report",
"content": "# Quarterly Report\n\n...",
"method": "Workers AI (file)",
"duration_ms": 1200,
"tokens": 850
}
{
"success": true,
"data": {
"title": "Q4 Report",
"content": "# Q4 Report\n\n...",
"filename": "report.xlsx",
"file_type": ".xlsx",
"tokens": 1250,
"processing_time_ms": 320
}
}
Use:
GET /:url
When:
Use POST when:
Use /convert only if:
Otherwise always prefer URL conversion.
Agents should:
"success": trueAgents should:
const res = await fetch("https://markdown.new/", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
url: "https://example.com/file.pdf"
})
});
const data = await res.json();
console.log(data.content);
import requests
res = requests.post(
"https://markdown.new/",
json={"url": "https://example.com/file.pdf"}
)
data = res.json()
print(data["content"])
If user provides:
| Input Type | Action |
|---|---|
| Public file URL | Use GET or POST |
| Local file | Use POST /convert |
| Image | Convert then summarize |
| Spreadsheet | Convert then analyze |
| Webpage | Convert URL HTML |
The Markdown should be:
This skill provides a universal file-to-Markdown conversion layer for AI systems with:
Ideal for document ingestion, RAG pipelines, and automation agents.