# Genius.com Scraper (`parsebird/genius-scraper`) Actor

Scrape Genius.com songs, full lyrics, credits, and artist profiles by search query, artist URL, or song URL. Export JSON, CSV, Excel.

- **URL**: https://apify.com/parsebird/genius-scraper.md
- **Developed by:** [ParseBird](https://apify.com/parsebird) (community)
- **Categories:**
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.39 / 1,000 song scrapeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

### Genius.com Scraper

Scrape **songs, full lyrics, credits, and artist profiles** from [Genius.com](https://genius.com) by search query, artist-page URL, or direct song-page URL. **Genius.com Scraper** returns clean, structured JSON for every matching song — plain-text lyrics, songwriter and producer credits, album data, pageviews, release dates, and streaming links to Spotify, YouTube, SoundCloud, and Apple Music.

<table><tr>
<td style="border-left:4px solid #FFFF64;padding:12px 16px;font-weight:600">
Search Genius, paste an artist URL for a full discography, or paste song URLs directly — get plain-text lyrics, writer/producer/feature credits, album and release data, pageviews, annotation counts, cover art, and Spotify / YouTube / SoundCloud / Apple Music links, with an optional artist-profile row (followers, verified status, bio, socials). Filter by language. Export JSON, CSV, Excel.
</td>
</tr></table>

##### Copy to your AI assistant

Copy this block into ChatGPT, Claude, Cursor, or any LLM to start using this actor.

```
Genius.com Scraper (parsebird/genius-scraper) extracts songs, plain-text lyrics, credits, and artist profiles from genius.com. Inputs (combine any; all optional): searchQueries (array of strings — song titles, artist names, or lyric fragments), artistUrls (array of https://genius.com/artists/<slug> URLs — pulls the discography ranked by popularity), songUrls (array of https://genius.com/<slug>-lyrics URLs — one row each), maxResults (integer, default 50, 0 = all, hard cap 1000 per source), includeLyrics (boolean, default true — off is ~2x faster, metadata only), includeArtistProfile (boolean, default false — also emit a standalone artist-profile row), language (string ISO code, default "" = any — keeps only songs Genius detected in that language: en, es, fr, de, it, pt, nl, ru, ja, ko, zh), proxyConfiguration (object, default Apify Proxy). Output: one row per song with recordType "song" (id, title, url, language, explicit, releaseDate, pageviews, annotationCount, thumbnailUrl, imageUrl, lyrics, description, recordingLocation, artistName, artistId, artistUrl, artistImageUrl, albumName, albumUrl, albumCoverUrl, writerNames[], producerNames[], featuredArtistNames[], spotifyUrl, youtubeUrl, soundcloudUrl, appleMusicUrl) plus optional rows with recordType "artist" (artistId, name, url, imageUrl, alternateNames[], followerCount, isVerified, iq, description, instagramName, twitterName, facebookName). Pricing: pay-per-event, $0.00199 per song on Free down to $0.00139 on Gold; artist-profile rows are free. API: https://apify.com/parsebird/genius-scraper/api - Token: https://console.apify.com/account/integrations
```

### What is Genius.com Scraper?

**Genius.com Scraper** is an Apify Actor that extracts structured song data and **plain-text lyrics** from [Genius.com](https://genius.com), the world's largest collection of song lyrics and music knowledge. It is a practical **Genius API alternative**: no client token, no OAuth, no rate-limited developer account — give it a search term, an artist page, or a song page and it returns analysis-ready JSON.

Genius.com Scraper handles three input types at once. Search `"HUMBLE Kendrick Lamar"` to get the top matching songs, paste `https://genius.com/artists/Drake` to pull a whole discography ranked by popularity, or paste direct links like `https://genius.com/Kendrick-lamar-humble-lyrics` for one-row-per-song extraction. Every row carries a `recordType` field — `song` or `artist` — so the two shapes filter cleanly in one dataset.

### What can Genius.com Scraper do?

- 🎤 **Full lyrics** — complete plain-text lyrics for every song, with verse/section labels preserved. Toggle off for a faster, lighter metadata-only run.
- ✍️ **Credits** — songwriter, producer, and featured-artist names for each track.
- 💿 **Album & release data** — album name, album page URL, cover art, and the release date (year, year-month, or full date).
- 📊 **Popularity signals** — Genius pageviews and community annotation counts per song.
- 🔗 **Streaming links** — Spotify, YouTube, SoundCloud, and Apple Music URLs when Genius lists them.
- 👤 **Artist profiles** — an optional standalone row per artist with follower count, verified status, Genius IQ, biography, alternate names, and Instagram / Twitter / Facebook handles.
- 🌍 **Language filter** — keep only songs Genius detected in a chosen language (English, Spanish, French, and more).
- 🖼️ **Artwork** — song-art thumbnail and full-size image URLs, plus artist images.
- ⚡ Runs on Apify with API access, scheduling, webhooks, integrations, and export to JSON, CSV, Excel, HTML, or XML.

### What data can you extract from Genius?

#### Song row (`recordType: "song"`)

| Field | Description |
|-------|-------------|
| `id` | Genius song ID |
| `title` | Song title |
| `url` | Canonical Genius song-page URL |
| `language` | Detected ISO language code |
| `explicit` | Explicit-content flag |
| `releaseDate` | Release date (`YYYY`, `YYYY-MM`, or `YYYY-MM-DD`) |
| `lyrics` | Full plain-text lyrics (`null` for instrumentals or incomplete entries) |
| `description` | Song description / context text |
| `recordingLocation` | Recording studio or location, when listed |
| `pageviews` | Total Genius page views for the song |
| `annotationCount` | Number of community annotations on the lyrics |
| `thumbnailUrl` / `imageUrl` | Small and full-size song-art image URLs |
| `artistName` / `artistId` / `artistUrl` / `artistImageUrl` | Primary artist |
| `albumName` / `albumUrl` / `albumCoverUrl` | Album, when the song belongs to one |
| `writerNames` | Songwriter credits (array) |
| `producerNames` | Producer credits (array) |
| `featuredArtistNames` | Featured-artist credits (array) |
| `spotifyUrl` / `youtubeUrl` / `soundcloudUrl` / `appleMusicUrl` | Streaming links, when available |

#### Artist row (`recordType: "artist"`) — emitted only with `includeArtistProfile: true`

| Field | Description |
|-------|-------------|
| `artistId` / `name` / `url` / `imageUrl` | Artist identity |
| `alternateNames` | Known aliases and alternate spellings |
| `followerCount` | Genius follower count |
| `isVerified` | Whether the artist account is verified on Genius |
| `iq` | Genius IQ score (community contribution metric) |
| `description` | Artist biography text |
| `instagramName` / `twitterName` / `facebookName` | Social handles |

### How to scrape Genius.com

1. Open [Genius.com Scraper](https://apify.com/parsebird/genius-scraper) on Apify Store and click **Try for free**.
2. Add one or more **Search queries** — song titles, artist names, or lyric fragments.
3. (Optional) Paste **Artist page URLs** (`https://genius.com/artists/<name>`) to pull full discographies, and **Song page URLs** for exact songs.
4. Set **Max results** — the cap per search query or per artist. Use `0` for everything, up to 1,000 per source.
5. (Optional) Turn off **Include lyrics** for a faster metadata-only run, turn on **Include artist profile**, or pick a **Language**.
6. Click **Start**, then open the **Dataset** tab. Export as JSON, CSV, Excel, HTML, or XML.

#### Input example — single search

```json
{
    "searchQueries": ["HUMBLE Kendrick Lamar"],
    "maxResults": 50
}
```

#### Input example — full artist discography

```json
{
    "artistUrls": ["https://genius.com/artists/Drake"],
    "maxResults": 200,
    "includeArtistProfile": true
}
```

#### Input example — multi-source with language filter

```json
{
    "searchQueries": ["bad bunny"],
    "artistUrls": ["https://genius.com/artists/Rosalia"],
    "songUrls": ["https://genius.com/Kendrick-lamar-humble-lyrics"],
    "language": "es",
    "includeLyrics": false,
    "includeArtistProfile": true,
    "maxResults": 100
}
```

### Output example

**Song** (`recordType: "song"`)

```json
{
    "recordType": "song",
    "id": 3039923,
    "title": "HUMBLE.",
    "url": "https://genius.com/Kendrick-lamar-humble-lyrics",
    "language": "en",
    "explicit": true,
    "releaseDate": "2017-03-30",
    "pageviews": 12337222,
    "annotationCount": 21,
    "thumbnailUrl": "https://images.genius.com/483306c535608c27f9e3781b854dc91d.300x300x1.png",
    "imageUrl": "https://images.genius.com/483306c535608c27f9e3781b854dc91d.1000x1000x1.png",
    "lyrics": "[Intro]\nNobody pray for me\nIt been that day for me\n...",
    "description": "On the ironically braggadocious track \"HUMBLE.\" Kendrick Lamar challenges his competition...",
    "artistName": "Kendrick Lamar",
    "artistId": 1421,
    "artistUrl": "https://genius.com/artists/Kendrick-lamar",
    "albumName": "DAMN.",
    "albumUrl": "https://genius.com/albums/Kendrick-lamar/Damn",
    "writerNames": ["Kendrick Lamar", "Mike WiLL Made-It"],
    "producerNames": ["Mike WiLL Made-It"],
    "featuredArtistNames": [],
    "spotifyUrl": "https://open.spotify.com/track/3GnLo84IkdSWCPYt6tnLll",
    "youtubeUrl": "https://www.youtube.com/watch?v=tvTRZJ-4EyI",
    "soundcloudUrl": "https://soundcloud.com/kendrick-lamar-music/humble",
    "appleMusicUrl": "https://music.apple.com/us/song/1223592498"
}
```

**Artist** (`recordType: "artist"`)

```json
{
    "recordType": "artist",
    "artistId": 1421,
    "name": "Kendrick Lamar",
    "url": "https://genius.com/artists/Kendrick-lamar",
    "alternateNames": ["K-Dot", "OKLAMA", "Kendrick Lamar Duckworth"],
    "followerCount": 31973,
    "isVerified": true,
    "iq": 70375,
    "description": "Kendrick Lamar Duckworth (born June 17, 1987) is an American rapper and songwriter from Compton, California...",
    "instagramName": "kendricklamar",
    "twitterName": "kendricklamar",
    "facebookName": "kendricklamar"
}
```

Download the dataset in JSON, CSV, Excel, HTML, or XML from the [Dataset tab](https://docs.apify.com/platform/storage/dataset).

### Use cases

- 📚 **Lyrics datasets & NLP** — Build training or analysis corpora of song lyrics with structured metadata and language labels.
- 🎯 **Music research & journalism** — Cite pageviews, release dates, credits, and annotation counts in articles and academic work.
- ✍️ **Credits & rights research** — Pull songwriter and producer credits across an artist's catalog in one run.
- 📈 **Catalog monitoring** — Schedule recurring runs to track a discography, new releases, or pageview growth over time.
- 🤝 **A\&R & scouting** — Rank an artist's songs by Genius popularity to spot momentum.
- 🤖 **AI & data pipelines** — Feed lyrics and metadata into LLM agents through the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp) or your own database.

### How it works

1. The Actor reads your search queries, artist URLs, and song URLs, and resolves each one to Genius song IDs.
2. Search queries are paginated; artist URLs expand into the discography ranked by popularity, up to your `maxResults` cap.
3. For each unique song it fetches the full song record — credits, album, media links, pageviews, and language.
4. When **Include lyrics** is on, it also retrieves the plain-text lyrics from the song page.
5. If **Include artist profile** is on, a standalone artist row is emitted for each artist source.
6. Optional language filtering drops songs Genius detected in another language.
7. Each song becomes one dataset record and is billed as one pay-per-event result; artist-profile rows are free.

### How much does it cost to scrape Genius.com?

Genius.com Scraper uses **pay-per-event** pricing. You are charged **once per song row**. Artist-profile rows (`includeArtistProfile: true`) are not charged.

| Plan | Price per song | Price per 1,000 songs |
|------|----------------|------------------------|
| Free | $0.00199 | **$1.99** |
| Bronze | $0.00179 | **$1.79** |
| Silver | $0.00159 | **$1.59** |
| Gold | $0.00139 | **$1.39** |

Apify platform usage (compute and proxy) is billed separately but is minimal — the Actor uses lightweight API calls plus one page fetch per song for lyrics. A 200-song discography run costs about **$0.40** on the Free plan. See the [Apify pricing page](https://apify.com/pricing).

### API usage examples

Run Genius.com Scraper with the [Apify API](https://docs.apify.com/api/v2).

#### Python

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_API_TOKEN>")

run_input = {
    "searchQueries": ["HUMBLE Kendrick Lamar"],
    "maxResults": 50,
    "includeLyrics": True,
}

run = client.actor("parsebird/genius-scraper").call(run_input=run_input)

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    if item["recordType"] == "song":
        print(item["artistName"], "-", item["title"], "|", item.get("pageviews"))
```

#### JavaScript

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: '<YOUR_API_TOKEN>' });

const run = await client.actor('parsebird/genius-scraper').call({
    artistUrls: ['https://genius.com/artists/Drake'],
    maxResults: 100,
    includeArtistProfile: true,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.filter((i) => i.recordType === 'song').map((i) => i.title));
```

Connect finished datasets to [Google Sheets](https://docs.apify.com/platform/integrations/google-sheets), [Slack](https://docs.apify.com/platform/integrations/slack), [Zapier](https://docs.apify.com/platform/integrations/zapier), [Make](https://docs.apify.com/platform/integrations/make), webhooks, or your own pipeline.

### Is it legal to scrape Genius.com?

Genius.com Scraper reads only publicly visible data — the same song pages, lyrics, credits, and artist information any visitor sees on [genius.com](https://genius.com). It does not log in, use personal account cookies, or access private data. Song lyrics are protected by copyright owned by their respective rights holders; you are responsible for ensuring your use of scraped lyrics complies with copyright law and Genius's Terms of Service in your jurisdiction. For background, read Apify's guide: [Is web scraping legal?](https://blog.apify.com/is-web-scraping-legal/).

### Related Actors

- [Spotify Play Count Scraper](https://apify.com/parsebird/spotify-play-count-scraper) — Exact Spotify stream counts, monthly listeners, and discographies.
- [SoundCloud Scraper](https://apify.com/parsebird/soundcloud-scraper) — Tracks, playlists, and artist profiles from SoundCloud.
- [YouTube Transcript Scraper](https://apify.com/parsebird/youtube-transcript-scraper) — Full transcripts and captions from YouTube videos.
- [Apple Podcasts Scraper](https://apify.com/parsebird/apple-podcasts-scraper) — Podcast, episode, and chart data from Apple Podcasts.

### FAQ

**Do I need a Genius API key or account?**
No. Genius.com Scraper uses Genius's public website data — no client token, OAuth, or login.

**Are the lyrics the full text?**
Yes — the complete plain-text lyrics with section labels like `[Chorus]` preserved. `lyrics` is `null` for instrumentals and for songs whose lyrics are not yet transcribed on Genius. Turn off **Include lyrics** to skip lyric fetching for a faster, roughly 2x lighter run.

**How do I get a whole artist's catalog?**
Paste the artist-page URL (`https://genius.com/artists/<name>`) into **Artist page URLs** and set **Max results** to the number of songs you want, or `0` for everything up to 1,000. Songs come back ranked by Genius popularity.

**What does the language filter do?**
Picking a language keeps only songs Genius has tagged with that language and drops the rest. Songs with no detected language are kept. Leave it on **Any language** to keep everything.

**Why is a song URL I passed missing from the results?**
If you set a **Language** filter, direct song URLs in other languages are dropped too. Clear the filter to keep every song URL.

**How current is the data?**
Every run fetches live data from Genius at scrape time — pageviews, annotation counts, credits, and lyrics reflect the current state of each page.

**Can I schedule recurring runs?**
Yes. Use Apify [schedules](https://docs.apify.com/platform/schedules) to run daily or weekly and track a discography, new releases, or pageview growth.

**Can I use this as a Genius API?**
Yes. Call the Actor through the [Apify API](https://docs.apify.com/api/v2), use webhooks, or connect it to AI assistants with the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp).

**Something looks wrong or missing.**
Report it on the [Issues tab](https://apify.com/parsebird/genius-scraper/issues) and it will be looked at quickly.

# Actor input Schema

## `searchQueries` (type: `array`):

Song titles, artist names, or lyric fragments to search on Genius. Each query runs independently and returns matching songs.

## `artistUrls` (type: `array`):

Genius artist-page URLs (e.g. https://genius.com/artists/Drake) to pull a full discography, ranked by popularity, up to the limit below.

## `songUrls` (type: `array`):

Direct Genius song-page URLs (e.g. https://genius.com/Kendrick-lamar-humble-lyrics). Each URL produces one song row.

## `maxResults` (type: `integer`):

Maximum songs per search query or per artist. Set to 0 for all available songs. Hard upper bound is 1,000 per source.

## `includeLyrics` (type: `boolean`):

Extract full plain-text lyrics for every song. Turn off for a faster, smaller run that returns metadata, credits, and links only (roughly twice as fast).

## `includeArtistProfile` (type: `boolean`):

When you provide an artist URL or search for an artist, also emit a standalone artist-profile row with follower count, verified status, biography, and social handles.

## `language` (type: `string`):

Keep songs only in a specific language. Picking a specific language drops songs Genius detected in another language; songs with no detected language are kept.

## `proxyConfiguration` (type: `object`):

Proxy for the Genius requests. Residential proxies are strongly recommended — Genius blocks datacenter IPs.

## Actor input object example

```json
{
  "searchQueries": [
    "HUMBLE Kendrick Lamar"
  ],
  "artistUrls": [],
  "songUrls": [],
  "maxResults": 10,
  "includeLyrics": true,
  "includeArtistProfile": false,
  "language": "",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `dataset` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "searchQueries": [
        "HUMBLE Kendrick Lamar"
    ],
    "artistUrls": [],
    "songUrls": [],
    "maxResults": 10,
    "includeLyrics": true,
    "includeArtistProfile": false,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("parsebird/genius-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "searchQueries": ["HUMBLE Kendrick Lamar"],
    "artistUrls": [],
    "songUrls": [],
    "maxResults": 10,
    "includeLyrics": True,
    "includeArtistProfile": False,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("parsebird/genius-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "searchQueries": [
    "HUMBLE Kendrick Lamar"
  ],
  "artistUrls": [],
  "songUrls": [],
  "maxResults": 10,
  "includeLyrics": true,
  "includeArtistProfile": false,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call parsebird/genius-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,parsebird/genius-scraper"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/VLxlBBtx196AtNC11/builds/DcbzyzPRRtdFccO7Q/openapi.json
