MusicBrainz Scraper
Scrape MusicBrainz artists, releases, recordings and labels. Every row has an MBID, plus names, types, dates and tags. No API key. $0.20 per 1,000 records.
How it works
- 1Open it on Apify
Hit Run on Apify — it opens the tool in the cloud, no install.
- 2Set the inputs
Adjust
entity,query,maxItems(sensible defaults are pre-filled). - 3Click Run
The tool runs on Apify’s cloud and collects the data for you.
- 4Export the results
Download as JSON, CSV or Excel, or pipe straight into your app, Google Sheets, or an AI agent.
Pricing
$0.0002 per item = $0.2 per 1,000
| You are charged for | When | Price |
|---|---|---|
| Item returned | Charged per MusicBrainz record returned. | $0.0002 |
Pay-per-event pricing: you are billed per result, not per subscription. Billing is handled by Apify on your own account. These are the live Apify store prices, in effect since 2026-08-04, and they are what you are actually charged.
Inputs
| Field | What it does | Type |
|---|---|---|
entity | Which kind of music record to search for. artist = bands/performers, release = a specific album/single edition, recording = an individual track, release-group = an album as a concept across editions, label = a record label. | string |
query | The text to search for. Plain keywords work (e.g. "radiohead", "ok computer"), and MusicBrainz Lucene syntax is also supported (e.g. artist:radiohead, country:GB). Required. | string |
maxItems | Maximum number of records to return. The actor paginates 100 per page and respects MusicBrainz's ~1 request/second rate limit, so very large values take proportionally longer. | integer |
notionConnector | Optional. Write each item as a page into your Notion when the run finishes. Authorize a Notion connector once in Settings → API & Integrations → MCP connectors, then pick it here. Leave empty to skip (default), results are always saved to the dataset regardless. | string |
notionParentId | Optional. The Notion data source ID of the database to write into (only used if a Notion connector is set). Leave empty to create the pages privately in your workspace instead. | string |
What you get
A structured dataset — each result includes fields like:
nametitletypeartistCreditdatelifeSpancountryurlExport every run as JSON, CSV or Excel, or send it to your app, a database, Google Sheets, or an AI agent.
Related tools in Media & Entertainment Data
Other ready-to-run tools in the same category — all pay-per-use on the Apify cloud.
IMDb Search Scraper
Search IMDb for titles, people and companies: IMDb ID, year, category, cast line, poster, URL. About 8 per query. $2.50 per 1,000.
Steam Games Scraper
Scrape Steam games with no API key. Get price, discount, genres, developers, Metacritic, platforms, SteamSpy stats and player reviews. $2 per 1,000 rows.
Books Scraper (Google Books + Open Library)
Search Open Library or Google Books: title, authors, ISBN, publisher, year, rating and cover. Open Library needs no key. $1.00 per 1,000 books.
TVMaze TV Show Scraper
Search TVMaze for TV shows and people. Get ratings, genres, network, IMDb IDs, images and full episode lists, as JSON. $2 per 1,000 rows.
Where this tool sits
- Categories
- Media & Entertainment Data
MusicBrainz Scraper: artists, releases, recordings and labels with their MBIDs
Pick what you are looking for, type a search term, and get flat rows back from MusicBrainz, the open music encyclopedia. Every row carries an MBID, the permanent ID you can join on later, plus the name, type, dates, country and a direct link. No API key, no login.
One thing to know before you plan a big pull: MusicBrainz asks callers to go slowly, so this reads 100 records a page with about a second between pages. Ten thousand records is a real wait, not a few seconds, and that pacing is deliberate.
| Input | An entity type and a search term |
| Output | One row per record |
| Ceiling | 10,000 records per run |
| Account needed | None, and no API key |
| Price | $0.20 per 1,000 records, flat on every plan |
🔍 What MusicBrainz Scraper does
It runs one search against MusicBrainz and pages through the answers until it has the number you asked for or the catalogue runs out. Rows are deduplicated on MBID as it goes, so a paginated pull never hands you the same record twice.
entity decides what kind of thing you get back, and the five kinds are genuinely different:
entity | What it is |
|---|---|
artist | A band, a performer or a composer. |
release | One specific edition of an album or single, the actual product. |
recording | A single track. |
release-group | An album as a concept, tying its editions together. |
label | A record label. |
query takes plain keywords like ok computer, and it also takes MusicBrainz's own Lucene syntax, so artist:radiohead and country:GB both work.
📥 What you give it
{
"entity": "release-group",
"query": "ok computer",
"maxItems": 50
}
| Field | Default | What it is |
|---|---|---|
entity | artist | artist, release, recording, release-group or label. |
query | none | The text to search for. Keywords or Lucene syntax. The Console box starts at radiohead; an API call has to send its own. |
maxItems | 100 | 1 to 10,000, counted after deduplication. Large values take proportionally longer because of the pacing. |
notionConnector | none | Optional. Writes one Notion page per record when the run finishes. Authorise the connector once under Settings, API & Integrations, MCP connectors. |
notionParentId | none | Optional. The Notion data source to write into. Leave it empty and the pages land privately in your workspace. |
proxyConfiguration | off | Optional network settings. A normal run does not need them. |
Send an empty query and the run returns a BAD_INPUT row instead of records.
📤 What you get back
A real artist row from a recent run, with the tag list cut short because it runs to dozens:
{
"ok": true,
"mbid": "a74b1b7f-71a5-4011-9441-d0b5e4122711",
"entity": "artist",
"url": "https://musicbrainz.org/artist/a74b1b7f-71a5-4011-9441-d0b5e4122711",
"score": 100,
"disambiguation": null,
"name": "Radiohead",
"sortName": "Radiohead",
"type": "Group",
"country": "GB",
"artistCredit": null,
"date": null,
"lifeSpan": "1991 –",
"beginDate": "1991",
"endDate": null,
"ended": null,
"tags": ["alternative rock", "art rock", "rock", "british", "experimental rock", "..."]
}
Five fields are on every row whatever you searched for:
| Field | What it is |
|---|---|
mbid | The MusicBrainz ID. Stable and unique, and the reason most people run this. |
url | The musicbrainz.org page for that record. |
entity | Which kind of record this row is. |
score | MusicBrainz's own relevance score for your search, 0 to 100. |
disambiguation | The short note MusicBrainz uses to tell same-named records apart, when it has one. |
The rest depend on the entity:
| Entity | Fields you also get |
|---|---|
artist | name, sortName, type, country, lifeSpan, beginDate, endDate, ended, tags |
release | title, status, artistCredit, date, country, trackCount, primaryType |
recording | title, artistCredit, date, firstReleaseDate, length in milliseconds, lengthFormatted as m:ss |
release-group | title, type, primaryType, secondaryTypes, artistCredit, date, firstReleaseDate |
label | name, type, country, lifeSpan, beginDate, endDate, labelCode |
artistCredit is the credited string the way MusicBrainz writes it, so A feat. B stays A feat. B. A field MusicBrainz has no value for comes back null rather than missing, and tags are sorted by vote count.
🧾 Reading the output
Two kinds of row land in your dataset.
| Row | How to spot it | Charged |
|---|---|---|
| A record | ok: true and an mbid | yes |
| A diagnostic | ok: false and an errorCode | no |
| Code | What it means |
|---|---|
BAD_INPUT | query was empty, or entity was not one of the five. |
NO_RESULTS | The search ran and matched nothing. |
NETWORK | MusicBrainz was unreachable or answered badly. Re-run it. |
A malformed Lucene query can come back as NO_RESULTS rather than an error. If a search you expected to match returns nothing, check the syntax before you conclude the record is not there.
▶️ How to run it
1. Open MusicBrainz Scraper and click Try for free. 2. Pick an Entity type. Artist is the default. 3. Type your term into Search query. 4. Set Max results. Start around 10 to see the shape of the output, then click Start. 5. Download the dataset as JSON, CSV or Excel, or read it from the Apify API.
💰 How much does it cost?
$0.20 per 1,000 records. Flat on every Apify plan, no volume tiers.
You pay per record delivered. Duplicate MBIDs across pages are dropped before anything is charged, and diagnostic rows are not charged.
💡 What people use it for
- Resolving a messy catalogue of artist or album names to MBIDs, so everything downstream has one
key to join on.
- Filling in release dates, countries and label codes for a back catalogue.
- Pulling a genre slice with Lucene syntax, then sorting on
scoreto see what actually matched. - Checking whether a release exists in the open catalogue at all before adding it by hand.
🚧 What it does not do
- Search only. No lookup by MBID, no browsing an artist's releases, no track listings.
- No audio, no cover art, no chart positions.
- Relevance ordering is MusicBrainz's.
scoreis its search score, not a popularity measure. - Large runs are slow on purpose. The pacing is what MusicBrainz asks of callers, and this
actor keeps to it.
- If a page fails partway through a long run, the run ends with a diagnostic row and the records
already collected do not land. On big pulls, several smaller runs are safer than one huge one.
- A malformed query reads as no results, not as a syntax error.
🧭 Which open-data scraper do you need?
| If you want | Use |
|---|---|
| Artists, releases, recordings and labels | This one |
| Wikidata entities and their claims | Wikidata Scraper |
| Films, shows and people on IMDb | IMDb Search Scraper |
| TV shows, episodes and cast | TV Show Scraper |
| Books, editions and ISBNs | Books Scraper |
❓ Questions people ask
Do I need a MusicBrainz account or key? No. The search API is open and this actor uses no credential of yours.
What is an MBID for? It is a permanent identifier for one record. Store it once and you can re-find or re-join that artist, album or track later even if the name changes.
Can I look a record up by its MBID? Not with this one. It searches by text.
Why is my 10,000-record run taking minutes? The pacing. MusicBrainz asks callers to go slowly and this respects that, so time scales with the number of pages.
Can I use the data commercially? MusicBrainz core data is CC0 and the rest sits under its own data licences. Read those and credit MusicBrainz when you redistribute.
Can I schedule it? Yes, like any Apify actor.
🆘 If something breaks
Open the Issues tab on the actor page. Send the entity, the exact query and the run ID. The errorCode on the diagnostic row usually names the problem on its own.