# Migrate from TestRail

Source: https://docs.qualflare.com/docs/migrate/testrail · Last updated: 2026-10-29

Move test cases from TestRail to Qualflare with a CSV or XML export: how sections become suites, which fields map, and what stays in TestRail.

You can move test cases from TestRail to Qualflare by exporting a CSV or XML file from TestRail and importing it in **Import**; suites, cases, steps and expected results move, while runs, results, attachments and custom fields stay in TestRail.

## What migrates from TestRail

This is what Qualflare makes of each part of a TestRail export:

| TestRail                                                                               | In Qualflare                                                                                                                  |
| -------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- |
| Sections and subsections                                                               | Suites. Qualflare suites don't nest, so a suite's name holds the section path, such as `API > Authentication`                 |
| Test cases                                                                             | Test cases, in the **Draft** state and **Manual**                                                                             |
| Steps and their expected results                                                       | **Action** steps, each followed by its **Expected Result** step when it has one                                               |
| Preconditions (XML only)                                                               | A **Precondition** step before the others                                                                                     |
| Priority and type                                                                      | **Priority** and **Test Type** (see [Field mapping](https://docs.qualflare.com/docs/migrate/testrail#field-mapping)) |
| Runs, results, milestones, plans, attachments, custom fields, references and estimates | Not imported                                                                                                                  |

## Before you begin

Requires the Editor role or higher in the project.

* The TestRail cases count toward your workspace's test case limit, 200 test cases on Starter, and each section path toward the suite limit, 10 test suites. See [What happens at a limit](https://docs.qualflare.com/docs/administration/plans#what-happens-at-a-limit).
* Import never changes the cases a project already has: a case whose name already exists in its suite is skipped.
* One file holds up to 1,000 cases, 200 suites and 5,000 steps, and 20 MB. Export a large project a few sections at a time. See [Limits](https://docs.qualflare.com/docs/test-management/import-export#limits).
* Keep the export file: Qualflare deletes its stored copy when the import finishes.

## Export from TestRail

Qualflare reads a TestRail CSV or XML export. Menu paths differ between tools and versions, so follow the source tool's own export guide.

**XML** keeps more: preconditions, and free-text steps split into one step per line. Choose it when your cases have preconditions.

**CSV** must have one row per step, with these column headers (case doesn't matter): `Title`, `Section Hierarchy`, `Priority`, `Type`, `Step` and `Expected Result`. A row with a title starts a case; a row with an empty title adds a step to the case above it.

```text
Title,Section Hierarchy,Priority,Type,Step,Expected Result
API token creation,API > Authentication,High,API,Open the token settings,The settings page is shown
,,,,Click Create token,The token form opens
```

Qualflare also accepts `Sections Hierarchy`, or `Section` for a single level, and `Steps` for `Step`. It reads no other column, so a CSV brings no preconditions or descriptions.

## Import the TestRail file

### Step 1: Open Import in Browse

In the project you're moving to, click **Browse**, open **Browse actions** (⋮, next to **Create Suite**) and choose **Import**. In a project with no suites, you can also click **Import** in the empty state.

### Step 2: Choose TestRail

In **Import Test Cases**, click **TestRail**. The card shows the file types it takes, `.csv, .xml`.

*Figure: Pick the tool your file came from. Each card lists the file types it accepts.*

### Step 3: Upload the file and click Import

In **Upload TestRail File**, drop the file on **Drop your file here, or click to browse**, or click it to pick the file, then click **Import**. Qualflare shows `Import queued — we'll notify you and the project when it's done.` and imports the file in the background.

## Field mapping

This is how Qualflare reads each TestRail field:

| Qualflare field              | From TestRail                                                          | Value                                                                                                                                                                                                 |
| ---------------------------- | ---------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Name**                     | `Title` (`<title>` in XML)                                             | As written, up to 512 characters                                                                                                                                                                      |
| **Suite**                    | `Section Hierarchy` in a CSV; in XML, the names of the nested sections | The path, as `Parent > Child`; a case with no section goes to `Uncategorized`                                                                                                                         |
| **Priority**                 | `Priority`                                                             | **Critical** for a value containing `critical` or `blocker`; **High** for `high`; **Medium** for `medium` or `normal`; **Low** for `low`, `minor` or `trivial`; **Medium** otherwise                  |
| **Test Type**                | `Type`                                                                 | The type of the same name, such as **Regression** or **Performance**; `Functional` and `Acceptance` → **Feature**; `Smoke & Sanity` → **Smoke**; `Automated` → **E2E**; any other value → **Feature** |
| **Steps**                    | `Step` and `Expected Result`, or `<steps_separated>`                   | An **Action** step, then its **Expected Result** step when it has one; step text over 256 characters is shortened                                                                                     |
| **Precondition**             | `<preconds>` (XML only)                                                | A **Precondition** step first                                                                                                                                                                         |
| **State** and **Automation** | None                                                                   | **Draft** and **Manual**                                                                                                                                                                              |

## Verify counts

When the TestRail import finishes, project members get the notification `Import finished: <file name>`, reading `<n> cases created in <m> new suites, <k> skipped.`

The cases created plus the cases skipped equal the cases in the file that have a title. If the total is lower than in TestRail, look for cases with an empty title: an XML case without one is skipped, and a CSV row without one adds its step to the case above.

Open **Browse** to see the suites.

*Figure: When an import finishes, project members get a notification with the cases created and skipped.*

## Move automation

Imported TestRail cases are manual. To bring automated results, upload the files your test runner writes with `qf <identifier> collect`, from your machine or from CI ([CI/CD integration](https://docs.qualflare.com/docs/cli/ci-cd)); each upload becomes a launch, and qf reads [these formats](https://docs.qualflare.com/docs/cli/formats).

A result joins an existing case only when its suite and case names match. Otherwise the upload creates an Active, automated case next to the imported ones, and its suite if no suite has that name. See [Manual and uploaded cases side by side](https://docs.qualflare.com/docs/runs/automated-results#manual-and-automated).

> **Caution: An upload can replace a case's steps**
>
> When a report includes steps for a test, Qualflare replaces the steps of the case it matches with the reported ones, including steps you wrote by hand or generated with Quo. A test reported without steps leaves the case's steps as they are.

For some frameworks a native reporter adds steps and retries: see [Reporters](https://docs.qualflare.com/docs/reporters).

## Run TestRail and Qualflare in parallel

You can keep TestRail running while your team starts in Qualflare, but a later import of a newer export adds only cases with new names, so edits you make in TestRail after the first import don't carry over. Do a last import when you switch, then edit the cases in Qualflare.

## Limitations

* A case can have up to 100 steps. The dialog refuses a file over 20 MB; a file over any other limit fails, and the notification names the limit.
* A suite or case name over 512 characters fails the import.
* Two cases with the same title in one section: the first is imported and the rest are skipped.
* Sections with the same full path become one suite.
* The XML file's top-level suite name isn't part of any suite name.

## Troubleshoot

| Message                                                                                                                       | Cause                                     | Fix                                                                                                                              |
| ----------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- |
| `Import failed: <file name>` with `The file could not be read as a testrail csv export: no test suites found in import file.` | No row has a value under a `Title` header | Check the header names in [Export from TestRail](https://docs.qualflare.com/docs/migrate/testrail#export-from-testrail) |
| `Import failed: <file name>` with `The file could not be read as a testrail xml export: failed to parse TestRail XML: …`      | Not a TestRail XML export                 | Export again as XML from TestRail                                                                                                |
| `Invalid file type. Accepted: .csv, .xml`                                                                                     | Another file type                         | Export as CSV or XML                                                                                                             |

Other messages: [Troubleshoot](https://docs.qualflare.com/docs/test-management/import-export#troubleshoot).

## Related

* **Guides:** [Migrate to Qualflare](https://docs.qualflare.com/docs/migrate) · [Import and export test cases](https://docs.qualflare.com/docs/test-management/import-export) · [Run manual tests with the Test Wizard](https://docs.qualflare.com/docs/runs/manual-testing)
* **Reference:** [Test cases: fields, states and steps](https://docs.qualflare.com/docs/test-management/test-cases) · [Test Plans](https://docs.qualflare.com/docs/test-management/test-plans)
* **CLI/API:** [Upload results with qf collect](https://docs.qualflare.com/docs/cli/collect)
