Track what’s hot on IMDb in real time with a fast, filterable scraper for trending movies and TV shows. Pull rich metadata (ratings, genres, duration, keywords, and content ratings) so you can build dashboards, alerts, or discovery feeds around IMDb trending titles.
Created by Bitbash, built to showcase our approach to Scraping and Automation!
If you are looking for imdb-trending-ppr you've just found your team — Let’s Chat. 👆👆
This project collects real-time trending items from IMDb’s popular charts and returns clean, structured results for movies, TV shows, or both. It solves the problem of reliably turning trending pages into machine-ready data with consistent fields and powerful filters. It’s built for developers, analysts, and growth teams who want a dependable IMDb trending scraper for automation, monitoring, and content workflows.
- Extracts trending movies and TV shows with rich metadata (title, description, poster, rating, genres, runtime).
- Supports strict filtering for rating range, vote thresholds, genres, keywords, and content ratings.
- Normalizes duration into minutes when available for easy analytics and comparisons.
- Produces consistent JSON outputs suitable for pipelines, dashboards, and alerts.
- Handles mixed results across movies and TV with a unified schema.
| Feature | Description |
|---|---|
| Real-time trending fetch | Pulls the latest trending items without relying on cached results. |
| Type targeting | Choose to collect movie, tv, or all items in one run. |
| Rating filters | Filter by minimum/maximum IMDb rating to match your quality threshold. |
| Vote thresholding | Require a minimum rating count to avoid low-signal items. |
| Genre matching | Enforce “must include all genres” filtering for precise discovery feeds. |
| Duration range filtering | Filter titles by runtime (minutes) when duration is available. |
| Keyword matching | Match all keywords against title/description to narrow results fast. |
| Content rating filtering | Keep only titles matching allowed content ratings (e.g., R, PG-13, TV-MA). |
| Clean normalized output | Returns structured objects with normalized fields and derived helpers like durationMinutes. |
| Field Name | Field Description |
|---|---|
| id | IMDb title ID (e.g., tt1234567). |
| @type | Item type such as Movie or TVSeries. |
| url | Canonical title URL on IMDb. |
| name | Title name (movie/show). |
| description | Short plot/summary text when available. |
| image | Poster image URL. |
| aggregateRating | Rating object including best/worst rating, value, and count. |
| aggregateRating.ratingValue | IMDb rating value (1–10). |
| aggregateRating.ratingCount | Total number of votes. |
| contentRating | Content rating string (e.g., PG-13, R, TV-MA). |
| genre | Comma-separated genre string. |
| genreArray | Genres parsed into an array for filtering/analytics. |
| duration | ISO 8601 runtime when available (commonly for movies). |
| durationMinutes | Runtime in minutes when available; N/A for many TV entries. |
[
{
"id": "tt13654226",
"@type": "Movie",
"url": "https://www.imdb.com/title/tt13654226/",
"name": "The Gorge",
"description": "Two highly-trained operatives become close after being sent to protect opposite sides of a mysterious gorge. When an evil emerges, they must work together to survive what lies within.",
"image": "https://m.media-amazon.com/images/M/MV5BOTQ5Y2QyYTktYmFmZi00NWJlLWE0MzgtYTA4M2I0ZjQwZjcxXkEyXkFqcGc@._V1_.jpg",
"aggregateRating": {
"@type": "AggregateRating",
"bestRating": 10,
"worstRating": 1,
"ratingValue": 6.8,
"ratingCount": 77949
},
"contentRating": "PG-13",
"genre": "Action, Adventure, Horror",
"duration": "PT2H7M",
"durationMinutes": 127,
"genreArray": ["Action", "Adventure", "Horror"]
},
{
"id": "tt13406094",
"@type": "TVSeries",
"url": "https://www.imdb.com/title/tt13406094/",
"name": "The White Lotus",
"description": "The exploits of various guests and employees of a luxury resort over the span of a week.",
"image": "https://m.media-amazon.com/images/M/MV5BZmM1MGM0MDQtZTAzNy00ZGJkLWI4MDUtNjBmMzdhYjhlM2QwXkEyXkFqcGc@._V1_.jpg",
"aggregateRating": {
"@type": "AggregateRating",
"bestRating": 10,
"worstRating": 1,
"ratingValue": 8,
"ratingCount": 242909
},
"contentRating": "TV-MA",
"genre": "Comedy, Drama",
"durationMinutes": "N/A",
"genreArray": ["Comedy", "Drama"]
}
]
IMDb Trending PPR/
├── src/
│ ├── main.py
│ ├── runner.py
│ ├── clients/
│ │ ├── http_client.py
│ │ └── retry.py
│ ├── extractors/
│ │ ├── imdb_chart_fetcher.py
│ │ ├── jsonld_parser.py
│ │ └── normalize.py
│ ├── filters/
│ │ ├── rating_filters.py
│ │ ├── genre_filters.py
│ │ ├── duration_filters.py
│ │ ├── keyword_filters.py
│ │ └── content_rating_filters.py
│ ├── schemas/
│ │ ├── input_schema.json
│ │ └── output_schema.json
│ ├── utils/
│ │ ├── duration.py
│ │ ├── text.py
│ │ └── logging.py
│ └── outputs/
│ ├── exporters.py
│ └── dataset_writer.py
├── data/
│ ├── input.example.json
│ └── sample_output.json
├── tests/
│ ├── test_filters.py
│ ├── test_normalize.py
│ └── test_jsonld_parser.py
├── .env.example
├── .gitignore
├── pyproject.toml
├── requirements.txt
└── README.md
- Content teams use it to track IMDb trending movies and TV shows, so they can publish timely “what to watch” lists and discovery pages.
- Marketing teams use it to monitor trending shifts by genre and rating, so they can align campaigns with what audiences are actively engaging with.
- Data analysts use it to collect structured IMDb trending data daily, so they can build dashboards, trendlines, and churn/retention insights.
- Developers use it to power alerts for keywords and content ratings, so they can trigger notifications when specific types of titles start trending.
- Recommendation builders use it to filter high-signal titles by rating and vote count, so they can seed recommendation models with stronger candidates.
Q1: How do I fetch only movies or only TV shows?
Set the type input to movie or tv. Use all to merge both into one output list. This makes it easy to run separate pipelines for films vs series, or combine everything for a unified trending feed.
Q2: How do genre and keyword filters behave? Genres and keywords are “all must match” filters. If you pass multiple genres, a title must include every listed genre to be included. For keywords, all keywords must be present in the title name or description, which helps keep results tightly aligned to your intent.
Q3: Why does durationMinutes show N/A for many TV entries?
Many TV listings don’t expose a single runtime in a consistent way, so duration may be unavailable. Movies typically include an ISO duration which is converted into durationMinutes for analytics and filtering.
Q4: What’s the best way to avoid low-quality or low-signal results?
Use min_rating_count to require a meaningful vote threshold, then set min_rating to keep only titles above your quality bar. This combination is effective for building reliable IMDb trending dashboards and alerts.
Primary Metric: ~120–220 items/min typical throughput for combined movie + TV runs, depending on enabled filters and network conditions.
Reliability Metric: 98–99% successful runs across repeated executions, with automatic retries for transient request failures.
Efficiency Metric: Low memory footprint (commonly under 150 MB) due to streaming parsing and lightweight normalization.
Quality Metric: 95%+ field completeness for core metadata (ID, title, URL, rating, genres), with duration completeness higher for movies than TV entries.
