# Kworb Scraper: Spotify, iTunes & Apple Music Charts (`recordsdata/kworb-music-charts-scraper`) Actor

Scrape kworb.net music charts: Spotify daily and weekly Top 200 for 70+ countries with exact streams, peak and days on chart, live iTunes and Apple Music charts, and 3,000 all-time top artists. Export CSV, Excel, JSON, XML. No login or API key needed.

- **URL**: https://apify.com/recordsdata/kworb-music-charts-scraper.md
- **Developed by:** [RecordsData](https://apify.com/recordsdata) (community)
- **Categories:** Videos, News
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

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?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

<p align="center">
  <img src="https://api.apify.com/v2/key-value-stores/AAm3a1h3Z9nYfrvh9/records/banner?v=3" alt="RecordsData" width="100%" />
</p>

## Kworb Scraper: Spotify, iTunes & Apple Music Charts

> **Kworb Scraper extracts music chart data from kworb.net: Spotify daily and weekly Top 200 for 70+ countries with exact stream counts, Spotify track links and ids, 7-day streams and new-entry flags, live iTunes and Apple Music song charts, and the all-time most-streamed artists ranking (3,000 artists). Pick countries, press Start, export CSV, Excel, JSON or XML. No login, no API key. You pay per chart row delivered, and failed or empty lookups are never charged.**

Kworb is the tracker the music industry checks every morning for Spotify numbers. This actor turns its HTML tables into clean numeric datasets you can chart, join and monitor. Each Spotify row carries rank, position change, artist, title, Spotify track and artist ids with links, days on chart, peak position, streams, stream change and cumulative total. Daily rows add 7-day streams, new-entry and re-entry flags and the chart date. In a verified cloud run on 2026-10-04 the global daily chart returned its number one track (KAROL G, "BbY WOW") at 5,602,174 streams in one day.

### 🎵 What does Kworb Scraper do?

- **Spotify daily and weekly charts by country**: Top 200 tracks per country code (global, us, gb, mx, es, br, de, fr, jp and 60+ more); daily rows add 7-day streams.
- **Catalogue joins and new entries**: `trackIdSpotify`, `trackUrlSpotify`, artist ids, `isNew`, `isReentry`, `chartDate` and `peakTimes` on each Spotify row.
- **iTunes and Apple Music**: live Top 200 sales and streaming rankings per country.
- **All-time top Spotify artists**: up to 3,000 artists with total and daily stream millions.
- **Many countries per run**: global plus ten markets in a single batch.

### 📊 What data can you extract from Kworb?

| Field | Spotify rows | iTunes / Apple Music rows | All-time artists |
|---|---|---|---|
| `recordType` | spotify-chart | itunes-chart, apple-music-chart | top-artist |
| `source`, `country` | yes | yes | no |
| `period` (daily or weekly), `chartDate` | yes | no | no |
| `rank` | yes | yes | yes |
| `change` (position move) | yes | yes | no |
| `isNew`, `isReentry` ("Yes" or "No") | yes | no | no |
| `artist`, `title` | yes | yes | artist only |
| `trackIdSpotify`, `trackUrlSpotify`, `trackUrlKworb` | yes | no | no |
| `artistIdSpotify`, `artistUrlSpotify`, `artistUrlKworb` | yes | no | no |
| `featuredArtists` (name and id of `w/` artists) | when present | no | no |
| `daysOnChart`, `peak`, `peakTimes` | yes | no | no |
| `streams`, `streamsChange`, `totalStreams` | yes | no | no |
| `sevenDayStreams`, `sevenDayStreamsChange` | daily only | no | no |
| `totalStreamsMillions`, `dailyStreamsMillions` | no | no | yes |
| `scrapedAt` | yes | yes | yes |

Fields that do not apply to a source are omitted, so there are no always-empty columns.

### 🧾 Sample output of the music chart export

Example daily Spotify row (global chart). The ids and the 7-day and total figures are illustrative placeholders; the other values come from the 2026-10-04 cloud run:

```json
{
  "recordType": "spotify-chart",
  "source": "spotify",
  "country": "global",
  "period": "daily",
  "chartDate": "2026-10-04",
  "rank": 1,
  "change": "=",
  "artist": "KAROL G",
  "title": "BbY WOW",
  "trackIdSpotify": "<22-character track id>",
  "trackUrlSpotify": "https://open.spotify.com/track/<id>",
  "daysOnChart": 52,
  "peak": 1,
  "streams": 5602174,
  "streamsChange": 266160,
  "sevenDayStreams": 36000000,
  "totalStreams": 265000000,
  "scrapedAt": "2026-10-04T04:15:49.837Z"
}
```

### 💰 How much does it cost to scrape Kworb charts?

Pay per event. You are charged only for a chart row that was saved to the dataset. There is no start fee. Error rows, unknown country codes and runs that fail are never charged.

| Event | What counts | Price per row (Free tier) | Per 1,000 rows (Free tier) |
|---|---|---|---|
| `spotify-chart-record` | One Spotify chart row | $0.020 | $20.00 |
| `sales-chart-record` | One iTunes or Apple Music row | $0.020 | $20.00 |
| `artist-record` | One all-time artist row | $0.0133 | $13.33 |

Paid Apify plans get lower per-row prices (Bronze to Diamond tiers, down to $15.00 per 1,000 Spotify rows at Gold and above).

Worked example: 1,000 Spotify or iTunes/Apple Music rows cost 1,000 x $0.020 = $20.00, and 1,000 all-time artist rows cost 1,000 x $0.01333 = $13.33. One country chart is 200 rows, about $4.00 on the Free tier. A 10-row test costs $0.20: the verified test run charged exactly 10 `spotify-chart-record` events. A maximum cost per run stops the actor cleanly.

### 🚀 How to scrape Kworb in 3 steps

1. Open the actor and click **Try for free** (new Apify accounts include free credit).
2. Enter country codes (for example `global`, `us`, `mx`), choose daily or weekly, and switch on iTunes, Apple Music or all-time artists if you need them.
3. Set **Max Items**, click **Start**, then download the dataset as CSV, Excel, JSON or XML.

### ⚙️ Kworb Scraper input

| Field | Type | Default | What it does |
|---|---|---|---|
| `includeSpotify` | boolean | true | Spotify Top 200 charts |
| `spotifyCountries` | list | global, us | Country codes, 200 rows each |
| `spotifyPeriod` | daily / weekly | daily | Chart period |
| `includeItunes` | boolean | false | iTunes song charts |
| `itunesCountries` | list | us | iTunes country codes |
| `includeAppleMusic` | boolean | false | Apple Music song charts |
| `appleMusicCountries` | list | us | Apple Music country codes |
| `includeTopArtists` | boolean | false | All-time top artists |
| `maxItems` | integer | 10 | Max rows delivered and billed across all sources |

```json
{
  "includeSpotify": true,
  "spotifyCountries": ["global", "us", "mx"],
  "spotifyPeriod": "weekly",
  "includeAppleMusic": true,
  "appleMusicCountries": ["us"],
  "maxItems": 800
}
```

An invalid `spotifyPeriod` is rejected at start by the platform, before any run or cost.

### 📦 Kworb Scraper output

Each source writes one row per chart entry or artist into the default dataset; the **Charts** view shows the key columns as a table (30 columns in total across all sources). A country code with no chart on kworb gives one `error` row and no charge. If kworb cannot be read and no rows were produced, the run fails with a clear message.

Note for existing users: before 2026-10-09, `totalStreams` on daily Spotify rows held the 7-day figure by mistake. It now holds the real all-time total, and the 7-day figure is in `sevenDayStreams`. Weekly rows were not affected.

### ⚖️ Kworb Scraper vs alternatives

Competitor features and prices read from their public Apify Store pages on 2026-10-09.

| Capability | This actor | jungle_synthesizer LATAM | trovevault Top 200 |
|---|---|---|---|
| Charts and platforms | Spotify, iTunes, Apple Music, all-time artists | Spotify only, 7 LATAM countries | Spotify daily, many markets |
| Daily and weekly | Both, 70+ countries | Both, 7 countries | Daily only |
| Spotify track id and link | Id and link, plus artist ids | Track id and link | Link (`spotifyUrl`) |
| 7-day streams | Daily rows | Daily rows | Yes |
| New and re-entry flags | Yes | Yes | Not listed |
| Filters | Countries, period, sources | Countries, chart types | Markets |
| Only-new mode | No | No (`resumeCursor` only) | No |
| Export | CSV, Excel, JSON, XML | Via dataset API | Via dataset API |
| Price per 1,000 rows | $20 (Free tier) | From $1.00 | From $0.85 |

On Spotify chart columns this actor now matches jungle_synthesizer and adds artist ids, featured artists and stream change. It covers more sources and countries, so it fits if you need iTunes, Apple Music, all-time artists or markets outside Latin America. It costs far more per row. If you only need Spotify charts for a few LATAM markets, or the cheapest daily Top 200 export, a rival is cheaper.

### 🎯 Use cases for Kworb chart data

Label and artist-team reporting, A\&R scouting of rising `streamsChange` or `isNew` tracks, playlist pitching joined by Spotify track id, and sourced "most streamed this week" tables for journalism.

### 🔌 Run Kworb Scraper via API and integrations

```bash
curl -X POST "https://api.apify.com/v2/acts/RecordsData~kworb-music-charts-scraper/runs?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"spotifyCountries":["global"],"spotifyPeriod":"daily","maxItems":10}'
```

Schedule it daily in Apify, or connect it to Make, Zapier, n8n, Google Sheets or Slack.

### 🤖 Kworb Scraper MCP server for AI agents

AI agents can call this Actor through the Apify MCP server at `https://mcp.apify.com?tools=RecordsData/kworb-music-charts-scraper`. All input fields have defaults, so an agent can call it with an empty input and get 10 Spotify chart rows.

Add this to your MCP client configuration (Claude Desktop, Cursor, VS Code or any client that supports remote MCP servers):

```json
{
  "mcpServers": {
    "apify": {
      "url": "https://mcp.apify.com?tools=RecordsData/kworb-music-charts-scraper"
    }
  }
}
```

Example agent prompt:

> Use the Kworb Scraper to get the Spotify weekly chart for global and mx, limit it to 40 rows, and tell me which track has the largest streamsChange.

An agent should choose this Actor when it needs numeric Spotify stream counts per country, Spotify track ids, iTunes or Apple Music song charts, or the all-time most-streamed artists list from kworb.net.

### 🛡️ Is it legal to scrape kworb.net?

The actor reads public chart pages at a polite request rate and collects factual ranking data only. It collects no personal data and bypasses no login. Check the terms of kworb.net and of the original chart owners (Spotify, Apple) before republishing, and credit the source.

### ❓ Frequently asked questions

#### Where do the Kworb Scraper stream numbers come from?

The stream numbers come from kworb.net, which publishes Spotify chart data. Kworb Scraper copies the values shown on the kworb page for each chart row: rank, position change, daily or weekly streams, stream change, peak position, days on chart, cumulative total streams and, on daily charts, 7-day streams. It does not use a Spotify API key or login.

#### Which countries can I scrape with Kworb Scraper?

Kworb Scraper supports the Spotify global chart plus roughly 70 country codes such as us, gb, mx, es, br, de, fr and jp. iTunes and Apple Music cover the main storefronts. A country code with no chart on kworb.net returns one error row in the dataset, and that row is never charged.

#### Does Kworb Scraper support weekly Spotify charts?

Yes. Set the spotifyPeriod input of Kworb Scraper to weekly to get the Spotify weekly Top 200 with weekly stream totals, or leave it at daily. The period option only applies to Spotify. The iTunes and Apple Music pages on kworb.net are live rankings, so those rows have no period field.

#### Why did my Kworb Scraper run return 0 results?

Either every country code you entered has no chart on kworb.net, in which case Kworb Scraper succeeds, shows a status message and charges nothing, or kworb.net could not be read, in which case the run fails with a clear message and also charges nothing. Check the country codes first, then try again.

#### Will I be charged for failed or empty rows in Kworb Scraper?

No. Kworb Scraper bills only chart rows that were saved to the dataset, and duplicates are removed before billing. Error rows, unknown country codes and failed runs are never charged. On the Free tier a Spotify or iTunes/Apple Music row costs $0.020 and an all-time artist row costs $0.0133.

#### How do I limit my spend on Kworb Scraper?

Use the maxItems input and the maximum cost per run option in the Apify run settings. Kworb Scraper stops cleanly at either limit and keeps the rows already delivered. Since one Spotify country chart is 200 rows, a 10-row test costs $0.20 on the Free tier, which is a cheap way to check the output.

#### Can I try Kworb Scraper for free?

Yes. Free Apify users are limited to 10 rows per Kworb Scraper run, which is enough to test the output fields, and new Apify accounts include free credit. Paid Apify plans remove the 10-row limit and also get lower per-row prices, down to $0.015 per Spotify row at the Gold tier and above.

#### How do I get the Spotify track link or id from Kworb Scraper?

Every Spotify chart row includes trackIdSpotify and trackUrlSpotify, plus artistIdSpotify and artistUrlSpotify, so you can join chart rows to a catalogue or playlist tool. Kworb names its track and artist pages after the 22-character Spotify id, and the actor reads the id from those links. Rows also carry trackUrlKworb. iTunes, Apple Music and artist rows have no Spotify ids.

#### Does Kworb Scraper return 7-day streams?

Yes, on daily Spotify charts. Each daily row has sevenDayStreams and sevenDayStreamsChange, copied from the two extra columns on the kworb daily page. Weekly Spotify rows, iTunes and Apple Music rows do not have these fields, and they are omitted rather than filled with null. The totalStreams field is the all-time total on both daily and weekly rows.

#### How do I find new entries and re-entries on the Spotify chart?

Each Spotify row has isNew and isReentry, set to Yes when kworb marks the position change as NEW or RE, otherwise No. Filter the dataset on isNew equal to Yes to list tracks that just entered the chart. The chartDate field shows the date of the chart, and peakTimes shows how often a track reached its peak. There is no separate only-new input.

#### Does Kworb Scraper keep a history of past charts?

No. Kworb Scraper reads the latest daily or weekly chart that kworb.net publishes at run time, and it has no input for a past date. To build a history, schedule the actor daily in Apify and keep the datasets, using the chartDate field to tell the snapshots apart. There is no built-in only-new or monitor mode, because kworb rewrites its charts every day.

#### Why is the Kworb all-time artists list in millions?

Kworb publishes the all-time most-streamed artists totals in millions, so Kworb Scraper keeps that unit and names the columns totalStreamsMillions and dailyStreamsMillions. The list holds up to 3,000 artists. Switch it on with includeTopArtists, and note that these rows are billed as all-time artist rows, not as chart rows.

### 🎧 Want more music and media data? Other RecordsData scrapers

- [Deezer Music Scraper](https://apify.com/RecordsData/deezer-music-scraper): tracks, albums and artists from Deezer.
- [Apple Podcasts Scraper](https://apify.com/RecordsData/apple-podcasts-scraper): podcast charts and episode data.
- [TikTok Scraper](https://apify.com/RecordsData/tiktok-scraper): videos, profiles and engagement rates.

### 💬 Support

Found a bug or a missing field? Open the Issues tab on this actor's page, or write to contact.punkrecordsdata@gmail.com. Custom solutions available on request.

Last updated: 2026-10-11

# Actor input Schema

## `includeSpotify` (type: `boolean`):

Set true to scrape Spotify streaming charts from kworb.net: the Top 200 tracks per country with streams, daily change, peak position and days on chart.

## `spotifyCountries` (type: `array`):

Spotify chart country codes, for example global, us, gb, mx, es, br, de, fr, jp (70+ supported). Each code adds up to 200 chart rows. Unknown codes return an error row that is not charged.

## `spotifyPeriod` (type: `string`):

Spotify chart period: daily (latest day) or weekly (latest week).

## `includeItunes` (type: `boolean`):

Set true to add live iTunes song sales charts from kworb.net (Top 200 per country).

## `itunesCountries` (type: `array`):

Two-letter country codes for the iTunes song charts, for example us, gb, mx, de. Used only when iTunes charts are on.

## `includeAppleMusic` (type: `boolean`):

Set true to add Apple Music streaming song charts from kworb.net (Top 200 per country).

## `appleMusicCountries` (type: `array`):

Two-letter country codes for the Apple Music song charts, for example us, gb, mx, de. Used only when Apple Music charts are on.

## `includeTopArtists` (type: `boolean`):

Set true to add the all-time most-streamed Spotify artists ranking (up to 3,000 artists with total and daily stream millions).

## `maxItems` (type: `integer`):

Maximum chart rows to return and pay for across all sources. Default 10. Free Apify users are capped at 10 rows. Paid users can raise it up to 1,000,000.

## Actor input object example

```json
{
  "includeSpotify": true,
  "spotifyCountries": [
    "global",
    "us"
  ],
  "spotifyPeriod": "daily",
  "includeItunes": false,
  "itunesCountries": [
    "us"
  ],
  "includeAppleMusic": false,
  "appleMusicCountries": [
    "us"
  ],
  "includeTopArtists": false,
  "maxItems": 10
}
```

# Actor output Schema

## `overview` (type: `string`):

Key fields per row

## `fullData` (type: `string`):

Complete dataset with all fields

# 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 = {
    "spotifyCountries": [
        "global",
        "us"
    ],
    "itunesCountries": [
        "us"
    ],
    "appleMusicCountries": [
        "us"
    ],
    "maxItems": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("recordsdata/kworb-music-charts-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 = {
    "spotifyCountries": [
        "global",
        "us",
    ],
    "itunesCountries": ["us"],
    "appleMusicCountries": ["us"],
    "maxItems": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("recordsdata/kworb-music-charts-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 '{
  "spotifyCountries": [
    "global",
    "us"
  ],
  "itunesCountries": [
    "us"
  ],
  "appleMusicCountries": [
    "us"
  ],
  "maxItems": 10
}' |
apify call recordsdata/kworb-music-charts-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,recordsdata/kworb-music-charts-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/IOTjtDA2X6FQ13vdP/builds/Mx7r4YhFf0Q6H9BrQ/openapi.json
