HR teams manage a steady stream of document format problems. Candidates submit resumes in whatever format their laptop produces — DOCX, PDF, occasionally ODT. ATS systems have specific requirements. Onboarding documents templated in Word need to be PDF before going to DocuSign. New hire ID photos come in from phones as HEIC. Headcount and compensation spreadsheets need to be CSV before going into an HRIS integration. Each conversion is small, but it adds up across a team handling dozens of candidates and multiple new hires per month.
Format friction in HR workflows
HR and recruiting teams encounter format conversion at every stage of the employment lifecycle:
- Candidate document intake — resumes in DOCX, DOC, and ODT need to be normalized to PDF for consistent ATS display and candidate file storage. Recruiters shouldn't need Word to view or archive a DOCX resume.
- Onboarding document preparation — offer letters, NDAs, policy acknowledgments, and I-9 supporting documents are templated in DOCX and need to be PDF before going to an e-signature platform.
- ID document normalization — candidates upload copies of government IDs for I-9 verification, background checks, or international employment documentation. These arrive as HEIC (iPhone photos), JPG, or scanned TIFF and need consistent format for the HR platform.
- Headcount and compensation data — XLSX reports from payroll systems or spreadsheets need to be CSV before importing into HRIS, analytics dashboards, or data warehouse pipelines.
- Training and compliance materials — PPTX training decks and DOCX policy documents need PDF versions for LMS upload, distribution, or archival.
Common format pairs in HR workflows
The conversion routes HR teams use most:
- DOCX → PDF — offer letters, onboarding packets, NDAs, policy documents, and performance review forms for e-signature or distribution
- DOC → PDF — legacy document templates and older candidate resumes
- ODT → PDF — resumes and documents from Linux/LibreOffice users
- HEIC → JPG — candidate-submitted ID photos from iPhones for I-9 verification, background check platforms, and employee files
- PPTX → PDF — training presentations, onboarding slide decks, and company overview materials for LMS or email delivery
- XLSX → CSV — headcount reports, compensation spreadsheets, and benefits enrollment data for HRIS import or analysis
- PDF → JPG — generate preview images of HR documents for web-based workflow platforms
- TIFF → JPG — scanned identity documents and paper form submissions
The browser tool: ID photos stay in the browser
Image conversions at changethisfile.com run entirely in the browser — HEIC → JPG, TIFF → JPG, and other image-to-image routes don't involve any upload. For HR teams converting candidate ID photos, this is the privacy-appropriate approach: the image is processed locally and never transmitted to a server.
Document conversions (DOCX → PDF, PPTX → PDF) require server-side processing via LibreOffice. Files are auto-deleted after conversion.
The browser tool works well for:
- Recruiters converting a candidate's HEIC ID photo during intake
- HR coordinators generating a quick PDF from an onboarding document template
- One-off XLSX → CSV exports before an HRIS import
API integration for HR platforms and ATS systems
The endpoint is POST https://changethisfile.com/v1/convert. Source format auto-detected from filename — pass the file and target format. No SDK needed. Get a free API key.
Convert a resume to PDF for ATS storage
curl -X POST https://changethisfile.com/v1/convert \
-H "Authorization: Bearer ctf_sk_your_key" \
-F "file=@candidate_resume.docx" \
-F "target=pdf" \
--output candidate_resume.pdf
Normalize a candidate ID photo
curl -X POST https://changethisfile.com/v1/convert \
-H "Authorization: Bearer ctf_sk_your_key" \
-F "file=@drivers_license.heic" \
-F "target=jpg" \
--output drivers_license.jpg
Convert onboarding packet to PDF
curl -X POST https://changethisfile.com/v1/convert \
-H "Authorization: Bearer ctf_sk_your_key" \
-H "Idempotency-Key: onboarding-candidate-${CANDIDATE_ID}" \
-F "file=@onboarding_packet_template.docx" \
-F "target=pdf" \
--output onboarding_packet.pdf
Code example: normalize candidate document uploads
ATS intake webhook: when a candidate submits an application, normalize all uploaded files — resumes to PDF, ID photos to JPG — before storing in the candidate record. No SDK required.
import requests
from pathlib import Path
CTF_API_KEY = "ctf_sk_your_key_here"
# Map file types to their normalized target format
NORMALIZATION_MAP = {
# Documents → PDF
".docx": "pdf", ".doc": "pdf", ".odt": "pdf", ".rtf": "pdf",
# Images → JPG (for ID photos and scanned docs)
".heic": "jpg", ".heif": "jpg", ".tiff": "jpg", ".tif": "jpg",
".png": "jpg", ".bmp": "jpg",
}
def normalize_candidate_doc(upload_path: str, original_filename: str) -> tuple[bytes, str]:
"""Normalize a candidate document to a standard format."""
p = Path(original_filename)
ext = p.suffix.lower()
target = NORMALIZATION_MAP.get(ext)
if not target:
# Already in a good format (PDF, JPG, etc.)
with open(upload_path, "rb") as f:
return f.read(), original_filename
with open(upload_path, "rb") as f:
resp = requests.post(
"https://changethisfile.com/v1/convert",
headers={"Authorization": f"Bearer {CTF_API_KEY}"},
files={"file": (original_filename, f)}, # source auto-detected
data={"target": target},
timeout=60,
)
resp.raise_for_status()
return resp.content, p.stem + "." + target
JavaScript (fetch, no SDK):
const NORMALIZATION_MAP = {
'.docx': 'pdf', '.doc': 'pdf', '.odt': 'pdf', '.rtf': 'pdf',
'.heic': 'jpg', '.heif': 'jpg', '.tiff': 'jpg', '.tif': 'jpg',
'.png': 'jpg', '.bmp': 'jpg',
};
async function normalizeCandidateDoc(fileBuffer, filename) {
const ext = filename.slice(filename.lastIndexOf('.')).toLowerCase();
const target = NORMALIZATION_MAP[ext];
if (!target) return { data: fileBuffer, filename };
const form = new FormData();
form.append('file', new Blob([fileBuffer]), filename); // source auto-detected
form.append('target', target);
const resp = await fetch('https://changethisfile.com/v1/convert', {
method: 'POST',
headers: { 'Authorization': `Bearer ${process.env.CTF_API_KEY}` },
body: form,
});
if (!resp.ok) throw new Error(`${resp.status}: ${await resp.text()}`);
const outFilename = filename.replace(/\.[^.]+$/, '.' + target);
return { data: Buffer.from(await resp.arrayBuffer()), filename: outFilename };
}
curl for a single document:
curl -sX POST https://changethisfile.com/v1/convert \
-H "Authorization: Bearer $CTF_API_KEY" \
-F "file=@resume.docx" \
-F "target=pdf" \
-o resume.pdf
Pricing for HR team scale
| Plan | Conversions/month | Price | Fits |
|---|---|---|---|
| Free | 1,000 | $0 | Small HR team or recruiter handling a few hires per month |
| Hobby | 10,000 | $29/mo | Growing company with 20-50 active candidates and regular hiring |
| Startup | 50,000 | $99/mo | High-volume recruiting team or HR platform serving multiple companies |
| Scale | 500,000 | $499/mo | Enterprise HR platform, large RPO, or high-volume ATS integration |
| Growth | 5,000,000 | $1,999/mo | Enterprise HRIS platform or large-scale talent acquisition platform |
An HR team processing 100 applications per month (1 document + 1 photo per candidate = 200 conversions) plus 10 new hires (3 onboarding documents each = 30 conversions) comes to roughly 230 conversions — within the free tier for low-volume, Hobby for consistent hiring velocity.
FAQ
Can I convert DOCX resumes to plain text for ATS parsing?
DOCX → TXT conversion is supported and strips formatting to plain text. Note that resume parsing quality from plain text varies by ATS — PDF is often the more reliable format for ATS ingestion, as most modern ATS systems have better PDF parsers than plain text parsers.
Does image conversion preserve photo quality for ID verification?
HEIC → JPG conversion preserves the original resolution. For ID verification purposes, the output quality is appropriate — you're not losing meaningful detail in the conversion. The original file has the highest fidelity; the JPG is for compatibility, not for forensic analysis.
Can the API be integrated with Workday, Greenhouse, or Lever?
The API is HTTP/REST — it can be called from any system that can make a POST request. Integration with specific ATS platforms requires implementing the connection in your code or automation layer (Zapier, n8n, or custom code). The API doesn't have native ATS connectors.
How do I handle ODT resumes from European candidates?
ODT → PDF is supported via LibreOffice. ODT is the OpenDocument Text format used by LibreOffice users — common in Europe where LibreOffice is more prevalent. The PDF output from ODT converts cleanly for most standard resume formats.
Can I convert XLSX compensation data to CSV without uploading to a server?
Yes — use the browser tool at changethisfile.com. XLSX → CSV runs client-side via SheetJS, so the spreadsheet is processed in the browser and never uploaded. Appropriate for sensitive compensation data.
Related guides
Conversion guides for HR document workflows: