How To Send Data From Your Flutter App to Amazon Personalize

In today's digital world, personalization is crucial to enhancing user experiences. As a Flutter developer, you may wonder how to use Amazon Personalize to deliver personalized recommendations in your app. In this tutorial, we will explore the fundamentals of Flutter and Amazon Personalize, guide you through setting up your development environment, and show you how to integrate Amazon Personalize into your Flutter app.

Understanding the Basics of Flutter and Amazon Personalize

Before we jump into the technical aspects, let’s establish a baseline understanding of the two tools.

What is Flutter?

Flutter is an open-source UI toolkit developed by Google for building natively compiled mobile, web, and desktop applications from a single codebase. It was first released in May 2017 and has gained popularity among developers for its simplicity and flexibility. With Flutter, developers can write code once and deploy it on multiple platforms, saving time and effort. The framework uses a reactive-style programming model, which means that changes to the user interface are automatically reflected in real time, resulting in a smooth and responsive user experience.

What is Amazon Personalize?

Amazon Personalize is a machine learning service that Amazon Web Services (AWS) offers. It was launched in November 2018 and has since become popular for developers who want to incorporate personalized recommendations, search results, and notifications into their applications. With Amazon Personalize, developers can leverage the power of machine learning algorithms to analyze user behavior and preferences to deliver highly relevant content.

Some of the use cases for Amazon Personalize are:

  • Personalized video recommendations: Amazon Personalize can help you add personalized video recommendations to your streaming app. For example, you can use Amazon Personalize to recommend "Top picks for you," "More like X," and "Most popular video recommendations."
  • Product recommendations: Amazon Personalize can help you add personalized product recommendations to your retail app. For example, you can use Amazon Personalize to recommend "Recommended for you," "Frequently bought together," and "Customers who viewed X also viewed" product recommendations.
  • Personalized emails: Amazon Personalize can help you generate personalized emails for your users. For example, you can use Amazon Personalize to generate batch recommendations for all users on an email list. Then, you can use an AWS service or third-party service to send users personalized emails recommending items in your catalog.
  • Targeted marketing campaigns: Amazon Personalize can help you generate segments of users who are most likely to interact with items in your catalog. Then, you can use an AWS or third-party service to create a targeted marketing campaign promoting different things to different user segments.
  • Personalized search results: Amazon Personalize can help you personalize search results for your users. For example, Amazon Personalize can re-rank search results that you generate with OpenSearch.

By combining Flutter and Amazon Personalize, developers can create applications that look great and provide highly relevant and engaging content.

Setting up your Flutter development environment

If you already have the Flutter application, skip to the next section. In this section, we’ll cover setting up a Flutter development environment and getting started on your app-building adventure.

Installing Flutter SDK

Installing the Flutter SDK on your machine is the first step in setting up your Flutter development environment. The Flutter SDK is a software development kit that provides all the necessary libraries, tools, and frameworks to build Flutter applications. To install the Flutter SDK, you can head to the official Flutter website and download the SDK package corresponding to your operating system.

Once you have downloaded the Flutter SDK, it's time to install it on your machine. The installation process may vary depending on your operating system, but the official Flutter documentation provides detailed instructions for each platform. Follow the installation instructions carefully, and you’ll soon have the Flutter SDK up and running on your machine.

Configuring your IDE for Flutter development

For Flutter development, you have several options for IDEs, including Android Studio, Visual Studio Code, and IntelliJ IDEA. Each IDE has unique advantages and features, so choose the one that suits your preferences and workflow.

Configure your favorite IDE and install the necessary plugins/extensions to enable Flutter development features such as code completion, debugging, and hot reload.

Creating a new Flutter project

To create a new Flutter project, open your IDE and navigate to the project creation screen. Give your project a name and select a location on your machine. Click "Create" to initialize the project. This will generate the necessary files and folders for your Flutter app.

Once you create the project, you will see a folder structure with several files. The most important file is the main.dart file, which serves as the entry point for your app.

Inside the lib folder (usually available in the root folder), you will find the main.dart file. Open it in your IDE to start writing your Flutter code.

Flutter projects also come with a pubspec.yaml file, which is used to manage dependencies and assets. You can add external packages and specify fonts, images, and other resources in this file.

Introduction to Amazon Personalize

Now that you have a basic understanding of Flutter and have set up your development environment, let's move on to Amazon Personalize. In this section, we will explore the benefits and working principles of Amazon Personalize in more detail.

Benefits of Using Amazon Personalize

Amazon Personalize offers various benefits for developers, allowing them to create highly personalized experiences for their users. Some of the key benefits include:

  1. Improved User Engagement: By leveraging Amazon Personalize, developers can deliver personalized recommendations and content to their users, increasing engagement and retention.
  2. Increased Customer Satisfaction: Personalized experiences lead to higher customer satisfaction as users receive tailored recommendations that align with their preferences and needs.
  3. Higher Conversion Rates: With personalized recommendations, developers can drive higher conversion rates by suggesting products or content that are more likely to resonate with each individual user.

How Amazon Personalize Works

Amazon Personalize utilizes advanced machine learning algorithms to analyze large datasets and generate real-time recommendations. The service leverages historical user data, such as past purchases, browsing behavior, and preferences, to provide personalized recommendations tailored to each user's unique behavior and preferences.

Here's a closer look at how Amazon Personalize works:

  1. Data Collection: Developers integrate Amazon Personalize into their applications to collect user data, including past interactions, preferences, and other relevant information.
  2. Data Preprocessing: The collected data is preprocessed to ensure it is in a format suitable for machine learning algorithms. This step involves cleaning, transforming, and organizing the data.
  3. Model Training: Amazon Personalize uses the preprocessed data to train machine learning models. These models learn from the data to understand user preferences and behavior patterns.
  4. Real-Time Recommendations: Once the models are trained, developers can make real-time API calls to Amazon Personalize, providing user context and receiving personalized recommendations in return.

Setting up Amazon Personalize

The first step is to set up an Amazon Personalize account and create a dataset. For this, you need to visit your AWS account and activate Amazon Personalize service. Amazon Personalize provides a free tier, so getting started should not be an issue. Once you create your account, follow these steps to create a dataset:

  1. Create a dataset group: This is a container for all the datasets associated with a specific set of data.
  2. Create a dataset: A dataset represents a specific type of data that you want Amazon Personalize to use (i.e., user data, item data, interaction data).
  3. Import data: Once the datasets have been created, you can import data into them. The data to be imported should be in the form of a .csv file and should be uploaded to an S3 bucket. Once the data is in the bucket, you can use an import job to import the data into the datasets. The import job requires the ARN (Amazon Resource Number) of the dataset you're importing data into and the URI of the S3 bucket where your data resides.
  4. Create a campaign: Once the data has been imported, you can create a campaign, which is essentially an endpoint that your application can query for recommendations. You'll first have to create a solution version, which trains a model based on your data, and then a campaign that uses this solution version.

With your Amazon Personalize set up, you’re now ready to integrate your mobile and web apps so you can begin getting value out of the tool. We will cover the steps for integration with Flutter apps in the next section.

Integrating Amazon Personalize with your Flutter app

The AWS Amplify SDK is the recommended method for integrating AWS services, but Amazon Personalize is not currently supported by the AWS Amplify Flutter SDK or GraphQL API. So, to integrate Amazon Personalize with Flutter, you’ll need to use a third-party tool or directly integrate via Amazon Personalize REST APIs.

Note that you can still use the Amplify SDK or API for other integrations with your Flutter app such as Amplify Push, Amplify Auth, Amplify Datastores, the Amplify CLI, Amplify Backend, Amplify Auth, and Cognito.

Installing http client dependencies to make API requests

To send events from a Flutter application to Amazon Personalize using REST APIs, you can use the `http` package. The process includes making a POST request to the `events` endpoint of Amazon Personalize's Runtime API.

Please note that it's crucial to securely handle the AWS credentials used to authorize the API request. One recommended method for mobile applications is to use Amazon Cognito to manage access control. This is a more secure and scalable way to give your app access to AWS resources, but this example doesn't cover it for simplicity.

Here's a basic example of how you could send a `POST` request to the Amazon Personalize `events` endpoint:

First, add the `http` dependency to your `pubspec.yaml`:

http: ^0.13.3

Then, import it in your Dart file:

import 'package:http/http.dart' as http;
import 'dart:convert';

Sending data to Amazon Personalize

While the initial dataset can be easily imported from Amplify Storage or Amazon S3 files directly, it is crucial to add more user data to make your Amazon Personalize ML model provide better recommendations. Usually, you would want to record user interaction data, add more items to the dataset collected from your apps, and add more users.

To send user interaction events data, you can send a `POST` request to `/events` endpoint with the following code:

Future<void> sendEvent() async {
var url = 'https://personalize-events.<region>';
var headers = {
"Content-Type": "application/json",
"X-Amz-Date": <current date>,
"X-Amz-Signature": <signature>,
“X-Amz-Credential”: <credenetials>,
"x-amz-security-token": <security token>
var body = jsonEncode({
"trackingId": "your_tracking_id",
"userId": "user_id",
"sessionId": "session_id",
"eventList": [{
"sentAt": ( / 1000).toInt(),
"eventId": "event_id",
"eventType": "event_type",
"eventValue": <event_value>,
"impression": [<impression>],
"itemId": "item_id",
"properties": <properties>,
"recommendationId": "recommendation_id",
"metricAttribution": {
"eventAttributionSource": "event_attribution_source"
var response = await
headers: headers,
body: body
if (response.statusCode == 200) {
print(“Event sent”);
} else {
print(`Failed to send event: ${response.body}`);

Similarly to add items, you can use `/items` and to add users, you can use `/users` endpoints. You can change the event schema to suit your needs. This data model will help you further execute recommendations requirements confidently.

In a production application, consider using Amazon Cognito for managing credentials and authentication.

Also, always ensure the privacy and security of your user's data throughout this process. This includes securing the communication between your Flutter app and Amazon Personalize.

In this guide, we’ve provided a simple scaffold. Check out Amazon Personalize Events API docs to complete your production-ready solution. You can find some examples on GitHub as well.


Integrating Amazon Personalize into your Flutter app allows you to provide real-time personalized recommendations to your users. By following the steps outlined in this article, you can unleash the power of Flutter and Amazon Personalize to enhance user experiences and drive engagement. Get started today and take your app to new heights!

Don't want to go through the pain of direct integration? RudderStack's Flutter SDK makes it easy to send data from your Flutter app to Amazon Personalize.