---
title: "Export creator search results as CSV"
method: POST
path: "/ai-search/export"
tags: ["AI Search"]
---

# Export creator search results as CSV

`POST /ai-search/export`

Export up to 50,000 matching creators as CSV. The response is a streaming attachment; the `X-Creator-Row-Count` response header reports the actual row count. CSV only — XLSX is not supported on the public API. Requires a single `x-shop-id`. The CSV includes a numeric `gmv` column in **US dollars** (the exact GMV, same value `/ai-search/creators` returns) — parse THIS for GMV, not `gmv_segment`. To filter server-side by an exact GMV, set `min_gmv` / `max_gmv` (or a numeric range under `filters.performance.gmv`); it is honored the same way the portal search does — a $2,000 floor keeps everyone earning $2,000+ rather than dropping a whole band. NOTE (breaking change vs the old export): `gmv_segment` is no longer a band like "$1K-$5K" — it is now a rounded USD display figure (e.g. "$120", "$2.1K", "$1.9M") derived from `gmv`, so anything parsing it as a band must switch to the numeric `gmv` column. `min_post_rate`/`max_post_rate` (aka the automations endpoint's `fulfillment_rate`) are on a 0–100 scale, not 0–1.

## Request body

- AISearchExportRequest — POST /ai-search/export request body. CSV only, hard 50,000-row cap.
  - `min_gmv` number, nullable — Minimum GMV.
  - `max_gmv` number, nullable — Maximum GMV.
  - `min_units_sold` number, nullable — Minimum units sold.
  - `max_units_sold` number, nullable — Maximum units sold.
  - `min_post_rate` number, nullable — Minimum post rate (sample-fulfillment %) on a 0–100 scale, NOT 0–1. Same metric the automations endpoint calls `fulfillment_rate`. US/UK only.
  - `max_post_rate` number, nullable — Maximum post rate (sample-fulfillment %) on a 0–100 scale, NOT 0–1.
  - `min_engagement_rate` number, nullable — Minimum engagement rate, 0–100.
  - `max_engagement_rate` number, nullable — Maximum engagement rate, 0–100.
  - `min_average_views` number, nullable — Minimum average views.
  - `max_average_views` number, nullable — Maximum average views.
  - `min_followers` integer, nullable — Minimum follower count.
  - `max_followers` integer, nullable — Maximum follower count.
  - `has_email` boolean, nullable — Only creators with (true) / without (false) an email.
  - `categories` string[], nullable — Product categories (canonical names).
  - `gender` string[], nullable — Creator gender, e.g. ["female"].
  - `creator_ethnicity` string[], nullable — Creator ethnicity.
  - `age_range` string[], nullable — Creator age range, e.g. ["25-34"].
  - `community` string[], nullable — Community hashtags (US/UK/DE/ES only). Fetch valid values from GET /ai-search/hashtags.
  - `creator_level` string[], nullable — Creator GMV level tier, e.g. ["L5","L6","L7"] (L0=$0 through L7=>$1M). Same tiers the filter vocabulary lists as "Creator Level".
  - `languages` string[], nullable — Creator languages, e.g. ["english"].
  - `audience_age` string[], nullable — Audience (follower) age band.
  - `audience_gender` string[], nullable — Audience (follower) gender.
  - `content_style` string[], nullable — Content style, e.g. ["lifestyle"].
  - `production_quality` string[], nullable — Production quality, e.g. ["raw_ugc"].
  - `personality_tone` string[], nullable — Personality / tone, e.g. ["relatable"].
  - `face_visibility` string[], nullable — Face visibility, e.g. ["sometimes"].
  - `body_type` string[], nullable — Body type (~⅓ of creators populated).
  - `hair_type` string[], nullable — Hair type, e.g. ["wavy"].
  - `query` string, nullable — Natural-language search query. Omit (or pass whitespace-only) to export the full browse universe for your shop's region.
  - `creator_ids` string[], nullable — Explicit list of creator IDs to export. Mutually exclusive with query.
  - `filters` object, nullable — Optional creator filters (categories, follower/GMV ranges, etc.), same shape as the portal search filters. Applied server-side so the export matches a filtered search. post_rate is on a 0–100 scale (sample-fulfillment %). Unrecognized filter keys are rejected with a 400 rather than silently ignored. Cannot be combined with the flat filter params (min_gmv, gender, hair_type, etc.) inherited above.

## Response `200`

Successful Response

## Other responses

- `422` — Validation Error

---

[API](https://skmtc.dev/reacherapp/apis/reacher-data-api.md) · [All operations](https://skmtc.dev/reacherapp/apis/reacher-data-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/reacherapp/reacher-data-api/revisions/5eefff009b5b/schema)
