Letterboxd Film & Reviews Scraper avatar

Letterboxd Film & Reviews Scraper

Pricing

from $2.70 / 1,000 films

Go to Apify Store
Letterboxd Film & Reviews Scraper

Letterboxd Film & Reviews Scraper

Collect public Letterboxd film metadata, ratings, and optional reviews, or read public profiles, watched films, and lists. Choose a source, save structured rows, and export the data from your Apify dataset.

Pricing

from $2.70 / 1,000 films

Rating

0.0

(0)

Developer

Maxime Dupré

Maxime Dupré

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

🎬 Turn Letterboxd pages into film data

Film researchers, catalog teams, and developers can use this Actor to collect public Letterboxd films, ratings, reviews, profiles, watched films, and list entries in structured dataset rows. Choose a public source and get fields such as film identity, cast, genres, ratings, review text, profile activity, or list position for research and catalog work.

📦 Letterboxd film and activity rows

Returned data

Each dataset row has a resultType value. The five row shapes are film, review, profile, watchedFilm, and listEntry. Reviews are saved as their own rows when you include them and public reviews are available. Optional source fields can be absent when Letterboxd does not show them.

▶️ Choose a Letterboxd source

How to run

  1. Select a target: films, search, list, popular, profile, or watched.
  2. Enter the URL, ID, search text, or profile name that matches the target.
  3. Turn on includeReviews for film, search, list, or popular targets when you also want public review rows.
  4. Choose a review order and turn on completeReviewText when you want the full text available from the source.
  5. Set maxItems when you want an optional stop point. Leave it empty to collect all available results until the source is exhausted.
  6. Start the run and open the dataset from the Output tab.

Run each different film search separately. This Actor reads public Letterboxd pages and does not change ratings, lists, profiles, or other Letterboxd content.

⚙️ Input

Input fields

FieldTypeWhat it does
targetstringSelects films, search, list, popular, profile, or watched.
filmUrlsOrIdsarray of stringsPublic film URLs or film IDs. Use for films; each entry is one film.
searchQuerystringOne film-related search such as a title, director, cast member, or keyword. Use for search. Run each different search separately.
listUrlOrIdstringOne public Letterboxd list URL or list ID. Use for list.
browseModestringSelect popular for the popular target.
browsePeriodstringPopular-film period: day, week, month, year, or all-time.
genrestringOptional Letterboxd genre filter for popular films, such as Drama.
profileUrlOrUsernamestringPublic profile URL or username. Use for profile or watched.
includeReviewsbooleanAdds public film review rows for films, search, list, and popular targets. Default: false.
reviewOrderstringOrders collected reviews as popular, recent, earliest, highest-rated, or lowest-rated. Default: popular.
completeReviewTextbooleanGets complete review text when the source provides only a shortened preview. Default: false.
maxItemsintegerOptional stop point for search, list, popular, profile, or watched. Leave it empty to collect all available results until the source is exhausted.

Example public input

{
"target": "films",
"filmUrlsOrIds": [
"https://letterboxd.com/film/the-shawshank-redemption/"
],
"includeReviews": false,
"reviewOrder": "popular",
"completeReviewText": false
}

🧾 Output

Film rows

FieldTypeWhat it does
resultTypestringAlways film for a film row.
film.idstring, optionalStable Letterboxd film ID.
film.urlURLPublic Letterboxd page for the film.
film.titlestringFilm title shown on Letterboxd.
film.releaseYearinteger, optionalFilm release year.
film.directorsarray of objects, optionalPeople credited as directors.
film.directors[].namestringDirector name.
film.directors[].urlURL, optionalPublic director page.
film.castarray of objects, optionalPeople credited in the cast.
film.cast[].namestringCast member name.
film.cast[].urlURL, optionalPublic cast member page.
film.genresarray of strings, optionalGenres shown for the film.
film.runtimeMinutesinteger, optionalFilm runtime in minutes.
film.synopsisstring, optionalFilm synopsis or description.
film.posterUrlURL, optionalFilm poster image URL.
film.averageRatingnumber, optionalPublic average Letterboxd rating.
film.ratingCountinteger, optionalNumber of public ratings used for the average.
film.writtenReviewCountinteger, optionalNumber of written reviews shown by Letterboxd.
film.watchCountinteger, optionalNumber of members who marked the film watched.
film.fanCountinteger, optionalNumber of members who marked the film as a favorite.
film.listCountinteger, optionalNumber of public lists that include the film.
film.countriesarray of strings, optionalCountries linked to the film.
film.languagesarray of strings, optionalLanguages linked to the film.
film.productionCompaniesarray of strings, optionalStudios or production companies linked to the film.
film.taglinestring, optionalFilm tagline when available.
film.imdbIdstring, optionalIMDb identifier when shown.
film.tmdbIdstring, optionalTMDb identifier when shown.
searchQuerystring, optionalSearch text that found the film.
browseobject, optionalPopular-film selection that found the film.
browse.modestringBrowse type, currently popular.
browse.periodstringBrowse period: day, week, month, year, or all-time.
browse.genrestring, optionalGenre filter used for the browse selection.

Genuine beta row

The film row below is shortened. The cast array is marked with "..." to keep the example small; the other shown values are from a successful current-beta run.

{
"resultType": "film",
"film": {
"id": "51778",
"url": "https://letterboxd.com/film/the-shawshank-redemption/",
"title": "The Shawshank Redemption",
"releaseYear": 1994,
"directors": [
{
"name": "Frank Darabont",
"url": "https://letterboxd.com/director/frank-darabont/"
}
],
"cast": "...",
"genres": [
"Crime",
"Drama"
],
"runtimeMinutes": 142,
"synopsis": "Imprisoned in the 1940s for the double murder of his wife and her lover, upstanding banker Andy Dufresne begins a new life at the Shawshank prison, where he puts his accounting skills to work for an amoral warden. During his long stretch in prison, Dufresne comes to be admired by the other inmates -- including an older prisoner named Red -- for his integrity and unquenchable sense of hope.",
"posterUrl": "https://a.ltrbxd.com/resized/sm/upload/7l/hn/46/uz/zGINvGjdlO6TJRu9wESQvWlOKVT-0-600-0-900-crop.jpg?v=8736d1c395",
"averageRating": 4.6,
"ratingCount": 3061992,
"writtenReviewCount": 334133,
"watchCount": null,
"fanCount": 185000,
"listCount": null,
"countries": [
"USA"
],
"languages": [
"English",
"en"
],
"productionCompanies": [
"Castle Rock Entertainment"
],
"tagline": "Fear can hold you prisoner. Hope can set you free.",
"imdbId": "tt0111161",
"tmdbId": "278"
}
}

Review rows

FieldTypeWhat it does
resultTypestringAlways review for a review row.
film.idstring, optionalStable Letterboxd film ID for the reviewed film.
film.urlURLPublic Letterboxd page for the reviewed film.
film.titlestringReviewed film title.
film.releaseYearinteger, optionalReviewed film release year.
film.directorsarray of objects, optionalDirectors linked to the reviewed film.
film.directors[].namestringDirector name.
film.directors[].urlURL, optionalPublic director page.
film.castarray of objects, optionalCast linked to the reviewed film.
film.cast[].namestringCast member name.
film.cast[].urlURL, optionalPublic cast member page.
film.genresarray of strings, optionalGenres shown for the reviewed film.
film.runtimeMinutesinteger, optionalReviewed film runtime in minutes.
film.synopsisstring, optionalReviewed film synopsis or description.
film.posterUrlURL, optionalReviewed film poster image URL.
film.averageRatingnumber, optionalPublic average Letterboxd rating for the film.
film.ratingCountinteger, optionalNumber of public film ratings.
film.writtenReviewCountinteger, optionalNumber of written film reviews shown by Letterboxd.
film.watchCountinteger, optionalNumber of members who marked the film watched.
film.fanCountinteger, optionalNumber of members who marked the film as a favorite.
film.listCountinteger, optionalNumber of public lists that include the film.
film.countriesarray of strings, optionalCountries linked to the film.
film.languagesarray of strings, optionalLanguages linked to the film.
film.productionCompaniesarray of strings, optionalStudios or production companies linked to the film.
film.taglinestring, optionalFilm tagline when available.
film.imdbIdstring, optionalIMDb identifier when shown.
film.tmdbIdstring, optionalTMDb identifier when shown.
review.idstring, optionalStable Letterboxd review ID.
review.urlURLPublic page for the review.
review.textstringReview text shown on Letterboxd.
review.ratingnumber, optionalRating given by the reviewer.
review.likesinteger, optionalNumber of likes shown for the review.
review.containsSpoilersboolean, optionalWhether Letterboxd marks the review as a spoiler.
review.postedAtstring, optionalReview posting date or time when shown.
review.commentCountinteger, optionalNumber of comments shown for the review.
review.watchedboolean, optionalWhether the reviewer marks the film as watched.
review.rewatchedboolean, optionalWhether the reviewer marks this as a rewatch.
review.reviewerobjectPublic reviewer identity and profile link.
review.reviewer.usernamestringLetterboxd username of the reviewer.
review.reviewer.displayNamestring, optionalReviewer name when shown.
review.reviewer.profileUrlURLPublic reviewer profile page.
review.reviewer.avatarUrlURL, optionalReviewer profile image URL when shown.
searchQuerystring, optionalSearch text that found the film.
browseobject, optionalPopular-film selection that found the film.
browse.modestringBrowse type, currently popular.
browse.periodstringBrowse period used for the selection.
browse.genrestring, optionalGenre filter used for the selection.

Profile rows

FieldTypeWhat it does
resultTypestringAlways profile for a profile row.
profile.usernamestringLetterboxd username.
profile.displayNamestring, optionalName shown for the profile.
profile.urlURLPublic Letterboxd profile page.
profile.biostring, optionalPublic profile biography.
profile.locationstring, optionalPublic profile location.
profile.websiteUrlURL, optionalPublic website linked from the profile.
profile.avatarUrlURL, optionalProfile image URL.
profile.joinedAtstring, optionalDate the profile joined Letterboxd.
profile.statsobject, optionalPublic counts shown on the profile.
profile.stats.filmsWatchedCountinteger, optionalNumber of films marked watched.
profile.stats.ratingsCountinteger, optionalNumber of film ratings shown.
profile.stats.reviewsCountinteger, optionalNumber of written reviews shown.
profile.stats.listsCountinteger, optionalNumber of lists shown.
profile.stats.followersCountinteger, optionalNumber of followers shown.
profile.stats.followingCountinteger, optionalNumber of profiles followed.
profile.favoritesarray of objects, optionalFavorite films shown on the profile.
profile.favorites[].idstring, optionalStable film ID for a favorite.
profile.favorites[].urlURLPublic page for a favorite film.
profile.favorites[].titlestringFavorite film title.
profile.favorites[].releaseYearinteger, optionalFavorite film release year.
profile.favorites[].posterUrlURL, optionalFavorite film poster URL.
profile.recentActivityarray of objects, optionalRecent public activity shown on the profile.
profile.recentActivity[].activityTypestringActivity type: watched, reviewed, rated, liked, or rewatched.
profile.recentActivity[].filmobjectFilm linked to the activity.
profile.recentActivity[].film.idstring, optionalStable film ID for the activity film.
profile.recentActivity[].film.urlURLPublic activity film page.
profile.recentActivity[].film.titlestringActivity film title.
profile.recentActivity[].film.releaseYearinteger, optionalActivity film release year.
profile.recentActivity[].film.posterUrlURL, optionalActivity film poster URL.
profile.recentActivity[].urlURL, optionalPublic page for the activity.
profile.recentActivity[].occurredAtstring, optionalActivity date or time.
profile.recentActivity[].ratingnumber, optionalPersonal rating given by the profile.
profile.recentActivity[].rewatchedboolean, optionalWhether the activity marks a rewatch.

Genuine beta row

The profile row below is shortened. The favorites and recent activity arrays are marked with "..."; the shown identity and counts are from a successful current-beta run.

{
"resultType": "profile",
"profile": {
"username": "calvinvaljean",
"displayName": "Gabe Rodríguez",
"url": "https://letterboxd.com/calvinvaljean/",
"stats": {
"filmsWatchedCount": 2577,
"followersCount": 1282,
"followingCount": 1718
},
"favorites": "...",
"recentActivity": "..."
}
}

Watched-film rows

FieldTypeWhat it does
resultTypestringAlways watchedFilm for a watched-film row.
film.idstring, optionalStable Letterboxd film ID.
film.urlURLPublic Letterboxd page for the film.
film.titlestringFilm title.
film.releaseYearinteger, optionalFilm release year.
film.directorsarray of objects, optionalDirectors linked to the film.
film.directors[].namestringDirector name.
film.directors[].urlURL, optionalPublic director page.
film.castarray of objects, optionalCast linked to the film.
film.cast[].namestringCast member name.
film.cast[].urlURL, optionalPublic cast member page.
film.genresarray of strings, optionalGenres shown for the film.
film.runtimeMinutesinteger, optionalFilm runtime in minutes.
film.synopsisstring, optionalFilm synopsis or description.
film.posterUrlURL, optionalFilm poster image URL.
film.averageRatingnumber, optionalPublic average Letterboxd rating.
film.ratingCountinteger, optionalNumber of public film ratings.
film.writtenReviewCountinteger, optionalNumber of written film reviews.
film.watchCountinteger, optionalNumber of members who marked the film watched.
film.fanCountinteger, optionalNumber of members who marked the film as a favorite.
film.listCountinteger, optionalNumber of public lists that include the film.
film.countriesarray of strings, optionalCountries linked to the film.
film.languagesarray of strings, optionalLanguages linked to the film.
film.productionCompaniesarray of strings, optionalStudios or production companies linked to the film.
film.taglinestring, optionalFilm tagline when available.
film.imdbIdstring, optionalIMDb identifier when shown.
film.tmdbIdstring, optionalTMDb identifier when shown.
profile.usernamestringLetterboxd username for the watched history.
profile.displayNamestring, optionalProfile name when shown.
profile.urlURLPublic profile page.
profile.biostring, optionalPublic profile biography.
profile.locationstring, optionalPublic profile location.
profile.websiteUrlURL, optionalPublic website linked from the profile.
profile.avatarUrlURL, optionalProfile image URL.
profile.joinedAtstring, optionalDate the profile joined Letterboxd.
profile.statsobject, optionalPublic profile counts.
profile.stats.filmsWatchedCountinteger, optionalNumber of films marked watched.
profile.stats.ratingsCountinteger, optionalNumber of film ratings shown.
profile.stats.reviewsCountinteger, optionalNumber of written reviews shown.
profile.stats.listsCountinteger, optionalNumber of lists shown.
profile.stats.followersCountinteger, optionalNumber of followers shown.
profile.stats.followingCountinteger, optionalNumber of profiles followed.
profile.favoritesarray of objects, optionalFavorite films shown on the profile.
profile.favorites[].idstring, optionalStable film ID for a favorite.
profile.favorites[].urlURLPublic favorite film page.
profile.favorites[].titlestringFavorite film title.
profile.favorites[].releaseYearinteger, optionalFavorite film release year.
profile.favorites[].posterUrlURL, optionalFavorite film poster URL.
profile.recentActivityarray of objects, optionalRecent public profile activity.
profile.recentActivity[].activityTypestringActivity type.
profile.recentActivity[].filmobjectFilm linked to the activity.
profile.recentActivity[].film.idstring, optionalStable activity film ID.
profile.recentActivity[].film.urlURLPublic activity film page.
profile.recentActivity[].film.titlestringActivity film title.
profile.recentActivity[].film.releaseYearinteger, optionalActivity film release year.
profile.recentActivity[].film.posterUrlURL, optionalActivity film poster URL.
profile.recentActivity[].urlURL, optionalPublic activity page.
profile.recentActivity[].occurredAtstring, optionalActivity date or time.
profile.recentActivity[].ratingnumber, optionalPersonal rating given by the profile.
profile.recentActivity[].rewatchedboolean, optionalWhether the activity marks a rewatch.
watchedAtstring, optionalDate or time when the profile marked the film watched.
personalRatingnumber, optionalRating the profile gave the film.
rewatchedboolean, optionalWhether the profile marked the film as a rewatch.

Genuine beta row

{
"resultType": "watchedFilm",
"film": {
"id": "1089088",
"url": "https://letterboxd.com/film/coyote-vs-acme/",
"title": "Coyote vs. Acme (2026)"
},
"profile": {
"username": "calvinvaljean",
"url": "https://letterboxd.com/calvinvaljean/"
}
}

List-entry rows

FieldTypeWhat it does
resultTypestringAlways listEntry for a list-entry row.
film.idstring, optionalStable Letterboxd film ID.
film.urlURLPublic Letterboxd page for the film.
film.titlestringFilm title.
film.releaseYearinteger, optionalFilm release year.
film.directorsarray of objects, optionalDirectors linked to the film.
film.directors[].namestringDirector name.
film.directors[].urlURL, optionalPublic director page.
film.castarray of objects, optionalCast linked to the film.
film.cast[].namestringCast member name.
film.cast[].urlURL, optionalPublic cast member page.
film.genresarray of strings, optionalGenres shown for the film.
film.runtimeMinutesinteger, optionalFilm runtime in minutes.
film.synopsisstring, optionalFilm synopsis or description.
film.posterUrlURL, optionalFilm poster image URL.
film.averageRatingnumber, optionalPublic average Letterboxd rating.
film.ratingCountinteger, optionalNumber of public film ratings.
film.writtenReviewCountinteger, optionalNumber of written film reviews.
film.watchCountinteger, optionalNumber of members who marked the film watched.
film.fanCountinteger, optionalNumber of members who marked the film as a favorite.
film.listCountinteger, optionalNumber of public lists that include the film.
film.countriesarray of strings, optionalCountries linked to the film.
film.languagesarray of strings, optionalLanguages linked to the film.
film.productionCompaniesarray of strings, optionalStudios or production companies linked to the film.
film.taglinestring, optionalFilm tagline when available.
film.imdbIdstring, optionalIMDb identifier when shown.
film.tmdbIdstring, optionalTMDb identifier when shown.
list.idstring, optionalStable Letterboxd list ID.
list.urlURLPublic Letterboxd list page.
list.namestringList name.
list.descriptionstring, optionalList description.
list.creatorobject, optionalPublic identity of the list creator.
list.creator.usernamestringCreator username.
list.creator.displayNamestring, optionalCreator name when shown.
list.creator.profileUrlURL, optionalPublic creator profile page.
positionintegerFilm position in the public list.
curatorNotestring, optionalNote written by the list curator for this film.

Genuine beta row

{
"resultType": "listEntry",
"film": {
"url": "https://letterboxd.com/film/harakiri/",
"title": "Harakiri (1962)"
},
"list": {
"id": "207314",
"url": "https://letterboxd.com/official/list/letterboxds-top-500-films/",
"name": "Letterboxd's Top 500 Films",
"description": "As of August 24, 2026. Curated by Dave Vis, extracted from here. This list ranks narrative feature films by average member rating. See all films that have entered this list and read about the history of Letterboxd’s all time official number one film. These list stats are unlocked for everybody!Changes from the latest update: (plus an archive of all previous updates)No new entriesEligibility rules:• There is a 25,000 minimum ratings threshold (note that these are different to watches!). See the top underseen films below the ratings threshold, curated by Sam Williams.• Films must be feature-length (more than 40 minutes long) with a festival premiere, theatrical distribution or professional streaming release.• This list excludes: documentaries of any kind, self-released web videos, DTV films, recap or recut films, theatre or stage shows, TV series, specials or episodes. TV movies are included.Official List HQ Directory | All Time Lists | Lists by Dave Vis",
"creator": {
"username": "official",
"displayName": "Moderator dashboard",
"profileUrl": "https://letterboxd.com/moderator/member/official/"
}
},
"position": 1
}

Dataset output

The Output tab links to the dataset for this run. Rows use the shapes described above, so fields that do not apply to a row type are not required in that row.

💳 Pricing

Charge events

Buyer-facing eventPriceWhen it applies
Film$0.0027One successfully extracted public film.
Film review$0.0027One successfully extracted public film review.

The pricing file lists these two charged outcomes. It does not define a separate event for empty or no-result work.

🔌 Integrations

Dataset access

Open the dataset output from the Output tab to export JSON or CSV, or use its Apify dataset link in another workflow. This Actor uses public Letterboxd pages and does not need a Letterboxd login or API key.

Video guide

❓ FAQ

Can I add reviews to a film run?

Yes. Turn on includeReviews for a film, search, list, or popular target. The run keeps film rows and adds public review rows when reviews are available.

What does Complete review text do?

When a public review has a shortened preview, completeReviewText asks the Actor to retrieve the complete text that the source provides.

What happens when an optional Letterboxd field is missing?

Some source fields are optional. A usable row can still be saved when Letterboxd does not show one of those fields.

Should I use a film URL or a film ID?

For the films target, you can use either a public film URL or a film ID. Lists accept a URL or ID, and profiles accept a public profile URL or username.

Can I run several film searches together?

No. Use one searchQuery per run and run each different search separately.

Do I need a Letterboxd login or API key?

No. The Actor reads public Letterboxd pages and does not ask for Letterboxd account credentials or an API key.

Can this Actor change ratings, lists, or profiles?

No. It collects public data only. It does not edit Letterboxd accounts or content.

📝 Changelog

0.0: Initial release

🆘 Support

For issues, questions, or feature requests, file a ticket and I'll fix or implement it in less than 24h 🫡

Made with ❤️ by Maxime Dupré