---
title: imports.preview | Doing Work API
description: Dry run of a customer CSV import. Writes nothing. Returns the headers, a suggested mapping (from a preset or the header names), and for every row the custo
url: https://doingwork.work/docs/reference/imports-preview/
---

# imports.preview

Dry run of a customer CSV import. Writes nothing. Returns the headers, a suggested mapping (from a preset or the header names), and for every row the customer it would create or the problems found. Show the mapping to the owner before imports.run.

|  |  |
|---|---|
| Who | Agents can call this |
| REST | `POST /v1/imports/preview` |
| MCP tool | `imports_preview` |
| Writes | no |
| Area | [Imports, custom fields, tags and search](https://doingwork.work/docs/reference/#imports-custom-fields-tags-and-search) |

## When to use it

Move a shop's customer list in from a CSV, including files exported from Jobber, Housecall Pro and CompanyCam. Ask imports.fields what can be filled, run imports.preview to see how each column maps and what would go wrong, show that to the owner, and only then call imports.run with the mapping they confirmed.

## What to tell the owner

Tell them what you found in plain words. Don't read back raw fields.

## Input

| Field | Type | Required |
|---|---|---|
| `shop_id` | string (uuid) | yes |
| `csv` | string | yes |
| `preset` | string (one of jobber, housecall_pro, companycam) | no |
| `mapping` | array | no |
| `mapping[].column` | string | yes |
| `mapping[].field` | string (one of name, first_name, last_name, is_company, company_name, email, phone, lead_source, tags, notes, external_id, property.line1, property.line2, property.locality, property.region, property.postal_code, property.full_address, billing.line1, billing.line2, billing.locality, billing.region, billing.postal_code, billing.country, skip) | yes |

## Example

```http
POST https://doingwork.work/v1/imports/preview
content-type: application/json
Idempotency-Key: 3f1c...

{
  "shop_id": "00000000-0000-4000-8000-000000000000",
  "csv": "..."
}
```

## Output

JSON. The response shape isn't published yet; read the fields you need and ignore the rest. Errors are `{code, message, status}`.

## Errors

| Code | Status | What to do |
|---|---|---|
| `invalid_input`, `invalid_token`, `rate_limited` |  | Can happen on any call. See [errors](https://doingwork.work/docs/errors/). |
