---
title: Storage
url: https://docs.apify.com/storage.md
parents:
  - [Apify documentation](https://docs.apify.com/llms.txt)
next: [Dataset](https://docs.apify.com/storage/dataset.md)
---

> ## Documentation index
> Fetch the complete documentation index at: https://docs.apify.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Storage

The Apify platform provides three types of storage, accessible from [Apify Console](https://console.apify.com/storage) and externally through the [REST API](https://docs.apify.com/api/v2.md), [API clients](https://docs.apify.com/api.md), and [SDKs](https://docs.apify.com/sdk.md).

## Storage types

#### [Dataset](https://docs.apify.com/storage/dataset.md)

[Stores results from web scraping and data processing; each Actor run gets a unique dataset. Includes table-like visualization and export formats like JSON and Excel.](https://docs.apify.com/storage/dataset.md)

#### [Key-value store](https://docs.apify.com/storage/key-value-store.md)

[Stores data of any type: JSON, HTML, images, strings. Accessible via Apify Console or API.](https://docs.apify.com/storage/key-value-store.md)

#### [Request queue](https://docs.apify.com/storage/request-queue.md)

[Manages URL processing for web crawling and similar tasks. Supports different crawling orders and lets you query and update URLs, accessible via Apify Console or API.](https://docs.apify.com/storage/request-queue.md)

## Access your storage

Access your storage through Apify Console, the API, the API clients, or the SDKs.

### Apify Console

To view your storages in [Apify Console](https://console.apify.com/storage):

1. Open the **Storage** section in the left-side menu.
2. Select a tab to view your key-value stores, datasets, or request queues.
3. Select a storage's **ID** to open its detail page.

To view the related API endpoints, select **API** in the top right corner.

![Storage types in Apify Console](/assets/images/storage-types-dataset-70a684cddc87117fbe29884b9d420d3d.svg)

Toggle unnamed storages

To show or hide unnamed storages, check **Include unnamed storages**. By default, Apify Console shows them.

To rename a store, open the **Actions** menu and select **Rename**.

To share a storage, select **Share** in the **Actions** menu and provide an email, username, or user ID.

### Apify API

The [Apify API](https://docs.apify.com/api/v2/storage-key-value-stores.md) lets you access your storages programmatically using [HTTP requests](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods) and share your crawling results.

When accessing storages via API, provide a `store ID` in one of these formats:

* `WkzbQMuFYuamGv3YF` - the store's alphanumerical ID if the store is unnamed.
* `~store-name` - the store's name prefixed with tilde (`~`) character if the store is named (e.g. `~ecommerce-scraping-results`)
* `username~store-name` - username and the store's name separated by a tilde (`~`) character if the store is named and belongs to a different account (e.g. `janedoe~ecommerce-scraping-results`). Note that in this case, the store's owner needs to grant you access first.

For read (GET) requests, the alphanumerical ID alone is enough, since it's hard to guess and acts as an authentication key.

For other request types, and when using `username~store-name`, provide your secret API token in the request's [Authorization](https://docs.apify.com/api/v2.md#authentication) header or as a query parameter. Find your token on the [API & Integrations](https://console.apify.com/settings/integrations) page of your Apify account.

Token security

Never share a URL containing your authentication token. It can compromise your account's security. If the data you want to share requires a token, download the data first and share it as a file.

For a breakdown of each storage endpoint, see the [API documentation](https://docs.apify.com/api/v2/storage-datasets.md).

### Apify API clients

The Apify API clients let you access your storages from any Node.js or Python application, whether it runs on the Apify platform or externally.

For more details, see the [API client docs](https://docs.apify.com/api.md).

### Apify SDKs

The Apify SDKs are JavaScript and Python libraries for building your own Actors.

* JavaScript SDK requires [Node.js](https://nodejs.org/en/) 16 or later.
* Python SDK requires [Python](https://www.python.org/downloads/) 3.10 or above.

## Named and unnamed storages

The default storages for an Actor run are unnamed, identified only by an *ID*. Naming a storage ensures indefinite retention regardless of plan; unnamed storages follow the data retention rules below.

Named and unnamed storages are identical except for their retention period. Named storages are easier to identify. The names `janedoe~my-storage-1` and `janedoe~web-scrape-results` are easier to tell apart than the IDs `cAbcYOfuXemTPwnIB` and `CAbcsuZbp7JHzkw1B`. Storage names can be up to 63 characters long.

### Name a storage

You can name a storage via Apify Console or through the API.

In Apify Console:

1. Open your run's details and select the **Dataset**, **Key-value store**, or **Request queue** tab as appropriate.
2. Find the store's ID.
3. Click the ID to open the storage details.
4. Click on the **Actions** menu and choose **Rename**.
5. Enter a new name. Your storage is now preserved indefinitely.

Via API: get the storage's ID from the run that generated it using the [Get run](https://docs.apify.com/api/v2/actor-run-get.md) endpoint, then rename it using the `Update [storage]` endpoint (for example, [Update dataset](https://docs.apify.com/api/v2/dataset-put.md)).

The SDKs and clients each have their own naming conventions. See:

* [SDKs](https://docs.apify.com/sdk.md)
* [API clients](https://docs.apify.com/api.md)

## Data retention

How long Apify keeps your data depends on your plan. Unnamed storages and runs beyond the 10 most recent are deleted automatically; named storages are retained indefinitely.

How retention periods are enforced

* Free plan: Your 10 most recent runs are retained for 4 months.
* Paid plans: All data (including your 10 most recent runs) follows your plan's retention period, which you can configure in your billing settings.
* Named storages: Always exempt from deletion regardless of retention periods.

Unnamed storages beyond the 10 most recent runs are deleted when the retention period expires.

## Estimate your costs

Estimate your storage costs

1. Select a storage type.
2. Choose a plan.
3. Enter storage, duration, and operation counts.
4. Review the estimated total and breakdown.

### Storage Pricing

Estimate costs for your storage usage

This is an estimate

This is an estimate based on current pricing. Actual costs may vary.

#### Storage Type

\[x]

**Dataset**Stores results from web scraping and data processing

\[ ]

**Key-value Store**Stores various data types like JSON, HTML, images, and strings

\[ ]

**Request Queue**Manages URL processing for web crawling and other tasks

#### Plan

\[x]

**Free/Starter**$0/month & $19/month

\[ ]

**Scale**$199/month

\[ ]

**Business**$999/month

#### Usage

Storage (GB)1

Reads (count)1000

Duration (hours)24

Writes (count)1000

#### Estimated Costs

Storage (

<!-- -->

1

<!-- -->

GB ×

<!-- -->

24

<!-- -->

hours)$

<!-- -->

0.0240

Reads (

<!-- -->

1,000

<!-- -->

operations)$

<!-- -->

0.0004

Writes (

<!-- -->

1,000

<!-- -->

operations)$

<!-- -->

0.0050

**Total Estimated Cost****$<!-- -->0.0294**

## Rate limiting

All API endpoints limit their request rate to protect Apify servers from overload. The default rate limit for storage objects is 60 requests per second per storage object, and some endpoints have higher or lower limits. The tiers differ per storage type:

* [Datasets](https://docs.apify.com/storage/dataset.md#rate-limiting)
* [Key-value stores](https://docs.apify.com/storage/key-value-store.md#rate-limiting)
* [Request queues](https://docs.apify.com/storage/request-queue.md#rate-limiting)

If a client exceeds its limit, the API endpoints respond with the HTTP status code `429 Too Many Requests` and the following body:


```json
{

    "error": {

        "type": "rate-limit-exceeded",

        "message": "You have exceeded the rate limit of ... requests per second"

    }

}
```


Go to the [API documentation](https://docs.apify.com/api/v2.md#rate-limiting) for details and to learn what to do if you exceed the rate limit.

## Share

You can grant access rights to other Apify users, share a storage by link, or generate a time-limited pre-signed URL for one-off access to a restricted resource. For details, see [Share storage](https://docs.apify.com/storage/share.md).

## Concurrent access

If you have the storage's name or ID, you can access it from any [Actor](https://docs.apify.com/actors.md) or [task](https://docs.apify.com/actors/running/tasks.md) run. Datasets and key-value stores support concurrent reads and writes, while a request queue accepts new data from multiple runs but can only be processed by one run at a time, unless you use [request locking](https://docs.apify.com/storage/request-queue.md#distributivity). For details, see [Use storage from another run](https://docs.apify.com/storage/use-from-another-run.md).

## Delete storages

Named storages are only removed upon your request. You can delete storages in the following ways:

* [Apify Console](https://console.apify.com/storage) - using the **Actions** button in the store's detail page.
* [JavaScript SDK](https://docs.apify.com/sdk/js) - using the `.drop()` method of the [Dataset](https://docs.apify.com/sdk/js/api/apify/class/Dataset#drop), [Key-value store](https://docs.apify.com/sdk/js/api/apify/class/KeyValueStore#drop), or [Request queue](https://docs.apify.com/sdk/js/api/apify/class/RequestQueue#drop) class.
* [Python SDK](https://docs.apify.com/sdk/python) - using the `.drop()` method of the [Dataset](https://docs.apify.com/sdk/python/reference/class/Dataset#drop), [Key-value store](https://docs.apify.com/sdk/python/reference/class/KeyValueStore#drop), or [Request queue](https://docs.apify.com/sdk/python/reference/class/RequestQueue#drop) class.
* [JavaScript API client](https://docs.apify.com/api/client/js) - using the `.delete()` method in the [dataset](https://docs.apify.com/api/client/js/reference/class/DatasetClient), [key-value store](https://docs.apify.com/api/client/js/reference/class/KeyValueStoreClient), or [request queue](https://docs.apify.com/api/client/js/reference/class/RequestQueueClient) clients.
* [Python API client](https://docs.apify.com/api/client/python) - using the `.delete()` method in the [dataset](https://docs.apify.com/api/client/python#datasetclient), [key-value store](https://docs.apify.com/api/client/python/reference/class/KeyValueStoreClient), or [request queue](https://docs.apify.com/api/client/python/reference/class/RequestQueueClient) clients.
* [API](https://docs.apify.com/api/v2/key-value-store-delete.md) - using the `Delete [store]` endpoint, where `[store]` is the storage type you want to delete.
