Anghami Scraper - Songs, Albums, Artists & Playlists
Pricing
from $1.70 / 1,000 catalog records
Anghami Scraper - Songs, Albums, Artists & Playlists
Scrape Anghami's public catalog by keyword or player URL. Rows carry their kind (song, album, artist, playlist, tag) with title, artist, plays, followers, podcast flags and artwork. Detail views add the description and a podcast episode list, one per-record toggle.
Pricing
from $1.70 / 1,000 catalog records
Rating
0.0
(0)
Developer
Abot API
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
Anghami Catalog Scraper
Scrape Anghami's public music and podcast catalog (anghami.com, the MENA region's leading streaming service) by keyword or player URL. One request per page of results walks the same JSON gateway the Anghami web player itself calls, so a run reads songs, albums, artists, curated playlists and charting collections from the anonymous public catalog: no account, no session, no streaming, just catalog metadata, at a few hundred KB per page.
Why this scraper
- Full coverage of the anonymous catalog surface: songs, albums (including podcast and audiobook objects), artists, curated playlists and the category tags behind Anghami's genre and chart pages, in one unified record shape.
- Every row reports the record kind, so a mixed search feed filters cleanly in downstream code, and carries play counts, likes, follower counts, verified and podcast flags straight from the feed.
- Dual mode: keyword search for catalog-wide sweeps, or paste player URLs to walk one artist page with its full discography pagination, a playlist, a genre or chart tag, or to fetch a single song or album object.
- Detail view toggle adds the store page description and, for album objects, the complete song and episode id list, charged once per record.
- Recurring monitoring is first-class: incremental mode reports NEW, UPDATED (play or follower moves) and EXPIRED records for scheduled runs, and Resume continues an interrupted crawl from where it stopped.
- MCP connector export: pipe results into Notion, Linear, Airtable or another MCP app you already use.
- Clean dataset contract: record identity (
kind:id), canonical URL, artwork URL and incremental change fields on every row, so downstream consumers can join and dedupe reliably.
Data You Get
Sample shape: values are illustrative placeholders, not from a live record.
| Field | Example |
|---|---|
recordId | "song:0000000" |
kind | "song" |
id | "0000000" |
url | "https://play.anghami.com/song/0000000" |
title | "Sample Song Title" |
artist | "Sample Artist" |
artistId | "000000" |
album | "Sample Album Title" |
albumId | "0000000000" |
durationSec | 228 |
year | 2026 |
releasedate | "2026-01-01" |
genre | "Pop - Sample" |
plays | 13000000 |
likes | 120000 |
followers | 17600000 |
nbrSongs | 100 |
isPodcast | false |
isAudiobook | false |
isPodcaster | false (artist rows) |
verified | true |
explicit | false |
keywords | ["Sample Song Title", "Sample Artist"] |
coverArt | "https://artwork.anghcdn.co/webp/?id=000000000&size=400" |
webTitle / webDescription | detail-view extras |
curator | "Anghami Editorial" (playlist-style album objects) |
songIds | ["0000000000", "0000000001"] (album objects, detail toggle on) |
changeType | "NEW" (incremental mode) |
scrapedAt | "2026-01-01T00:00:00Z" |
How to Use
1. Search by keyword
{"mode": "search","searchTerms": ["Sherine", "Wael Kfoury"],"maxItems": 50}
2. Music only, from a search
{"mode": "search","searchTerms": ["new arabic releases"],"kinds": ["song", "album"],"maxItems": 100}
3. Walk an artist's catalog (URL mode)
{"mode": "url","urls": ["https://play.anghami.com/artist/422"],"maxItems": 100}
Past a playlist, category tag or album URL the same way; each URL decides its own scope.
4. Recurring monitoring (incremental mode)
{"mode": "url","urls": ["https://play.anghami.com/artist/422"],"incrementalMode": true,"emitUnchanged": false}
Run it on a schedule: the first run marks everything NEW, later runs report only the changes (play counts and follower moves included as UPDATED).
Input Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
mode | select | search | Search by keyword, or process pasted player URLs. |
searchTerms | string list | ["Sherine"] | Keywords to search. Search mode only. |
urls | string list | - | Player URLs (artist, song, album, playlist, tag pages). URL mode only. |
kinds | multi-select | - | Only keep rows of these kinds (song, album, artist, playlist, tag). Applied to the rows this run reads, in both modes. A pasted song or album URL is the one exception: the object you pasted is returned in full regardless of this filter. |
excludePodcasts | checkbox | false | Drop rows flagged as podcast episodes (both flagged song rows and the podcast object itself, an album-kind row). A pasted song or album URL is the one exception: that object is returned in full. |
fetchDetails | checkbox | false | Fetch each record's detail view (store page description, album song/episode id list). Charged once per record; a pasted song or album URL is not charged this fee, since its object's own page was read because it was pasted. |
maxItems | integer | 20 | The single cap on a run; stop after this many records. 0 = unlimited. |
maxPages | integer | 0 | Safety bound on pages walked per source. 0 = no page limit. |
resumeFromRunId | text | - | Continue an interrupted or capped run, skipping records it already collected. |
incrementalMode | checkbox | false | Recurring monitoring: return only NEW, UPDATED and REAPPEARED records on later runs. |
stateKey | text | - | Name the monitoring campaign (incremental mode only). |
emitUnchanged | checkbox | false | Also return unchanged rows (billed). |
emitExpired | checkbox | false | Also return records no longer found (billed, complete scans only). |
mcpConnectors | connector list | - | Optional export into Notion, Linear, Airtable or Apify MCP apps. |
notionParentPageUrl | text | - | Notion parent page for the Notion connector. |
maxNotifyListings | integer | 50 | Cap on records written to each connector per run. |
proxy | proxy object | default pool | Leave the default unless a run reports it could not read any results. |
Output Example
Sample shape: values are illustrative placeholders, not from a live record.
{"recordId": "song:0000000000","kind": "song","id": "0000000000","url": "https://play.anghami.com/song/0000000000","coverArt": "https://artwork.anghcdn.co/webp/?id=000000000&size=400","title": "Sample Song Title","artist": "Sample Artist","artistId": "000000","album": "Sample Album Title","albumId": "0000000000","durationSec": 228,"year": 2026,"releasedate": "2026-01-01","genre": "Pop - Sample","plays": 13011686,"likes": 120000,"lyrics": true,"explicit": false,"isPodcast": false,"isAudiobook": false,"keywords": ["Sample Song Title", "Sample Artist"],"scrapedAt": "2026-01-01T00:00:00Z","changeType": "NEW","firstSeenAt": "2026-01-01T00:00:00Z","lastSeenAt": "2026-01-01T00:00:00Z"}
Album and podcast objects carry nbrSongs and, with the detail toggle on, songIds (the episode list) and curator. Artist rows carry isPodcaster and followers.
Send results into your apps (MCP connectors)
Optionally pipe results into the apps you already use via Model Context Protocol (MCP) connectors. Authorize a connector under Apify > Settings > API & Integrations, then select it in the mcpConnectors input. Notion needs notionParentPageUrl (the page under which item pages are created) and creates one page per record; other connectors get a best-effort write. Each connector receives a condensed, human-readable summary per record (title plus key fields flattened to text), not the full record; the complete record always stays in the Apify dataset. maxNotifyListings caps how many records are written per connector per run. Leaving the connector fields empty skips the export entirely; nothing about the dataset output changes.
๐ More scrapers you might like
Pair this actor with these related scrapers from the same team:
| ๐งฉ TIDAL Scraper Scrape TIDAL tracks, albums, artists, playlists and public mixes by search phrase or URL... | ๐ค Suno Scraper Collect public Suno music data: songs with lyrics, style tags, model version, play and... |
| โฝ JioHotstar Scraper Scrape the JioHotstar catalog by content type or URL. Extract shows, movies, episodes... | ๐งฉ Bandsintown Scraper Scrape Bandsintown concert and festival dates: artist tour calendars, venue profiles... |
| ๐งฉ TuneIn Scraper Scrape TuneIn by keyword, category, genre, location or URL. Extract stations and podcasts... | ๐งฉ Roblox Scraper Scrape Roblox experiences, marketplace items, users and communities. Player counts... |
๐ Browse all abotapi scrapers
๐ฌ Support & custom scrapers
- ๐ Found a bug or a missing field? Open a ticket on the Issues tab. We usually reply within hours.
- ๐ ๏ธ Need another site, extra fields or a private build? Email abotapi@proton.me or message Telegram @abotapi.
- โญ Enjoying it? A quick review on the actor page helps other users find it.