The short version: these are different tools that overlap on one job.
- AWS Backup is a control plane for snapshotting AWS resources (RDS, EBS, EFS, DynamoDB, S3) inside AWS, managed through IAM and backup plans. If your entire estate is AWS and stays AWS, it's the native choice.
- Backup Data is backup infrastructure for your data, wherever it runs: self-hosted Postgres, a VPS, docker-compose on a bare-metal box, CI, or AWS itself. Dumps become encrypted, deduplicated, portable snapshots you can restore anywhere, driven by a Go/JS SDK instead of a console.
The decision rule: the more your infrastructure is "pure AWS managed services," the better AWS Backup fits. The more it's self-hosted, multi-cloud, or something you might ever move, the better BaaS fits. Most startups are somewhere in the middle, and many end up using both (more on that below).
Head to head
| Backup Data | AWS Backup | |
|---|---|---|
| What it backs up | Any files/dumps you can produce: Postgres, MySQL, MongoDB, SQLite, DynamoDB exports, S3, filesystems, model weights | AWS resources: RDS, Aurora, EBS, EC2, EFS, FSx, DynamoDB, S3, and more |
| Works outside AWS | Yes, anywhere your code runs | No (on-prem only via Storage Gateway/VMware integrations) |
| Backup type | Logical (dumps + files): restore to any host, any provider, even a laptop | Resource-level snapshots: restore to another AWS resource |
| Encryption | Client-side AES-256-GCM; you hold the keyfile, server stores only ciphertext | Server-side via AWS KMS; keys live in AWS |
| Dedupe & compression | Content-addressed chunking (FastCDC) + Zstd: incremental uploads, up to ~80% smaller retained storage | Incremental snapshots for most resource types; no cross-source dedupe |
| Retention | pruneSnapshots with dry-run; GFS-style policies | Lifecycle rules in backup plans (warm → cold → delete) |
| Restore verification | Checksum-verified on every restore; restore-drill pattern built into the SDK workflow | Restore testing plans (separate feature, per-test charges) |
| Interface | SDK-first (Go / JS), portal for humans | Console, IAM policies, backup plans, CLI/CloudFormation |
| Pricing model | Flat tiers: 5 GB free, $12/500 GB, $20/1 TB, $49/2.5 TB | Per-GB-month, varies by resource type, plus restore and cross-region transfer fees |
| Getting your data out | Restore anywhere; no egress penalty from BaaS tiers | Standard AWS egress applies when data leaves AWS |
| Compliance posture | SOC 2 Type I in progress | Mature: SOC, PCI, HIPAA-eligible, FedRAMP, Backup Audit Manager |
| Free tier | 5 GB, no card | No service free tier (RDS automated backups are free up to DB size) |
The four differences that actually matter
1. Portability: logical dumps vs resource snapshots
An AWS Backup recovery point of an RDS instance restores to… another RDS instance. That's exactly right until the day it isn't: reproducing a bug locally, seeding a staging box on another provider, an acquirer's due-diligence request, or an actual migration.
BaaS snapshots are your pg_dump (or mysqldump, mongodump, model checkpoint, any files), stored encrypted and chunked. client.restore() reassembles them on whatever machine runs your code. The backup is an exit door, not another room in the same building.
2. Who holds the keys
AWS Backup encrypts with KMS. Solid, but the keys and the ciphertext live with the same vendor, and a compromised or subpoenaed account is a single point of exposure.
BaaS encryption is client-side: data is AES-256-GCM encrypted on your machine before upload, and you hold a passphrase-protected keyfile. Backup Data stores ciphertext it cannot read. The flip side is real responsibility: lose the keyfile and passphrase, and no support ticket can recover the data. For teams with "customer-managed keys" in their security policy, this is the difference between claiming it and meaning it.
3. The bill
AWS Backup pricing is per-GB-month and varies by resource. RDS backup storage beyond the free allocation runs roughly $0.095/GB-month as of this writing, so a terabyte of retained backups is in the neighborhood of $95/month before restore fees and cross-region copy charges. Costs also compound quietly: every retained snapshot tier, every cross-region copy, every restore test bills separately.
BaaS is a flat tier: $20/month for 1 TB (Pro), and dedupe means "1 TB of retained snapshots" holds far more than 1 TB of nightly dumps. Near-identical nightlies mostly share chunks, so 30 retained copies of a slowly-changing database cost a fraction of 30× the dump size.
The honest caveat in the other direction: RDS automated backups are free up to your provisioned DB size. If daily snapshots with ≤35-day retention inside AWS is all you need, AWS is hard to beat on price. You start paying (and BaaS starts winning) when you keep longer histories, back up self-hosted databases, or want copies outside AWS.
4. Developer workflow
AWS Backup is operated through backup plans, vault policies, and IAM: infrastructure configuration, natural if you live in Terraform/CloudFormation.
BaaS is a function call:
const snapshot = await client.backup(["./db-dumps"], {
description: "nightly database backup",
tags: { env: "prod", db: "app_db" },
});
It runs in cron, CI, a container entrypoint, anywhere. Backup logic lives in your repo next to the code it protects, and the restore drill is a script you can actually schedule, not a console workflow.
When AWS Backup is the right call
Being straight about this: pick AWS Backup if…
- Everything is AWS managed services and you have no multi-cloud or exit plans. Native snapshots of RDS/EBS/EFS with zero data movement are efficient and operationally boring (the good kind).
- You need mature compliance artifacts today: FedRAMP, HIPAA eligibility, Backup Audit Manager reports for auditors.
- You need point-in-time recovery to the minute on RDS. Continuous PITR within the retention window is something logical dumps don't give you; dumps recover to dump time.
- Your backup policy is owned by a platform team in Terraform, not by the app developers.
When Backup Data is the right call
- Anything self-hosted: Postgres in docker-compose, databases on VPSes or bare metal. AWS Backup can't see them; a
pg_dump+client.backup()covers them in minutes. - You want backups outside your primary cloud, the "1" in 3-2-1. Provider-independent copies protect against account compromise, billing lockout, and region-wide incidents.
- Customer-held encryption keys are a requirement, not a nice-to-have.
- Long retention on a budget: dedupe + flat tiers beat per-GB-month resource pricing as histories grow.
- Developers own backups and want them in code, tested by a restore drill in CI, not in console configuration.
- AI/ML artifacts: model weights and checkpoints are exactly the large, slowly-mutating files content-addressed chunking is built for.
Or: use both (the 3-2-1 answer)
For AWS-hosted production databases, the strongest setup isn't either/or:
- AWS Backup / RDS automated snapshots for fast, native, short-retention recovery and PITR.
- A nightly
pg_dump→ BaaS for the encrypted, portable, long-retention copy that lives outside AWS and restores anywhere.
That's three copies, two systems, one off-site, with the off-site copy encrypted under keys AWS never sees. The Postgres tutorial is the exact recipe for leg 2, and it fits in a 20-line cron script.
FAQ
Can Backup Data back up RDS?
Yes, logically. Run pg_dump/mysqldump against the RDS endpoint from any machine with network access (an EC2 box, CI, a bastion) and upload the dump. You get a portable copy of the data, not an RDS-native snapshot.
Does BaaS have PITR like RDS? No. Snapshots are point-in-time at dump time; your RPO is your dump frequency. Teams needing minute-level PITR should keep RDS automated backups for that window and use BaaS for portable long-term retention.
What happens if I lose my encryption keyfile? The data is unrecoverable, by design. Client-side encryption means Backup Data never has your keys. Treat the keyfile like a root credential: store it in your secrets manager with the passphrase stored separately.
Is my data stored on AWS anyway? Backup data is stored on Backup Data's storage network for long-term retention, independent of your AWS account. A compromise or closure of your AWS account doesn't touch it.
How fast can I start?
The free workspace is 5 GB with no card. Dump, npm install @lighthouse-web3/baas-js-sdk, one client.backup() call: first verified snapshot in about 10 minutes via the quickstart.
Try the free tier: backupdata.io offers 5 GB, no card, SDK quickstart in the docs.