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

# search your screen history

> Find any text, conversation, or activity from your screen history with screenpipe's local AI-powered search on Mac, Windows, and Linux.

{/* https://screenpi.pe */}

screenpipe records your screen 24/7 and lets you search through everything. find that code snippet, conversation, or document you saw last week.

<Tip>
  for copy-paste API workflows beyond search, see [API recipes](/api-recipes).
</Tip>

## how it works

1. **event-driven capture** — screenpipe captures when meaningful UI activity happens, with idle fallback captures
2. **accessibility-first text extraction** — app text comes from the OS accessibility tree when available; OCR is the fallback for visual-only surfaces like games, remote desktops, or legacy frames
3. **local storage** — everything stored in a local SQLite database
4. **search API** — query via `localhost:3030/search` with filters

## search examples

### find by text

```bash theme={null}
curl "http://localhost:3030/search?q=project+apollo+budget&content_type=all&limit=20"
```

### find by app

```bash theme={null}
curl "http://localhost:3030/search?app_name=Code&content_type=accessibility&limit=20"
```

### find by time range

```bash theme={null}
curl "http://localhost:3030/search?q=standup&start_time=2026-02-10T14:00:00Z&end_time=2026-02-10T18:00:00Z"
```

### find by browser URL

```bash theme={null}
curl "http://localhost:3030/search?browser_url=github.com&limit=10"
```

### combine filters

```bash theme={null}
curl "http://localhost:3030/search?q=deployment&app_name=Slack&content_type=all&limit=10"
```

## search parameters

| param                | type     | description                                                                                               |
| -------------------- | -------- | --------------------------------------------------------------------------------------------------------- |
| `q`                  | string   | search query                                                                                              |
| `limit`              | int      | max results (default 20)                                                                                  |
| `offset`             | int      | pagination offset                                                                                         |
| `content_type`       | string   | `ocr`, `audio`, `accessibility`, `input`, `all`                                                           |
| `start_time`         | ISO 8601 | filter by start time                                                                                      |
| `end_time`           | ISO 8601 | filter by end time                                                                                        |
| `app_name`           | string   | filter by app name                                                                                        |
| `window_name`        | string   | filter by window title                                                                                    |
| `browser_url`        | string   | filter by browser URL                                                                                     |
| `min_length`         | int      | minimum text length                                                                                       |
| `max_length`         | int      | maximum text length                                                                                       |
| `max_content_length` | int      | truncate each result's text to this many chars (middle-truncation); `0` returns the full text untruncated |
| `frame_id`           | int      | restrict results to a single captured frame                                                               |
| `include_related`    | bool     | also return content carrying co-occurring tags                                                            |

## using the desktop app

the easiest way to search is the built-in search in the screenpipe desktop app:

1. open screenpipe
2. use the search bar or timeline view
3. scroll through your day visually
4. select content to chat with AI about it

### chat mentions — filter what AI sees

in the chat input box, type `@` to add mentions that filter what content the AI analyzes:

| mention                                            | shows                                                                               | use case                          |
| -------------------------------------------------- | ----------------------------------------------------------------------------------- | --------------------------------- |
| `@screen`                                          | what was visible on screen (accessibility text, OCR fallback text, and screenshots) | "summarize my code changes"       |
| `@audio`                                           | voice & meeting transcriptions                                                      | "what was said about the budget?" |
| `@input`                                           | clicks, keystrokes, app switches                                                    | "what apps did I use today?"      |
| `@today`, `@yesterday`, `@last-hour`, `@last-week` | time ranges                                                                         | "changes this morning"            |
| `@app-name`                                        | content from specific apps                                                          | "messages in Slack"               |

combine mentions: `@audio @last-hour` shows only voice data from the past hour. removing a mention: click the `×` on its pill or delete it from the text.

## search tips

* **be specific**: "slack message from john about deployment" > "deployment"
* **use time context**: combine `start_time` and `end_time` for precision
* **combine filters**: app name + time range + keywords

## thumbnails show "unavailable"?

if frame thumbnails in the search results or timeline show as "unavailable", it's likely because **API authentication is enabled** and the app doesn't have your API key.

**in the desktop app**: this is handled automatically. no action needed.

**via API (CLI, external tools, remote instances)**: when `--api-auth` is enabled (the default for security), thumbnail requests require an `Authorization` header:

```bash theme={null}
# get your API key
API_KEY=$(npx -y screenpipe@latest auth token)

# now thumbnails load with the key
curl "http://localhost:3030/frames?id=12345" \
  -H "Authorization: Bearer $API_KEY"
```

if you're accessing screenpipe from another device on your network (with `--listen-on-lan`), always include the auth header in image requests to prevent 403 errors.

## AI chat vs. search API — when to use each

the desktop app offers two ways to find content:

**search API & timeline** — best for precision location:

* use the search bar with keywords + filters (app name, time range, browser URL)
* scroll the timeline visually
* perfect for "find that exact blog post I saw 30 minutes ago"
* faster and more reliable for recent, specific content

**AI chat** — best for understanding & synthesis:

* ask natural language questions about what you've done
* AI reads the screenshots and text to answer conceptually
* great for "what was I working on this morning?" or "summarize today's meetings"
* less precise for pinpointing one specific piece of content, especially if the data isn't in the AI's active context window

**if AI chat can't find content you know exists:**

1. use the search API instead — try filtering by app name and time range first
2. add context: mention the app (Chrome, VS Code, Slack) and approximate time
3. use the timeline to visually locate the content, then ask chat about it
4. if still missing, check that the app or window isn't in your ignored-windows list

## accessing the API from other devices on your network

by default, the screenpipe API only listens on `127.0.0.1` (localhost). to access it from other devices on your LAN, start screenpipe with the `--listen-on-lan` flag:

```bash theme={null}
npx -y screenpipe@latest --listen-on-lan
```

this binds the server to `0.0.0.0`, making it reachable at `http://<your-machine-ip>:3030/`. note that `--listen-on-lan` automatically enables API authentication to protect your data on the network.

**example:** if your machine's local IP is `192.168.1.100`, you can now query from another device:

```bash theme={null}
curl "http://192.168.1.100:3030/search?q=my+query" \
  -H "Authorization: Bearer <your-api-key>"
```

to find your machine's local IP:

* **macOS/Linux**: `ifconfig | grep "inet " | grep -v 127.0.0.1`
* **Windows**: `ipconfig | find "IPv4"`

## privacy

* all search happens locally on your device
* no data leaves your machine unless you choose a cloud AI, cloud transcription, connected app, archive/sync, or remote workflow
* control what's recorded with `--ignored-windows` and `--included-windows`
* see [privacy data flow](/privacy-data-flow) for the full model

questions? [join our discord](https://discord.gg/screenpipe).

## get screenpipe

screenpipe includes 24/7 screen recording, AI search, and more.

[download screenpipe →](https://screenpi.pe/onboarding)
