Finance teams live in spreadsheets and PDFs. The friction isn't usually in the analysis itself — it's in getting data into the right format before analysis, and getting documents into the right format after. XLSX exports from ERP systems need to become CSVs before hitting a data pipeline. Board decks drafted in PowerPoint need to be PDF before the quarterly board meeting. Bank statements need image previews for a review platform. Audit packages need to be flattened PDFs that can't be edited. These are format conversion problems, and they repeat every month.
Format friction in financial operations
Finance workflows generate predictable format conversion needs at every cycle:
- Data pipeline ingestion — XLSX exports from NetSuite, SAP, QuickBooks, or banking portals need to become CSV before they hit a data warehouse, dbt pipeline, or Python analysis script. XLSX preserves formulas and formatting that downstream systems can't consume.
- Board and investor reporting — financial models in XLSX and narrative decks in PPTX need to be flat PDFs for distribution. The PDF ensures recipients see consistent formatting and can't accidentally edit the numbers.
- Audit documentation — auditors request documents in specific formats. DOCX financial policies, XLSX reconciliations, and PPTX presentations all need PDF versions for the audit package.
- Bank statement review — statement PDFs need image previews for web-based review platforms, or need to be in a specific format for automated data extraction.
- Vendor invoice processing — invoices arrive in every format. JPG photos of invoices from field teams, DOCX Word invoices from small vendors, PDF standard invoices. All need to go somewhere consistent.
- Regulatory filings — financial statements and supporting schedules need to be PDF or specific archival formats for submission to regulators.
Common format pairs in finance workflows
The conversion routes finance teams rely on:
- XLSX → CSV — the most common data conversion in finance. Export from any system to CSV before loading into a data pipeline, Python/R script, or database.
- XLSX → PDF — financial models, reconciliation schedules, and summary tables flattened to PDF for distribution or audit packages.
- XLS → CSV / XLSX — migrate legacy Excel format to modern formats for pipeline compatibility.
- PPTX → PDF — board decks, investor presentations, and management reports converted to non-editable PDF.
- DOCX → PDF — financial policies, procedures, memos, and contracts for distribution and filing.
- PDF → JPG / PNG — generate page previews of statements or filings for document review interfaces.
- CSV → XLSX — convert analysis output or data exports into Excel for stakeholders who need spreadsheet format.
- JSON → CSV — flatten API response data or structured export files for spreadsheet analysis.
- HEIC → JPG — normalize expense photos and receipt images from mobile uploads.
The browser tool: spreadsheet conversions stay in the browser
XLSX → CSV and CSV → XLSX conversions run entirely in the browser at changethisfile.com — the spreadsheet is processed locally by SheetJS and never uploaded. For finance teams converting sensitive financial data, this is the right approach for ad hoc conversions: no upload, no server, no question about where the data went.
Document conversions (PPTX → PDF, DOCX → PDF) require server-side processing. Files are uploaded, converted by LibreOffice headless, and auto-deleted after.
The browser tool works well for:
- Quick XLSX → CSV conversions during analysis setup
- One-off PDF generation from a model before a meeting
- Testing conversion output before integrating the API
API integration for financial data pipelines
The endpoint is POST https://changethisfile.com/v1/convert. Source format is auto-detected from the filename. No SDK to install — just curl, requests, or fetch. Get a free API key.
Convert XLSX export to CSV
curl -X POST https://changethisfile.com/v1/convert \
-H "Authorization: Bearer ctf_sk_your_key" \
-F "file=@q1_revenue_export.xlsx" \
-F "target=csv" \
--output q1_revenue_export.csv
Flatten a board deck to PDF
curl -X POST https://changethisfile.com/v1/convert \
-H "Authorization: Bearer ctf_sk_your_key" \
-F "file=@board_presentation_q1_2026.pptx" \
-F "target=pdf" \
--output board_presentation_q1_2026.pdf
Idempotency for monthly pipeline runs
Monthly ERP export → CSV pipelines are good candidates for idempotency keys. If the pipeline re-runs, the same file produces the same result without double-billing.
curl -X POST https://changethisfile.com/v1/convert \
-H "Authorization: Bearer ctf_sk_your_key" \
-H "Idempotency-Key: erp-export-2026-04" \
-F "file=@april_2026_gl_export.xlsx" \
-F "target=csv" \
--output april_2026_gl.csv
Code example: automated monthly XLSX → CSV pipeline
A common finance ops pattern: ERP exports a folder of XLSX files at month-end; a pipeline converts them to CSV for data warehouse ingestion. Plain requests — no SDK.
import requests
from pathlib import Path
from datetime import date
CTF_API_KEY = "ctf_sk_your_key_here"
EXPORT_DIR = Path("/data/erp-exports/")
CSV_OUTPUT_DIR = Path("/data/warehouse-ready/")
CSV_OUTPUT_DIR.mkdir(exist_ok=True)
def xlsx_to_csv(xlsx_path: Path, period: str) -> Path:
"""Convert a monthly ERP XLSX export to CSV for warehouse ingestion."""
with open(xlsx_path, "rb") as f:
resp = requests.post(
"https://changethisfile.com/v1/convert",
headers={
"Authorization": f"Bearer {CTF_API_KEY}",
"Idempotency-Key": f"erp-{period}-{xlsx_path.stem}",
},
files={"file": (xlsx_path.name, f)}, # source auto-detected
data={"target": "csv"},
timeout=30,
)
resp.raise_for_status()
out_path = CSV_OUTPUT_DIR / f"{xlsx_path.stem}.csv"
out_path.write_text(resp.text, encoding="utf-8")
print(f" {xlsx_path.name} → {out_path.name} ({len(resp.content):,} bytes)")
return out_path
# Run at month-end
period = date.today().strftime("%Y-%m")
print(f"Converting ERP exports for {period}...")
for xlsx in sorted(EXPORT_DIR.glob("*.xlsx")):
xlsx_to_csv(xlsx, period)
print("Done.")
JavaScript version:
const fs = require('fs');
const path = require('path');
async function xlsxToCsv(xlsxPath, period) {
const filename = path.basename(xlsxPath);
const form = new FormData();
form.append('file', new Blob([fs.readFileSync(xlsxPath)]), filename); // source auto-detected
form.append('target', 'csv');
const resp = await fetch('https://changethisfile.com/v1/convert', {
method: 'POST',
headers: {
'Authorization': `Bearer ${process.env.CTF_API_KEY}`,
'Idempotency-Key': `erp-${period}-${path.parse(filename).name}`,
},
body: form,
});
if (!resp.ok) throw new Error(`${resp.status}: ${await resp.text()}`);
return await resp.text();
}
curl one-liner for ad hoc use:
curl -sX POST https://changethisfile.com/v1/convert \
-H "Authorization: Bearer $CTF_API_KEY" \
-F "file=@reconciliation.xlsx" \
-F "target=csv" \
-o reconciliation.csv
Pricing for finance team scale
| Plan | Conversions/month | Price | Fits |
|---|---|---|---|
| Free | 1,000 | $0 | Evaluation, occasional manual conversions |
| Hobby | 10,000 | $29/mo | Small finance team, monthly reporting cycles |
| Startup | 50,000 | $99/mo | Finance ops team, mid-size company with regular pipeline runs |
| Scale | 500,000 | $499/mo | Finance platform, multi-entity consolidation, or high-volume data ingestion |
| Growth | 5,000,000 | $1,999/mo | Enterprise finance ops, fintech platform, or multi-company consolidation service |
A finance team running monthly ERP exports (say 50 XLSX files → CSV) plus regular document conversions (20 PDFs for board packets) is around 70-100 conversions per month — well within the free tier. If you're automating weekly or daily pipeline runs, Hobby or Startup is appropriate.
FAQ
Does XLSX → CSV handle multi-sheet workbooks?
The browser-based conversion (via SheetJS) and the API both extract the first sheet by default. If you need specific sheets or need to split a workbook into per-sheet CSVs, you'll need to pre-process the XLSX file or split it before converting.
Are formulas in XLSX preserved in the PDF output?
XLSX → PDF conversion renders the spreadsheet as it appears in the spreadsheet application, with formula results showing — not formula text. The output is a visual snapshot, appropriate for distribution and audit packages.
Can I convert JSON API responses to CSV for analysis?
Yes — JSON → CSV is supported client-side in the browser. For programmatic use, the API supports it as well. The conversion flattens one level of nesting — deeply nested JSON may need pre-processing before conversion to get a meaningful tabular result.
Is there any concern about financial data in uploaded files?
Server-side conversions (DOCX → PDF, PPTX → PDF) involve a temporary upload that's auto-deleted after conversion. XLSX → CSV can run client-side in the browser, so financial spreadsheet data never leaves the device. If your data handling requirements prohibit external upload even temporarily, use the browser tool for XLSX and CSV conversions.
How does the API handle very large XLSX files from ERP exports?
For large files, use async mode to avoid HTTP timeout. Submit the job with async=true and a webhook URL, and your pipeline receives a callback when the conversion is complete.
Related guides
Conversion guides for finance and data workflows: