Letterboxd Scraper avatar

Letterboxd Scraper

Pricing

from $3.00 / 1,000 results

Go to Apify Store
Letterboxd Scraper

Letterboxd Scraper

Scrape Letterboxd, the cinephile community's film database. Pull film metadata (directors, cast, genres, runtime, ratings, tagline), search by title, browse popular films, or fetch a member's profile. Pure HTTP, no login required.

Pricing

from $3.00 / 1,000 results

Rating

5.0

(17)

Developer

Crawler Bros

Crawler Bros

Maintained by Community

Actor stats

17

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

Scrape Letterboxd — the cinephile community's film database. Pull rich metadata for any film (directors, cast, genres, runtime, average rating, ratings count, tagline, plot summary, languages, countries), search films by title, browse popular films and lists, scrape film reviews, browse films by director / actor / studio / country, or fetch a member's profile with their public stats and watchlist. No login, no cookies required.

Letterboxd's React frontend is fronted by Cloudflare; the actor uses Chrome 131 TLS impersonation to fetch the public-by-default pages exactly as a browser would.

Modes

ModeWhat it returns
filmFull metadata for one or more film slugs (recordType=film)
searchFilms matching a title query (recordType=film)
userProfilePublic profile + activity stats (recordType=user)
listsPopular lists index OR contents of a single list (recordType=list + recordType=film)
popularFilms ranked by popularity in a chosen window (week / month / year / all-time)
filmReviewsReviews for a film (paginated, sorted by activity) (recordType=review)
byCrewFilms attached to a director, actor, studio, or country (recordType=crewMember + recordType=film)
userWatchlistA user's public watchlist, paginated (recordType=film)

What you get

Film records (recordType=film)

FieldDescription
slugLetterboxd film slug (parasite-2019)
urlPublic film URL
titleFilm title
yearRelease year
directorsArray of director names
castArray of leading cast names (top ~10)
genresArray of genres (e.g. Drama, Thriller)
countriesArray of country names
productionCompaniesArray of producing companies
runtimeMinutesRuntime in minutes
taglineMarketing tagline
descriptionPlot summary (from og:description)
originalLanguagesPrimary language(s)
posterUrlPoster image URL
averageRatingLetterboxd average rating (0-5 scale, e.g. 4.53)
ratingsCountTotal user ratings cast
reviewsCountTotal user reviews

User records (recordType=user)

FieldDescription
usernameLetterboxd handle
urlProfile URL
displayNameDisplay name
bioProfile bio
avatarUrlAvatar image URL
filmsLoggedTotal films logged
filmsThisYearFilms logged in the current year
followersCountFollower count
followingCountFollowing count

Empty fields are dropped from every record at every depth — the dataset never contains nulls.

Input

ParameterTypeDefaultDescription
modeEnumfilmOne of film / search / userProfile / lists / popular / filmReviews / byCrew / userWatchlist
filmSlugsArray["parasite-2019"]Slugs (parasite-2019) or full URLs. Used when mode=film
filmSlugStringSingle film slug for mode=filmReviews
searchQueryStringFilm title query. Used when mode=search
enrichSearchResultsBooleanfalseWhen mode=search, also visit each film's page for full metadata. Slower but enables year / rating / genre filters
usernameStringLetterboxd handle. Used when mode=userProfile or mode=userWatchlist
listUrlStringLetterboxd list URL for mode=lists (single list). Leave empty to fetch popular lists index
popularPeriodEnumweekweek / month / year / all-time — used by mode=popular and mode=lists (popular lists index)
crewTypeEnumdirectordirector / actor / studio / country — used by mode=byCrew
crewSlugStringLetterboxd slug for the crew person/entity (e.g. christopher-nolan, a24, japan)
minYear / maxYearIntegerDrop films outside the year range
minRatingIntegerDrop films with average rating below this. Scale is 0-500 (i.e. 350 = 3.5/5)
genreEnumDrop films missing this genre. One of 19 Letterboxd genres (Action, Adventure, Animation, Comedy, Crime, Documentary, Drama, Family, Fantasy, History, Horror, Music, Mystery, Romance, Science Fiction, TV Movie, Thriller, War, Western)
maxItemsInteger25Hard cap on emitted records (1-500)

Example input — single film

{
"mode": "film",
"filmSlugs": ["parasite-2019", "the-godfather", "dune-part-two"]
}

Example input — search by title

{
"mode": "search",
"searchQuery": "Dune",
"maxItems": 25
}

Example input — search with full metadata enrichment

{
"mode": "search",
"searchQuery": "Christopher Nolan",
"enrichSearchResults": true,
"minYear": 2000,
"minRating": 350,
"maxItems": 50
}

Example input — user profile

{
"mode": "userProfile",
"username": "dave"
}
{
"mode": "popular",
"popularPeriod": "week",
"maxItems": 50
}

Example input — list contents

{
"mode": "lists",
"listUrl": "https://letterboxd.com/dave/list/official-top-250-narrative-feature-films/",
"maxItems": 50
}
{
"mode": "lists",
"popularPeriod": "week",
"maxItems": 25
}

Example input — film reviews

{
"mode": "filmReviews",
"filmSlug": "parasite-2019",
"maxItems": 50
}

Example input — films by director / studio / country

{
"mode": "byCrew",
"crewType": "director",
"crewSlug": "christopher-nolan",
"maxItems": 50
}
{
"mode": "byCrew",
"crewType": "studio",
"crewSlug": "a24",
"maxItems": 50
}
{
"mode": "byCrew",
"crewType": "country",
"crewSlug": "japan",
"maxItems": 100
}

Example input — user watchlist

{
"mode": "userWatchlist",
"username": "dave",
"maxItems": 100
}

Example output

{
"recordType": "film",
"slug": "parasite-2019",
"url": "https://letterboxd.com/film/parasite-2019/",
"title": "Parasite",
"year": 2019,
"directors": ["Bong Joon Ho"],
"cast": ["Song Kang-ho", "Lee Sun-kyun", "Cho Yeo-jeong"],
"genres": ["Thriller", "Comedy", "Drama"],
"countries": ["South Korea"],
"runtimeMinutes": 133,
"tagline": "Act like you own the place.",
"description": "All unemployed, Ki-taek's family takes peculiar interest in the wealthy and glamorous Parks…",
"originalLanguages": ["Korean"],
"averageRating": 4.53,
"ratingsCount": 5323455,
"reviewsCount": 700624,
"posterUrl": "https://a.ltrbxd.com/resized/sm/upload/oi/ha/78/z8/parasite-1200-1200-675-675-crop-000000.jpg",
"scrapedAt": "2026-05-06T05:42:18Z"
}

Use cases

  • Film recommendation engines — Pull rich metadata + community ratings for any film catalogue.
  • Entertainment research — Track average rating and review count over time for industry analysis.
  • Content discovery — Search Letterboxd's index and filter by year / rating / genre.
  • Competitive review analysis — Pair with our IMDb / Rotten Tomatoes scrapers for full-spectrum film coverage.
  • CRM enrichment — Augment cinephile lead records with public Letterboxd activity (films logged, follower counts).
  • Academic / film studies — Snapshot community-driven ratings + tags for sociological analysis.

FAQ

Do I need a Letterboxd account? No. The Letterboxd film pages, search endpoint, and public profiles all serve anonymous traffic.

Why Chrome 131 TLS impersonation? Letterboxd is fronted by a Cloudflare WAF that fingerprints the TLS handshake and rejects vanilla Python clients. Chrome 131 impersonation matches the fingerprint of a real desktop Chrome browser and passes through cleanly.

How does search work? The actor uses Letterboxd's /s/autocompletefilm?q=... JSON endpoint, which is much richer (and more reliable) than scraping the React-rendered search page. Each result includes slug, title, release year, runtime, and director. Set enrichSearchResults=true to follow each result with a full film-page fetch (needed for year / rating / genre filters and to get genres, cast, ratings count).

The autocomplete endpoint refuses unauthenticated requests from many datacenter IP ranges. The actor's input default is proxy: {useApifyProxy: true, apifyProxyGroups: ["RESIDENTIAL"]} which routes through residential IPs and works reliably. mode=film and mode=userProfile work without proxy too — proxy is only mandatory for mode=search.

How do minYear / maxYear / minRating / genre filters interact with search? Filters require full film metadata to evaluate. If any filter is set in mode=search, the actor automatically enriches each search result with a film-page fetch (slower but accurate).

Can I scrape reviews? Yes — set mode=filmReviews and provide a filmSlug. Each record has the reviewer's username + display name, the rating they gave, the review text, the review date, the like / comment counts, and the canonical review URL. Pagination is automatic up to maxItems.

How do I list a director's / actor's / studio's filmography? Set mode=byCrew, choose crewType (director / actor / studio / country) and provide the matching crewSlug (Letterboxd's URL slug — e.g. christopher-nolan, timothee-chalamet, a24, japan).

How do I scrape a list's contents? Set mode=lists and pass the full list URL in listUrl. The first record is the list's metadata (recordType=list); subsequent records are the films in the list (recordType=film) preserving original order via listPosition. Leaving listUrl empty returns the popular lists index for the chosen popularPeriod.

How current is the data? Live — every run hits Letterboxd at request time. Schedule the actor for daily / hourly refreshes to track rating drift on a film catalogue.

Do I need a proxy? No. The Cloudflare WAF accepts datacenter IPs as long as the TLS fingerprint is real (which Chrome 131 impersonation provides). The actor sets a polite User-Agent and stays well under any rate limit.

Limitations

  • mode=search and the listing-based modes (popular, lists, byCrew, userWatchlist) work best with Apify Residential Proxy (input default). mode=film, mode=userProfile, and mode=filmReviews work without proxy from most IPs.
  • Letterboxd lists pages return up to 100 films per page (multiple pages auto-paginated up to maxItems).
  • TLS fingerprints can shift; if a future Cloudflare update breaks Chrome 131 impersonation, we'll bump to the latest supported impersonation profile.
  • Country crewSlug uses Letterboxd's slug format (e.g. japan, south-korea, usa), not ISO-2.