XlsConverter

Excel conversion API for XLS, XLSX, CSV, JSON and SQL

The XlsConverter Excel conversion API converts spreadsheets with one REST call: POST a file to /v1/conversions with a target format, get the result directly or as an async job, and receive a signed webhook when it finishes or fails.

Your product accepts spreadsheets from customers, partners and internal teams, and every one of them arrives in a slightly different shape. The XlsConverter API takes that work off your backlog. Send XLS, XLSX, XLSM, XLSB, ODS, CSV, TSV, Apple Numbers, JSON or XML, ask for CSV, JSON, XML, SQL, HTML, Markdown, PDF or another spreadsheet format, and get a predictable result with the same options our web app uses: sheet selection, delimiter, encoding, column cleanup and schema mapping.

curl -X POST \
  https://xlsconverter.com/v1/conversions \
  -H "Authorization: Bearer $XLSC_KEY" \
  -F "[email protected]" \
  -F "target=csv" \
  -F "options[sheet]=Prices" \
  -F "options[delimiter]=," \
  -F "options[encoding]=utf-8-bom" \
  -F "mode=async"

{
  "id": "6f1c0d8e-2b7a-4d35-9c1e-8a42f7b3d915",
  "status": "queued",
  "source_format": "xlsx",
  "target": "csv",
  "file_name": "supplier-prices.xlsx",
  "size_bytes": 2483912,
  "options": {
    "sheet": "Prices",
    "delimiter": ",",
    "encoding": "utf-8-bom"
  },
  "created_at": "2026-10-10T09:14:22Z",
  "expires_at": null,
  "links": {
    "self": "/v1/conversions/6f1c0d8e-2b7a-4d35-9c1e-8a42f7b3d915",
    "download": "/v1/conversions/6f1c0d8e-2b7a-4d35-9c1e-8a42f7b3d915/download"
  }
}
Data engineer reviewing a database schema on a large monitor

Endpoints of the conversion API

The API is small on purpose. Five endpoints cover single files, batches, status checks, downloads and format discovery, so an integration takes an afternoon instead of a sprint.

  • POST /v1/conversions creates a conversion from a multipart file plus target and options
  • GET /v1/conversions/{id} returns status, row count, errors and links
  • GET /v1/conversions/{id}/download streams the converted file
  • POST /v1/batches converts many files in one request and returns one job per file
  • GET /v1/formats lists every supported source and target with its options

Authentication with Bearer API keys

Every request carries an API key in the Authorization header. Keys are created and revoked in your account, can be scoped per environment, and are stored hashed on our side, so a key is shown in full only once when you create it.

  • Authorization: Bearer header on every request
  • Up to 10 keys on the API plan, for example one per service or environment
  • Keys stored hashed, never retrievable after creation
  • Instant revocation from the API page of your account

Synchronous results and async jobs

Small files are converted while the request is open and the response contains the result link right away. Large files and batches run as async jobs in a queue: you get a conversion id at once, then poll the status endpoint or wait for the webhook.

  • Sync mode for small files, result link in the same response
  • Async mode for large files and batches, with status queued, processing, finished or failed
  • Files up to 1 GB on the API plan
  • Streaming reads and writes for large CSV and XLSX files

Signed webhooks with retries

Instead of polling, register a webhook endpoint and we POST a JSON event when a conversion ends. Each delivery is signed with HMAC SHA-256 using your endpoint secret, so your server can reject anything that did not come from us.

  • Events conversion.finished and conversion.failed
  • Signature in the X-XlsConverter-Signature header, HMAC SHA-256 over timestamp and body
  • Automatic retries with exponential backoff when your endpoint does not answer with 2xx
  • Delivery log with status codes and attempts in your account

Options that match real spreadsheets

The same options as the web converter are available as request fields, so a file converted in the browser and through the API gives the same result.

  • Sheet picker, one sheet, all sheets as separate files or one merged file
  • CSV delimiter, quote character and encoding, including UTF-8 with BOM for Excel
  • JSON as an array of objects or as rows, SQL dialect for MySQL, PostgreSQL or SQLite with a table name
  • Column tools and saved schema templates applied by id
  • Password for protected workbooks, used in memory and never stored

Limits and plans for API access

The REST API is part of the API plan and the Enterprise plan. Usage is counted as conversions created in the billing period, and the dashboard shows the quota meter for every key.

  • API plan with 50,000 conversions per billing period and files up to 1 GB
  • Enterprise plan with 250,000 conversions, files up to 2 GB and a 99.9 percent uptime SLA
  • Deleting jobs does not restore quota, the counter resets with the next period
  • Upgrade from the account at any time, the difference is charged immediately

Webhook payload

Every event carries the header X-XlsConverter-Signature with a timestamp and an HMAC SHA-256 of the raw body, so your endpoint can reject anything we did not send.

POST /hooks/xlsconverter HTTP/1.1
Content-Type: application/json
X-XlsConverter-Signature: t=1791710071,v1=5d41402abc4b...

{
  "event": "conversion.finished",
  "delivery_id": "dlv_3Hn7pQ1vXa",
  "created_at": "2026-10-10T09:14:31Z",
  "data": {
    "id": "6f1c0d8e-2b7a-4d35-9c1e-8a42f7b3d915",
    "status": "finished",
    "source_format": "xlsx",
    "target": "csv",
    "rows": 18342,
    "output_size_bytes": 1906455,
    "finished_at": "2026-10-10T09:14:30Z",
    "expires_at": "2026-10-10T10:14:30Z",
    "download_url": "https://xlsconverter.com/v1/conversions/6f1c0d8e-2b7a-4d35-9c1e-8a42f7b3d915/download"
  }
}

API questions

Which formats does the Excel conversion API support

+

Sources are XLS, XLSX, XLSM, XLSB, ODS, CSV, TSV, Apple Numbers, JSON, XML and Google Sheets share links. Targets are CSV, TSV, JSON, XML, SQL for MySQL, PostgreSQL and SQLite, HTML, Markdown, TXT, XLSX, XLS, ODS and PDF. GET /v1/formats returns the full list with options.

How do I verify a webhook signature

+

Read the X-XlsConverter-Signature header, compute HMAC SHA-256 of the timestamp and the raw request body with your endpoint secret, and compare it with the v1 value using a constant time comparison. Reject the request if they differ or the timestamp is too old.

What happens when my webhook endpoint is down

+

We retry the delivery with exponential backoff over several hours. Every attempt and its status code appear in the delivery log in your account, and you can always fetch the result with GET /v1/conversions/{id} as long as the file is within its retention window.

How large can files be

+

The API plan accepts files up to 1 GB and the Enterprise plan up to 2 GB. Large files run as async jobs with streaming processing, so memory limits of your own servers are not involved.

How long are converted files available for download

+

By default results are deleted one hour after the conversion finishes. You can shorten this window, and Enterprise accounts can delete files immediately after download or set a custom retention window.

Does the API count toward my conversion limit

+

Yes. Every conversion created through the API counts toward the limit of your billing period, the same as conversions in the web app or pipelines. Deleting a job does not give the conversion back.