IMDb API alternative
IMDb has no free general purpose REST API: its non-commercial datasets are downloadable files and commercial access is licensed. amodb is a paid JSON API where you look up a title by IMDb id, read the IMDb rating and vote count where known, and get cast, images and trailers with one key.
IMDb data over REST: the short answer
IMDb has no free general purpose REST API. Its non-commercial datasets are downloadable files, and commercial access is licensed, so check their docs for current terms. If you want to call an HTTP endpoint with an IMDb id and get JSON back, amodb does that on a paid plan. If your contract requires data licensed from IMDb itself, that agreement is with IMDb and amodb does not replace it.
Ways to use an IMDb id on amodb
Five calls cover most needs. Each one starts from an id you already have or ends with one.
| You have or want | Call | You get |
|---|---|---|
| A title from an IMDb id | GET /3/find/tt0137523?external_source=imdb_id | Arrays movie_results, tv_results, person_results |
| The IMDb id of a movie | GET /3/movie/550, field imdb_id | tt0137523 for Fight Club |
| The IMDb id of a series | GET /3/tv/1396/external_ids | imdb_id next to the TVDB id |
| The IMDb score | GET /3/movie/550/ratings | imdb as value and votes, or null |
| An OMDb style record | GET /omdb/?i=tt0137523 | imdbRating, imdbVotes, imdbID |
Every row works with the same key. Ratings are described on the ratings page and id lookups on find by external id.
Read the IMDb score
The ratings endpoint returns the score and the vote count together. This is a real reply for Fight Club (id 550). Scores change over time.
{
"id": 550,
"imdb": {
"value": 8.8,
"votes": 2669989
},
"kinopoisk": {
"value": 8.7,
"votes": null
},
"metacritic": {
"value": 67,
"votes": null
},
"rotten_tomatoes": {
"value": 81,
"votes": null
},
"tmdb": {
"value": 8.437,
"votes": 33039
}
}For IMDb the value is on a 0 to 10 scale with one decimal. Show the vote count beside it, and render nothing when the object is null. In this reply only IMDb and TMDB carry votes. votes can be null for any source, so check it before you show it. A cached reply stays valid for 6 hours at the edge, so polling more often gains nothing.
Feature comparison
| Feature | IMDb | amodb |
|---|---|---|
| Pricing model | Licensed for commercial access, check their docs | Prepaid, from 1 to 24 months |
| Free tier | No free general purpose REST API | None, and no trial |
| Authentication | Check their docs | api_key query parameter or Bearer header |
| Response format | Downloadable dataset files, check their docs for licensed feeds | JSON |
| Languages | Check their docs | 14 interface languages |
| Movies | Check their docs for fields | Details, credits, images, videos |
| TV | Check their docs for fields | Series, seasons, episodes |
| People | Check their docs for fields | Profiles, filmography, images |
| Images | Check their docs | img.amodb.dev, no key needed |
| Ratings | Its own score, check their docs for access | Five sources, IMDb among them, where known |
| Rate limit | Check their docs | 20, 40 or 120 requests per minute |
| Commercial use | Licensed, check their docs | Paid plans, see pricing |
| Compatibility | Its own formats, check their docs | TMDB v3 reads and the OMDb protocol |
Where amodb differs
You call an endpoint instead of parsing a file. One request returns a title with its cast, trailers and ratings through append_to_response, and the shape matches TMDB v3, so existing client libraries work. The same key serves the OMDb style endpoint, which keeps older code that reads imdbRating running.
The ratings block is a fixed object with five keys. A source that is not known is null, not a missing key, so code that reads ratings.imdb does not need an existence check on the parent. A vote count can sit beside the value, which lets you hide a score that rests on few votes. It can also be null, as it is for three of the five sources in the example above.
Where IMDb is a better fit
- The origin of the score. IMDb publishes its own ratings first. amodb returns a value only where it is known, so a new or obscure title can come back
null. - Site features. User reviews, lists and watchlists live on the IMDb site. amodb is a metadata API and offers no user accounts.
- Licensed data. If a partner or a contract demands IMDb licensed data, only IMDb can provide it.
- Offline analysis. The non-commercial dataset files suit bulk research that you run on your own machine. Check their docs for the terms.
Migrate to amodb
You most likely hold a list of IMDb ids. Map each one to an amodb id once, store the pair, and call details by the numeric id afterwards.
curl -s "https://api.amodb.dev/3/find/tt0133093?external_source=imdb_id" \
-H "Authorization: Bearer $AMODB_KEY"import os
import requests
KEY = os.environ["AMODB_KEY"]
imdb_ids = ["tt0137523", "tt0133093", "tt1375666"]
for imdb_id in imdb_ids:
r = requests.get(
f"https://api.amodb.dev/3/find/{imdb_id}",
params={"external_source": "imdb_id"},
headers={"Authorization": f"Bearer {KEY}"},
timeout=10,
)
r.raise_for_status()
hits = r.json()["movie_results"]
print(imdb_id, hits[0]["id"] if hits else None)The three ids above map to 550, 603 and 27205, which are Fight Club, The Matrix and Inception. A series id such as tt0903747 comes back in tv_results, where Breaking Bad has id 1396. An empty array means no match was found for that id.
Pace the loop. Each id is one request, and a 429 includes a Retry-After header with the seconds to wait. See errors for the other codes.
Store ids safely
- Keep IMDb ids as strings. They start with
ttand carry leading zeros, as intt0137523, and a number type drops those zeros. - Save the IMDb id and the amodb id as a pair. Either one finds the title again.
- Read
tv_resultsfor series andmovie_resultsfor films. A single id normally fills one array and leaves the others empty. - Request details by the amodb id from then on, because a details call can carry cast, trailers and ratings through
append_to_response.
Pricing
Choose one of three plans at 20, 40 or 120 requests per minute and prepay for 1, 3, 6, 12 or 24 months. Longer periods take 10, 20, 30 or 40 percent off. All plans return the same data, nothing renews on its own, and there is no free tier. See pricing for amounts.
Questions and answers
Does IMDb offer a free REST API?
IMDb has no free general purpose REST API. Its non-commercial datasets are downloadable files, and commercial access is licensed. Check their docs for the current terms, formats and fields before you plan around them.
Can I look up a title by its IMDb id on amodb?
Yes. Call /3/find/tt0137523 with external_source=imdb_id and read movie_results, tv_results or person_results. The OMDb style endpoint also accepts the i parameter with an IMDb id.
Is the IMDb rating always present?
No. The ratings object always has the five keys imdb, kinopoisk, metacritic, rotten_tomatoes and tmdb, but each one is null when the score is not known. Handle null before you render a number.
Do I get IMDb user reviews or lists?
No. amodb returns the IMDb id, and the IMDb score with its vote count where known. It does not host IMDb user reviews, lists or watchlists. The TMDB style reviews endpoint answers 200, and most titles return an empty list.
How long does it take to map a list of IMDb ids?
One find request per id. A list of 500 ids needs 500 requests, so on the plan with 20 requests per minute that takes about 25 minutes. Store the result, because the mapping rarely changes.