Letterboxd Scraper — Films, Ratings, Reviews & Member Activity avatar

Letterboxd Scraper — Films, Ratings, Reviews & Member Activity

Pricing

from $2.75 / 1,000 results

Go to Apify Store
Letterboxd Scraper — Films, Ratings, Reviews & Member Activity

Letterboxd Scraper — Films, Ratings, Reviews & Member Activity

Scrape Letterboxd film data (rating, cast, director, genre, runtime, watched/liked counts), member reviews with star ratings, and any member's full watch & rating history. Paste film URLs and/or usernames.

Pricing

from $2.75 / 1,000 results

Rating

0.0

(0)

Developer

Haketa

Haketa

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

Extract structured data from Letterboxd at scale: film details (weighted rating, cast, director, genre, runtime, watched/liked/list counts), member reviews (reviewer, date, text, likes & comments), and any member's full watch & rating history. Paste film URLs and/or usernames and get clean JSON/CSV/Excel in seconds. Built for film researchers, data journalists, recommender systems, marketers and fans.


What This Actor Does

Letterboxd is the world's largest social network for film lovers — hundreds of millions of ratings, reviews and watch logs. This Actor turns that public activity into a structured dataset. Three kinds of records, mix and match in a single run:

Record typeYou provideYou get
filmA film URL or slugWeighted average rating, rating count, watched-by / liked-by / list counts, cast, director, genres, country, language, runtime, tagline, description, poster
reviewA film URL (with reviews enabled)Each member review: reviewer, display name, watched date, full review text, likes & comment count
activityA member usernameThat member's recent watch & rating history: film, their star rating, watched date, rewatch flag, liked flag, review text

Everything is public data you can see on letterboxd.com — this Actor just collects it into rows you can analyze.


Why Use This

  • The social layer, not just metadata. IMDb and TMDb give you a film's facts. Letterboxd gives you what real viewers think — the weighted community rating, the review text, the taste of individual members. That's the data you can't get anywhere else.
  • Three data types, one Actor. Research a film, pull its reviews, and profile a member's taste — all in one run, all in one clean dataset.
  • Fast and reliable. Pure-HTTP with a browser-grade fingerprint. No headless browser, so it's cheap and quick even across many films and members.
  • Flatten the mess. Ratings, cast, genres and counts live in different places on the page — this Actor normalizes it all into tidy, flat rows.

Quick Start

Run it in the console (no code)

  1. Open the Actor in Apify Console.
  2. Films: paste one or more Letterboxd film URLs (e.g. https://letterboxd.com/film/parasite-2019/) or plain slugs (parasite-2019).
  3. Members: paste one or more usernames (e.g. davidehrlich) to also pull their watch history.
  4. Toggle Include film reviews if you want reviews for each film.
  5. Click Start, then export as JSON, CSV, Excel or HTML, or push to Google Sheets, a webhook or a database.

Run it via API (Python)

from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run_input = {
"filmUrls": [
"https://letterboxd.com/film/parasite-2019/",
"https://letterboxd.com/film/past-lives/",
],
"usernames": ["davidehrlich"],
"includeReviews": True,
"maxReviewsPerFilm": 100,
}
run = client.actor("YOUR_USERNAME/letterboxd-scraper").call(run_input=run_input)
for rec in client.dataset(run["defaultDatasetId"]).iterate_items():
if rec["type"] == "film":
print(rec["name"], rec["year"], rec["rating"], "·", rec["watchedBy"], "watches")

Analyze a member's taste (Python)

run = client.actor("YOUR_USERNAME/letterboxd-scraper").call(run_input={
"usernames": ["davidehrlich"],
"maxUserActivities": 200,
})
rows = [r for r in client.dataset(run["defaultDatasetId"]).iterate_items() if r["type"] == "activity"]
rated = [r for r in rows if r.get("memberRating") is not None]
print("avg rating:", sum(r["memberRating"] for r in rated) / len(rated))
print("top films:", [r["filmTitle"] for r in rated if r["memberRating"] >= 4.5][:10])

Pull a film's reviews (Node.js)

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('YOUR_USERNAME/letterboxd-scraper').call({
filmUrls: ['https://letterboxd.com/film/parasite-2019/'],
includeReviews: true,
maxReviewsPerFilm: 200,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
const reviews = items.filter(r => r.type === 'review');
console.log(`${reviews.length} reviews, most commented:`);
console.log(reviews.sort((a,b) => (b.commentCount||0) - (a.commentCount||0)).slice(0, 5));

Input Parameters

FieldTypeDescription
filmUrlsarrayLetterboxd film URLs or slugs. Each returns one film record (and reviews if enabled).
usernamesarrayLetterboxd usernames or profile URLs. Each returns that member's watch/rating activity.
includeReviewsbooleanAlso collect member reviews for each film. Default false.
includeStatsbooleanInclude watched-by / liked-by / list-appearance counts per film. Default true.
maxReviewsPerFilmintegerCap on reviews collected per film. Default 40.
maxUserActivitiesintegerCap on activity entries per member. Default 100.
maxItemsintegerOptional hard cap on total records. 0 = no limit.
proxyConfigurationobjectApify Proxy. Datacenter is enough and enabled by default.

You can provide films, members, or both in a single run.


Output

type: "film"

{
"type": "film",
"slug": "parasite-2019",
"filmId": "426406",
"name": "Parasite",
"year": "2019",
"tagline": "Act like you own the place.",
"director": ["Bong Joon Ho"],
"cast": ["Song Kang-ho", "Lee Sun-kyun", "Cho Yeo-jeong", "Choi Woo-shik"],
"genres": ["Thriller", "Comedy", "Drama"],
"country": ["South Korea"],
"language": "Korean",
"runtimeMinutes": 133,
"rating": 4.52,
"ratingCount": 1300000,
"watchedBy": 7590088,
"likedBy": 3909420,
"listAppearances": 895159,
"posterUrl": "https://a.ltrbxd.com/resized/film-poster/...jpg",
"url": "https://letterboxd.com/film/parasite-2019/"
}

type: "review"

{
"type": "review",
"filmSlug": "parasite-2019",
"filmName": "Parasite",
"username": "philbertdy",
"displayName": "Philbert Dy",
"watchedDate": "2019-08-14",
"reviewText": "There is a house on a hill, and there are people in it…",
"commentCount": 248,
"liked": false,
"reviewUrl": "https://letterboxd.com/philbertdy/film/parasite-2019/"
}

type: "activity"

{
"type": "activity",
"username": "davidehrlich",
"filmTitle": "Past Lives",
"filmYear": "2023",
"memberRating": 4.5,
"liked": true,
"rewatch": false,
"watchedDate": "2023-06-02",
"reviewText": "…",
"filmUrl": "https://letterboxd.com/davidehrlich/film/past-lives/"
}

Use Cases

1. Film research & analytics

Pull the community rating, rating volume and popularity (watched/liked/lists) for any set of films. Compare how audiences score titles across a director, a genre or an awards slate.

2. Review sentiment & text mining

Collect hundreds of reviews per film with full text, likes and comment counts — a ready-made corpus for sentiment analysis, topic modeling, or LLM summarization of what viewers actually say.

3. Recommender systems & taste graphs

A member's watch history with their own star ratings is the perfect signal for collaborative filtering. Build taste profiles, find similar members, or seed a recommendation engine.

4. Talent & title tracking

Monitor how a film's rating and popularity evolve after release, festival buzz or streaming drops. Track a director's or actor's catalog in one dataset.

5. Marketing & influencer discovery

Find the members whose reviews get the most likes and comments for films in your niche — the tastemakers worth engaging for film marketing and PR.

6. Data journalism

Quantify audience reception for a story: average ratings, the split between critics and crowds, the most-liked takes on a controversial release.


Tips

  • Film slugs: the slug is the last path segment of a film URL — letterboxd.com/film/parasite-2019/ → parasite-2019. You can pass either the full URL or just the slug.
  • Reviews are optional and add a few extra requests per film — enable includeReviews only when you need them.
  • Member feeds return recent activity newest-first; raise maxUserActivities for deeper history.
  • Schedule it with Apify Schedules to track ratings and reviews over time.

Frequently Asked Questions

Do I need a Letterboxd account? No. The Actor reads publicly visible data — no login required.

Can I get a member's full history? It returns recent watch & rating activity, newest first. Increase maxUserActivities for more.

Why is a member's star rating in activity but not always in review? A member's own rating is captured in their activity records. Reviews are collected for their text, author and engagement; not every review carries a visible star rating.

What export formats are supported? JSON, CSV, Excel, HTML, or via API — plus Google Sheets, webhooks, Make and Zapier.

Can I scrape many films and members at once? Yes. Provide arrays of film URLs and usernames; the Actor processes them all in one run and dedups results.


This Actor collects only publicly available information for research, analytics and personal use. You are responsible for how you use the data. Please:

  • Respect Letterboxd's Terms of Service and robots directives.
  • Comply with applicable data-protection laws when handling member data.
  • Do not use the data for spam, harassment, or any unlawful purpose.
  • Use reasonable request volumes and scheduling.

This project is an independent tool and is not affiliated with, endorsed by, or sponsored by Letterboxd.