Sylvatica.

Back to Library

Scrape Apple Music

js 1/26/2026
14
const axios = require("axios");
const cheerio = require("cheerio");

async function applemusic(query, region = "us") {
  try {
    const res = await axios.get(
      `https://music.apple.com/${region}/search?term=${encodeURIComponent(query)}`,
      {
        timeout: 30000,
        headers: {
          "User-Agent":
            "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36",
        },
      }
    );

    const $ = cheerio.load(res.data);
    const results = [];

    $(".top-search-lockup").each((_, el) => {
      const title = $(el).find(".top-search-lockup__primary__title").text().trim();
      const artist = $(el).find(".top-search-lockup__secondary").text().trim();
      const link = $(el).find(".click-action").attr("href");
      const image = $(el).find("picture source").attr("srcset")?.split(" ")[0];

      if (title && artist && link) {
        results.push({
          title,
          artist,
          link: link.startsWith("http")
            ? link
            : `https://music.apple.com${link}`,
          image: image || null,
        });
      }
    });

    return results;
  } catch (error) {
    console.error("API Error:", error.message);
    throw new Error("Failed to get response from Apple Music");
  }
}

module.exports = applemusic;