DarkLyrics APIdarklyrics.com ↗
Access DarkLyrics.com data via API: band listings, full discographies, album lyrics, and individual song lyrics for thousands of metal artists.
What is the DarkLyrics API?
The DarkLyrics API provides 6 endpoints covering the full DarkLyrics.com metal lyrics archive, from browsing recently added albums on the homepage to retrieving complete lyrics for every track on a specific release. The get_album_lyrics endpoint alone returns structured song objects with track numbers, titles, and full lyric text for an entire album in a single call. Band slugs and album slugs map directly to the URL hierarchy, making it straightforward to build programmatic access into any metal-focused application.
No input parameters required.
curl -X GET 'https://api.parse.bot/scraper/16b0df97-4e3b-43c9-88cf-cd56ae75ad24/get_homepage' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace darklyrics-com-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""DarkLyrics: browse metal bands, discographies, and lyrics."""
from parse_apis.darklyrics_api import DarkLyrics, Letter, NotFound
client = DarkLyrics()
# List recently added albums on the homepage
for album in client.newalbums.list(limit=3):
print(album.band_name, "-", album.album_title)
# Browse bands starting with "M"
for band in client.bandlistings.list(letter=Letter.M, limit=5):
print(band.name, band.slug)
# Get a band's full discography
metallica = client.bands.get(letter=Letter.M, band_slug="metallica")
print(metallica.band_name, f"({len(metallica.discography)} releases)")
for release in metallica.discography[:3]:
print(f" {release.title} ({release.year}) - {release.type}")
# Get full album lyrics
album_lyrics = client.albumlyricses.get(band_slug="metallica", album_slug="killemall")
print(album_lyrics.album, album_lyrics.year)
for song in album_lyrics.songs[:2]:
print(f" Track {song.track_number}: {song.title} ({len(song.lyrics)} chars)")
# Get a single song's lyrics with typed error handling
try:
song = client.songdetails.get(band_slug="metallica", album_slug="killemall", track_number="1")
print(song.title, song.album_name, song.track_number)
except NotFound as exc:
print(f"Song not found: {exc}")
print("exercised: newalbums.list / bandlistings.list / bands.get / albumlyricses.get / songdetails.get")
Get newly added albums from the DarkLyrics homepage. Returns a list of recently added albums with band name, album title, and thumbnail image URL.
No input parameters required.
{
"type": "object",
"fields": {
"new_albums": "array of objects with band_name, band_url, album_title, album_url, and thumbnail"
},
"sample": {
"data": {
"new_albums": [
{
"band_url": "http://www.darklyrics.com/o/obituary.html",
"album_url": "http://www.darklyrics.com/lyrics/obituary/dyingofeverything.html",
"band_name": "OBITUARY",
"thumbnail": "http://www.darklyrics.com/hot/obituary23.jpg",
"album_title": "Dying Of Everything"
}
]
},
"status": "success"
}
}About the DarkLyrics API
Browse and Discover
The get_homepage endpoint returns a list of recently added albums, each containing band_name, band_url, album_title, album_url, and a thumbnail image URL. This is useful for tracking new additions to the archive without polling individual band pages. For alphabetical browsing, get_bands_by_letter accepts a letter parameter (a–z, or # for numeric names) and returns an array of band objects with name, url, and slug fields.
Band Discographies
get_band_page takes a letter and band_slug and returns the band's full discography array. Each entry includes the album title, year, type (album, demo, EP, etc.), and a songs array with track numbers. This gives a complete structural map of a band's catalog without fetching lyrics for every release.
Lyrics Retrieval
get_album_lyrics accepts a band_slug and album_slug and returns the album title, year, and a songs array where every object includes track_number (integer), title, and lyrics (full text). For targeting a single track, get_song_lyrics adds a track_number parameter and returns the same lyric content alongside band_slug, album_name, album_slug, and track_number for use as identifiers in downstream storage.
Search
The search endpoint accepts a free-text query and returns three separate arrays: artists, albums, and songs. Results span all three entity types simultaneously, so a single query can surface a band page, a specific release, or an individual track.
The DarkLyrics API is a managed, monitored endpoint for darklyrics.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when darklyrics.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official darklyrics.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Build a metal lyric search tool returning full song text via
get_song_lyrics - Track new metal releases by polling
get_homepagefor freshly added albums and thumbnails - Generate complete discography pages for any band using
get_band_pagealbum and track data - Compile a full album lyric corpus with
get_album_lyricsfor NLP or text analysis projects - Power an alphabetical band directory using
get_bands_by_letterfor each letter a–z and # - Implement autocomplete for metal artists, albums, and songs using the
searchendpoint - Cross-reference track listings from discography data with lyrics to build structured song databases
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does DarkLyrics have an official developer API?+
What does `get_band_page` return versus `get_album_lyrics`?+
get_band_page returns structural discography data — album titles, years, types, and track listings — without lyric text. get_album_lyrics returns the actual lyric strings for every song on a specific album. Use get_band_page first to map a band's catalog, then call get_album_lyrics with the relevant album_slug to retrieve the text.Does the `search` endpoint distinguish between artist, album, and song results?+
artists, albums, and songs. Each is populated independently based on what the query matches, so you can consume only the entity type relevant to your use case.Are artist biography, band member, or genre metadata fields available?+
Does the API support pagination for band or search results?+
get_bands_by_letter, all bands matching the letter are returned in a single response. If you need paginated or filtered subsets, you can fork the API on Parse and revise it to add pagination support.