New See exactly what you're overpaying AWS in under 60 seconds. Try the Calculator for free

DynamoDB Import from S3: Bulk Load Costs and Limits

Understand DynamoDB Import from S3 pricing, key service limits, and what drives the cost of large-scale bulk data loads.
Updated August 26, 2026
19 min read
DynamoDB Import from S3: Bulk Load Costs and Limits
In this article
Key takeaways
1
Import only creates new tables. Backfilling an existing one means export, merge in S3, then reimport $0.25/GB combined.
2
Up to 50 concurrent imports can have 15 TB of total source-object data in us-east-1, us-west-2, and eu-west-1; the concurrent total is 1 TB elsewhere. Failed records still bill, so test on a small subset first.
3
The import consumes no write capacity, making it the cheapest phase of a table's life. Ongoing throughput is the real cost reserved capacity cuts it up to 54% (1-year) or 77% (3-year).
DynamoDB import from S3 costs $0.15 per GB of uncompressed source data and consumes zero write capacity units during the load. For a 100 GB dataset in US East (N. Virginia), the import fee is $15.00.

Loading the same 100 GB through on-demand BatchWriteItem costs approximately $62.50 for 1 KB items at $0.625 per million WRU, the rate in effect since AWS cut on-demand throughput pricing by 50% in November 2024. That makes the S3 import roughly 76% cheaper.

The AWS DynamoDB import from S3 feature supports CSV, DynamoDB JSON, and Amazon Ion formats. It also populates any Global Secondary Indexes defined at creation time at no extra cost.

The Short Answer

Native import from S3 is the right path when you are creating a new table and want to minimize loading cost, because it bills on the size of your source data rather than on write throughput. BatchWriteItem is a common path when the table already exists, because the import feature cannot load into one.

That settles the method, not the budget. Item size, total volume, and whether your S3 bucket sits in the same region as the target table all move the final number, so the sections below price each path at three data volumes before landing on a recommendation.

How Much Does DynamoDB Import from S3 Cost?

The pricing model has three components: the DynamoDB import fee, the S3 access costs, and (optionally) cross-region data transfer. Here is the complete cost breakdown.
Cost Component Rate (US East) Scope Notes
DynamoDB Import Fee $0.15/GB Uncompressed source data size Includes failed records
GSI Population $0.00 additional GSIs defined at table creation No extra charge during import
S3 Storage $0.023/GB-month (Standard) Source data in S3 Charged until you delete source files
S3 GET Requests $0.0004 per 1,000 GET DynamoDB reads from your S3 bucket Typically negligible
Cross-Region Transfer (if applicable) Typically $0.02/GB (varies by region pair) S3 bucket in a different region from target table Avoid by co-locating S3 and DynamoDB
For a 100 GB import in US East (N. Virginia), the DynamoDB import charge is $15.00. If the source files remain in S3 Standard for a full month, storage adds about $2.30 before applicable request, transfer, and free-tier effects. Keep the bucket and destination table in the same Region to avoid applicable inter-Region transfer charges

Total: approximately $17.40. A cross-region bucket adds roughly 2.00(0.02/GB x 100 GB), bringing it to about $19.40.

Import from S3 vs BatchWriteItem Costs

Here is how the import compares to writing through the API at three data volumes.
Data Size S3 Import Cost On-Demand WRU Cost Import Savings vs On-Demand
10 GB (~10M items at 1 KB) $1.50 $6.25 76%
100 GB (~100M items at 1 KB) $15.00 $62.50 76%
1 TB (~1B items at 1 KB) $153.60 $640.00 76%
For a new-table load made of nontransactional 1 KB items in US East (N. Virginia), import from S3 costs less than on-demand writes in these examples. 

Compare a provisioned-capacity load separately: its incremental cost depends on the capacity already available, the write rate, and the time the extra capacity is provisioned.

Also read: DynamoDB DAX Pricing: In-Memory Cache Cost vs Performance Gain

Can You Import to an Existing Table?

No, DynamoDB import from S3 to an existing table is not supported. The import process creates a brand-new table during the job; you cannot load into an existing table, empty or populated. Import-created tables can include Global Secondary Indexes but not Local Secondary Indexes, so this workaround cannot preserve a table that requires LSIs.
DynamoDB console import screen showing a required new table name with no existing-table option.

Workaround: Import to a New Table and Swap

The most common workaround has four steps:
1

Export the existing table to S3 using DynamoDB Export to S3 ($0.10/GB; requires PITR full export economics in the linked guide).

2

Merge or transform the exported data with the new data in S3, using Athena, Glue, or a simple script.

3

Import the merged dataset from S3 as a new table ($0.15/GB).

4

Update your application's table references to the new table, or swap via CloudFormation/CDK.

The combined cost is $0.10/GB (export) + $0.15/GB (import) = $0.25/GB. For a 100 GB table, that is $25.00 total cheaper than loading the same data through BatchWriteItem at on-demand rates.

BatchWriteItem for Existing Tables

If you must load data into an existing table without creating a new one, BatchWriteItem is a common native option for bulk puts and deletes. Each call handles up to 25 items or 16 MB per request.

At on-demand rates, each 1 KB write costs $0.625 per million WRU, so a small backfill under 1 GB runs well under $1 with a single Lambda function or local script.

For larger backfills, use AWS Glue or a multi-threaded writer with exponential backoff to avoid throttling. If the table uses provisioned capacity, temporarily increase WCU for the backfill window and reduce it afterward.

Above roughly 100 GB, the export-merge-reimport workaround at $0.25/GB is usually cheaper than sustained on-demand writes.

DynamoDB Import from S3: Quotas and Limits

AWS imposes specific quotas on the import feature that vary by region.
Quota Major Regions (us-east-1, us-west-2, eu-west-1) All Other Regions
Max concurrent import jobs 50 50
Max total source object size (concurrent) 15 TB 1 TB
Max S3 objects per import job 50,000 50,000
Supported input formats CSV, DynamoDB JSON, Amazon Ion CSV, DynamoDB JSON, Amazon Ion
Compression support GZIP, ZSTD, or None GZIP, ZSTD, or None
Import target New tables only New tables only
Source: Import format quotas and validation, AWS DynamoDB Developer Guide.

Imports support Global Secondary Indexes defined at table creation, but local secondary indexes are not supported.

If your total concurrent import data exceeds 1 TB and your target region is outside the three major regions, you have two options:
  1. Request a quota increase through AWS Support.
  2. Split the data into multiple import jobs run sequentially, keeping the concurrent total under the regional limit.

How Imports Handle Errors and Failed Records

During the import, DynamoDB validates each record against the table schema. Records that fail validation (a missing partition key, a wrong attribute type, or malformed data) are logged to Amazon CloudWatch Logs under the /aws-dynamodb/imports log group.

Failed records are still billed as part of the import. DynamoDB emits CloudWatch logs for import errors and retains a total error count; review the import status and logs after the job completes.

Also note: items that share the same primary key overwrite each other in random order until one remains. Duplicates are not counted as errors, so the processed-item count can exceed the final item count in the table.

Best practice: test on a small subset (1,000–10,000 records) first to catch schema mismatches, encoding issues, and format errors early. A 1 GB test costs $0.15; a failed 1 TB import still incurs $153.60 in charges.

Best Import Method for Each Use Case

Scenario Method Cost basis
New table (migration or initial load) Native import from S3 $0.15/GB, zero WCU, GSIs populated free
Existing table, small backfill (under 1 GB) BatchWriteItem via SDK ~$0.625 per million 1 KB writes
Existing table, large backfill (100 GB+) Export-merge-reimport, or Glue $0.25/GB round trip
Cross-account or cross-region table copy Export to S3, copy, then import $0.25/GB plus transfer if cross-region
For cross-account copies, export from the source account, copy the S3 data to the target bucket, then import in the target account. Transfer fees apply only if the regions differ.

Capacity Mode and Reserved Capacity After Import

The import process consumes no write capacity on the target table, so your capacity mode selection on-demand or provisioned only matters for production traffic after the load completes.

That makes the import the cheapest phase of a DynamoDB table’s lifecycle. The ongoing production read and write capacity is where the real cost optimization happens.

For tables that sustain steady traffic after the initial load, AWS reserved provisioned capacity offers up to 54% savings on a 1-year term and up to 77% on a 3-year term, per Amazon DynamoDB pricing.

How Usage.ai Optimizes DynamoDB Costs

The import itself needs no optimization, it is a flat $0.15/GB. The provisioned throughput your table consumes once production traffic begins is the line item worth managing.

We analyze your usage data and recommend qualifying commitments sized to stable eligible throughput.

With Flex Insured Commitments, teams can get the 30–40% savings of a 1-year commitment with none of the commitment risk.

If eligible usage drops and a qualifying DynamoDB Flex Commitment ends up costing more than the on-demand rate for that usage, we provide cashback protection on that difference, subject to program terms.

Our fee is a percentage of realized savings only. If we don’t save you money, you don’t pay anything.
EVALUATE YOUR DYNAMODB SPEND
See your DynamoDB throughput cost.

Review your read and write capacity baseline, uncovered spend, and commitment risk.

Frequently asked questions

How much does DynamoDB import from S3 cost?

DynamoDB import from S3 costs $0.15 per GB of uncompressed source data in US East (N. Virginia). GSI population incurs no additional charge. For 100 GB, the total is approximately $17.40 including standard S3 storage and GET costs.

Can you import from S3 to an existing DynamoDB table?

No. The feature only loads data into a new table created during the import. The workaround is to export the existing table to S3 (0.10/GB),mergethedatasets,reimportintoanewtable(0.15/GB), then swap application references to the new table.

How do I import data from S3 to DynamoDB?
  1. Open the DynamoDB console and choose Imports from S3.
  2. Select your source S3 bucket and prefix.
  3. Choose the input format (CSV, DynamoDB JSON, or Amazon Ion).
  4. Define the target table schema and capacity mode.
  5. Start the import. No code required; the AWS CLI and SDK expose the same operation via the ImportTable API.
What formats does DynamoDB import from S3 support?

CSV, DynamoDB JSON, and Amazon Ion. All S3 objects under the specified prefix must use the same format. Compression is supported via GZIP or ZSTD. Objects don't need matching file extensions, the format specified in the ImportTable call takes precedence.

How long does a DynamoDB import from S3 take?

Import duration depends on data volume, item count, key distribution, and the number of GSIs being populated. AWS does not publish throughput benchmarks. Run a test import on a representative subset to estimate duration for your specific dataset.

Share
Facebook
X
LinkedIn
Reddit
Cut cloud cost with automation
Latest from our blogs