Letterboxd Film Review Scraper
Pricing
from $2.99 / 1,000 records
Letterboxd Film Review Scraper
Scrape Letterboxd films and reviews: ratings, rating histogram, cast, crew, genres, synopsis, and review text, rating, likes and spoilers, plus users' watched films and lists.
Pricing
from $2.99 / 1,000 records
Rating
0.0
(0)
Developer
ParseBird
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
5 days ago
Last modified
Categories
Share
Letterboxd Film Review Scraper
Letterboxd Film Review Scraper extracts films and reviews from Letterboxd, the social network for film lovers. Paste a film URL and get the average rating, rating histogram, watch count, cast, crew, genres, synopsis and IMDb/TMDB IDs, plus the film's reviews with reviewer, star rating, full text, likes, comments and spoiler flags. It also scrapes users' watched films with their ratings, curated lists, and title searches, as clean JSON, CSV or Excel.
| Collect up to 3,072 reviews per film in five sort orders with the complete text of long reviews, 40+ film fields including the full rating distribution and Top 500 rank, and any public profile's or list's films with their star ratings. |
Copy to your AI assistant
Copy this block into ChatGPT, Claude, Cursor, or any LLM to start using this actor.
Apify Actor: parsebird/letterboxd-scraper. Scrapes films, reviews, users' watched films and lists from Letterboxd (letterboxd.com). Call via ApifyClient: client.actor("parsebird/letterboxd-scraper").call(run_input={"mode": "film", "startUrls": ["https://letterboxd.com/film/the-godfather/"], "scrapeReviews": true, "maxReviews": 100}). Inputs: mode ("film", "user", "list" or "search"; default "film"), startUrls (array of URLs: films https://letterboxd.com/film/<slug>/, user profiles https://letterboxd.com/<username>/, lists https://letterboxd.com/<username>/list/<list-slug>/), searchQueries (array of strings, search mode, up to 20 films per query), scrapeReviews (boolean, default true), maxReviews (integer per film, default 20, max 3072), reviewSort ("popular", "newest", "oldest", "highest", "lowest"), fetchFullText (boolean, default true), maxFilms (integer per user/list/query, default 50), scrapeFilmDetails (boolean, default false: also scrape full details of user/list films), proxyConfiguration (object, optional). Output records have a type field. film: filmSlug, filmId, title, originalTitle, year, releaseDate, director[], writers[], cast[], castCharacters[{name, character}], crew{role: [names]}, genres[], themes[], runtimeMinutes, averageRating, ratingsCount, reviewsCount, ratingHistogram{"0.5".."5": count}, watchedCount, listsCount, likesCount, top500Rank, language, spokenLanguages[], countries[], studios[], alternativeTitles[], tagline, synopsis, posterUrl, backdropUrl, imdbId, imdbUrl, tmdbId, tmdbUrl, filmUrl, searchQuery, searchRank, scrapedAt. review: reviewId, filmTitle, filmYear, filmSlug, filmUrl, reviewer, username, reviewerUrl, reviewerAvatar, rating, likedFilm, isRewatch, isSpoiler, reviewText, isTruncated, language, likes, comments, watchedDate, reviewUrl, position, scrapedAt. user_film: username, position, filmSlug, filmId, title, year, userRating, liked, reviewUrl, filmUrl. list_film: listOwner, listSlug, listTitle, listUrl, position, filmSlug, filmId, title, year, ownerRating, filmUrl. Film and search runs put reviews in the default dataset and films in a "films" dataset (films go to default when reviews are off); user/list runs put user_film/list_film rows in the default dataset. Pricing: pay per record. Full API spec: https://apify.com/parsebird/letterboxd-scraper/api. Get your token: https://console.apify.com/settings/integrations.
What is Letterboxd Film Review Scraper?
Letterboxd Film Review Scraper turns Letterboxd pages into structured data. Give it film URLs and it returns each film's details and its reviews; give it a profile or a list and it returns the films with the user's or list owner's star ratings; give it a title and it searches Letterboxd for you.
It works as a Letterboxd API alternative: Letterboxd's official API is invite-only, while this Actor reads the public website, with no account or API key needed.
What can Letterboxd Film Review Scraper do?
- 🎬 Film details. Title, original title, year, release date, runtime, director, writers, full cast with character names, full crew by role, genres, themes, studios, countries, languages, alternative titles, tagline, synopsis, poster, backdrop, and IMDb and TMDB IDs.
- ⭐ Ratings and popularity. Average rating, number of ratings and reviews, the full half-star rating histogram, how many members watched, liked and listed the film, and its Letterboxd Top 500 rank.
- 📝 Reviews. Reviewer, star rating, full text (long reviews are expanded), likes, comments, spoiler flag, rewatch flag, whether the reviewer liked the film, date and URL. Sort by most popular, newest, oldest, highest or lowest rated.
- 👤 User profiles. Every film a public user has watched, with their star rating, like and review link.
- 📋 Lists. Every film on a list, in list order, with the owner's rating.
- 🔎 Search. Search Letterboxd by title or keyword and scrape each matching film.
- 📅 Scheduling and monitoring. Run daily with Apify Schedules and sort reviews by newest to follow new reviews of a release.
- 🔌 API and integrations. Use the Apify API, or send results to Google Sheets, Zapier, Make, Slack or webhooks with Apify integrations. Export as JSON, CSV, Excel, XML or HTML.
What data can you extract from Letterboxd?
Films (type: "film")
| Field | Description |
|---|---|
title / originalTitle / year / releaseDate | Title, original-language title, year and release date |
director / writers / cast / castCharacters / crew | Director, writers, cast with character names, and the crew by role (producers, editors, composer, cinematography…) |
genres / themes | Genres and Letterboxd themes |
averageRating / ratingsCount / reviewsCount | Letterboxd rating (0.5–5) and counts |
ratingHistogram | Number of ratings at each half-star step |
watchedCount / likesCount / listsCount / top500Rank | Members who watched and liked it, lists it appears in, Top 500 position |
runtimeMinutes / language / spokenLanguages / countries / studios | Runtime, primary and spoken languages, countries, studios |
tagline / synopsis / alternativeTitles | Tagline, synopsis and titles in other languages |
posterUrl / backdropUrl | Poster and backdrop images |
imdbId / tmdbId | IMDb and TMDB IDs with links |
Reviews (type: "review")
| Field | Description |
|---|---|
reviewer / username / reviewerUrl / reviewerAvatar | Reviewer's display name, username, profile and avatar |
rating | Reviewer's star rating (0.5–5), empty when they didn't rate |
reviewText | Full review text |
likes / comments | Likes and comments on the review |
isSpoiler / isRewatch / likedFilm | Spoiler warning, rewatch, and whether the reviewer liked the film |
watchedDate / language | Date of the diary entry and the review's language |
reviewUrl / position | Review page and position in the chosen sort order |
User and list films (type: "user_film" / "list_film")
| Field | Description |
|---|---|
username / listOwner / listTitle | Whose profile or list the film came from |
position | Order on the profile or list |
title / year / filmSlug / filmUrl | The film |
userRating / liked / reviewUrl | The user's star rating, like, and review link |
ownerRating | The list owner's star rating of the film |
How to scrape Letterboxd
- Open Letterboxd Film Review Scraper on Apify Store and click Try for free.
- Choose what to scrape: Films and reviews, User's watched films, List or Search films by title.
- Paste Letterboxd URLs (copy them from your browser) or type search queries.
- Set Max reviews per film and the review order, or turn reviews off.
- For users, lists and searches, set Max films and optionally turn on Add full film details.
- Click Start, then download the results as JSON, CSV, Excel, XML or HTML from the Output tab, or read them with the API.
How much does it cost to scrape Letterboxd?
Letterboxd Film Review Scraper uses pay-per-event pricing: you pay for each record saved, whether it's a film, a review, a user film or a list film. Compute and proxy costs are included in the price.
| Event | Free | Bronze | Silver | Gold |
|---|---|---|---|---|
result (per record) | $0.00449 | $0.00399 | $0.00349 | $0.00299 |
| Per 1,000 records | $4.49 | $3.99 | $3.49 | $2.99 |
For example, one film with 100 reviews is 101 records, which costs $0.45 on the Free plan. You can set a maximum cost per run in Apify Console, and the Actor stops when it's reached.
Input
See the Input tab for the full form.
| Parameter | Type | Default | Description |
|---|---|---|---|
mode | string | film | film, user, list or search |
startUrls | array | — | Film, user profile or list URLs (detected automatically) |
searchQueries | array | — | Titles or keywords for search mode |
scrapeReviews | boolean | true | Save each film's reviews |
maxReviews | integer | 20 | Reviews per film (up to 3,072) |
reviewSort | string | popular | popular, newest, oldest, highest, lowest |
fetchFullText | boolean | true | Load the full text of long reviews |
maxFilms | integer | 50 | Films per user profile, list or search query |
scrapeFilmDetails | boolean | false | Also scrape the full details (and reviews) of user and list films |
proxyConfiguration | object | none | Not needed; see the FAQ |
Film details and reviews
{"mode": "film","startUrls": ["https://letterboxd.com/film/the-godfather/","https://letterboxd.com/film/inception/"],"scrapeReviews": true,"fetchFullText": true,"maxReviews": 100}
A user's watched films and ratings
{"mode": "user","startUrls": ["https://letterboxd.com/dave/"],"maxFilms": 200}
A list
{"mode": "list","startUrls": ["https://letterboxd.com/fcbarcelona/list/movies-everyone-should-watch-at-least-once/"],"maxFilms": 250}
Search by title, with the newest reviews
{"mode": "search","searchQueries": ["stanley kubrick", "the godfather"],"maxFilms": 10,"reviewSort": "newest","maxReviews": 50}
Output example
Film (cast, crew and titles shortened)
{"type": "film","filmSlug": "the-godfather","filmId": "51818","title": "The Godfather","originalTitle": null,"year": 1972,"releaseDate": "1972-03-14","director": ["Francis Ford Coppola"],"writers": ["Francis Ford Coppola", "Mario Puzo"],"cast": ["Marlon Brando", "Al Pacino", "James Caan"],"castCharacters": [{"name": "Marlon Brando", "character": "Don Vito Corleone"},{"name": "Al Pacino", "character": "Michael Corleone"}],"crew": {"Director": ["Francis Ford Coppola"], "Composer": ["Nino Rota"]},"genres": ["Crime", "Drama"],"themes": ["Crime, drugs and gangsters", "Gritty crime and ruthless gangsters"],"runtimeMinutes": 175,"averageRating": 4.51,"ratingsCount": 2996900,"reviewsCount": 436361,"ratingHistogram": {"0.5": 9210, "1": 14388, "1.5": 6033, "2": 31015, "2.5": 24434, "3": 135209, "3.5": 144458, "4": 587184, "4.5": 494723, "5": 1550259},"watchedCount": 4249802,"listsCount": 621575,"likesCount": 1675216,"top500Rank": 18,"language": "English","spokenLanguages": ["Latin", "English", "Italian"],"countries": ["USA"],"studios": ["Paramount Pictures", "Alfran Productions"],"alternativeTitles": ["Le Parrain 1", "The Godfather Part 1"],"tagline": "An offer you can't refuse.","synopsis": "Spanning the years 1945 to 1955, a chronicle of the fictional Italian-American Corleone crime family. When organized crime family patriarch, Vito Corleone barely survives an attempt on his life, his youngest son, Michael steps in to take care of the would-be killers, launching a campaign of bloody revenge.","posterUrl": "https://a.ltrbxd.com/resized/film-poster/5/1/8/1/8/51818-the-godfather-0-600-0-900-crop.jpg?v=bca8b67402","imdbId": "tt0068646","tmdbId": "238","filmUrl": "https://letterboxd.com/film/the-godfather/","scrapedAt": "2026-10-19T03:45:05.065Z"}
Review (a long review, expanded to its full text)
{"type": "review","reviewId": "222305234","filmTitle": "The Godfather","filmYear": 1972,"filmSlug": "the-godfather","filmUrl": "https://letterboxd.com/film/the-godfather/","reviewer": "Matt Singer","username": "superpulse","reviewerUrl": "https://letterboxd.com/superpulse/","rating": 5.0,"likedFilm": true,"isRewatch": true,"isSpoiler": true,"reviewText": "One perfect moment: When Michael and Kay discover Vito’s been shot, his immediate reaction is to race to a phone booth and call home to check on his father. […] and foreshadowing the final shot of the film.","isTruncated": false,"language": "en","likes": 11642,"comments": 0,"watchedDate": "2022-01-01","reviewUrl": "https://letterboxd.com/superpulse/film/the-godfather/","position": 8,"scrapedAt": "2026-10-19T03:45:05.567Z"}
User film
{"type": "user_film","username": "dave","position": 2,"filmSlug": "digger-2026","title": "Digger","year": 2026,"userRating": 3.5,"liked": true,"reviewUrl": null,"filmUrl": "https://letterboxd.com/film/digger-2026/"}
Where are my records? Each record type keeps its own table. In film and search runs, reviews go to the run's default dataset and film details to a dataset named films (with reviews off, films go to the default dataset). In user and list runs, the profile or list rows go to the default dataset, and full film details and reviews (when turned on) go to the films and reviews datasets. You find all of them in the run's Storage tab.
Use the Letterboxd Scraper API
Call the Actor from your own code with the Apify API client. Find your token in Apify Console → Settings → Integrations.
Python
from apify_client import ApifyClientclient = ApifyClient("YOUR_APIFY_TOKEN")run = client.actor("parsebird/letterboxd-scraper").call(run_input={"mode": "film","startUrls": ["https://letterboxd.com/film/parasite-2019/"],"maxReviews": 200,"reviewSort": "newest",})for review in client.dataset(run["defaultDatasetId"]).iterate_items():print(review["reviewer"], review["rating"], review["likes"], review["reviewText"][:80])
JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });const run = await client.actor('parsebird/letterboxd-scraper').call({mode: 'user',startUrls: ['https://letterboxd.com/dave/'],maxFilms: 500,});const { items } = await client.dataset(run.defaultDatasetId).listItems();items.forEach((film) => console.log(film.position, film.title, film.year, film.userRating));
You can also start runs over plain HTTP from the API tab, or connect the Actor to AI agents through the Apify MCP server.
Use cases
- Audience sentiment. Analyse reviews and ratings of a film, director or franchise, and track how opinions change after release.
- Film research and datasets. Build film datasets with cast, crew, genres, themes, ratings and rating distributions.
- Recommendation systems. Collect users' ratings to train or test recommenders.
- Marketing and distribution. See how a release is received, which reviews get the most likes, and how it ranks against similar films.
- Personal archives. Export your own Letterboxd ratings or a favourite list to a spreadsheet.
How it works
- Film pages give the details, cast, crew and rating; two small extra requests add the watch/like/list counts and the rating histogram.
- Reviews are read from the film's review pages, 12 per page, in the order you choose. Letterboxd serves up to 256 review pages per order, so up to 3,072 reviews per film and sort.
- Long reviews are shortened on review pages; with Get full text on, the Actor loads each one's full text.
- Profiles and lists are read page by page (72 films per profile page, 100 per list page). Search uses Letterboxd's own film search, which returns up to 20 films per query.
FAQ
Do I need a Letterboxd account? No. The Actor reads public pages that anyone can see. Private or deleted profiles and lists can't be scraped and are skipped with a warning.
Which URLs can I use?
Film pages (letterboxd.com/film/the-godfather/, also its /reviews/ URL), user profiles (letterboxd.com/username/ or /username/films/, including sorted views like /username/films/by/rating/), and lists (letterboxd.com/username/list/list-name/). A review URL (/username/film/the-godfather/) is treated as its film.
Why do some reviews have no rating?
Letterboxd members can review a film without rating it; rating is then empty.
How many reviews can I get for a film?
Up to 3,072 per sort order, which is as many as Letterboxd shows. For more of a popular film's reviews, run it again with another sort order and drop duplicates by reviewId.
Why does a search return only some films? Letterboxd's search returns up to 20 films per query. Use more specific queries, or paste film or list URLs.
Do I need a proxy? No. Letterboxd blocks many cloud servers, so the Actor switches to residential Apify Proxy on its own when it's blocked. The proxy cost is included in the record price.
Can I schedule runs or export to Google Sheets? Yes. Use Apify Schedules for recurring runs and integrations for Google Sheets, Zapier, Make, Slack and webhooks.
Something is missing or broken? Open an issue on the Issues tab. Feedback and feature requests are welcome there too.
Is it legal to scrape Letterboxd?
The Actor collects only public pages that Letterboxd shows to every visitor, and doesn't log in. Reviews, usernames and profile data are personal data under laws like the GDPR, so make sure you have a lawful basis to store and process them, and respect Letterboxd's terms and the reviewers' copyright when you republish review text. Read more in Apify's blog post Is web scraping legal?
Other entertainment scrapers
| Actor | What it does |
|---|---|
| Goodreads Book Scraper | Scrape books, ratings and details from Goodreads |
| GOG Game Scraper | Scrape games, prices and ratings from GOG.com |
| Spotify Podcast Scraper | Scrape podcasts and episodes from Spotify |
| Twitch Scraper | Scrape Twitch channels and streams |