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!
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) andpage(page number) parameters. Usesort[]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 inresponse.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
- Digital library frontend for searching and browsing public domain books
- Historic film archive browser with year and genre filters
- Open source software archive with download statistics tracking
- Concert recording database using the live music archive collection
- Educational resource aggregator for teachers to find free materials