Skip to main content
POST

Overview

The Parse Excel endpoint processes Excel workbooks (.xls, .xlsx) using a dedicated spreadsheet pipeline. It shares auth, billing, quota, and rate-limit infrastructure with Parse Document, and is polled via the same GET /parse/{job_id}.
  1. POST to /parse/excel with your file (or url) and any spreadsheet-specific configuration.
  2. The job is automatically enqueued for processing.
  3. Poll GET /parse/{job_id} to track progress and retrieve results.
PDF parsing options (ocr_strategy, layout_analysis, segment_processing, etc.) do not apply here — they are silently ignored. Non-Excel uploads are rejected with 400; submit those to POST /parse instead.

Request

Provide either file (multipart binary upload) or url (presigned/public URL). The file field is multipart-only; JSON callers must use url.
file
Excel workbook to process. Supported formats: .xls, .xlsx. Required if url is not provided.
string
Presigned or public URL of the workbook to fetch and process. Required if file is not provided.

Hidden content

boolean
Drop hidden content from the output. Defaults to false. The five sub-toggles below are only honored when this is true.
boolean
When excluding hidden content, also drop entire hidden sheets. Defaults to true.
boolean
When excluding hidden content, also drop hidden rows from visible sheets. Defaults to true.
boolean
When excluding hidden content, also drop hidden columns from visible sheets. Defaults to true.
boolean
When excluding hidden content, also drop styling. Defaults to true.
boolean
When excluding hidden content, also drop embedded and pasted images. Defaults to false.

Table extraction

boolean
Split large tables into smaller segments to keep individual response items manageable. Defaults to true.
integer
Maximum number of rows in each split segment. Only effective when split_large_tables is true. Defaults to 50.
string
How aggressively to detect distinct logical tables on the same sheet.
  • "accurate" (default): Best fidelity at the cost of latency.
  • "fast": Quicker clustering, may merge nearby tables.
  • "off": Treat each sheet as a single table.

Lifecycle

integer
Reserved field. Persisted on the task configuration but currently has no effect on retention — Excel tasks are not auto-deleted. To get a presigned-upload TTL for PDFs and other documents, use POST /v2/parse/upload instead.

Response

The endpoint returns HTTP 200 with the same envelope as POST /parse:
string
required
Job identifier. Pass this to GET /parse/{job_id} to poll for results.
string
required
Initial job status. Always "Starting" on creation.
string
required
Name of the uploaded workbook. For URL submissions this is the last path segment of the URL, or "unknown" when no usable segment exists.
string
required
ISO 8601 timestamp when the job was created.
string
required
Human-readable status message with a polling hint.
integer
required
Number of credits deducted from your quota for this job.
integer
required
Remaining quota after this job was deducted.
boolean
required
Reflects the table-merging flag stored on the job. Always false for Excel jobs — table merging is a PDF-only feature.

Retrieving Results

Use GET /parse/{job_id} (the shared polling endpoint) to check status and retrieve results. The result envelope is the same as for PDF jobs — chunks containing segments — and Excel segments include a cell_references field linking each segment back to its source sheet, address, and range.
cURL
Python
See Get Parse Job Status for the full response schema and query parameters.

Error Handling

Authorizations

api-key
string
header
required

API key for authentication. Send it in the api-key request header.

Body

multipart/form-data

Provide either file (binary .xls/.xlsx upload, multipart only) or url (presigned/public URL, both content types), not both. The file field is multipart-only. Excel parsing uses its own config — PDF parsing options do not apply.

Request body for POST /parse/excel (multipart/form-data).

Excel parsing has its own configuration — none of the PDF parsing options (OCR, layout analysis, segment processing) apply. Provide either file (binary .xls/.xlsx upload) or url, not both. Every config field is optional and defaults to the Excel pipeline's own default.

file
file
required

Excel workbook to process. Required if url is not provided. Supported: XLS, XLSX.

exclude_hidden
boolean | null
default:false

Drop hidden sheets/rows/cols/styling from the output. Defaults to false.

exclude_hidden_cols
boolean | null
default:true

When excluding hidden content, also drop hidden columns. Defaults to true.

exclude_hidden_rows
boolean | null
default:true

When excluding hidden content, also drop hidden rows. Defaults to true.

exclude_hidden_sheets
boolean | null
default:true

When excluding hidden content, also drop hidden sheets. Defaults to true.

exclude_images
boolean | null
default:false

When excluding hidden content, also drop embedded/pasted images. Defaults to false.

exclude_styling
boolean | null
default:true

When excluding hidden content, also drop styling. Defaults to true.

expires_in
integer<int32> | null

Reserved field. Persisted in the task configuration but currently has no effect on retention — Excel tasks use the same Task::new_fast creation path as POST /parse, which does not set the task's expires_at column. See the same note on ParseCreateRequest.expires_in.

max_rows_per_segment
integer<int32> | null
default:50

Max rows per split segment when split_large_tables. Defaults to 50.

split_large_tables
boolean | null
default:true

Split large tables into smaller segments. Defaults to true.

table_clustering
string | null
default:accurate

Table clustering effort: accurate (default), fast, or off.

url
string | null

Presigned or public URL of the workbook to fetch. Required if file is not provided.

Response

Job created — poll with GET /parse/{job_id} to retrieve results.

Response body for a successful POST /parse call.

created_at
string
required

ISO 8601 timestamp when the job was created.

credit_used
integer<int32>
required

Number of pages deducted from your quota for this job.

file_name
string
required

Name of the uploaded file or "unknown" when a URL was provided.

job_id
string
required

Job identifier — pass this to GET /parse/{job_id} to poll for results.

merge_tables
boolean
required

Whether table merging is enabled for this job (reflects the submitted merge_tables value).

message
string
required

Human-readable status message with a polling hint.

quota_remaining
integer<int64>
required

Remaining page quota after this job was deducted.

status
string
required

Initial job status. Always "Starting" on creation.