---
title: Teal.fm
toc_min_heading_level: 2
toc_max_heading_level: 5
---

import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
import CodeBlock from '@theme/CodeBlock';
import JsonConfig from '!!raw-loader!@site/../config/tealfm.json.example';
import Bluesky from "@site/src/components/snippets/_bluesky.mdx";

:::tip[Other Uses]

To monitor and re-scrobble activity from a ATProto Profile create a [teal.fm (Source)](/configuration/sources/tealfm-source)

:::

[**teal.fm**](https://teal.fm/) is a social discovery and web viewing service for scrobbles stored/available on the ATProto network/your repository in a [PDS (Personal Data Server)](https://github.com/Bluesky-social/pds).

<details>

<summary>How does that work?</summary>

<Bluesky name="teal.fm" lexicon="fm.teal"/>

</details>

:::warning

The default Bluesky PDS is **public**, meaning your scrobbles are also public (read-only). This isn't any different than using Last.fm or Listenbrainz, in terms of privacy.

:::

:::note

[teal.fm is still in developement](https://notes.teal.fm/3lzlwe6puis2l) and does not have a public website, yet.

To view your teal.fm scrobbles you can:

* use [wrapped.baileytownsend.dev](https://wrapped.baileytownsend.dev/) which gives a simple stats overview of your scrobbles
* use [atproto.at](https://atproto.at) to view the raw data (convenience URLs are generated in multi-scrobbler for you to do this)

:::

## Setup

#### Bluesky

* Create a [Bluesky](https://bsky.app) account, if you don't already have one
* Navigate to https://bsky.app/settings/app-passwords
  * Settings -> Privacy and Security -> App passwords
* Create a new **App Password** and save it somewhere, it will not be shown again

## Configuration

### Handle

The handle used with multi-scrobbler should be your **full** ATProto handle, including TLD.

* For regular Bluesky account this will be like: `alice.bsky.social`
* For Bluesky accounts that [use their website as their account](https://bsky.social/about/blog/4-28-2023-domain-handle-tutorial) this is your domain: `mydomain.com`
* For non-Bluesky users, you probably already know your handle

If you do not include a TLD then multi-scrobbler will automatically append `.bsky.social` to your handle value.

<Config config="TealClientConfig" fileContent={JsonConfig} client name="tealfm">
        | Environmental Variable | Required? | Default | Description                                                                         |
        | :--------------------- | --------- | ------- | ----------------------------------------------------------------------------------- |
        | TEALFM_IDENTIFIER      | Yes       |         | Your **full** ATProto handle. For Bluesky account this is like `myUser.bsky.social` |
        | TEALFM_APP_PW          | Yes       |         | Bluesky/ATProto network App Password                                                |
</Config>