Upsell
Upsells are banners that display short messages that focus on promoting an action or upgrading something the user already has.
⚠️ Please note: Upsell is not currently supported in dark mode.
Give $30, get $60 in ads credit
Upsell Props
Upsell.Form Props
Usage guidelines
- Displaying promotional information to a user that is not tied to a task or state on the surface.
- Sharing updates or changes to the features and offerings of the product.
- Anything related to state or status within the surface. Consider a Callout instead.
- Promoting or highlighting specific elements / areas within a surface. Let the team know if this is needed.
Best practices
Give $30, get $60 in ads credit
Use Upsells for marketing new products or encouraging upgrades.
Give $30, get $60 in ads credit
Place Upsell at the top of the page under the primary navigation when possible.
Measure ad performance
So close! Finish installing your Pinterest tag, get $10 in ads credit
Plan for the timing of your Upsells with new product launches. Try to create different messages for each time an Upsell appears to the user.
Could not link account
Use Upsells for critical information, such as errors or warnings. Use Callout instead. Upsells should not be used for general information either.
So close! Finish installing your Pinterest tag, get $10 in ads credit
Give $30, get $60 in ads credit
Stack Upsells on a page. In the case that they must be stacked, Callouts will appear above Upsells.
Measure ad performance
Measure ad performance
Keep showing the same Upsell once it has been dismissed. Upsells should only appear a maximum of 2 times to the same user, as they have diminishing returns.
Accessibility
Labels
dismissButton
, primaryAction
, secondaryAction
, and submitButtonAccessibilityLabel
each require a short, descriptive label for screen readers, which should also be localized.
In the case of action Buttons or Links, alternative text should be provided through the accessibilityLabel
prop to replace vague text like "Visit" or "Learn more" with more descriptive information, like "Learn more about work from home resources". Avoid using the words "button" or "link" in the label, as this becomes repetitive. If the action text is already descriptive, an empty string can be passed.
For the dismissButton
IconButton, the label provided should indicate the intent, like “Dismiss this banner”.
The Image or Icon supplied to imageData
should only supply an alt
or accessibilityLabel
, respectively, if the Image or Icon supplies extra context or information. Icons in Upsells are often purely decorative, and can therefore have an empty string as the accessibilityLabel
.
Give $30, get $60 in ads credit
Localization
Remember to localize all link or button labels, as well as title
and message
.
Fast fertig! Beenden Sie die Installation Ihres Pinterest-Tags und erhalten Sie ein Guthaben von 10 Euro
Variants
Text-only
Used to convey a short message that requires no action, except dismiss.
Icon
The Icon is used to add additional meaning to the Upsell. The icon can reference a Pinterest product, feature or an action from our Icon library.
Give $30, get $60 in ads credit
Image
The Image in Upsell is used to add visual interest and draw the user’s attention. Images should relate to the message of the Upsell. Upsell images should use approved photography or be illustrations using our brand colors. Images will always be 128px wide.
Actions
Upsells can have either one primary action, or a primary action and a secondary action. These actions can be buttons, when no href
is supplied, or links, by specifying the href
property.
For example, “Learn more” may link to a separate documentation site, while “Send invite” could be a button that opens a Modal with an invite flow. Be sure to localize the labels of the actions.
If needed, actions can become disabled after clicking by setting disabled: true
in the action data.
Give $30, get $60 in ads credit
Forms
Inputs can be added to Upsells to collect information from users (ex: name or email) through the use of Upsell.Form
. Most Upsells should have no more than 2 inputs. If more inputs are needed, direct users to a full page using the primaryAction
.
Give $30, get $60 in ads credit

Interested in a free ads consultation?
This example illustrates two custom navigation implementations to externally control the link navigation behavior of Upsell: setting a default logic with OnLinkNavigationProvider and a custom component logic with the onClick
prop.
If onNavigation
prop is passed to OnLinkNavigationProvider, it's passed down to all children links and sets a custom default link navigation behavior. onLinkNavigation
is a higher-order function: it takes named arguments (href
and target
) and returns an event handler function. In the component's onClick
event handler, the onClick
prop gets called first, followed by the function passed down by the OnLinkNavigationProvider.
Upsell's onClick
prop is an event handler function. This callback takes 2 named parameters: 'event', the 'onClick' event, and disableOnNavigation
, a callback function that disables any default custom navigation logic set by OnLinkNavigationProvider. disableOnNavigation
is only accessible in OnLinkNavigationProvider's children components with link behavior.
In this example, Upsell has a parent OnLinkNavigationProvider setting a default custom navigation logic. We can compare three navigation behaviors: (a) the default Upsell behavior (by disabling the OnLinkNavigationProvider's inherited logic), (b) the default custom behavior set by OnLinkNavigationProvider and (c) a custom behavior set on Upsell.
onClick
is used to disable the default custom logic set in OnLinkNavigationProvider and implement custom behavior at the component level. disableOnNavigation
and customOnNavigation
are both called first during the 'onClick' event.
If onNavigation
is a custom hook function, it can contain complex logic, including React hooks, to perform side effects.
In this example, both onNavigation
and customOnNavigation
functions execute the following actions:
- Disable the default link behavior
- Show an alert message
- Open a different URL in a new window
Both onNavigationClick
, inside onNavigation
, and onClick
have event access to preventDefault(). It could also be used to stopPropagation().
Give $30, get $60 in ads credit
Related
Callout
Use Callout when communicating critical information, such as an error or warning. Callout can also be used to present the user with general information and further actions they can take, like the successful creation of a business account.
Toast
Toast provides feedback on a user interaction, like a confirmation that appears when a Pin has been saved. Unlike Upsell and Callout, Toasts don’t contain actions. They’re also less persistent, and disappear after a certain duration.
OnLinkNavigationProvider
Provider allows external link navigation control across all children components with link behavior.
See custom navigation variant for examples.
ActivationCard
ActivationCards are used in groups to communicate a user’s stage in a series of steps toward an overall action.