Archive.org

Data API · Works globally · Internet Archive search

TL;DR

Archive.org provides an advanced search API into the Internet Archive's massive digital library — 40+ million books, movies, software titles, music recordings, images, and archived web pages. The /advancedsearch.php endpoint supports Lucene-style query syntax with faceted filtering by media type, year, language, and subject. Returns results in JSON with metadata including title, creator, description, download links, and thumbnails. No API key required. The world's largest digital library, programmatically accessible.

Quick start: https://archive.org/advancedsearch.php?q=apple&output=json

No API key needed — just make a request!

Search for "apple": https://archive.org/advancedsearch.php?q=apple&output=json

How to Use This API

1. Basic Search

https://archive.org/advancedsearch.php?q=space+exploration&output=json

2. Filter by Media Type

Use mediatype to narrow results:

https://archive.org/advancedsearch.php?q=space&mediatype=movies&output=json

Media types: texts, movies, audio, software, images, web, etree, collection.

3. Control Results

Paginate with rows and page, sort by sort[]:

https://archive.org/advancedsearch.php?q=javascript&rows=5&page=1&sort[]=downloads+desc&output=json

4. JavaScript — Search Archive

async function searchArchive(query, mediaType = 'texts') {
  const params = new URLSearchParams({
    q: query,
    mediatype: mediaType,
    rows: 10,
    output: 'json'
  });
  
  const resp = await fetch(
    `https://archive.org/advancedsearch.php?${params}`
  );
  const data = await resp.json();
  const docs = data.response.docs;
  
  docs.forEach(doc => {
    console.log(`📄 ${doc.title}`);
    console.log(`  By: ${doc.creator || 'Unknown'}`);
    console.log(`  Year: ${doc.year || '?'}`);
    console.log(`  Identifier: ${doc.identifier}`);
  });
}

searchArchive('moon landing', 'movies');

5. Python — Download Metadata

import requests

params = {
    'q': 'python programming',
    'mediatype': 'texts',
    'rows': 5,
    'fl': 'title,creator,description,downloads',
    'sort': ['downloads desc'],
    'output': 'json'
}
resp = requests.get('https://archive.org/advancedsearch.php', params=params)
results = resp.json()['response']['docs']
for r in results:
    print(f"{r.get('title', '?')} — {r.get('downloads', 0)} downloads")
    print(f"  {r.get('description', '')[:100]}...")

Frequently Asked Questions

What can I search for on the Internet Archive?
Millions of digitized books (including public domain works), movies and videos, audio recordings (music, podcasts, radio), software titles, archived websites, images, and educational resources.
Do I need an API key?
No. The Internet Archive's search API is publicly accessible without any authentication.
How do I paginate results?
Use rows (results per page, max 1000) and page (page number) parameters. Use sort[] to control result ordering.
What fields can I include in results?
Use fl (field list) to specify comma-separated fields: title, creator, date, description, mediatype, downloads, identifier, format, language, subject, and many more.
What format does the response use?
JSON (output=json), XML (output=xml), or HTML. JSON is recommended with the response structure wrapping results in response.docs.
Can I get full item details?
Yes, use the item metadata API: https://archive.org/metadata/{identifier} returns full metadata for a specific item.

API Details

API URL
https://archive.org/advancedsearch.php
Documentation
archive.readme.io/docs
Category
Data
Authentication
Not Required
Geographic Coverage
Global — 40M+ items across all media types

What You Can Build