Skip to main content
Version: Next

HTTP compression

The Apify client compresses every request body before sending it to the API. It reduces the amount of data transferred over the network, resulting in faster requests and lower bandwidth usage, especially for large payloads such as Actor inputs, dataset uploads, or key-value store records.

How it works

The client compresses request bodies using the compressor configured via the compression parameter (default 'gzip'). The server supports both gzip and brotli and decompresses the request body transparently.

Configuration

To choose the compression algorithm, pass compression to the client constructor:

from apify_client import ApifyClient

# Default: gzip, no extra dependency required
client = ApifyClient(token='MY-APIFY-TOKEN')

# Opt in to brotli (requires apify-client[brotli])
client = ApifyClient(token='MY-APIFY-TOKEN', compression='brotli')

Enabling brotli

Brotli is available as an optional extra. Install it alongside the client:

pip install "apify-client[brotli]"
# or
uv add "apify-client[brotli]"

Then pass compression='brotli' to the client constructor. If you request brotli without installing the extra, the client raises a clear ImportError. There is no silent fallback.

Custom quality and advanced control

For fine-grained control over compression quality, inject an HttpCompressor instance directly instead of a string literal:

from apify_client import ApifyClient
from apify_client.http_compressors import BrotliHttpCompressor, GzipHttpCompressor

# Brotli at maximum quality
client = ApifyClient(token='MY-APIFY-TOKEN', compression=BrotliHttpCompressor(quality=11))

# Gzip at maximum quality
client = ApifyClient(token='MY-APIFY-TOKEN', compression=GzipHttpCompressor(quality=9))

You can also implement a fully custom compressor by subclassing HttpCompressor:

from apify_client import ApifyClient
from apify_client.http_compressors import HttpCompressor


class IdentityCompressor(HttpCompressor):
content_encoding = 'identity'
"""Value sent in the `Content-Encoding` header."""

def compress(self, data: bytes) -> bytes:
"""Compress a request body.

Args:
data: The raw bytes to compress.

Returns:
The compressed bytes.
"""
return data


client = ApifyClient(token='MY-APIFY-TOKEN', compression=IdentityCompressor())

Comparison

BrotliGzip
Compression ratioTypically better than gzipGood
CPU costModerate, depends on qualityLow
AvailabilityRequires the brotli extraBuilt-in, no extra needed
Content-Encoding headerbrgzip
Quality range0–111–9
Default quality69
Enable via configcompression='brotli'compression='gzip' (default)
Best forLarge payloads where bandwidth mattersMinimal-dependency environments
tip

For most workloads, the bandwidth savings from brotli outweigh the CPU costs. Install the brotli extra and pass compression='brotli' unless you can't install additional packages in your environment.