Upload a .pptx β get structured JSON back
PowerPoint's XML format is complex and undocumented in practice. PPTX.dev gives you clean JSON from any .pptx β one API call, no dependencies.
import { PptxDev } from "pptx-dev";
const client = new PptxDev({ apiKey: process.env.PPTX_API_KEY });
// Parse a .pptx file β pass a URL or Buffer
const result = await client.parse({
file: "https://example.com/presentation.pptx"
});
// result.slides β structured slide data
console.log(result.slides[0]);
// {
// index: 0,
// title: "Q4 Business Review",
// text: ["Revenue grew 28% YoY", "3 new enterprise accounts"],
// shapes: [{ type: "rect", x: 100, y: 200, width: 400, height: 50 }],
// charts: [{ type: "bar", data: { labels: [...], values: [...] } }],
// images: [{ id: "img1", mimeType: "image/png", base64: "..." }],
// thumbnail: "https://api.pptx.dev/thumbnails/slide-0.png"
// }You shouldn't have to become a .pptx format expert
PowerPoint's OOXML format is thousands of pages of spec. Writing fragile XML parsers that break on real-world files wastes weeks of engineering time β and they still miss edge cases.
βDevelopers should be able to work with any file format through a clean API.β
How it works
Three steps. No XML. No dependencies.
Upload a .pptx
Send a URL or file buffer to the parse endpoint.
Get structured JSON back
Text, shapes, charts, images, and metadata β all extracted and organized.
Render, index, or process it
Feed it to LLMs, build a slide viewer, power search, or convert formats.
Everything extracted. Nothing lost.
Deep OOXML parsing β every element in your file, structured for use.
Full text extraction
Every text box, title, body, and note extracted with formatting: font size, bold, color, alignment, and paragraph structure.
Native chart data
Bar, line, pie, scatter, waterfall β all chart types parsed to raw data arrays. No screenshot, actual numbers.
Embedded images
Every image extracted as base64 or a CDN URL. JPEG, PNG, SVG, EMF β all formats supported.
Shape geometry
Rectangles, circles, connectors, and custom shapes with exact position, size, fill, border, and z-order.
Slide metadata
Slide notes, hidden slides, slide master info, layout names, and presentation-level metadata all included.
Pixel-accurate rendering
Render slides to PNG (up to 600 DPI), SVG with embedded fonts, or PDF. Server-side, no browser required. Powers slide preview UIs and PDF exports.
Hyperlinks & actions
All hyperlinks, slide-to-slide links, and action buttons resolved with their targets.
Language agnostic
Pure REST API. Works with Python, Node.js, Go, Ruby, PHP β any HTTP client. Official SDKs for Node + Python.
API Reference
Simple REST API. Parse your first file in under 5 minutes.
Request Headers
Authorization: Bearer YOUR_API_KEY Content-Type: application/json
Request Body
{
"file": "https://...", // URL to .pptx file, OR
"file": "<base64>", // Base64-encoded .pptx bytes
"options": {
"thumbnails": true, // Render slide thumbnails (default: false)
"images": "base64", // "base64" | "url" | "none" (default: "url")
"includeNotes": true, // Include speaker notes (default: true)
"includeHidden": false // Include hidden slides (default: false)
}
}Response
{
"id": "parse_abc123",
"slideCount": 12,
"title": "Q4 Business Review",
"author": "Jane Smith",
"createdAt": "2025-11-01T09:00:00Z",
"slides": [
{
"index": 0,
"title": "Q4 Business Review",
"layout": "Title Slide",
"hidden": false,
"notes": "Welcome everyone...",
"thumbnail": "https://api.pptx.dev/thumbnails/abc123/slide-0.png",
"text": ["Q4 Business Review", "FY2025 Results"],
"shapes": [
{ "type": "rect", "name": "Title 1", "x": 457200, "y": 274638,
"width": 8229600, "height": 1143000, "text": "Q4 Business Review",
"fill": "#1a1a2e", "fontColor": "#ffffff", "fontSize": 40 }
],
"charts": [
{ "type": "bar", "title": "Revenue by Quarter",
"data": { "labels": ["Q1","Q2","Q3","Q4"],
"series": [{ "name": "Revenue", "values": [1.2, 1.8, 2.1, 2.9] }] } }
],
"images": [
{ "id": "img1", "mimeType": "image/png",
"url": "https://api.pptx.dev/images/abc123/img1.png" }
]
}
]
}Request Body
{
"file": "https://...", // URL to .pptx file, OR base64 bytes
"options": {
"format": "png", // "png" | "svg" | "pdf"
"dpi": 150, // 72β600 (default: 150)
"slides": "all", // "all" | "1" | "1-5" | [0,2,4]
"background": "original", // "original" | "white" | "transparent"
"svgFontMode": "embed", // "embed" | "external" | "system"
"password": "" // for password-protected files
}
}Response
{
"id": "render_abc123",
"format": "png",
"slideCount": 12,
"slides": [
{
"index": 0,
"url": "https://api.pptx.dev/renders/abc123/slide-0.png",
"width": 1920,
"height": 1080,
"dpi": 150
}
]
}import { PptxDev } from "pptx-dev";
import fs from "fs";
const client = new PptxDev({ apiKey: process.env.PPTX_API_KEY });
// Parse from URL
const result = await client.parse({
file: "https://example.com/deck.pptx",
options: { thumbnails: true }
});
// Or parse from local file
const buffer = fs.readFileSync("./deck.pptx");
const result2 = await client.parse({ file: buffer });
// Extract all text for search indexing
const allText = result.slides
.flatMap(s => s.text)
.join(" ");import pptxdev
client = pptxdev.Client(api_key="...")
# Parse from URL
result = client.parse(
file="https://example.com/deck.pptx",
options={"thumbnails": True}
)
# Loop over slides
for slide in result.slides:
print(f"Slide {slide.index}: {slide.title}")
for chart in slide.charts:
print(f" Chart: {chart['type']}")
print(f" Data: {chart['data']['series']}")curl -X POST https://api.pptx.dev/v1/parse \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"file": "https://example.com/presentation.pptx",
"options": {
"thumbnails": true,
"images": "url",
"includeNotes": true
}
}'What developers build with pptx.dev
From search indexing to slide viewers β the parse API handles the hard part.
Search indexing
Extract all text from uploaded decks and push to Elasticsearch, Algolia, or Postgres full-text for instant slide search.
AI processing
Feed slide content to LLMs for summarization, Q&A, translation, or deck-to-document conversion. Structured JSON, not raw binary.
Slide preview gallery
Use thumbnail rendering to build a slide picker UI. Show previews without a frontend PowerPoint library.
Compliance auditing
Scan decks for sensitive data, brand violations, or outdated content. Parse β check β flag, fully automated.
Format conversion
Extract content and re-render it in your own format β markdown, HTML, PDF, or a custom slide schema.
Data extraction
Pull chart data out of uploaded presentations for analytics pipelines. Get actual values, not screenshots.
MCP integration
Use pptx.dev as an MCP server inside Claude, Cursor, or any agent. Let AI directly parse, render, and extract data from decks without writing glue code.
Pricing
Pay per parse. Start free.
Free
Forever free
- β 100 parses / month
- β Up to 50 slides per file
- β Text + shapes + images
- β JSON response
- β Community support
Pro
or $179/year (save 21%)
- β 5,000 parses / month
- β Unlimited slides per file
- β Slide thumbnails
- β Chart data extraction
- β Webhook support
- β Priority support
Enterprise
Volume pricing
- β Unlimited parses
- β All Pro features
- β SLA guarantee
- β On-premise option
- β Dedicated support
- β Custom integrations
Two paths for your PowerPoint integration
Build it yourself
- βWeeks writing fragile XML parsers
- βBreaks on real-world files with edge cases
- βMaintaining a library that nobody wants to own
Use pptx.dev
- βShip your PowerPoint integration in a day
- βHandles every file thrown at it
- βOne API call, no local dependencies
Ship your PowerPoint integration today
Free API key. 100 parses/month. Works with any HTTP client.
Try the APINo credit card required Β· 100 free parses/month