AWS for Industries

Save time and money hosting QR code menus on Amazon Simple Storage Service (Amazon S3)

QR code menus have gained popularity due to the rise of the COVID-19 pandemic. Last year, CNBC reported that Bitly, a link management service, saw a 750 percent increase in the number of QR code downloads in the past 18 months.

There are many benefits to using QR code menus instead of printed menus. Restaurants can easily adjust menus on the fly to account for different factors such as menu item changes or fluctuations in food and commodity prices. QR code menus also help reduce waste and costs for restaurants that print menus quite frequently. And they are more sanitary.

This blog post dives into how to cost-effectively set up and test your very own QR code menu using Amazon Web Services (AWS) and buckets from Amazon Simple Storage Service (Amazon S3), object storage built to retrieve any amount of data from virtually anywhere. Once you’ve gone through these steps, you can print your QR code and display it however you’d like.

Important considerations before proceeding

  • Please be mindful that the permissions we will be using for this Amazon S3 bucket allow for public access of your bucket, which allows access from all devices and users.
  • For security reasons, use this bucket for your menu and nothing else.


Please note that any pricing and charges discussed in this section are based solely off the US East (N. Virginia) region, and pricing may differ across different regions. However, the free tier for Amazon S3 applies for all regions except regions in China and GovCloud.

Before we dive into the details of how to implement this solution, let’s discuss how pricing works. With a standard Amazon S3 bucket, there is a free tier included, meaning that you receive 5 GB of available storage and 20,000 download requests each month at no cost. Once you exceed the first 5 GB of storage and 20,000 download requests for the month, you are then billed at about $0.023 per GB and $0.0004 per 1,000 downloads. There is also an associated cost with data transfer out, meaning when traffic leaves the AWS Cloud. However, customers also receive 100 GB of data transfer out to the internet each month aggregated across all AWS services (excluding China and GovCloud). If data transfer out exceeds 100 GB of data, you are then billed at $0.09 per GB.

Example scenario

Suppose we have a restaurant that uploads a menu to Amazon S3 that is 45.3 KB or 0.0000453 GB in size. This restaurant can expect 250 customers per day, and each customer will look at the menu three times before deciding on what to order. Converting this into what we should expect monthly, we should see about 250 * 31 = 7,750 customers total per month, which means that we should expect 7,750 * 3 = 23,250 requests to view the menu within Amazon S3 based on the assumption that each customer will view the menu three times each.

We can also assume that the restaurant will make 10 updates per month to its menu. Finally, we must factor in data transfer costs, which are priced based on the amount of gigabytes transferred out of AWS and to the internet. We can take the number of total requests expected per month and multiply that by the size of the file, and we should get 23,250 * 0.0000453 = 1.05 GB per month. This all comes out to $0.10 per month or $1.20 per year.

Let’s compare this price with the price of printing and replacing paper menus throughout the year. If a restaurant can seat a total of 250 total customers at a time, this means we will need at least 250 menus available at a time. If we decide to use AnyCompany Printing to print our menus, 250 8×11 custom restaurant flyer menus will cost a total of $69.99. We can also assume that a total of eight menus will either get lost or damaged each month. This means we will need to replace a total of 96 menus every month. AnyCompany Printing has the options to print either 50 or 100 menus, so we can round up from 96 and decide to print 100 extra every year as replacements for the damaged or lost menus, which comes out to a total of $22.99.

Lastly, we can assume that the menu might change either due to new specials or price changes to adjust for inflation. If the menu changes a total of four times per month, this comes out to 48 menu changes throughout the year. AnyCompany Printing’s minimum quantity for menu prints is 50 so we can round up to 50 menus, which comes out to $13.99. Adding up all of these transactions, we end up paying $8.91 per month or $106.97 per year when deciding to use paper menus rather than QR code menus.

Creating your Amazon S3 bucket

Navigate to the AWS Management Console and sign in. Search for “S3” in the search bar and select it to navigate to the Amazon S3 console page.

Image of search for Amazon S3 in the AWS Management Console.

Click the Create Bucket button, which will take you to the configuration page for bucket creation.

Image of Amazon S3 console. Select the orange “Create bucket” button on the bottom right hand side.

Give your bucket a name and feel free to select the region. To get the best performance, choose the region closest to you.

Image of the creation of a Amazon S3 bucket. Provide an S3 bucket name and select the region.

Select ACLs enabled under Object Ownership. ACLs disabled is selected by default. This is a required step to make your menus accessible to your customers.

Image shows how to choose the “ACLs enabled” option under Object Ownership

Under Block Public Access settings for this bucket uncheck the Block all public access box and check the acknowledgement below. This is also a crucial step to allowing your customers to view your menu.

Image of unchecking “Block all public access” and checking off of the acknowledgement box in Amazon S3

Leave the rest of the other configurations as-is and click on Create Bucket.

Image of finalizing the creation of an Amazon S3 bucket.

Once the bucket has been created, you should be taken to a page where you can view all your available Amazon S3 buckets. Click on the bucket you just created.

Image shows Amazon S3 bucket creation is successful. Click on the name of the bucket to view its details.

Uploading your menu

Once you click on your bucket, you will see what is inside this bucket. Currently the bucket is empty, but this is where your menu will reside. Click on the Upload button.

Image of Amazon S3 console. Select the orange “Upload” button.

Click on Add Files.

Image of uploading an example menu. Click the white “Add files” button

This step will vary based on where your menu resides on your current device. Find your menu on your device, select it, and click Open.

Image of selecting an example menu from a local computer.

Once you see your menu under Files and folders, click the Upload button.

Green banner stating that the upload succeeded. Click on the name of your menu to view its details.

After you successfully upload the menu, you will get a notification in green on the top of your screen, and the status next to your menu file should say Succeeded with a green check mark. Click on the name of your menu below.

Green banner stating that the upload succeeded. Click on the name of your menu to view its details.

Allowing public access to your menu

Now that your bucket contains your menu, we need to allow others to access it.

Detailed view of menu uploaded.

Click on Object actions, which will show you a dropdown menu with a list of options. Click on the very last option: Make public using ACL.

Image of clicking the “Object actions” dropdown on the top right-hand size and selecting “Make public using ACL”

Click on the Make public button.

Image of making example menu file public.

Once you see a notification that says “Successfully edited public access,” click the Close button on the top right side of your screen. Your bucket is now publicly accessible, and you are ready to create your QR code.

Green banner stating that the menu has been successfully edited to allow for public access.

Creating your QR code

Once you hit the Close button in the previous step, you should be taken back to a page that displays the details of the menu you uploaded.

Image of detailed view of example menu.

Click on the link under Object URL.

Zoomed in image of example Object URL in Amazon S3.

You should be able to view the menu that you uploaded. Copy the link.

Image of example menu.

In a separate tab, go to

Paste the link you just copied into the box that says Your URL.

Drag the slider on the right to adjust the quality.

Choose between PNG, SVG, PDF, or EPS.

Example creation of QR code on

Save your menu to a folder of your choice.

Image of saving QR code onto a local computer.

If you open this file, it should show you your QR code that leads to the menu you’ve uploaded on Amazon S3.

Image of QR code created that links to an example menu.

Testing your QR code

You can test this by using your phone’s camera. Once you point your camera at the QR code, your phone should prompt you to click on a link that pops up.

Image of mobile phone scanning QR code.

Once you tap on the link, it should show you your menu on your phone.

Example menu opened through QR code on an IPhone.


After completing these steps, you have an Amazon S3 bucket containing your restaurant menu with the proper permissions set up to allow others to view it through their devices. You should also have a QR code that was created using a link that brings you to the menu inside your Amazon S3 bucket. All you have left to do now is display this QR code wherever you’d like. You can print this QR code and display this on your tables using a table stand or menu holder, or you could even create stickers out of it—cost-effective and simple ways to reduce paper waste and printing costs.

Learn more about how to use AWS to help you reduce costs and improve the guest experience.

Vincent Zheng

Vincent Zheng

Vincent Zheng is a Startup Solutions Architect at AWS based in New York City. He helps startups across different industries by providing prescriptive guidance and best practices on how to leverage AWS to design and deploy applications at scale. When Vincent is not at work, he enjoys rock climbing, eating out at restaurants, playing video games, going to the movies, and going on walks.

John Twardos

John Twardos

John Twardos is a Startup Solutions Architect based in New York City. He has a passion for helping startups grow and innovate on AWS according to best practices. He has spent over a decade working with cloud technology within the financial sector, with a focus on data analytics and security.

Peter Ticali

Peter Ticali

Peter Ticali is a Solutions Architect focused on helping Media & Entertainment customers transform and innovate. With over three decades of professional experience, he’s had the opportunity to contribute to architecture that stream live video to millions, including two Super Bowls, PPVs, and even a Royal Wedding. Previously he held Director, and CTO roles in the EdTech, advertising & public relations space. Additionally, he is a published photo journalist.