Can DynamoDB export to S3?
Yes. DynamoDB has a built-in export to Amazon S3 that writes a full or incremental snapshot of a table, from any point in the last 35 days, as DynamoDB JSON or Amazon Ion. It requires point-in-time recovery (PITR), runs asynchronously, and consumes no read capacity.
Full and incremental exports
A full export captures the whole table (data plus local secondary indexes) as it existed at the point in time you choose. An incremental export captures only the data that changed, was updated, or was deleted during a time window you specify, between 15 minutes and 24 hours. Both run asynchronously with no impact on table performance or availability.
Requirements and destinations
The only prerequisite is PITR enabled on the table; the export reads from your continuous backups, not from the live table. You can export to an S3 bucket in another AWS account and even another Region, and the data is encrypted end to end.
The output is not CSV
Exports are written as DynamoDB JSON or Amazon Ion — the type-tagged wire format with {"S": ...} and {"N": ...} descriptors — never CSV. Getting a spreadsheet out of an export means a second hop through Athena, Glue, or a script; the export to CSV guide walks through every option.
What it costs
Full exports are billed by the size of the table at the chosen point in time; incremental exports by the size of data processed from continuous backups (with a 10 MB minimum charge). S3 storage and PUT requests are billed separately.
Exporting is not the cheap way to read a table
Price it out on a 100 GB table in us-east-1. The export is $0.10 per GB, so $10.00. Reading the same 100 GB with an eventually consistent Scan consumes 13,107,200 read units, which is $1.64 on demand. The export costs six times as much before you count its prerequisite: PITR is $0.20 per GB-month, so keeping that table exportable is $20 a month whether you ever run an export or not.
Capacity is what the money buys. The Scan needs roughly 44 minutes at 5,000 RCU and spends every one of those units on the same table your application is reading, so on a busy provisioned table you either throttle production or provision for the job. An export touches no table capacity, cannot throttle anything, and hands you one consistent point in time. Scan a table that is small, idle, or only partly needed; export a table that is live.
Treat $1.64 as a floor. AWS notes that sparse or very large tables can be charged read units beyond the data actually scanned.
Go deeper
Follow the export to CSV guide for the full workflow, unwrap exported items in the DynamoDB JSON converter, or download DynoTable to browse and export table data straight from your desktop.
References
- DynamoDB data export to Amazon S3: how it works — Amazon DynamoDB Developer Guide
- Quotas in Amazon DynamoDB — Amazon DynamoDB Developer Guide
- Point-in-time backups for DynamoDB — Amazon DynamoDB Developer Guide
- Amazon DynamoDB pricing
- Scanning tables in DynamoDB — Amazon DynamoDB Developer Guide, re-checked 2026-07-28 for how a
Scanconsumes read capacity.
Last verified 2026-07-13 against the official AWS documentation linked above.
Costed 2026-07-28 with export, PITR and request rates read from the AWS Price List API for us-east-1. The 4 KB rounding the Scan figure rests on was measured rather than assumed: scanning 998 KB of items on DynamoDB Local 3.3.0 reported 125 read units, matching the aggregate model and ruling out per-item rounding.