Letterboxd Scraper
Pricing
from $3.00 / 1,000 results
Letterboxd Scraper
Scrape Letterboxd without a login. Pull a member's diary by username (films watched, ratings, likes, rewatch flags, watched dates, review text, and lists) or full film detail by URL (directors, cast, genres, countries, studios, average rating, runtime, synopsis).
Pricing
from $3.00 / 1,000 results
Rating
0.0
(0)
Developer
Goutam Soni
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
6 hours ago
Last modified
Categories
Share
Extract public Letterboxd data without a login or API key. Scrape any member's film diary by username (films watched, star ratings, likes, rewatch flags, watched dates, and review text) or pull full detail for any film by its URL (directors, cast, genres, countries, studios, average rating, runtime, and synopsis). Results come back as clean, structured JSON rows ready for export to CSV, Excel, Google Sheets, or your database.
What it does
- Member diary by username. Returns every logged film with the member's star rating, whether they liked it, whether it was a rewatch, the watched date, the review text when present, and the canonical film URL plus the TMDB id for easy joining.
- Film detail by URL. Returns the film title, release year, directors, full cast, genres, countries, studios, the Letterboxd average rating, the rating count, runtime, poster, and synopsis.
- Published lists (optional). Include a member's curated lists with the list name, intro note, and every film in the list (title and URL).
- No login, no password, no API key. Feed it usernames or film links and it returns structured rows.
- Bulk and parallel. Process many usernames and film URLs in one run, with adjustable concurrency.
- Clean, stable schema. Every row has a consistent set of keys, missing values are
null, and ascrapedAttimestamp is attached to each record.
Use cases
- Film data enrichment. Build a movie database with ratings, cast, genres, runtime, and TMDB ids for thousands of titles.
- Audience and taste research. Analyze what a cohort of members watch, how they rate films, and which genres they favor.
- Critic and reviewer monitoring. Track new diary entries and reviews from public film-critic accounts for trend reporting.
- Recommendation and ranking models. Collect member ratings and watch histories as training signal for taste-based recommenders.
- Content and market research. Aggregate average ratings and rating counts to gauge how titles are received over time.
Input
| Field | Type | Description |
|---|---|---|
usernames | array | Letterboxd usernames to pull the public diary from. Accepts a bare handle, an @handle, or a full profile link. |
filmUrls | array | Letterboxd film links to fetch full detail for (one record per film). |
maxItemsPerSource | integer | Cap on diary entries returned per username. Up to the 100 most recent entries are available per member. Default 100. |
includeLists | boolean | When on, a member's published lists are returned alongside diary entries. Default off. |
concurrency | integer | How many sources to process in parallel. Default 5. |
proxyConfig | object | Optional proxy configuration. The public pages do not require a proxy. |
Example input
{"usernames": ["example_user", "@another_user", "https://letterboxd.com/third_user"],"filmUrls": ["https://letterboxd.com/film/example-film"],"maxItemsPerSource": 100,"includeLists": true,"concurrency": 5}
Output
Each result is one row in the dataset. Diary entries, list entries, and film details are distinguished by the type field ("diary", "list", or "film").
Diary row
{"type": "diary","filmTitle": "Example Film","filmYear": 2024,"filmUrl": "https://letterboxd.com/film/example-film/","entryUrl": "https://letterboxd.com/example_user/film/example-film/","tmdbId": "12345","rating": 4.5,"liked": true,"review": "A short note on the film.","hasReview": true,"rewatch": false,"watchedDate": "2024-06-01","loggedAt": "Sat, 01 Jun 2024 12:00:00 +0000","scrapedAt": "2024-06-02T10:00:00.000Z"}
Film row
{"type": "film","name": "Example Film","year": 1999,"url": "https://letterboxd.com/film/example-film/","tmdbId": "550","ratingAverage": 4.27,"ratingCount": 5536463,"runtimeMins": 139,"directors": ["Jane Doe"],"cast": ["Actor One", "Actor Two"],"genres": ["Drama", "Thriller"],"countries": ["USA"],"studios": ["Acme Pictures"],"synopsis": "A one paragraph synopsis of the film.","poster": "https://example.com/poster.jpg","scrapedAt": "2024-06-02T10:00:00.000Z"}
Key fields
filmUrlis the canonical film page, so a diary row joins cleanly to a film-detail row.entryUrlis the member's diary permalink for that watch.tmdbIdlets you cross-reference any external movie database.ratingis the member's own 0.5 to 5.0 star rating;ratingAverageandratingCountare the community-wide values on a film row.ratingandreviewarenullwhen the member logged a film without rating or reviewing it.
A list row (when includeLists is on) carries name, listUrl, filmCount, note, films (title and URL for each), and loggedAt.
FAQ
Do I need a Letterboxd account or login? No. This scraper reads only public pages. No account, password, cookie, or API key is required.
How much does it cost? You pay only for the Apify platform usage and per-result charges shown on the actor page. There is no separate Letterboxd subscription needed.
How many diary entries can I get per member?
Up to the 100 most recent activity entries per member, which is the full public diary window. Set maxItemsPerSource lower to return fewer.
Can I scrape many members and films at once?
Yes. Add as many usernames and film URLs as you like in a single run. The concurrency setting controls how many are processed in parallel.
How fast is it? Each member diary is one fetch and each film is one fetch, so most runs finish in seconds to a couple of minutes depending on how many sources you pass and the concurrency you set.
What if a username or film does not exist?
The actor emits a row marked ok: false with an error reason for that source and continues with the rest, so one bad input never fails the whole run.
What output formats are supported? Results are stored in an Apify dataset and can be exported to JSON, CSV, Excel, HTML, RSS, or XML, or pulled through the API.