The {appler} package is a wrapper around Apple’s App Store Search API. This allows the user to pull information about artists, applications, and anything else available on iTunes or the Apple App Store.
Other functions are included to allow the pulling of information not included in the search API such as application reviews and split of ratings.
The first thing to do is find the ID of the entity you are analysing.
The search_apple function will use Apple’s API to return
any items that are related to the search terms entered. By default it
pulls tracks and audiobooks, however with the entity
parameter we can specify we want to search for artists or
applications.
# Artist ID can be obtained from the artistId column
taylor_swift_songs <- search_apple("Taylor Swift")
taylor_swift <- search_apple("Taylor Swift", media = "music", entity = "musicArtist")
str(taylor_swift)
#> 'data.frame': 15 obs. of 8 variables:
#> $ wrapperType : chr "artist" "artist" "artist" "artist" ...
#> $ artistType : chr "Artist" "Artist" "Artist" "Artist" ...
#> $ artistName : chr "Taylor Swift" "Dan + Shay" "Florence + the Machine" "Taylor Swift DV" ...
#> $ artistLinkUrl : chr "https://music.apple.com/us/artist/taylor-swift/159260351?uo=4" "https://music.apple.com/us/artist/dan-shay/690319057?uo=4" "https://music.apple.com/us/artist/florence-the-machine/281070699?uo=4" "https://music.apple.com/us/artist/taylor-swift-dv/1821786625?uo=4" ...
#> $ artistId : int 159260351 690319057 281070699 1821786625 1865952014 1168567308 570372593 420203509 1552521489 594135753 ...
#> $ amgArtistId : int 816977 2902475 1062562 NA NA 3482058 2808276 2528804 NA 2860391 ...
#> $ primaryGenreName: chr "Pop" "Country" "Alternative" "Pop" ...
#> $ primaryGenreId : int 14 6 20 14 NA 14 14 20 14 20 ...
taylor_swift_id <- taylor_swift$artistIdApplications are slightly different, where they instead of
artistId, trackId is used to store the unique
ID.
github_tracks <- search_apple("GitHub")
github_app <- search_apple("GitHub", media = "software", entity = "software")
# Over 50 apps are returned, however the top is the official GitHub app
github_app_id <- github_app$trackId[1]
cat(github_app_id)
#> 1477376905When searching software, a lot more information is returned, such as
application metadata (size, version, release notes) and average rating.
Use str(github_app) to take a look at everything
included.
Alternatively the ID can be found in the URL.
For artists and tracks it can be found as the last part of the URL.
For example, to find out about Taylor Swift the ID is
159260351 (from https://music.apple.com/us/artist/taylor-swift/159260351),
or her latest album Midnights is 1650841512 (from https://music.apple.com/us/album/midnights-3am-edition/1650841512).
For applications it is almost the same, however it is prefixed with
“id” which will need to be removed when using functions from {appler}.
For example the ID for GitHub is 1477376905 (from https://apps.apple.com/us/app/github/id1477376905).
If you already have the ID, you can use lookup_apple and
it will return the same information as search_apple but for
the specific entity chosen.
taylor_swift_lookup <- lookup_apple(taylor_swift_id)
str(taylor_swift_lookup)
#> 'data.frame': 15 obs. of 8 variables:
#> $ wrapperType : chr "artist" "artist" "artist" "artist" ...
#> $ artistType : chr "Artist" "Artist" "Artist" "Artist" ...
#> $ artistName : chr "Taylor Swift" "Dan + Shay" "Florence + the Machine" "Taylor Swift DV" ...
#> $ artistLinkUrl : chr "https://music.apple.com/us/artist/taylor-swift/159260351?uo=4" "https://music.apple.com/us/artist/dan-shay/690319057?uo=4" "https://music.apple.com/us/artist/florence-the-machine/281070699?uo=4" "https://music.apple.com/us/artist/taylor-swift-dv/1821786625?uo=4" ...
#> $ artistId : int 159260351 690319057 281070699 1821786625 1865952014 1168567308 570372593 420203509 1552521489 594135753 ...
#> $ amgArtistId : int 816977 2902475 1062562 NA NA 3482058 2808276 2528804 NA 2860391 ...
#> $ primaryGenreName: chr "Pop" "Country" "Alternative" "Pop" ...
#> $ primaryGenreId : int 14 6 20 14 NA 14 14 20 14 20 ...Comparing the results of search and lookup:
Once you have the ID, you can get to the interesting part: the reviews. Apple has an RSS feed that enables you to pull the latest 500 reviews for an application, along with information such as the version that was being reviewed, and what rating was given by the user.
There is a limitation that you can only pull the reviews for a single country, and by default the reviews from the US will be returned, however any ISO-2 country code can be used. If the app isn’t available in that country, then there will be a 400 error.
github_reviews <- get_apple_reviews(github_app_id)
head(github_reviews)
#> id review_time author app_version
#> 1 14255328681 2026-07-02 21:18:52 Geisha’bakcj 1.265.0
#> 2 14251710274 2026-07-02 01:12:23 Honestmoms 1.265.0
#> 3 14242758008 2026-06-29 23:00:41 StudioVince 1.264.0
#> 4 14221721910 2026-06-24 19:01:02 Sod-ers 1.264.0
#> 5 14221634817 2026-06-24 18:32:17 Dylan@Rates 1.264.0
#> 6 14210283841 2026-06-21 19:45:03 RaspyKaiser 1.263.0
#> title rating
#> 1 Niceeer 5
#> 2 Dishonest copilot enterprise 1
#> 3 Bestie 5
#> 4 Dislike widget redesign 1
#> 5 Bad Performance 1
#> 6 GitHub Stays Current 5
#> review
#> 1 Good for code
#> 2 Fully dishonest copilot enterprise marketing. You’re promised full capabilities, but then they simply offer nothing. Complete dishonesty and a complete scam.
#> 3 Literally loose myself in this app. Minus - /all
#> 4 No longer matches native widgets; new color scheme is hard to read & distracting next to other widgets.
#> 5 Use this app for GitHub Copilot CLI remote agentic workflows… The agentic performance is significantly worse than using the VS Code Agents platform on my PC…\n\nFor normal repo management I cannot tell you any benefits of having a mobile app… I don’t manage any open-source or public repositories, so I cannot comment on that.
#> 6 They’ve done a very nice job at keeping up with the times and not becoming painfully stagnant. GitHub is still fantastic.One extra piece of functionality available in {appler} is the ability
to scrape the rating split from the App Store. Whilst the average rating
for the app is available in search_apple, it is useful to
know how many 5* ratings are given and how many 1* ratings are
given.