# Letterboxd Films, Ratings & Lists Scraper (`scrapers_lat/letterboxd-scraper`) Actor

Scrape Letterboxd films, member profiles, watchlists and lists: average ratings, cast, genres, runtime, directors. Export JSON, CSV or Excel.

- **URL**: https://apify.com/scrapers\_lat/letterboxd-scraper.md
- **Developed by:** [Scrapers Lat](https://apify.com/scrapers_lat) (community)
- **Categories:** Social media, E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $6.80 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

[![Letterboxd Scraper](https://scrapers.lat/banners/letterboxd-scraper.png)](https://console.apify.com/actors/gmUN88tlQQbDHZegh/input)

## Letterboxd Scraper

> Extract films, member profiles, watchlists and lists from Letterboxd with average ratings out of 5, cast, genres, runtime and directors

![Apify](https://img.shields.io/badge/Platform-Apify-1CE1CE?logo=apify\&logoColor=white)
![Coverage](https://img.shields.io/badge/Coverage-Global%20film%20catalog-blue)
![Maintained](https://img.shields.io/badge/Maintained-Yes-brightgreen)
![Output](https://img.shields.io/badge/Output-JSON%20%7C%20CSV%20%7C%20Excel-orange)

<table><tr>
<td align="center"><strong>28 fields</strong><br>per record</td>
<td align="center"><strong>Global</strong><br>film catalog</td>
<td align="center"><strong>JSON / CSV / Excel</strong><br>output formats</td>
<td align="center"><strong>Updated</strong><br>2026-07-26</td>
</tr></table>

<br>

### What you get

Each record is one film, pulled from a film page, a member profile, a watchlist, a list, or a browse page. A record contains:

- **imageUrl**: film poster image
- **title**: film title
- **url**: Letterboxd film page URL
- **slug**: Letterboxd film slug
- **year**: release year
- **directors\***: director names
- **averageRating\***: Letterboxd weighted average, out of 5
- **ratingCount\***: how many members have rated the film
- **reviewCount\***: how many written reviews the film has
- **runtimeMinutes\***: runtime in minutes
- **genres\***: genre list
- **cast\***: top billed cast names
- **synopsis\***: plot summary
- **tagline\***: film tagline
- **languages\***: spoken languages
- **countries\***: countries of origin
- **studios\***: production companies
- **imdbId\***: matching IMDb title id
- **tmdbId\***: matching TMDB movie id
- **imdbUrl\***: link to the IMDb page
- **tmdbUrl\***: link to the TMDB page
- **memberRating**: the member's own star rating, out of 5, when scraping a profile or list
- **liked**: whether the member liked the film, when scraping a profile
- **listRank**: the film's position when scraping a ranked list
- **memberUsername**: the member the film was collected from
- **sourceType**: how the film was found (film, search, member, watchlist, list, browse)
- **observedAt**: when this record was collected

*\*These fields appear when Fetch Full Film Details is on (the default), and always for direct film URLs and keyword searches.*

### Who is it for

| Use case | Who benefits |
|---|---|
| Build a film metadata dataset with ratings and cast | Data teams, ML and recommender projects |
| Track how a member rates and lists films | Fans, film clubs, newsletter curators |
| Export a public list or watchlist to a spreadsheet | Programmers, cinephiles, list makers |
| Compare Letterboxd ratings against IMDb and TMDB | Analysts, journalists, researchers |
| Monitor a film's rating and review counts over time | Studios, marketers, film data resellers |

### Frequently Asked Questions

**What can I scrape from Letterboxd with this actor?**\
You can scrape any public film page, member profile, watchlist, list, or film browse page. Paste one or more URLs, or type a film keyword, and set how many films to collect with Max Films.

**How many films can I collect in one run?**\
There is no hard ceiling beyond the Max Films value you set. Lists, watchlists and profiles are paged automatically until the cap is reached, so you can export a full list of hundreds of films in a single run.

**Can I get a member's own ratings and their watchlist?**\
Yes. When you scrape a member profile the actor returns each film with the member's star rating and whether they liked it. Watchlists return the films the member plans to watch, and ranked lists return each film's position.

**Does keyword search return the exact film I mean?**\
A keyword resolves to the canonical Letterboxd film for that title, which for a common name can be an older entry. For an exact film, paste its film URL instead, for example letterboxd.com/film/dune-2021/.

**What happens when a page has no data or cannot be reached?**\
The film is skipped and the run continues, so a single missing or private page never fails the whole job. Films that return no data are simply not added to the dataset.

### Example use cases

Ready-to-run example tasks, each preconfigured for a common scenario. Open one and press run, or use it as a template.

### Related scrapers

Need data from the same space? Here are other scrapers we build and maintain:

- [Reddit Posts Scraper: Full Text, Scores & Awards](https://apify.com/scrapers_lat/reddit-posts-scraper): Pull posts, scores and awards from any subreddit or search
- [YouTube Video & Channel Data Scraper](https://apify.com/scrapers_lat/youtube-scraper): Collect video, channel and view metadata from YouTube
- [Steam Games Scraper](https://apify.com/scrapers_lat/steam-games-scraper): Extract game titles, prices, reviews and tags from Steam
- [Apple App Store Reviews & Ratings Scraper](https://apify.com/scrapers_lat/app-store-reviews-scraper): Gather app reviews, star ratings and version notes
- [Chrome Web Store Extensions Scraper](https://apify.com/scrapers_lat/chrome-web-store-scraper): Extract extension listings, ratings and install counts
- [Trustpilot Company Reviews & Ratings Scraper](https://apify.com/scrapers_lat/trustpilot-scraper): Collect company reviews, star ratings and reviewer detail

### More scrapers at scrapers.lat

This actor is built and maintained by [scrapers.lat](https://scrapers.lat), where we publish scrapers for Latin American and US public platforms: real estate, jobs, e-commerce, company registries and government data. Browse the full catalog, see live sample output for each one, or ask us for a custom scraper at [scrapers.lat](https://scrapers.lat).

***

> This actor is an independent tool and has no affiliation with Letterboxd. It only accesses data that is publicly available on the platform. Use it in accordance with Letterboxd's terms of service.

# Actor input Schema

## `maxFilms` (type: `integer`):

Maximum number of films to collect across all inputs. Optional.

## `withDetails` (type: `boolean`):

When on, each film from a member profile, watchlist, list or browse page is enriched with its full film page (director, average rating, genres, cast, synopsis, runtime, studios). Direct film URLs and keyword searches are always fully detailed.

## `searchTerm` (type: `string`):

A film title keyword to look up, for example "dune". Resolves to the canonical Letterboxd film. For an exact film, paste its film URL below instead.

## `startUrls` (type: `array`):

Letterboxd URLs to scrape. Accepts film pages (letterboxd.com/film/dune-2021/), member profiles (letterboxd.com/dave/films/), watchlists (letterboxd.com/dave/watchlist/), lists (letterboxd.com/dave/list/imdb-top-250/), and film browse pages (letterboxd.com/films/popular/).

## Actor input object example

```json
{
  "maxFilms": 10,
  "withDetails": true
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "maxFilms": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapers_lat/letterboxd-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "maxFilms": 10 }

# Run the Actor and wait for it to finish
run = client.actor("scrapers_lat/letterboxd-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "maxFilms": 10
}' |
apify call scrapers_lat/letterboxd-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=scrapers_lat/letterboxd-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/gmUN88tlQQbDHZegh/builds/PYRhNyxPNyOrBtHDo/openapi.json
