# The Ethics of Dynamic Pricing: The Good, the Bad, and the Ugly

- Link: https://phiture.com/mobilegrowthstack/the-ethics-of-dynamic-pricing-the-good-the-bad-and-the-ugly/
- Published: 2022-11-03T13:41:47+01:00
- Author: Alejandra Escobal

![](https://phiture.com/wp-content/uploads/2022/11/Dynamic-Pricing-2-300x164.png)

Have you been looking at flights online only to come back the next day and see that
the price has increased? Or perhaps you’ve tried to call an Uber at rush hour and
suddenly it’s much more expensive? This is dynamic pricing, the practice of having
multiple price points based on a few critical factors. Most of the time, users are
not necessarily aware this is happening. By contrast, in a static or fixed pricing
strategy, a company applies the same price level to any customer and market condition.

Companies often decide to use this strategy when they serve several segments that
have different budget levels. The ultimate goal is to allow them to adjust the prices
of products or services in real-time  – or dynamically – in response to market demand.
This practice is increasingly powerful and profitable in the age of the internet(
and apps) economy. In this article we’ll run you through the do’s and don’ts of 
such pricing strategies, and show how to set one up using Braze. 

 

### **In what scenarios is dynamic pricing used?**

Gennaro Cuofano, from [FourWeekMBA](https://fourweekmba.com/dynamic-pricing/), lists
five common scenarios where businesses apply dynamic pricing: 

 * **Peak or surge pricing:** this is based on peak hours or periods where demand
   is especially high. For example, booking a hotel room during the summer months.
 * **Segmented pricing: **this is based on the spending ability of some customers
   compared to others. For example, an iOS App might charge more for a premium subscription
   compared to their Android equivalent because [industry reports](https://sensortower.com/blog/subscription-apps-revenue-2021/)
   show that iOS users spend more than double on subscriptions than their Android
   counterparts.
 * **Changing conditions:** for instance when sales start to slow down due to macroeconomic
   factors, pricing might take this into account, and be  adjusted upward again 
   when the market improves. For example, when borders first opened after COVID-
   19 and airlines were offering cheaper flights to incentivize traveling.
 * **Time-based pricing: **this offers faster service for a higher charge. For example,“
   fast passes” that let you skip the line at theme parks.
 * **Penetration pricing:** this lowers the price of service to help a product penetrate
   a market. For example, when a new competitor enters the market and offers a very
   competitive price to acquire  users from other competitors.

Once your company has decided on the best subscription strategy for your app, it’s
time to build an accurate dynamic pricing scheme. The best way to do this is to 
rely on demographic data (device, city/country, age), and behavioral data (app usage,
paywall interactions, source of the lead, profile completion, time of the day/week).

 

### **Identifying a potential buyer in the least amount of time**

Dynamic pricing is a constant balance between data accuracy + time trade. This means
that you can wait to get to know the user and later adjust the price based on the
data, but there’s a chance this user won’t convert at all. That’s because it’s common
that most subscriptions come during the first day (or even hour) of the app being
downloaded.

With dynamic pricing, an objective might be to identify who is more likely to purchase
and then prompt them with the right subscription or package. However, it’s important
to keep in mind that **it’s easier to predict who will ****not**** pay**, since 
there’s typically a higher base of free users. 

For example, if your conversion from App Download to Subscription is 5%, 95% of 
your user base is not likely to convert in the first instance.  These users are 
a lot easier to identify and a way to monetize  them is to serve them ads or give
them a higher discount. It’s important to give these users something to also retain
them (network effect for no buyers).

 

### **When dynamic pricing becomes price discrimination (the bad and the ugly)**

It is legal – and common – that consumers are charged different prices for the same
product. Airbnb, Uber, Booking, Amazon, and airline companies, will have different
prices depending on demand and offer. 

This isn’t necessarily a bad thing, applying dynamic pricing can be beneficial to
both the users and the business. For example, Netflix recently announced a new ad-
supported subscription for a lower price. This is beneficial for users with less
disposable income, while perhaps Netflix will retain users that were considering
unsubscribing from the service. Another case is when companies offer an introductory
price for new users that allows them to fully experience the app before committing
to a monthly subscription. 

However, if price discrimination is based on gender, race, or religion, this is 
unethical, and in some countries, illegal. Such a pricing strategy only brings profit
to the companies and little benefit for the user. In the United States, for example,
dynamic pricing is illegal if it violates antitrust laws ([Robinson-Patman Act](https://en.wikipedia.org/wiki/Robinson%E2%80%93Patman_Act)).
However, to prove there was a violation of this law in the US, the consumer has 
to demonstrate that price discrimination harms their ability to compete for a fair
price. 

Proving this can be difficult. The difficulty – and a further ethical dilemma – 
comes from the collection of data, both behavioral and demographic, and the lack
of transparency around it. Tracking cookies enable companies to collect information
on browsing activity and even personal information, in order to display the most
profitable price. Most companies won’t mention that these cookies might change the
prices of their products. 

This practice is becoming increasingly sophisticated. Some companies now use algorithms,
as well as tracking cookies, to apply such dynamic pricing. All these algorithms
in the end have the same objective: to predict how willing the user is to buy at
a given price in order to maximize profit. It is vital therefore that these algorithms
are carefully programmed to avoid unethical behavior. They must increase revenue
and profitability for the company while adding value to the user’s life at a fair
price. 

 

### **The basis of a good dynamic pricing strategy **

 1. Start with the benefit to the user, and the scenario in which it will be used. 
    This might not immediately be straightforward; for instance in times of high demand
    for rail travel, high prices might seem unbeneficial but bear in mind the user 
    is still securing the finite service. 
 2. Consider your long-term relationship with the user. Ideally, you want to retain
    every user, and to do that they need to be satisfied with the service they’ve received.
    While dynamic pricing is usually used in the specific scenarios outlined above,
    it’s important to make sure it’s still a fair, transparent exchange. In scenarios
    where the price increases, you might wish to consider additional benefits, such
    as new features or loyalty discounts that will give the user more value.
 3. Make sure that price discrimination is not based on gender, race, or religion, 
    or that these factors can influence the price in any way. As mentioned, this is
    illegal in some countries, is ethically wrong, and could do your company severe
    reputational damage. 

 

### **How to apply dynamic pricing to CRM campaigns in Braze? **

Now you’ve decided on your dynamic pricing strategy which rests on an ethical and
beneficial scenario, it’s time to communicate and use your CRM tools, such as Braze,
to deliver it to your users in the most efficient way possible. In the following
section, we go into detail as to how we at Phiture typically do this with Braze.

[Braze’s Connected Content](https://www.braze.com/docs/user_guide/personalization_and_dynamic_content/connected_content)
is a great feature that expands on marketing personalization and boosts customer
engagement and conversions. It makes campaign creation much more efficient and scalable
for CRM Teams in many use cases, including dynamic pricing. 

Connected Content minimizes the time to deployment by reducing the setup process
to hours instead of days. It also limits errors. Instead of setting up individual
campaigns, you would set up one campaign which then dynamically and automatically
populates the relevant information.

With Connected Content, users can receive an in-app message, push notification, 
or email with different pricing based on their attributes such as age, country, 
and device. If your company is using a tool like Amplitude, you could even create
cohorts with high targeting criteria including behavioral data such as acquisition
source, engagement with the app, or the number of sessions. Using Connected Content,
we can insert the variables such as price and product name and redirect the users
to the correct deep link (paywall or direct-to-purchase links).

## ** **

### **Automation of campaigns**

## ![](https://phiture.com/wp-content/uploads/2022/11/Screen-Shot-2022-11-03-at-12.32.26-300x47.png)

The content from external data sources, such as Google or Excel sheets, can be called
upon within the message using an API endpoint. An endpoint is a URL that provides
the location of a piece of information on a server. You can use public API endpoints
or your own (your developers would need to make these available to your CRM team).

 

**Step 1:** The Google or Excel sheet is created internally and an API endpoint 
is defined by the developers from your team (if you are a client of Phiture, we 
can also host the API and make the endpoints available for you). This sheet will
have all of the different information needed regarding your products, for example,
price, images, deeplinks, ID, and so on. One of these columns could be also a custom
attribute currently being sent to Braze and used as an anchor between both sources.

## 

 

**Step 2: **CRM team adds the connected content call to the campaign using liquid
code. [Liquid](https://www.braze.com/docs/user_guide/personalization_and_dynamic_content/liquid)
is an open-source template language created by Shopify that can be used in Braze.
Liquid tags act as placeholders in your messages that can pull in information from
your user’s account and your connected content source, and enable personalization
and relevant messaging practices.

    ```lang-js
    {% connected_content https://YOURURL.COM/SHEETID/TABNAME :save response %} {% assign id = {{response.data.campaigns[0].content.locales[products]}} %} {{${first_name}}}, get {{id.product}}} for only €{{id.price}}}.
    ```

 

**Step 3: **Within the connected content call, you will need to add the sheet ID
and the name of the sheet you’re working on. The API call will return a JSON in 
response. As you can see in the JSON file below, you have the ID of the sheet, the
tab, and then the different columns and values. Each of these values can be recognized
in Braze by using a code snippet.

## 

 

**Step 4: **This way, after the connected content call, you will assign the “id”
name to the key value. If the custom attribute is a string and you want the call
to look for that value in all the rows, it needs to be between [straight brackets]:

    ```lang-js
    {{response.data.campaigns[0].content.locales[BrazeAttributeAssignedName]}}
    ```

If the custom attribute is just a place on the row, you then assign the content 
to the specific row needed:

    ```lang-js
    {% assign locales = response.data.campaigns[0].content.locales %} {% assign content = locales.RowValue%}
    ```

 In this case, we wanted to calculate “age” to show the correct price according
to the age of the user. Using Braze’s out-of-the-box attribute of date of birth,
we subtracted “now” minus “date of birth”, formatting both into the same date format(“%
Y-%m-%d”). There are two ways to go from here: 

Using “age” as a number and then using liquid to apply “more than” and “less than”
logic.

    ```lang-js
    {% assign now = “now” | date: “%Y-%m-%d” %}
    {% assign birthday = ${date_of_birth} | date: “%Y-%m-%d” %}
    {% assign age = now | minus: birthday %}
    {% if ${date_of_birth} == blank %}
    {% abort_message(‘Empty Birthdate Error’) %}
    {% elsif age >= 18 and age <=24 %}
    {% assign locales = response.data.campaigns[0].content.locales %}
    {% assign content = locales.18%}
    I am {{age}} years old and I’ll pay €{{content.Price}} for {{content.Product}}.
    {% elsif age >= 25 and age <=39 %}
    {% assign locales = response.data.campaigns[0].content.locales %}
    {% assign content = locales.25%}
    I am {{age}} years old and I’ll pay €{{content.Price}} for {{content.Product}}.
    {% elsif age >= 40 %}
    {% assign locales = response.data.campaigns[0].content.locales %}
    {% assign content = locales.40%}
    I am {{age}} years old and I’ll pay €{{content.Price}} for {{content.Product}}.
    {% else %}
    {% abort_message(‘Invalid age’) %}
    {% endif %}
    ```

Using “age” as a string and using it to be a dynamic field in the code. This would
also be the way to apply connected content to most of the use cases where you are
matching an existing custom attribute in Braze with a column in your Google or Excel
Sheet.

    ```lang-js
    {% assign now = “now” | date: “%Y-%m-%d” %}
    {% assign birthday = ${date_of_birth} | date: “%Y-%m-%d” %}
    {% assign age = now | minus: birthday | append: “” %}
    {% assign id = {{response.data.campaigns[0].content.locales[age]}} %}
    {% if {{id}} == nil %}
    {% abort_message(‘No Valid Age’) %}
    {% else %}
    I am {{age}} and I’ll pay €{{id.Price}} for {{id.Product}}
    {% endif %}
    ```

**Step 5: **Test & send the message to your users with personalized and localized
content recommendations based on custom attributes using code snippets.

    ```lang-js
    {{age}}, {{id.Price}}, {{id.Product}}
    ```

## 

### **Recommendations:**

 * Everything should be tested to make sure it works the way you intend (deep links,
   images, names).
 * Connected content can only work in live tests with Braze. We recommend setting
   up a campaign in your developer environment so it will not be triggered to the
   full user base while testing.
 * In order to get users to subscribe, your app should offer a smooth way to make
   a purchase, removing any friction on their way. This could be achieved by using
   direct-to-purchase deeplinks without additional steps in retargeting or discount
   campaigns. If your in-app message already displays the price and even a legal
   footnote using Content Blocks, allow the user to close the deal in one single
   tap.  

 

### **Conclusion**

Dynamic pricing is a monetization strategy used more and more in the e-commerce 
market, including App subscriptions. It’s common to adapt your product or service
prices based on the buyer’s behavior and characteristics. Whenever we think of dynamic
pricing, it’s important to understand what’s ethical and legal about this practice.
Even if it’s a business decision to increase profitability, as a company is important
to make sure you are not discriminating against people based, for example, on their
gender. 

Once a business decides to use different prices based on business rules, the challenge
for most CRM Teams is how to implement it in an efficient way using Braze. Having
individual campaigns and constantly updating prices is time-consuming and leads 
to human error. With Braze Connected Content feature, users can receive an in-app
message, push notification, or email with different pricing based on attributes 
such as country, device, or age, allowing CRM Teams to be more efficient.

 

### **Further Reading**

Braze, [Personalization Using Liquid Tags](https://www.braze.com/docs/user_guide/personalization_and_dynamic_content/liquid)

Braze, [Connected Content](https://www.braze.com/docs/user_guide/personalization_and_dynamic_content/connected_content)

Christopher Coble, Esq.[ Is Dynamic Pricing Legal?](https://www.findlaw.com/legalblogs/small-business/is-dynamic-pricing-legal/)

Gennaro Cuofano, [Dynamic Pricing: Is The Price Tag Legacy Coming To An End?](https://fourweekmba.com/dynamic-pricing/)

Shannon Egan, [Mapping the Ethicality of Algorithmic Pricing](https://montrealethics.ai/mapping-the-ethicality-of-algorithmic-pricing/)

Seele, P., Dierksmeier, C., Hofstetter, R. _et al._ [Mapping the Ethicality of Algorithmic Pricing: A Review of Dynamic and Personalized Pricing.](https://link.springer.com/article/10.1007/s10551-019-04371-w)

 

 
