Skip to main content

Archivist

PyPI version Supported Python versions Build status Coverage report PyPI downloads

Archive webpages and files with a typed Python API.

Python clients for Internet Archive and Archive.today, with synchronous and asynchronous APIs.

Features

  • Search Internet Archive's Wayback capture history
  • Save pages through Internet Archive's Save Page Now service
  • Upload files to Internet Archive and request item removal
  • Check capture progress, service availability, and account capacity
  • Browse Archive.today history and find first, latest, or closest captures
  • Use the same models from synchronous and asynchronous code
  • Keep credentials and sensitive URL data out of representations and logs

Installation

Archivist requires Python 3.11 or later.

uv add archivist-py

Using pip:

pip install archivist-py

Internet Archive

Find the oldest Wayback Machine capture without an account:

from archivist import (
    InternetArchiveCdxRecord,
    InternetArchiveCdxResult,
    InternetArchiveClient,
)

with InternetArchiveClient() as client:
    captures: InternetArchiveCdxResult = client.search("https://example.com/", limit=1)

oldest: InternetArchiveCdxRecord | None = next(iter(captures), None)
if oldest is not None:
    print(f"{oldest.timestamp:%Y-%m-%d}: {oldest.archive_url()}")

Save a page anonymously and wait for the finished capture in one call:

from archivist import InternetArchiveClient, InternetArchiveSuccessStatus

with InternetArchiveClient() as client:
    capture: InternetArchiveSuccessStatus = client.save("https://example.com/")

print(capture.archive_url())

Credentials are optional for the Wayback examples above. Provide them for account features and restricted save options such as screenshots, emailed results, and WACZ files.

Upload a file to a new Internet Archive item using your account:

from pathlib import Path

from archivist import (
    InternetArchiveAccount,
    InternetArchiveClient,
    InternetArchiveUploadOptions,
)

account = InternetArchiveAccount("you@example.com", "your-password")
options = InternetArchiveUploadOptions(
    identifier="your-unique-item-id",
    title="Project notes",
    description="Notes from my project.",
    subjects=["notes"],
)
with InternetArchiveClient(account=account) as client:
    result = client.upload(Path("notes.txt"), options)

print(result.details_url)

For upload options and item removal, see the Internet Archive guide.

Archive.today

Find the oldest Archive.today capture through its Memento interface:

from archivist import ArchiveTodayClient, ArchiveTodayMemento

with ArchiveTodayClient() as client:
    oldest: ArchiveTodayMemento | None = client.first("https://example.com/")

if oldest is not None:
    print(f"{oldest.archived_at:%Y-%m-%d}: {oldest.archive_url}")

Archivist can browse existing Archive.today captures, but cannot create new ones because the service's bot protection prevents reliable automated access.

Async Support

Async clients mirror the synchronous API. Use AsyncInternetArchiveClient or AsyncArchiveTodayClient with async with, then await the same operations.

Documentation

Read the full documentation for authentication, save options, async examples, error handling, and the complete API reference.

Release files for archivist-py 1.2.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for archivist-py 1.2.0
File Size Uploaded
archivist_py-1.2.0.tar.gz 53.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for archivist-py 1.2.0
File Interpreter ABI Platform
archivist_py-1.2.0-py3-none-any.whl Python 3 none any Details

Total release size: 118.8 kB

Release files / archivist_py-1.2.0.tar.gz

Download URL archivist_py-1.2.0.tar.gz
Size 53.9 kB
Tags Source
SHA-256 checksum
How to use checksums
d81a93178ebe6f2ca8bc350dc5f680a089f9e525ef9a8f895590bc8cf014bb6c
BLAKE2b-256 checksum
How to use checksums
550f7a803da450a5d54ed4b63e1fb841c81b3eff77989cab7bc905e4ef3a3896
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.19 {"installer":{"name":"uv","version":"0.12.19","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release files / archivist_py-1.2.0-py3-none-any.whl

Download URL archivist_py-1.2.0-py3-none-any.whl
Size 64.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
7497587069c4fe7e67a28eaaaf1096cf173d133d5e257fa04eed5f43e2bc77a2
BLAKE2b-256 checksum
How to use checksums
71c8d1cb2baeecc6ce2b15e5fc38cee784313e5b47914efdb564bb0432dc1315
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.19 {"installer":{"name":"uv","version":"0.12.19","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release history Release notifications | RSS feed

This release

1.2.0 This release

2 release files

1.1.0

2 release files

1.0.2

2 release files

1.0.1

2 release files

1.0.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page