Automated Backup Pipeline with n8n

Build a scheduled backup pipeline that uploads files to S3 and sends SNS alerts.

Introduction

30 Second Summary

Every application generates data that needs to be saved somewhere safe. Whether it's user records, transaction logs, or configuration snapshots, losing that data means losing hours of work. The best teams don't rely on humans to remember to hit "save." They automate it.

In this project, you will build an automated backup pipeline using n8n Cloud and AWS. Your pipeline runs on a schedule, uploads timestamped backup data to cloud storage, and sends you an email notification confirming success or failure.

What You'll Build

A scheduled n8n workflow that generates a JSON report, uploads it to AWS S3 with a date-organized folder structure, and sends email notifications via AWS SNS confirming whether the backup succeeded or failed.

By the end of this project, you'll have:

  • A working n8n workflow that automatically uploads timestamped backup data to an S3 bucket on a schedule.
  • An AWS SNS notification system that emails you when backups succeed or fail.
  • A portfolio-ready demonstration of IAM least-privilege credential management connecting a third-party tool to AWS.
  • Secret Mission: Add a cleanup step that automatically deletes backups older than 7 days from S3.

Are there any prerequisites?

You'll need an AWS account and basic familiarity with n8n (completing the "Automate Your Calendar with AI" project is recommended). No local software installation is required for this project.

Set Up n8n Cloud and AWS IAM

Before you can build a backup pipeline, you need the tools that power it. Your workflow engine (n8n Cloud) needs a secure way to talk to your storage and notification services (AWS S3 and SNS).

In this step, you will create an n8n Cloud account, set up an IAM user in AWS with tightly scoped permissions, and connect the two by saving your AWS credentials inside n8n.

In this step, get ready to:
  • Sign up for an n8n Cloud free trial and access the workflow editor.
  • Create an IAM user in AWS with a least-privilege inline policy.
  • Store your AWS credentials in n8n Cloud and verify the connection.
Sign up for n8n Cloud

n8n Cloud is a hosted version of the n8n workflow automation platform. The free trial gives you 14 days and 1,000 workflow executions with no credit card required.

  • Open your browser and navigate to the n8n Cloud registration page:
  • https://app.n8n.cloud/register
  • Fill in your name, email, and a password, then submit the form.
  • Check your email inbox for a confirmation message from n8n and click the verification link.
  • Once verified, log in at app.n8n.cloud. You should land on the Overview page of your n8n instance.

What is n8n Cloud?

n8n is a workflow automation tool that lets you visually connect services together. n8n Cloud hosts everything for you, so there is nothing to install locally. Your workflows run on n8n's servers 24/7.

Not receiving the verification email?

Check your spam or junk folder. The email comes from n8n and may take a minute to arrive. If it still does not show up, try registering with a different email address.

help me troubleshoot why I'm not receiving my n8n Cloud verification email

Create an IAM user with a least-privilege policy

n8n needs AWS credentials to upload files to S3 and publish notifications to SNS. You will create a dedicated IAM user with permissions scoped to only those two services.

  • Sign in to the AWS Management Console.
  • In the search bar at the top, type IAM and select IAM from the results.
  • In the left navigation pane, click Users.
  • Click Create user.
  • Enter n8n-backup-user as the user name.
  • Leave Provide user access to the AWS Management Console unchecked. This user only needs programmatic access.
  • Click Next.
  • On the permissions page, select Attach policies directly. Do not attach any managed policies yet. Click Next, then click Create user.

Now you will attach a custom inline policy that grants only the specific actions n8n needs.

  • Click on the user name n8n-backup-user to open the user details.
  • Select the Permissions tab.
  • Click Add permissions, then select Create inline policy.
  • Switch to the JSON tab in the policy editor.
  • Delete any existing content and paste the following policy:
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:PutObject",
        "s3:DeleteObject",
        "s3:ListBucket"
      ],
      "Resource": [
        "arn:aws:s3:::BUCKET-NAME-PLACEHOLDER",
        "arn:aws:s3:::BUCKET-NAME-PLACEHOLDER/*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": "sns:Publish",
      "Resource": "arn:aws:sns:us-east-1:123456789012:backup-notifications"
    }
  ]
}

What does this policy do?

This policy follows the principle of least privilege. It grants exactly three S3 actions (PutObject, DeleteObject, ListBucket) and one SNS action (Publish).

The placeholder ARNs (BUCKET-NAME-PLACEHOLDER and the SNS topic ARN) will be updated in the next step once you create the actual bucket and topic.

  • Click Next.
  • Enter n8n-backup-policy as the policy name.
  • Click Create policy.

Next, generate an access key for this user so n8n can authenticate.

  • On the n8n-backup-user page, click the Security credentials tab.
  • Scroll down to the Access keys section and click Create access key.
  • On the use case page, select Other, then click Next.
  • Click Create access key.
  • You will see your Access Key ID and Secret Access Key. Copy both values and save them somewhere secure (a password manager works well). The secret key is shown only once.
  • Click Done.

Save your secret key now

AWS will never show the Secret Access Key again after you close this page. If you lose it, you must delete the access key and create a new one.

Why use access keys instead of IAM roles?

n8n Cloud runs outside your AWS account, so it cannot assume an IAM role directly the way an EC2 instance would. Access keys are the supported authentication method for connecting n8n Cloud to AWS services.

The inline policy you attached limits these keys to only the S3 and SNS actions your workflow needs. This keeps the blast radius small if the keys are ever compromised.

Don't see the Create access key button?

Make sure you are on the Security credentials tab (not the Permissions tab). The Access keys section is further down the page. You may need to scroll.

help me find where to create an access key for my IAM user in AWS

Create an AWS credential in n8n Cloud

Now you will store the IAM user's access key inside n8n Cloud so your workflows can authenticate with AWS.

  • Switch back to your n8n Cloud browser tab.
  • Click the Create button in the upper-left corner of the side menu.
  • Select Credential.
  • In the search field, type AWS and select the AWS credential type.
  • Fill in the three required fields:
  • Click Save. n8n will automatically test the connection when you save.

What should I see?

After saving, n8n displays a green confirmation indicating the credential was saved successfully. If there is a connection problem, n8n shows a red error message instead.

Credential test failing?

Double-check that the Region matches the region where you plan to create your S3 bucket (e.g. us-east-1). Make sure you pasted the full Access Key ID and Secret Access Key without extra spaces.

If you accidentally closed the AWS page before copying the secret key, go back to the IAM user's Security credentials tab, delete the old access key, and create a new one.

help me fix my AWS credential connection test failure in n8n

Your automation tools are connected. Next up, you will create the S3 bucket and SNS topic that your workflow will interact with.

Create the S3 Bucket and SNS Topic

Your credentials are ready and connected. Now you need the actual AWS resources that your backup pipeline will interact with.

In this step, you'll create an S3 bucket to store your backup files and an SNS topic to send email notifications. Once both resources exist, you'll update the IAM policy to reference their real ARNs instead of the placeholders you used earlier.

In this step, get ready to:
  • Create an S3 bucket for storing backup files.
  • Set up an SNS topic with an email subscription for notifications.
  • Update the IAM policy with your actual resource ARNs.
Create the S3 bucket

Your backup pipeline needs somewhere to store files. An S3 bucket is a container in AWS that holds objects (files) and organizes them by key paths.

  • In the AWS Console, search for S3 in the top search bar and select the S3 service.
  • Click Create bucket.
  • For Bucket name, enter a globally unique name like my-n8n-backups- followed by your initials (e.g., my-n8n-backups-jd).
  • For AWS Region, select US East (N. Virginia) us-east-1 (or whichever region you used for your IAM credential).
  • Leave all other settings at their defaults. Block all public access should remain checked.
  • Scroll to the bottom and click Create bucket.

Why block public access?

Backup data should never be publicly accessible. The Block Public Access setting ensures that even if someone misconfigures a policy later, the bucket contents remain private.

You should see your new bucket appear in the S3 bucket list. Make a note of the exact bucket name. You'll need it shortly.

Seeing a bucket name error?

S3 bucket names must be globally unique across all of AWS, 3-63 characters, and only contain lowercase letters, numbers, and hyphens. If you see an error, try adding more characters to make it unique.

Help me fix my S3 bucket name error.

Create the SNS topic and email subscription

SNS (Simple Notification Service) is a pub/sub messaging system. You'll create a topic that acts as a channel, then subscribe your email so you receive notifications when backups complete.

  • In the AWS Console, search for SNS in the top search bar and select the Simple Notification Service.
  • In the left navigation pane, choose Topics.
  • Click Create topic.
  • For Type, select Standard.
  • For Name, enter backup-notifications.
  • Leave all other settings at their defaults and click Create topic.

The topic detail page appears, showing the topic's Name and ARN in the Details section.

  • Copy the ARN value (it looks like arn:aws:sns:us-east-1:123456789012:backup-notifications). Save it somewhere. You'll use it in a moment.

Now subscribe your email to receive messages from this topic.

  • On the topic detail page, click Create subscription.
  • For Protocol, choose Email.
  • For Endpoint, enter your email address.
  • Click Create subscription.

What happens next?

AWS sends a confirmation email to the address you entered. The subscription status will show PendingConfirmation until you confirm it. You will not receive any notifications until the subscription is confirmed.

  • Check your email inbox for a message from AWS Notifications.
  • Click the Confirm subscription link in the email.
  • Your browser opens a confirmation page showing your subscription ID.

Don't see the confirmation email?

Check your spam or junk folder. The email comes from AWS Notifications and may take a minute or two to arrive. If you still don't see it after a few minutes, go back to the subscription in the SNS console and try creating a new subscription with the same email.

Help me confirm my SNS email subscription.

Update the IAM policy with actual resource ARNs

The inline policy you created in Step 1 used placeholder ARNs. Now that your bucket and topic exist, you need to update the policy so n8n-backup-user has permission to access these specific resources.

  • In the AWS Console, search for IAM in the top search bar and select the IAM service.
  • In the left navigation pane, choose Users.
  • Click n8n-backup-user.
  • Choose the Permissions tab and expand the inline policy.
  • Click Edit to open the policy editor.
  • Switch to the JSON tab.
  • Replace the entire policy with the following JSON, substituting your actual bucket name and topic ARN:
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:DeleteObject"
            ],
            "Resource": "arn:aws:s3:::[[BUCKET_NAME="my-n8n-backups-your-initials"]]/*"
        },
        {
            "Effect": "Allow",
            "Action": "s3:ListBucket",
            "Resource": "arn:aws:s3:::[[BUCKET_NAME="my-n8n-backups-your-initials"]]"
        },
        {
            "Effect": "Allow",
            "Action": "sns:Publish",
            "Resource": "[[TOPIC_ARN="arn:aws:sns:us-east-1:123456789012:backup-notifications"]]"
        }
    ]
}

What does this policy do?

  • The first statement grants s3:PutObject and s3:DeleteObject on objects inside your bucket (the /* means all objects within the bucket).
  • The second statement grants s3:ListBucket on the bucket itself. Listing requires bucket-level access, not object-level.
  • The third statement grants sns:Publish on your specific topic. This means n8n-backup-user can only send messages to this one topic.

This is the principle of least privilege. The user can only do exactly what the backup workflow requires, nothing more.

  • Click Next to review the policy.
  • Click Save changes.

The console displays a confirmation message that the policy has been updated.

Seeing a JSON syntax error?

Make sure your bucket name is lowercase with no spaces, and your topic ARN is in the correct format (arn:aws:sns:region:account-id:topic-name). Double-check that all quotes and brackets are properly closed.

Help me fix my IAM policy JSON.

Why update the policy after creating resources?

You can't reference resources in an IAM policy before they exist. The two-step approach (create with placeholders, then update) is a common pattern when setting up least-privilege access for new infrastructure.

Your AWS resources are ready. You have an S3 bucket for storage, an SNS topic for notifications, and an IAM user with exactly the permissions it needs. Next up, you'll build the actual backup workflow in n8n.

Build the Backup Workflow

Your AWS infrastructure is ready. You have an S3 bucket waiting for files and an SNS topic ready to send notifications.

Now it is time to build the actual automation. In this step, you will create the n8n workflow that generates backup data on a schedule and uploads it to your S3 bucket with a date-organized folder structure.

In this step, get ready to:
  • Create a workflow with a Schedule Trigger and Code node that generates backup data.
  • Add an AWS S3 node that uploads the backup to a date-organized path.
  • Execute the workflow manually and verify the file appears in your S3 bucket.
Add the Schedule Trigger and Code node

Every automation needs a trigger. The Schedule Trigger fires your workflow at a set interval, simulating a real backup job that runs without manual intervention.

  • Switch back to your n8n Cloud browser tab.
  • Click the create button in the upper-left side menu and select Workflow.
  • On the canvas, select Add first step... to open the nodes panel.
  • Search for Schedule Trigger and select it.
  • In the node settings, set Trigger Interval to Minutes.
  • Set Minutes Between Triggers to 5.
  • Close the Schedule Trigger node by clicking anywhere on the canvas.

Why 5 minutes for testing?

A 5-minute interval lets you quickly verify the workflow runs on schedule without waiting hours. You will change this to a longer interval once everything is confirmed working.

This also conserves your trial's 1,000 execution limit.

  • Click the + icon on the right side of the Schedule Trigger node to add a new node after it.
  • Search for Code and select the Code node.
  • Make sure Language is set to JavaScript.
  • Delete any existing code in the editor and paste the following JavaScript:
// Generate a simulated backup report with timestamp and sample data
const now = new Date();

const backupData = {
  timestamp: now.toISOString(),
  backupId: `backup-${now.getTime()}`,
  records: [
    { id: 1, name: "Alice Johnson", email: "alice@example.com", status: "active" },
    { id: 2, name: "Bob Smith", email: "bob@example.com", status: "active" },
    { id: 3, name: "Carol White", email: "carol@example.com", status: "inactive" }
  ],
  metadata: {
    totalRecords: 3,
    source: "application-database",
    version: "1.0.0"
  }
};

return [{ json: backupData }];

What does this code do?

This Code node simulates what a real application backup would produce. It creates a JSON object with three key parts:

  • A timestamp and unique backupId so each backup is identifiable.
  • Sample records representing the kind of data an app might store.
  • A metadata block with summary information about the backup.

The return [{ json: backupData }] line passes this data to the next node in n8n's required format.

  • Close the Code node by clicking the canvas.

You should see two nodes connected on your canvas: Schedule Trigger linked to the Code node.

Don't see the Code node connected?

If the Code node appears disconnected, drag from the small circle on the right side of the Schedule Trigger node to the small circle on the left side of the Code node. This creates the connection line between them.

Help me connect my nodes in n8n

Add the AWS S3 upload node

The AWS S3 node takes the JSON data from the Code node and uploads it as a file to your bucket. Using an expression in the file path creates automatic date-based organization.

  • Click the + icon on the right side of the Code node.
  • Search for AWS S3 and select the AWS S3 node.
  • In the Credential to connect with dropdown, select the AWS credential you created earlier.
  • Set Resource to File.
  • Set Operation to Upload a file.
  • In the Bucket Name field, enter your bucket name (e.g., my-n8n-backups- followed by your initials).
  • Click the File Name field. You need to switch this to expression mode so it generates a dynamic path.
  • Click the Expression tab (or type = in the empty field to switch to expression mode).
  • Paste the following expression:
backups/{{ $now.format('yyyy/MM/dd') }}/report-{{ $now.format('HHmmss') }}.json

What does this expression do?

This expression builds a file path that organizes backups by date. For example, a backup on June 15, 2026 at 2:30:45 PM would be stored at:

backups/2026/06/15/report-143045.json

The {{ $now.format('yyyy/MM/dd') }} part creates the date folder structure. The {{ $now.format('HHmmss') }} part timestamps the filename so multiple backups in a day do not overwrite each other.

  • Close the AWS S3 node by clicking the canvas.

Your canvas should now show three nodes connected in sequence: Schedule Trigger, Code, and AWS S3.

Don't see the Expression tab?

In some n8n versions, you activate expression mode by clicking the field and typing = as the first character. The field background changes to indicate you are in expression mode.

If the field still shows static text mode, look for a toggle or small icon next to the field label.

Help me enter an expression in the n8n S3 node File Name field

Execute the workflow and verify the upload

Before relying on the schedule, you want to confirm the entire pipeline works end-to-end with a manual execution.

  • Click the Execute Workflow button at the bottom of the canvas.
  • Wait a few seconds for the execution to complete. Each node shows a green checkmark when it succeeds.

What should I see?

All three nodes display a green checkmark and show output data. The AWS S3 node output includes details about the uploaded file, such as an ETag value confirming the upload succeeded.

  • Switch to the AWS Console browser tab.
  • Navigate to S3 and open your bucket.
  • Click into the backups/ folder, then navigate through the year, month, and day subfolders.
  • Confirm you see a file named something like report-143045.json (the timestamp portion matches when you executed the workflow).

Your backup file is in S3 with the correct date-organized folder structure.

S3 node showing a red X or permission error?

  • Double-check that the bucket name in the S3 node exactly matches your actual bucket name in AWS. Bucket names are case-sensitive and must be lowercase.
  • Verify your IAM inline policy includes s3:PutObject permission on the correct bucket ARN.
  • Confirm the AWS credential in n8n has the correct Region, Access Key ID, and Secret Access Key.

Help me troubleshoot my n8n AWS S3 upload permission error

  • Return to n8n Cloud and rename your workflow to Backup Pipeline by clicking the workflow name at the top of the canvas.

Your backup pipeline is generating data and storing it in S3 with automatic date organization. Next, you will add email notifications so you know when backups succeed or fail.

Add SNS Notifications and Error Handling

Your backup pipeline now uploads files to S3 on schedule. But how do you know if a backup succeeded or failed without manually checking S3 every time?

In this step, you will add real-time email notifications using AWS SNS. You will also build an error-handling branch so the workflow alerts you differently depending on whether the upload succeeded or failed.

In this step, get ready to:
  • Add an AWS SNS node that sends a success notification email.
  • Add an If node to check whether the S3 upload succeeded.
  • Add a failure notification branch and test both paths.
Add the success SNS notification node

Before adding error handling, you will first wire up the "happy path" notification. This sends you an email every time a backup upload completes.

  • Return to your n8n workflow editor where the Backup Pipeline workflow is open.
  • Click the + connector on the right side of your AWS S3 node.
  • Search for AWS SNS and select it to add the node to your canvas.
  • In the AWS SNS node panel, select your AWS credential from the Credential to connect with dropdown.
  • Select your backup-notifications topic from the Topic dropdown.
  • In the Subject field, type Backup Successful.
  • In the Message field, click into it and switch to the Expression tab.
  • Enter the following expression to include the timestamp and file key from the S3 upload:
Backup completed successfully at {{ $now.format('yyyy-MM-dd HH:mm:ss') }}. File uploaded: {{ $json.Key }}

What does this expression do?

The {{ $now.format('yyyy-MM-dd HH:mm:ss') }} expression inserts the current date and time. The {{ $json.Key }} expression pulls the file key (path) from the S3 upload node's output data.

Together, your notification email will tell you exactly when the backup ran and where the file landed in S3.

Don't see the topic in the dropdown?

Make sure you selected the correct AWS credential (the one you tested in Step 1). The dropdown only shows topics accessible to that credential's IAM user.

Also confirm your IAM policy includes sns:Publish permission on your topic ARN.

Why can't n8n find my SNS topic?

Add the If node for error handling

Right now the SNS node fires regardless of whether the S3 upload actually succeeded. You need a conditional check between S3 and SNS so the workflow sends the right notification based on the outcome.

  • Delete the connection between the AWS S3 node and the AWS SNS node by clicking on the connector line and pressing Delete (or Backspace).
  • Click the + connector on the right side of the AWS S3 node.
  • Search for If and select it to insert the If node between S3 and SNS.
  • In the If node panel, you will see a Conditions section. Click the data type dropdown and select String > exists.
  • In the value field, switch to the Expression tab and enter:
{{ $json.ETag }}
  • Drag the true output connector from the If node to the AWS SNS node you already configured (the success notification).
  • Now add the failure path. Click the false output connector on the If node.
  • Search for AWS SNS and add a second SNS node to the canvas.
  • In this second SNS node, select your AWS credential.
  • Select the backup-notifications topic.
  • Set the Subject to Backup Failed.
  • Set the Message to:
Backup FAILED at {{ $now.format('yyyy-MM-dd HH:mm:ss') }}. Please check the workflow execution log for details.

What is the If node doing?

When the AWS S3 node uploads a file successfully, AWS returns an ETag in its response. The If node checks whether that ETag value exists in the output.

If the ETag exists, the upload succeeded and the workflow follows the true branch to send a success email. If the ETag is missing (meaning the upload did not complete), the workflow follows the false branch to send a failure alert.

Not sure where to find the ETag field?

Before configuring the If node, click Execute step on the S3 node first. This runs the upload and populates its output panel. You can then browse the output data to see the ETag field in the response.

Help me configure the If node to check for a successful S3 upload in n8n.

Test both notification paths

With both branches wired up, you need to confirm each path delivers the correct email. First test the success path, then intentionally break the upload to verify the failure path.

  • Click Test workflow at the bottom of the canvas to execute the full workflow manually.
  • Check your email inbox for a message with the subject Backup Successful.
  • Open the email and verify it includes the timestamp and file key.

What should I see?

You should receive an email from AWS Notifications with the subject Backup Successful. The body will include the date and time of the backup plus the S3 file path like backups/2026/06/15/report-143022.json.

Now test the failure path to make sure error alerts work.

  • Double-click the AWS S3 node to open its settings.
  • Change the Bucket Name to something that does not exist, like invalid-bucket-test-12345.
  • Close the S3 node panel and click Test workflow again.
  • Check your email inbox for a message with the subject Backup Failed.
  • After confirming the failure email arrives, open the S3 node and change the Bucket Name back to your actual bucket name (my-n8n-backups- followed by your initials).

Rename your nodes for clarity

Double-click the title of each SNS node to rename them. Call the success node SNS - Success and the failure node SNS - Failure. This makes the workflow canvas much easier to read at a glance.

Not receiving the failure email?

If the S3 node throws an error (red highlight), the workflow may stop entirely instead of passing data to the If node. In the S3 node settings, look for Settings > Continue On Fail and toggle it on. This lets the workflow continue even when S3 returns an error, so the If node can evaluate the output.

Help me get the failure notification path working in my n8n workflow.

Your pipeline now notifies you in real time whether backups succeed or fail. Next up, you will activate the workflow on a proper schedule and verify it runs automatically.

Activate and Verify

Your backup pipeline works perfectly when triggered manually. Both success and failure notifications are landing in your inbox.

Now it's time to put the workflow into production mode so it runs automatically on a schedule. You'll switch from the 5-minute testing interval to a sensible hourly schedule, publish the workflow, and confirm it fires on its own.

In this step, get ready to:
  • Update the Schedule Trigger to run once per hour.
  • Publish the workflow and verify a scheduled execution.
  • Deactivate the workflow and review the execution log.
Update the Schedule Trigger interval and publish the workflow

The 5-minute interval was useful for rapid testing, but leaving it active would burn through your trial's 1,000 execution limit quickly. An hourly schedule is a realistic production cadence for backups.

  • In your n8n workflow, double-click the Schedule Trigger node to open its settings.
  • Change the Trigger Interval dropdown from Minutes to Hours.
  • Set Hours Between Triggers to 1.
  • Set Trigger at Minute to 0.
  • Close the node settings panel.

What do these settings do?

The workflow will now execute once every hour, at the top of the hour (minute 0). This means if you publish at 2:15 PM, the first scheduled run fires at 3:00 PM.

  • Click the Publish button in the canvas header to open the publishing modal.
  • Leave the version name as the default and click Publish to make your workflow live in production.

What does publishing do?

Publishing locks your workflow to a specific version and enables automatic execution. Production executions use the published version, not any edits you make afterwards.

Only production executions count toward your trial's 1,000 execution quota. Manual test runs do not count.

Your workflow is now live. You should see a published indicator on the workflow.

Don't see the Publish button?

The Publish button only becomes active when there are unpublished changes. If you see a disabled button, try making a small change (like reopening and closing a node) to trigger it.

help me publish my n8n workflow

Verify the scheduled execution

Now you need to confirm the workflow actually fires on schedule without you clicking anything. You have two options: wait for the hourly trigger, or temporarily keep the 5-minute interval for one cycle.

  • If you want a faster confirmation, go back to the Schedule Trigger and temporarily set it to Minutes with Minutes Between Triggers set to 5, then re-publish. Otherwise, wait for the top of the next hour.
  • Switch to the AWS Console and navigate to your S3 bucket.
  • Browse the backups/ folder structure. Confirm a new date-organized file has appeared (e.g., backups/2026/06/15/report-150000.json).
  • Check your email inbox for a new SNS notification with the subject "Backup Successful".

Both signals confirm your workflow is running autonomously in production.

No new file or email after waiting?

Make sure you clicked Publish after changing the schedule. Unpublished changes do not run in production.

Check that the workflow shows a published indicator. If it does not, your trigger is not active.

my n8n scheduled workflow is not executing automatically

Deactivate the workflow and review the execution log

You have confirmed the pipeline works end to end on a real schedule. To conserve your trial executions for the Secret Mission, deactivate the workflow now.

  • If you changed the trigger back to 5-minute intervals, update it to Hours with Hours Between Triggers set to 1 and Trigger at Minute set to 0 before deactivating.
  • Click the three-dot menu in the upper-right corner of the editor and select Settings.
  • Note the execution saving options. Close the settings modal.
  • Unpublish the workflow to stop automatic executions. You can do this from the same Publish button area or via the workflow's status controls.
  • Switch to the Executions tab at the top of the workflow canvas.
  • Review the execution list. You should see entries showing Succeeded status with timestamps for each run.

What does the execution log tell you?

The Executions tab shows every run of your workflow, including the start time, status (Succeeded, Failed, Running, Waiting), and execution duration. This is your audit trail for every backup.

You can click any execution to inspect the data that flowed through each node. This is invaluable for debugging production failures later.

Manual executions are free

Only production executions (those triggered automatically by the schedule) count toward your trial's 1,000 execution quota. All the manual test runs you did earlier were free.

Execution list is empty?

Confirm your workflow settings have execution saving enabled. By default, n8n saves all successful executions. If someone changed this setting, re-enable it under the three-dot menu and Settings.

why is my n8n execution history empty

Secret mission

Auto-Delete Old Backups

Your backup pipeline creates files every hour. But without lifecycle management, your S3 bucket grows forever. Can you add automatic cleanup that removes backups older than 7 days?

Clean Up Your Resources

Clean Up Your Resources

Decide whether to keep your resources running, pause them to come back later, or delete them entirely. All AWS resources used in this project are well within free tier limits, and the n8n Cloud trial expires after 14 days with no charges unless you manually subscribe.

Resources you used:

  • n8n Cloud trial account (free, auto-expires after 14 days).
  • AWS S3 bucket (free tier: 5 GB storage, well within limits for this project).
  • AWS SNS topic and email subscription (free tier: 1,000 email notifications per month).
  • AWS IAM user with access keys.

Keep everything running

No action needed. Choose this if you are still actively building or want to revisit the workflow later.

  • Your n8n workflow is already deactivated after the verification step. If you want it running on schedule, toggle it back to Active in n8n Cloud.
  • Monitor your n8n execution count. The trial allows 1,000 total executions.
  • AWS resources remain at no cost within the free tier.
  • Your n8n Cloud trial account will auto-expire and be deleted after 14 days if you do not subscribe.

Pause - I'll come back to this later

Shut down running processes to free up your trial executions while keeping everything intact for later.

  • In n8n Cloud, open your Backup Pipeline workflow and confirm it is set to Inactive (the toggle should be off).
  • AWS resources (S3 bucket, SNS topic, IAM user) remain in place at no cost within free tier limits.
  • When you are ready to resume, toggle the workflow back to Active.

Delete - I don't want to use this again

Remove all project resources and start fresh. Follow each group of instructions below.

Delete the S3 bucket
  • In the AWS Console, open the S3 service.
  • In the left navigation pane, choose General purpose buckets.
  • Select the radio button next to your bucket (e.g. my-n8n-backups-<initials>) and choose Empty.
  • Type permanently delete in the confirmation field and choose Empty.
  • Once the bucket is empty, select it again and choose Delete.
  • Type the bucket name in the confirmation field and choose Delete bucket.
Delete the SNS topic and subscription
  • In the AWS Console, open the SNS service.
  • In the left navigation pane, choose Topics.
  • Select your backup-notifications topic and choose Delete.
  • Type delete me in the confirmation field and choose Delete. This also removes the email subscription.
Delete the IAM user
  • In the AWS Console, open the IAM service.
  • In the left navigation pane, choose Users.
  • Select the checkbox next to n8n-backup-user and choose Delete at the top of the page.
  • Type the username n8n-backup-user in the confirmation field and choose Delete. The console automatically removes the user's access keys and inline policy.
Delete the n8n workflow and credentials
  • In n8n Cloud, open your workflow list and select the Backup Pipeline workflow.
  • Delete the workflow from the workflow settings menu.
  • Go to Credentials in the left sidebar, select your AWS credential, and delete it.
  • Your n8n Cloud trial account will auto-expire and be deleted after 14 days. No manual account deletion is needed.

Nice Work!

Nice Work!

You just built a fully automated backup pipeline that connects n8n Cloud to AWS without writing a single line of infrastructure code or installing anything locally.

You've learned how to:

  • Built a scheduled automation workflow in n8n Cloud that generates backup data, uploads it to S3 with a date-organized folder structure, and runs on a recurring schedule.
  • Set up real-time email notifications with AWS SNS, including conditional error handling that sends a different alert when backups fail.
  • Applied IAM least-privilege principles by creating a dedicated user with credentials scoped to only the required S3 and SNS actions.
  • (Secret Mission) Automated lifecycle management by cleaning up old backups programmatically and notifying you of how many files were removed.

Ready to quiz yourself?