---
title: "Export Screener Xlsx"
method: POST
path: "/api/screener/export.xlsx"
tags: ["screener-export"]
---

# Export Screener Xlsx

`POST /api/screener/export.xlsx`

## Request

- Base URL: `https://api.equity-rank.com` (the document declares no server; this is the origin it was published from)
- URL: `https://api.equity-rank.com/api/screener/export.xlsx`
- Auth: HTTP bearer

Export the caller's current screener filter set as XLSX.

## Request body

- ScreenerExportRequest: The export request body mirrors /browse's filter params. Extends ScreenerFilters (imported, not redeclared) so every field it already carries — sector, min_score, sort_by, min_piotroski_score, graham_below_price, max_illiquidity_premium, and the six AWL-07 growth/leverage/quality filters — reuses ScreenerFilters' own clamp validators verbatim. Only the handful of /browse params ScreenerFilters doesn't carry are added here, with bounds mirroring the live /browse Query(...) bounds in screener.py.
  - `sector` string, nullable
  - `min_score` number
  - `sort_by` string
  - `min_piotroski_score` integer, nullable
  - `graham_below_price` boolean
  - `max_illiquidity_premium` number, nullable
  - `min_roic` number, nullable
  - `min_gross_margin` number, nullable
  - `min_net_margin` number, nullable
  - `min_revenue_growth` number, nullable
  - `min_eps_growth` number, nullable
  - `min_fcf_yield` number, nullable
  - `max_net_debt_to_ebitda` number, nullable
  - `full_data_only` boolean
  - `min_sue_score` number, nullable
  - `min_eps_revision_ratio` number, nullable
  - `max_short_ratio` number, nullable
  - `symbol` string, nullable

## Response `200`

Successful Response

- unknown

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/equity-rank/apis/equity-rank-api.md) · [All operations](https://skmtc.dev/equity-rank/apis/equity-rank-api/llms.txt) · [OpenAPI document](https://skmtc.dev/equity-rank/apis/equity-rank-api/revisions/c2f2463fee33?raw)
