Real estate agents deal with format issues constantly, and they mostly don't have IT support. iPhone photos come out as HEIC — but the MLS requires JPG. Contracts are drafted in Word, but DocuSign and clients expect PDF. Market analysis decks in PowerPoint need to be PDF for email. Virtual staging vendors return files in formats the listing platform doesn't accept. These are daily friction points, and agents typically solve them with whatever free online converter shows up first in a Google search — which means inconsistent quality and uncertain privacy practices.

Format friction in real estate workflows

Real estate professionals encounter format conversion in every part of their work:

  • MLS photo uploads — iPhone photos shoot in HEIC by default. Most MLS platforms require JPG, with specific minimum resolution requirements. Agents need a fast, reliable way to convert HEIC to JPG before upload — ideally one that doesn't require installing software or uploading to a sketchy converter website.
  • Contract preparation — purchase agreements, disclosures, and addenda are often templated DOCX files. They need to be PDF before going to DocuSign or being emailed to clients. The PDF also ensures the form fields are laid out correctly and can't be accidentally edited.
  • Marketing materials — comparable market analysis (CMA) decks, listing presentations, and neighborhood reports built in PPTX need to be PDF for professional client delivery.
  • Virtual tour assets — 360-degree photos and virtual staging assets sometimes come back in TIFF or PNG from service providers and need to be JPG or WebP for web display.
  • Floor plans and HOA docs — floor plans as PDFs needing image previews, HOA documents in various formats needing PDF consolidation.

Common format pairs in real estate

The conversion routes agents and brokerages use most:

  • HEIC → JPG — the single most common conversion in real estate. iPhone listing photos need to be JPG for MLS upload, marketing materials, and client-facing documents.
  • DOCX → PDF — contracts, disclosures, listing agreements, and buyer representation agreements for e-signature or email delivery.
  • PPTX → PDF — CMA decks, listing presentations, and neighborhood reports for client delivery.
  • PNG → JPG — virtual staging output, floor plan renders, and screenshot-based documents.
  • TIFF → JPG — professional photography files from some cameras and virtual staging vendors.
  • PDF → JPG — generate page images from property disclosure PDFs for inline display in listing platforms.
  • XLSX → PDF — financial projections, rental income analysis, and investment property numbers for client handoff.
  • MP4 → GIF — short walkthrough clips converted to animated GIFs for email or social media previews.

The browser tool: HEIC → JPG in the browser, no upload

HEIC → JPG runs entirely in the browser at changethisfile.com — files are processed locally and never uploaded. For agents converting listing photos on a laptop in the car between appointments, this is the practical approach. Drop in the HEIC, get a JPG, no account required.

This is the right tool for:

  • Quick HEIC → JPG before MLS upload
  • PNG → JPG for virtual staging assets
  • Ad hoc PDF generation from a single DOCX before a client meeting

For brokerages building an automated pipeline (for example, a listing platform that accepts any image format and normalizes on upload), the API is the appropriate integration.

API integration for brokerage platforms

The endpoint is POST https://changethisfile.com/v1/convert. Source format is auto-detected from the filename — pass the file and the target format. No SDK needed. Get a free API key.

Normalize a listing photo

curl -X POST https://changethisfile.com/v1/convert \
  -H "Authorization: Bearer ctf_sk_your_key" \
  -F "file=@front_of_house.heic" \
  -F "target=jpg" \
  --output front_of_house.jpg

Convert a contract for DocuSign

curl -X POST https://changethisfile.com/v1/convert \
  -H "Authorization: Bearer ctf_sk_your_key" \
  -F "file=@purchase_agreement.docx" \
  -F "target=pdf" \
  --output purchase_agreement.pdf

Batch listing photos with idempotency

# Convert all HEIC photos for a listing
for HEIC in listing-photos/*.heic; do
  BASE=$(basename "$HEIC" .heic)
  curl -sX POST https://changethisfile.com/v1/convert \
    -H "Authorization: Bearer $CTF_API_KEY" \
    -H "Idempotency-Key: listing-42-${BASE}" \
    -F "file=@${HEIC}" \
    -F "target=jpg" \
    -o "listing-photos/${BASE}.jpg"
  echo "Converted: ${BASE}.heic → ${BASE}.jpg"
done

Code example: normalize listing photo uploads

A listing platform that accepts photo uploads in any format and normalizes to JPG before storing. No SDK — plain requests and fetch.

import requests
from pathlib import Path
from uuid import uuid4

CTF_API_KEY = "ctf_sk_your_key_here"

# Image formats that need conversion to JPG for MLS compatibility
NEEDS_CONVERSION = {".heic", ".heif", ".png", ".bmp", ".tiff", ".tif", ".webp"}

def normalize_listing_photo(upload_path: str, original_filename: str) -> tuple[bytes, str]:
    """Convert uploaded listing photo to JPG if needed."""
    ext = Path(original_filename).suffix.lower()

    if ext not in NEEDS_CONVERSION:
        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}",
                "Idempotency-Key": f"listing-photo-{uuid4()}",
            },
            files={"file": (original_filename, f)},  # source auto-detected from filename
            data={"target": "jpg"},
            timeout=30,
        )
    resp.raise_for_status()

    out_name = Path(original_filename).stem + ".jpg"
    return resp.content, out_name

JavaScript (fetch, no SDK):

const NEEDS_CONVERSION = new Set(['.heic', '.heif', '.png', '.bmp', '.tiff', '.tif', '.webp']);

async function normalizeListingPhoto(fileBuffer, originalFilename) {
  const ext = originalFilename.slice(originalFilename.lastIndexOf('.')).toLowerCase();
  if (!NEEDS_CONVERSION.has(ext)) {
    return { data: fileBuffer, filename: originalFilename };
  }

  const form = new FormData();
  form.append('file', new Blob([fileBuffer]), originalFilename); // source auto-detected
  form.append('target', 'jpg');

  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(`Conversion failed: ${resp.status}`);
  const outName = originalFilename.replace(/\.[^.]+$/, '.jpg');
  return { data: Buffer.from(await resp.arrayBuffer()), filename: outName };
}

curl for a single file:

curl -sX POST https://changethisfile.com/v1/convert \
  -H "Authorization: Bearer $CTF_API_KEY" \
  -F "file=@123_main_st_kitchen.heic" \
  -F "target=jpg" \
  -o 123_main_st_kitchen.jpg

Pricing for real estate scale

PlanConversions/monthPriceFits
Free1,000$0Individual agent for personal use
Hobby10,000$29/moActive agent with several listings per month
Startup50,000$99/moSmall team or boutique brokerage
Scale500,000$499/moRegional brokerage or listing platform
Growth5,000,000$1,999/moLarge franchise, MLS platform, or proptech integration

An active agent doing 3-4 listings per month with 25 photos each plus a handful of contract conversions is roughly 100-200 conversions per month — free tier is sufficient. A brokerage coordinating 20 agents would be in Hobby or Startup range.

FAQ

Does the HEIC → JPG conversion preserve GPS metadata (EXIF)?

The conversion preserves EXIF metadata including GPS coordinates by default. If you need to strip location data from listing photos before MLS upload (to protect client privacy), you'll need a separate EXIF stripping step after conversion — the API doesn't have a strip-metadata option currently.

What resolution does HEIC → JPG produce?

The JPG output preserves the original resolution of the HEIC file. iPhone 15 Pro photos are typically 12MP (4032×3024). The conversion doesn't upscale or downscale — the output dimensions match the input.

Can I batch convert an entire listing photo folder?

The API doesn't have a batch endpoint — send one file per request. For bulk conversions, parallelize with a simple script (see the bash loop example above). The Hobby and Startup plans have higher concurrency limits for this use case.

Does DOCX → PDF handle real estate form templates with fill-in fields?

Standard DOCX → PDF conversion produces a flat, non-fillable PDF. If your DOCX templates use Word content controls (form fields), those will appear as static text in the PDF. For fillable PDFs intended for e-signature platforms, the typical workflow is to convert to PDF and then add form fields in your e-signature platform (DocuSign, Dotloop, etc.).

Can I use the browser tool without creating an account?

Yes. The browser converter at changethisfile.com works without signup for all conversions. No account, no card, no limit on manual conversions. The API requires an API key (free tier available, no card required).

Conversion guides relevant to real estate workflows: