IMSDb APIimsdb.com ↗
Access IMSDb's full screenplay catalog via API. Retrieve script text, metadata, genres, ratings, comments, and TV transcripts across thousands of titles.
What is the IMSDb API?
The IMSDb API exposes 9 endpoints covering the complete Internet Movie Script Database catalog — from full screenplay text to editorial ratings, genre filters, and user comments. The get_script_text endpoint returns the entire screenplay as a plain string, while get_script_details delivers structured metadata including writer credits, script date, user and editorial ratings, and a poster image URL for a given title.
No input parameters required.
curl -X GET 'https://api.parse.bot/scraper/823d3348-58ab-446b-8507-af14ca2a34ed/get_all_scripts' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace imsdb-com-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""IMSDb SDK — search scripts, read metadata, fetch screenplays, browse comments."""
from parse_apis.imsdb_scraper_api import IMSDb, Genre, ScriptNotFound
client = IMSDb()
# Search for scripts by keyword and browse results
for script in client.scriptsummaries.search(query="Matrix", limit=5):
print(script.title, script.script_page_url)
# Get full details for a specific script by title
detail = client.scripts.get(title="Matrix, The")
print(detail.title, detail.user_rating, detail.genres, detail.script_date)
# Read the full screenplay text via the detail instance
screenplay = detail.text()
print(screenplay.script_url, len(screenplay.screenplay))
# Browse user comments on the script
for comment in detail.comments.list(limit=3):
print(comment.username, comment.rating, comment.comment_text[:60])
# Filter scripts by genre using the Genre enum
for entry in client.scriptsummaries.by_genre(genre=Genre.THRILLER, limit=3):
print(entry.title, entry.script_page_url)
# Handle a missing script gracefully
try:
client.scripts.get(title="Nonexistent Movie Title XYZ")
except ScriptNotFound as exc:
print(f"Script not found: {exc.title}")
print("exercised: scriptsummaries.search / scripts.get / text / comments.list / by_genre")
Get the complete catalog of all scripts on IMSDb. Returns every script with title, writers, draft info, and page URL. Single-page response containing the full alphabetical listing.
No input parameters required.
{
"type": "object",
"fields": {
"items": "array of script catalog entries with title, writers, draftInfo, and scriptPageUrl"
},
"sample": {
"data": {
"items": [
{
"title": "10 Things I Hate About You",
"writers": [
"Karen McCullah Lutz",
"Kirsten Smith",
"William Shakespeare"
],
"draftInfo": "(1997-11 Draft)",
"scriptPageUrl": "https://imsdb.com/Movie Scripts/10 Things I Hate About You Script.html"
},
{
"title": "12",
"writers": [
"Lawrence Bridges"
],
"draftInfo": "(Undated Draft)",
"scriptPageUrl": "https://imsdb.com/Movie Scripts/12 Script.html"
}
]
},
"status": "success"
}
}About the IMSDb API
Catalog and Search
get_all_scripts returns the full site catalog as an array of objects, each with title, writers, draftInfo, and scriptPageUrl. For narrower retrieval, get_scripts_by_letter accepts a single character (A–Z or # for numeric titles) and returns matching entries. search_scripts takes a free-text query and returns title/URL pairs for any matching scripts. get_scripts_by_genre filters by genre name — valid values include Action, Comedy, Drama, Horror, Film-Noir, Musical, and others — returning the same title/URL shape.
Script Details and Full Text
get_script_details accepts a title string formatted as it appears on IMSDb (e.g. 'Matrix, The') and returns genres, writers, scriptDate, userRating, imsdbRating, imsdbOpinion, scriptReadUrl, posterImageUrl, and movieReleaseDate. Both rating fields are numeric out of 10, or null when not present. To retrieve the actual screenplay, pass that scriptReadUrl value as the read_url parameter to get_script_text — this is more reliable than constructing the URL from a title with special characters. The response includes screenplay as a single string containing the full script.
Community Data and Latest Additions
get_script_comments retrieves per-user comments for a title, returning username, commentText, and an integer rating out of 10 for each entry. get_latest_scripts requires no input and returns two arrays: lastAdded (with poster images) and newestReleases, both reflecting what the IMSDb homepage currently surfaces. get_tv_transcripts returns a list of TV show names and their transcript page URLs available from the site.
Coverage Notes
Titles follow IMSDb's own naming conventions — articles like "The" are moved to the end (e.g. 'Dark Knight, The'). Passing the title in any other format to get_script_details or get_script_comments may return no results. The screenplay field in get_script_text is raw text as formatted on the page; it is not parsed into scenes, dialogue blocks, or structured acts.
The IMSDb API is a managed, monitored endpoint for imsdb.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when imsdb.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official imsdb.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Build a screenplay search tool that filters by genre using
get_scripts_by_genreand displays metadata fromget_script_details - Train NLP or language models on raw screenplay text retrieved via
get_script_text - Track newly added scripts by polling
get_latest_scriptsand alerting on new entries in thelastAddedarray - Aggregate user and editorial ratings across a genre by combining
get_scripts_by_genrewithget_script_detailsrating fields - Analyze writer credits across the full catalog using
get_all_scriptsand thewritersarray on each entry - Build a comment sentiment analysis dataset from
get_script_commentsusingcommentTextand pairedratingvalues - Populate a film reference app with poster images and release dates using
posterImageUrlandmovieReleaseDatefromget_script_details
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does IMSDb have an official developer API?+
What does `get_script_details` return versus `get_script_text`?+
get_script_details returns metadata: genres, writer credits, script date, user and editorial ratings (each out of 10), an opinion blurb, poster image URL, and movie release date — but no script content. get_script_text returns the actual screenplay string. The two endpoints are designed to be used together: retrieve scriptReadUrl from get_script_details, then pass it as read_url to get_script_text for reliable full-text retrieval.Are individual scenes, dialogue blocks, or act breaks returned as structured data?+
screenplay field from get_script_text is a single raw text string; the API does not parse it into structured components like scenes, characters, or dialogue lines. You can fork this API on Parse and revise it to add a parsing layer that segments screenplay text into structured fields.Does the API cover every script on IMSDb, or only a subset?+
get_all_scripts returns the full catalog as listed on the site's alphabetical index. Coverage depends entirely on what IMSDb has added — some films have no script available, in which case scriptReadUrl in get_script_details will be null. TV coverage is limited to transcripts listed via get_tv_transcripts; individual episode text is not currently returned as structured data. You can fork this API on Parse and revise it to add episode-level transcript endpoints.How should I format the `title` parameter for `get_script_details` and `get_script_comments`?+
'Matrix, The'. Using the title format returned by get_all_scripts or search_scripts is the safest approach, since those endpoints reflect the exact strings IMSDb uses internally.