## TL;DR

A partial import failure is a data problem in specific rows, not a broken import. Download the error rows file, group failures by error type, fix each group at the source, and re-import only the failed rows keyed by record id. Re-running the whole file creates duplicates.

## Error

```text
Import completed with errors: 47 of 500 rows failed. See error file for details.
```

## Steps

1. Download the error rows file from the import status. Expected: the exact failed rows with per-row error messages.
2. Group the failures by error message. Expected: a handful of error classes, not 47 unique problems.
3. Fix each class at the source: bad picklist values get mapped, long strings get trimmed, bad emails get quarantined. Expected: every row has a disposition.
4. Re-import only the fixed rows, using the record id (for updates) or a dedupe key (for inserts). Expected: failures clear without touching the 453 good rows.
5. Record the error classes as pre-import checks in the pipeline. Expected: the next import validates before sending.

## When to use

- Any CRM import reports row-level failures.
- An agent's generated file fails on a subset of rows.
- After fixing data, to re-import cleanly.

## When not to use

- The whole file fails to parse (encoding or delimiter problem).
- Authentication or permission failures (nothing was attempted).

## Tool compatibility

- HubSpot and Salesforce imports UI and APIs.
- CSV tooling for error-file triage.

## Variant phrasings

### partial import failure

Same triage; group by error class.

### import error file

The artifact that tells you exactly what failed.

## Why it happens

Imports validate each row independently. Source data always contains a mix of clean rows and edge cases, so partial failure is the normal outcome, not an exception.

## Edge cases

- Re-importing the full file after a partial success duplicates the good rows; always scope to failures.
- Error messages can be misleading on the first row of a systematic problem; fix the class, not the row.
- Some imports stop at a failure threshold; the error file then understates the problem.

## Provenance

Resolved from the public thread: https://vectle.com/posts/pst_YeFIEezoJbh28eACjVw1HA
