> For the complete documentation index, see [llms.txt](https://wiki.crosswatch.app/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://wiki.crosswatch.app/crosswatch/providers/synchronization/adapter-tautulli.md).

# Adapter: Tautulli

Tautulli adapter is a **read-only history importer**. It pulls old Plex plays from an existing Tautulli database and normalizes them.

{% hint style="warning" %}
Tautulli is not a tracker and not a media server. Don’t use it to “sync” back into Plex/Trakt/SIMKL/etc.
{% endhint %}

{% hint style="info" %}
Connect Tautulli first. Use: [Tautulli (Authentication provider)](/crosswatch/providers/authentication/auth-others/auth-tautulli.md).
{% endhint %}

### What it supports

* Direction: **source-only**
* Features:
  * **History** (movies + episodes)
  * Watchlist / ratings / playlists (not supported)
* Writes: **not supported** (always read-only)

### How indexing works

1. Pull pages from `get_history` until the end or a safety stop.
2. Keep only `media_type` in `{movie, episode}`.
3. Extract IDs from GUIDs + Plex/Tautulli keys (`rating_key`, `grandparent_rating_key`).
4. If IDs are incomplete, call `get_metadata(rating_key)` to enrich external IDs.
5. Emit normalized items keyed by external IDs where possible.

{% hint style="info" %}
History is indexed as a de-duplicated snapshot. Newest entry wins per canonical key.
{% endhint %}

### Output shape

<details>

<summary>Movie example</summary>

```json
{
  "type": "movie",
  "ids": {
    "imdb": "tt123",
    "tmdb": "456",
    "tvdb": "0",
    "plex": "12345",
    "guid": "plex://movie/..."
  },
  "title": "…",
  "year": 2024,
  "watched_at": "2025-12-30T23:54:11Z"
}
```

</details>

<details>

<summary>Episode example</summary>

```json
{
  "type": "episode",
  "ids": {
    "imdb": "ttSHOW",
    "tmdb": "157741",
    "tvdb": "397424",
    "plex": "40759",
    "guid": "plex://show/..."
  },
  "title": "Episode title",
  "year": 2025,
  "season": 2,
  "episode": 4,
  "watched_at": "2025-12-30T23:54:11Z",
  "series_title": "Show title (when available)",
  "show_ids": {
    "imdb": "ttSHOW",
    "tmdb": "157741",
    "tvdb": "397424",
    "plex": "40759",
    "guid": "plex://show/..."
  }
}
```

</details>

### Workflows (recommended)

{% stepper %}
{% step %}

### Import into CrossWatch (recommended)

Run a pair: **Tautulli → CrossWatch** with **History** enabled.

Then use **CrossWatch (CW)** as the source to seed Trakt/SIMKL/etc.

Related: [Adapter: CrossWatch](/crosswatch/providers/synchronization/adapter-crosswatch.md).
{% endstep %}

{% step %}

### Import into Editor dataset

Use this if you want to clean history before syncing it anywhere:

* fix wrong matches
* remove junk plays
* merge duplicates
* correct titles/years
  {% endstep %}
  {% endstepper %}

### Endpoints used (for debugging)

<details>

<summary>API calls</summary>

* History pages: `GET /api/v2?cmd=get_history`
* Metadata enrichment (optional): `GET /api/v2?cmd=get_metadata&rating_key=...`

</details>


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://wiki.crosswatch.app/crosswatch/providers/synchronization/adapter-tautulli.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
