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

# Search the Catalogue

> Find uploaded data with filters and keywords

Use `client.search()` to locate items in the data catalogue. The method returns a pandas DataFrame with metadata for each match.

## Basic search

```python theme={null}
from atomscale import Client

client = Client(api_key="YOUR_API_KEY")

results = client.search(keywords=["WSe2"])
print(results[["Data ID", "Status", "Sample Name"]])
```

## Limit to your uploads

By default, search includes data from other users in your organization. To see only your own uploads:

```python theme={null}
personal_only = client.search(
    keywords="demo",
    include_organization_data=False,
)
```

## Filter by IDs or type

Fetch specific items by their data IDs:

```python theme={null}
exact = client.search(data_ids=["44fa63b0-74da-4d25-a362-2276c80a670a"])
```

Filter by data type:

```python theme={null}
rotating = client.search(data_type="rheed_rotating")
```

### Available data types

| Value               | Description                 |
| ------------------- | --------------------------- |
| `rheed_image`       | Single RHEED image          |
| `rheed_stationary`  | Stationary RHEED video      |
| `rheed_rotating`    | Rotating RHEED video        |
| `xps`               | XPS spectrum                |
| `photoluminescence` | Photoluminescence spectrum  |
| `pl`                | Alias for photoluminescence |
| `raman`             | Raman spectrum              |
| `all`               | All types (default)         |

## Filter by lifecycle state

The `status` parameter filters by pipeline state:

```python theme={null}
completed = client.search(status="success")
```

### Available status values

| Value                | Description                     |
| -------------------- | ------------------------------- |
| `success`            | Analysis completed successfully |
| `pending`            | Queued for processing           |
| `running`            | Currently processing            |
| `error`              | Analysis failed                 |
| `stream_active`      | Streaming in progress           |
| `stream_interrupted` | Stream was interrupted          |
| `stream_finalizing`  | Stream finishing up             |
| `stream_error`       | Streaming failed                |
| `all`                | All statuses (default)          |

## Apply numeric or datetime bounds

Pass `(min, max)` tuples for growth length (seconds), upload timestamp, or last-accessed timestamp. Use `None` for an open bound.

```python theme={null}
from datetime import datetime

recent = client.search(
    upload_datetime=(datetime(2025, 1, 1), None),
    growth_length=(3000, None),
)
```

## Combine filters

All filter parameters can be combined:

```python theme={null}
results = client.search(
    keywords="GaN",
    data_type="rheed_stationary",
    status="success",
    upload_datetime=(datetime(2025, 1, 1), None),
)
```

## Next steps

Pass the `Data ID` column to `client.get()` to fetch analysis artefacts. See [Inspect Results](/sdk/inspect-results) for a hands-on tour.
