IDHS (I Don't Have Spotify)
Copy a link from your favorite streaming service, paste it into the search bar, and voilà! Links to the track on all other supported platforms are displayed. If the original source is Spotify you'll even get a quick audio preview to ensure it's the right track.
Note: Currently, playlists are out of scope. Only individual tracks, albums, artists, and podcasts are supported.
Adapters represent the streaming services supported by the Web App and the Raycast Extension. Each adapter allows the app to convert links from one platform to others. The table below shows which features are available for each one:
Adapter | Inverted Search | Official API | Verified Links |
---|---|---|---|
Spotify | Yes | Yes | Yes |
Tidal | Yes but unstable | Yes | Yes |
YouTube Music | Yes | No | Yes |
Apple Music | Yes | No | Yes |
Deezer | Yes | Yes | Yes |
SoundCloud | Yes | No | Yes |
IDHS extracts whatever metadata it can from the link you paste, then uses that information to build a fresh query for public search engines or official APIs (e.g. Apple Music, YouTube, SoundCloud). It picks the result that looks most relevant, but it can't guarantee the returned link is the exact track you want or even a song at all.
Suggestions for a better query building workflow are welcome. The main constraint is keeping requests fast, so no brute-force retries for now.
-
Parsers (
src/parsers
) identify the incoming link's platform and extract normalized metadata (title, description, type, image, and optional audio) as well as a consistent search query. For example, a Spotify link is parsed to gather Open Graph metadata and produce a query string that represents the track/album/artist/show/episode. This query is later used to search other platforms. -
Adapters (
src/adapters
) turn that normalized query into outbound links for each destination platform (Spotify, YouTube Music, Apple Music, Deezer, SoundCloud, Tidal). Each adapter is responsible for:- Performing a platform-specific search (API or HTML-based) using the normalized query
- Returning a result with
type
,url
, and flags likeisVerified
andnotAvailable
- Preferring "verified" links when the platform provides a reliable match signal
This separation keeps the system modular: parsers focus on understanding the source, while adapters focus on finding the best possible destination links.
The list of environment variables is available in .env.test
. To complete the values for the following variables:
SPOTIFY_CLIENT_ID
andSPOTIFY_CLIENT_SECRET
, refer to Spotify Web API Documentation.TIDAL_CLIENT_ID
andTIDAL_CLIENT_SECRET
, refer to TIDAL Developer Portal.YOUTUBE_API_KEY
, refer to Google Developers Console.URL_SHORTENER_API_KEY
, refer to Bit
Ensure that the values are correctly added to your .env
file to configure the API keys properly.
To get the app up:
docker compose up -d
bun install
bun dev
Follow the guidelines https://developers.raycast.com/basics/create-your-first-extension and look for the folder: https://github.com/raycast/extensions/tree/8533f11972392b6d22f69f073fdb2af6d8ffee10/extensions/idonthavespotify
Contributions are more than welcome, just open a PR and I'll review it promptly.
Icon Generated by https://deepai.org/machine-learning-model/text2img