Letterboxd Film & Reviews Scraper
Pricing
from $2.70 / 1,000 films
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é
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
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.
- Check a public viewing profile with Letterboxd Stats.
- Find films by title or related terms with Letterboxd Search.
- Collect public reviews for a film with Letterboxd Review Scraper.
- Export a member's watched films with Letterboxd Watched Films.
- Read a public list with Letterboxd List Scraper.
- Inspect a public member page with Letterboxd Profile Scraper.
- Browse popular films with Letterboxd Popular Films.
📦 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
- Select a
target:films,search,list,popular,profile, orwatched. - Enter the URL, ID, search text, or profile name that matches the target.
- Turn on
includeReviewsfor film, search, list, or popular targets when you also want public review rows. - Choose a review order and turn on
completeReviewTextwhen you want the full text available from the source. - Set
maxItemswhen you want an optional stop point. Leave it empty to collect all available results until the source is exhausted. - 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
| Field | Type | What it does |
|---|---|---|
target | string | Selects films, search, list, popular, profile, or watched. |
filmUrlsOrIds | array of strings | Public film URLs or film IDs. Use for films; each entry is one film. |
searchQuery | string | One film-related search such as a title, director, cast member, or keyword. Use for search. Run each different search separately. |
listUrlOrId | string | One public Letterboxd list URL or list ID. Use for list. |
browseMode | string | Select popular for the popular target. |
browsePeriod | string | Popular-film period: day, week, month, year, or all-time. |
genre | string | Optional Letterboxd genre filter for popular films, such as Drama. |
profileUrlOrUsername | string | Public profile URL or username. Use for profile or watched. |
includeReviews | boolean | Adds public film review rows for films, search, list, and popular targets. Default: false. |
reviewOrder | string | Orders collected reviews as popular, recent, earliest, highest-rated, or lowest-rated. Default: popular. |
completeReviewText | boolean | Gets complete review text when the source provides only a shortened preview. Default: false. |
maxItems | integer | Optional 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
| Field | Type | What it does |
|---|---|---|
resultType | string | Always film for a film row. |
film.id | string, optional | Stable Letterboxd film ID. |
film.url | URL | Public Letterboxd page for the film. |
film.title | string | Film title shown on Letterboxd. |
film.releaseYear | integer, optional | Film release year. |
film.directors | array of objects, optional | People credited as directors. |
film.directors[].name | string | Director name. |
film.directors[].url | URL, optional | Public director page. |
film.cast | array of objects, optional | People credited in the cast. |
film.cast[].name | string | Cast member name. |
film.cast[].url | URL, optional | Public cast member page. |
film.genres | array of strings, optional | Genres shown for the film. |
film.runtimeMinutes | integer, optional | Film runtime in minutes. |
film.synopsis | string, optional | Film synopsis or description. |
film.posterUrl | URL, optional | Film poster image URL. |
film.averageRating | number, optional | Public average Letterboxd rating. |
film.ratingCount | integer, optional | Number of public ratings used for the average. |
film.writtenReviewCount | integer, optional | Number of written reviews shown by Letterboxd. |
film.watchCount | integer, optional | Number of members who marked the film watched. |
film.fanCount | integer, optional | Number of members who marked the film as a favorite. |
film.listCount | integer, optional | Number of public lists that include the film. |
film.countries | array of strings, optional | Countries linked to the film. |
film.languages | array of strings, optional | Languages linked to the film. |
film.productionCompanies | array of strings, optional | Studios or production companies linked to the film. |
film.tagline | string, optional | Film tagline when available. |
film.imdbId | string, optional | IMDb identifier when shown. |
film.tmdbId | string, optional | TMDb identifier when shown. |
searchQuery | string, optional | Search text that found the film. |
browse | object, optional | Popular-film selection that found the film. |
browse.mode | string | Browse type, currently popular. |
browse.period | string | Browse period: day, week, month, year, or all-time. |
browse.genre | string, optional | Genre 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
| Field | Type | What it does |
|---|---|---|
resultType | string | Always review for a review row. |
film.id | string, optional | Stable Letterboxd film ID for the reviewed film. |
film.url | URL | Public Letterboxd page for the reviewed film. |
film.title | string | Reviewed film title. |
film.releaseYear | integer, optional | Reviewed film release year. |
film.directors | array of objects, optional | Directors linked to the reviewed film. |
film.directors[].name | string | Director name. |
film.directors[].url | URL, optional | Public director page. |
film.cast | array of objects, optional | Cast linked to the reviewed film. |
film.cast[].name | string | Cast member name. |
film.cast[].url | URL, optional | Public cast member page. |
film.genres | array of strings, optional | Genres shown for the reviewed film. |
film.runtimeMinutes | integer, optional | Reviewed film runtime in minutes. |
film.synopsis | string, optional | Reviewed film synopsis or description. |
film.posterUrl | URL, optional | Reviewed film poster image URL. |
film.averageRating | number, optional | Public average Letterboxd rating for the film. |
film.ratingCount | integer, optional | Number of public film ratings. |
film.writtenReviewCount | integer, optional | Number of written film reviews shown by Letterboxd. |
film.watchCount | integer, optional | Number of members who marked the film watched. |
film.fanCount | integer, optional | Number of members who marked the film as a favorite. |
film.listCount | integer, optional | Number of public lists that include the film. |
film.countries | array of strings, optional | Countries linked to the film. |
film.languages | array of strings, optional | Languages linked to the film. |
film.productionCompanies | array of strings, optional | Studios or production companies linked to the film. |
film.tagline | string, optional | Film tagline when available. |
film.imdbId | string, optional | IMDb identifier when shown. |
film.tmdbId | string, optional | TMDb identifier when shown. |
review.id | string, optional | Stable Letterboxd review ID. |
review.url | URL | Public page for the review. |
review.text | string | Review text shown on Letterboxd. |
review.rating | number, optional | Rating given by the reviewer. |
review.likes | integer, optional | Number of likes shown for the review. |
review.containsSpoilers | boolean, optional | Whether Letterboxd marks the review as a spoiler. |
review.postedAt | string, optional | Review posting date or time when shown. |
review.commentCount | integer, optional | Number of comments shown for the review. |
review.watched | boolean, optional | Whether the reviewer marks the film as watched. |
review.rewatched | boolean, optional | Whether the reviewer marks this as a rewatch. |
review.reviewer | object | Public reviewer identity and profile link. |
review.reviewer.username | string | Letterboxd username of the reviewer. |
review.reviewer.displayName | string, optional | Reviewer name when shown. |
review.reviewer.profileUrl | URL | Public reviewer profile page. |
review.reviewer.avatarUrl | URL, optional | Reviewer profile image URL when shown. |
searchQuery | string, optional | Search text that found the film. |
browse | object, optional | Popular-film selection that found the film. |
browse.mode | string | Browse type, currently popular. |
browse.period | string | Browse period used for the selection. |
browse.genre | string, optional | Genre filter used for the selection. |
Profile rows
| Field | Type | What it does |
|---|---|---|
resultType | string | Always profile for a profile row. |
profile.username | string | Letterboxd username. |
profile.displayName | string, optional | Name shown for the profile. |
profile.url | URL | Public Letterboxd profile page. |
profile.bio | string, optional | Public profile biography. |
profile.location | string, optional | Public profile location. |
profile.websiteUrl | URL, optional | Public website linked from the profile. |
profile.avatarUrl | URL, optional | Profile image URL. |
profile.joinedAt | string, optional | Date the profile joined Letterboxd. |
profile.stats | object, optional | Public counts shown on the profile. |
profile.stats.filmsWatchedCount | integer, optional | Number of films marked watched. |
profile.stats.ratingsCount | integer, optional | Number of film ratings shown. |
profile.stats.reviewsCount | integer, optional | Number of written reviews shown. |
profile.stats.listsCount | integer, optional | Number of lists shown. |
profile.stats.followersCount | integer, optional | Number of followers shown. |
profile.stats.followingCount | integer, optional | Number of profiles followed. |
profile.favorites | array of objects, optional | Favorite films shown on the profile. |
profile.favorites[].id | string, optional | Stable film ID for a favorite. |
profile.favorites[].url | URL | Public page for a favorite film. |
profile.favorites[].title | string | Favorite film title. |
profile.favorites[].releaseYear | integer, optional | Favorite film release year. |
profile.favorites[].posterUrl | URL, optional | Favorite film poster URL. |
profile.recentActivity | array of objects, optional | Recent public activity shown on the profile. |
profile.recentActivity[].activityType | string | Activity type: watched, reviewed, rated, liked, or rewatched. |
profile.recentActivity[].film | object | Film linked to the activity. |
profile.recentActivity[].film.id | string, optional | Stable film ID for the activity film. |
profile.recentActivity[].film.url | URL | Public activity film page. |
profile.recentActivity[].film.title | string | Activity film title. |
profile.recentActivity[].film.releaseYear | integer, optional | Activity film release year. |
profile.recentActivity[].film.posterUrl | URL, optional | Activity film poster URL. |
profile.recentActivity[].url | URL, optional | Public page for the activity. |
profile.recentActivity[].occurredAt | string, optional | Activity date or time. |
profile.recentActivity[].rating | number, optional | Personal rating given by the profile. |
profile.recentActivity[].rewatched | boolean, optional | Whether 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
| Field | Type | What it does |
|---|---|---|
resultType | string | Always watchedFilm for a watched-film row. |
film.id | string, optional | Stable Letterboxd film ID. |
film.url | URL | Public Letterboxd page for the film. |
film.title | string | Film title. |
film.releaseYear | integer, optional | Film release year. |
film.directors | array of objects, optional | Directors linked to the film. |
film.directors[].name | string | Director name. |
film.directors[].url | URL, optional | Public director page. |
film.cast | array of objects, optional | Cast linked to the film. |
film.cast[].name | string | Cast member name. |
film.cast[].url | URL, optional | Public cast member page. |
film.genres | array of strings, optional | Genres shown for the film. |
film.runtimeMinutes | integer, optional | Film runtime in minutes. |
film.synopsis | string, optional | Film synopsis or description. |
film.posterUrl | URL, optional | Film poster image URL. |
film.averageRating | number, optional | Public average Letterboxd rating. |
film.ratingCount | integer, optional | Number of public film ratings. |
film.writtenReviewCount | integer, optional | Number of written film reviews. |
film.watchCount | integer, optional | Number of members who marked the film watched. |
film.fanCount | integer, optional | Number of members who marked the film as a favorite. |
film.listCount | integer, optional | Number of public lists that include the film. |
film.countries | array of strings, optional | Countries linked to the film. |
film.languages | array of strings, optional | Languages linked to the film. |
film.productionCompanies | array of strings, optional | Studios or production companies linked to the film. |
film.tagline | string, optional | Film tagline when available. |
film.imdbId | string, optional | IMDb identifier when shown. |
film.tmdbId | string, optional | TMDb identifier when shown. |
profile.username | string | Letterboxd username for the watched history. |
profile.displayName | string, optional | Profile name when shown. |
profile.url | URL | Public profile page. |
profile.bio | string, optional | Public profile biography. |
profile.location | string, optional | Public profile location. |
profile.websiteUrl | URL, optional | Public website linked from the profile. |
profile.avatarUrl | URL, optional | Profile image URL. |
profile.joinedAt | string, optional | Date the profile joined Letterboxd. |
profile.stats | object, optional | Public profile counts. |
profile.stats.filmsWatchedCount | integer, optional | Number of films marked watched. |
profile.stats.ratingsCount | integer, optional | Number of film ratings shown. |
profile.stats.reviewsCount | integer, optional | Number of written reviews shown. |
profile.stats.listsCount | integer, optional | Number of lists shown. |
profile.stats.followersCount | integer, optional | Number of followers shown. |
profile.stats.followingCount | integer, optional | Number of profiles followed. |
profile.favorites | array of objects, optional | Favorite films shown on the profile. |
profile.favorites[].id | string, optional | Stable film ID for a favorite. |
profile.favorites[].url | URL | Public favorite film page. |
profile.favorites[].title | string | Favorite film title. |
profile.favorites[].releaseYear | integer, optional | Favorite film release year. |
profile.favorites[].posterUrl | URL, optional | Favorite film poster URL. |
profile.recentActivity | array of objects, optional | Recent public profile activity. |
profile.recentActivity[].activityType | string | Activity type. |
profile.recentActivity[].film | object | Film linked to the activity. |
profile.recentActivity[].film.id | string, optional | Stable activity film ID. |
profile.recentActivity[].film.url | URL | Public activity film page. |
profile.recentActivity[].film.title | string | Activity film title. |
profile.recentActivity[].film.releaseYear | integer, optional | Activity film release year. |
profile.recentActivity[].film.posterUrl | URL, optional | Activity film poster URL. |
profile.recentActivity[].url | URL, optional | Public activity page. |
profile.recentActivity[].occurredAt | string, optional | Activity date or time. |
profile.recentActivity[].rating | number, optional | Personal rating given by the profile. |
profile.recentActivity[].rewatched | boolean, optional | Whether the activity marks a rewatch. |
watchedAt | string, optional | Date or time when the profile marked the film watched. |
personalRating | number, optional | Rating the profile gave the film. |
rewatched | boolean, optional | Whether 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
| Field | Type | What it does |
|---|---|---|
resultType | string | Always listEntry for a list-entry row. |
film.id | string, optional | Stable Letterboxd film ID. |
film.url | URL | Public Letterboxd page for the film. |
film.title | string | Film title. |
film.releaseYear | integer, optional | Film release year. |
film.directors | array of objects, optional | Directors linked to the film. |
film.directors[].name | string | Director name. |
film.directors[].url | URL, optional | Public director page. |
film.cast | array of objects, optional | Cast linked to the film. |
film.cast[].name | string | Cast member name. |
film.cast[].url | URL, optional | Public cast member page. |
film.genres | array of strings, optional | Genres shown for the film. |
film.runtimeMinutes | integer, optional | Film runtime in minutes. |
film.synopsis | string, optional | Film synopsis or description. |
film.posterUrl | URL, optional | Film poster image URL. |
film.averageRating | number, optional | Public average Letterboxd rating. |
film.ratingCount | integer, optional | Number of public film ratings. |
film.writtenReviewCount | integer, optional | Number of written film reviews. |
film.watchCount | integer, optional | Number of members who marked the film watched. |
film.fanCount | integer, optional | Number of members who marked the film as a favorite. |
film.listCount | integer, optional | Number of public lists that include the film. |
film.countries | array of strings, optional | Countries linked to the film. |
film.languages | array of strings, optional | Languages linked to the film. |
film.productionCompanies | array of strings, optional | Studios or production companies linked to the film. |
film.tagline | string, optional | Film tagline when available. |
film.imdbId | string, optional | IMDb identifier when shown. |
film.tmdbId | string, optional | TMDb identifier when shown. |
list.id | string, optional | Stable Letterboxd list ID. |
list.url | URL | Public Letterboxd list page. |
list.name | string | List name. |
list.description | string, optional | List description. |
list.creator | object, optional | Public identity of the list creator. |
list.creator.username | string | Creator username. |
list.creator.displayName | string, optional | Creator name when shown. |
list.creator.profileUrl | URL, optional | Public creator profile page. |
position | integer | Film position in the public list. |
curatorNote | string, optional | Note 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 event | Price | When it applies |
|---|---|---|
| Film | $0.0027 | One successfully extracted public film. |
| Film review | $0.0027 | One 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 🫡
🔗 Related Actors
- Letterboxd Film & Review Scraper — Ratings, No Login: Compare film metadata and reviews with another public Letterboxd workflow.
- Letterboxd Film Pages Scraper: Build a flat film catalog from public Letterboxd pages.
- Letterboxd Scraper - Films, Reviews, Profiles & Lists: Explore film, review, profile, and list data in one alternate workflow.
- Letterboxd Film Reviews Scraper: Focus on review text, reviewer details, and engagement fields.
- Letterboxd Scraper: Combine film metadata, popular films, and public profile data in another workflow.
Made with ❤️ by Maxime Dupré