> ## Documentation Index
> Fetch the complete documentation index at: https://arize-ax.mintlify.site/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Migrate from LangSmith to Arize AX

> Import historical LangSmith runs into Arize AX with a coding-agent skill, then continue tracing in AX.

Move historical LangSmith runs into Arize AX so your team can investigate past traffic in the same place you monitor new traces.

Importing history is different from pointing your app at AX for the first time. Instrumentation alone only captures **new** traffic. The migration skill copies **existing** LangSmith runs into an AX project with OpenInference attributes your AX UI expects.

## What you can migrate

| Migrated by the coding-agent skill | Recreate or re-run in AX |
| - | - |
| Historical runs and span trees | Evaluators and experiments (re-run for now) |
| Run inputs and final outputs | Old LangSmith feedback scores as AX experiment truth |
| Parent/child run relationships | |
| Session / thread IDs → AX sessions | |
| Datasets and examples | |
| Prompt Hub prompts (latest and/or versions + labels) | |

The skill maps LangSmith's final run `outputs` to a plain-text `output.value` (not a raw tool/message timeline), copies `session_id` / `thread_id` to `session.id`, and preserves the run tree with parent links.

## Migrate existing LangSmith data

<Steps>
  <Step title="Install the migration skill">
    ```bash theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
    npx skills add Arize-ai/arize-skills --skill arize-migrate-langsmith --yes
    ```

    See [Install skills](/docs/ax/skills/install) if you need the full Arize Skills setup.
  </Step>

  <Step title="Ask your coding agent to start">
    > Use the Arize LangSmith migration skill. I want to import historical LangSmith traces into AX.

    Tell the agent your LangSmith project name and the AX space and destination project you want. Prefer a **new** AX project name so imported history stays separate from live traffic until you review it.
  </Step>

  <Step title="Provide connection details privately">
    Give the agent credentials through a local env file path you control, or let it generate a secure command you run in a separate terminal. Do not paste API keys into agent chat.

    * LangSmith: `LANGSMITH_API_KEY` (and workspace ID if your org requires it)
    * [Create or find an AX API key](/docs/ax/security-and-settings/api-keys) and space ID for OTLP ingest

    The agent can resolve human-readable AX space names; you do not need to hunt for opaque IDs.
  </Step>

  <Step title="Review the plan and import">
    The agent confirms the source LangSmith project, destination AX project, and what it will import. Approve before it writes to AX.

    It exports runs through the LangSmith API and ingests them into AX over OTLP. A small project often finishes in a few minutes; larger histories take longer while AX indexes spans.
  </Step>

  <Step title="Verify in Arize AX">
    In the destination project, open a few traces and check:

    1. **Output** — the turn or root span shows the same final text you see in LangSmith Output (not a JSON message/parts dump)
    2. **Tree** — child spans nest under parents
    3. **Sessions** — turns that shared a LangSmith `session_id` / `thread_id` group under the same AX session

    If something looks wrong, ask the agent to adjust the mapping and re-import into a fresh project rather than mixing retries.
  </Step>

  <Step title="Migrate prompts (optional)">
    Ask the agent to import LangSmith Prompt Hub prompts into the AX Prompt Hub. You can choose **latest only** or **full version history**.

    The agent lists prompts (`list_prompts` / commits API), maps chat messages into AX message roles, creates each prompt with `ax prompts create` or the Python `prompts` client, then adds older commits with `create_version` and applies labels such as `production` when LangSmith tags exist.

    Confirm variable style (`{var}` vs `{{var}}`) if a template is ambiguous — AX supports `F_STRING` and `MUSTACHE`.
  </Step>
</Steps>

## What good imported traces look like

| LangSmith concept | In Arize AX |
| - | - |
| Root run (one turn or chain) | One trace |
| Child runs | Nested spans with parents |
| Final `outputs` | `output.value` as readable text |
| `session_id` / `thread_id` | `session.id` (Sessions UI) |
| `user_id` metadata | `user.id` when present |

## After you migrate

Historical import does not change where your **running app** sends new spans. When you are ready for new traffic in AX, follow [Set up tracing](/docs/ax/instrument/set-up-tracing) and [Configure your tracer](/docs/ax/instrument/configure-your-tracer).

<Note>
  Keep LangSmith available until you have verified the import, because the skill reads from the LangSmith API. See the [arize-migrate-langsmith skill source](https://github.com/Arize-ai/arize-skills/tree/main/skills/arize-migrate-langsmith) for current behavior and limits.
</Note>

## Related guides

* [Migrate from Braintrust](/docs/ax/cookbooks/migrate/migrate-from-braintrust)
* [Migrate from Langfuse](/docs/ax/cookbooks/migrate/migrate-from-langfuse)
* [Migrate from Phoenix](/docs/ax/cookbooks/migrate/migrate-from-phoenix)
* [Skill catalog](/docs/ax/skills/catalog)
