Already tracing with another observability platform? Import that history instead of waiting for fresh traffic. Imported traces go through the same pipeline as live ones, so they form sessions, tasks, and training sets, and count toward training.
1. From the dashboard
Data → Import Data connects to LangSmith, Langfuse, Phoenix, Braintrust, PostHog, and Mastra directly: paste the provider’s API credentials, preview the recent conversations, and import the ones you pick (credentials are used for that import only, never stored; self-hosted deployments need a public https URL). Or upload a CSV / JSONL / JSON file of conversations: OpenAI-style {"messages": [...]} lines, input/output exchange rows, or role+content CSV columns are detected automatically.
2. Or from the shell
Lists nothing, imports the 20 most recent conversations. Pass --list first to see what would be imported:
A local file works from the shell too (--list previews here as well; --limit caps how many conversations import):
CSV, JSONL, and JSON are detected automatically, the same formats the dashboard upload accepts.
3. Or from Python
List conversations, pick, and import. Conversations are LangSmith traces grouped by their session_id / conversation_id / thread_id metadata (traces without any are imported individually):
import_conversations looks for the ids within the most recent conversations (its limit, default 20). If you picked ids from a deeper list_conversations(limit=...) call, pass the same limit to import_conversations or it raises LangSmithImportError for the older ones. There is a FileImporter in belvedir_loop.importers.files with the same shape for local files.
What to expect
Imported traffic is attributed to the API key you pass, like live traffic; filter by it on the Data pages. LLM runs keep their full message history, tool runs their names, and errors their status, so signals and the optimizer’s failure weighting work on imported data too. Tasks appear ~30s after an import finishes, once the session goes quiet.
Re-importing the same conversation duplicates its spans, so import once.