Payer Promotions help you get players to pay more in your game. Facebook sponsors this feature, enabling you to offer certain people a discount on your game's virtual currency, such as $3 of value for free.
Benefits of Payer Promotions
Get more paying customers — a user who pays once is more likely to pay again in the future. In one case, 20% of people who made a first-time purchase came back to spend more within a month. Similar results have been seen in other scenarios where the discount was offered to users who had not spent in the last 30 days.
Facebook sponsors this promotion - you receive your revenue share just as in a regular purchase.
Easy to implement — with just a few simple steps, you can start converting more players of your game into payers.
Implementation options
There are three methods by which the promotion can be implemented:
To get the most from this promotion, independent of implementation method, we recommend that developers update their app to support in-app currency orders. This will ensure that the promotion is redeemed in your in-app currency. If you do not do this, the user will redeem the promotion in Facebook Credits which can be spent in any app.
Facebook will promote the Payer Promotion to eligible players of your game, using a special banner or premium placement on the right rail of Facebook.com, as shown in the examples below.

To ensure that users are able to redeem these offers into your in-app currency, rather than in Facebook Credits, make sure you update your app to support in-app currency orders and specifically associate your app with your in-app currency so that we know which currency to redeem the offer in. You won't be required to make any other changes to take advantage of this valuable opportunity.
The most direct way to offer the Payer Promotion is to actively make it available from within your game, by creating a custom in-game unit for the promotion. Many developers have implemented this by showing an interstitial dialog to eligible players at relevant points in the game.
In a case study of KIXEYE's game, War Commander, which implemented Payer Promotion, we saw payer conversion grow by an average of 18%. War Commander users who saw the Payer Promotion showed a revenue lift of over 8%, compared to the control group. The game also increases conversion by offering an extra incentive, such as a free Command Center upgrade:

The details of the offer in the screenshots may not match those of the current offer.
We have seen that incentivizing users with other free virtual items increases conversion for the promotion. Context is also very important; making this promotion available along with a free virtual item, when it is needed in the game, can significantly increase conversion. You can maximize the impact of your offer by showing it at a point where premium currency can best improve a user's play experience.
Make sure you track performance. We recommend tracking user engagement (CTR), user conversion, and monetization of converted payers over time.
First, you should implement support for In-App Currency Orders so that the promotion can be redeemed in your app currency.
Before showing the promotion to a user, query Facebook to check that the user is eligible to redeem it. Once an eligible user clicks on the promotion, you need to invoke the Facebook flow for the user to redeem the promotion.
1. Check that a user is eligible for the promotion
Before displaying the promotion, determine if the user is eligible to redeem it by issuing an HTTP GET request to the Graph API /USER_ID?fields=is_eligible_promo with a user access_token.
This query returns the following data:
| Name | Type | Value |
|---|---|---|
is_eligible_promo | int | The value 1 indicating the user is eligible; if the user is not eligible, the field will not be present |
id | int | The user ID |
An example developer request:
https://graph.facebook.com/USER_ID?fields=is_eligible_promo&access_token=USER_ACCESS_TOKEN
Most developer accounts will not be eligible for this promotion, which is targeted largely at first-time or lapsed payers. So to test your implementation, you can add your account to the Payments Tester list, or alternatively create Facebook platform test users, and add them to your Payments Tester list; accounts on that list are treated as eligible.
When testing with a user forced into eligibility in this way, the credits callback will contain an additional top-level property, test_mode, whose value will be 1. Transactions marked as test_mode will not be credited to the app as purchases.
2. Invoke the promotion dialog
Assuming the user is eligible for the promotion, the developer displays the custom Payer Promotion unit. When the user clicks on the unit, invoke the fbpromotion dialog with the following Javascript call:
var obj = {
method: 'fbpromotion',
display: 'popup',
package_name: 'zero_promo',
product: 'http://currency.object.url'
};
FB.ui(obj, npp_callback);
with the following required properties:
| Name | Type | Value | Required |
|---|---|---|---|
method | String | The constant fbpromotion | Yes |
display | String | The constant popup; it is not possible to invoke the dialog with any other display mode | Yes |
package_name | String | The constant zero_promo | Yes |
product | String | The URL of your currency object | Yes |
The Javascript callback will fire once the dialog is closed, with no arguments. To find out whether the user completed the payment flow or canceled out, query your app server in the callback, and update your app client with the user's new balance if applicable.
As an alternative to using the JS SDK to pop up the offer, you can load the dialog resource directly in a window that you create for it:
dialog_window = window.open("https://www.facebook.com/dialog/fbpromotion/?" +
"app_id=YOUR_APP_ID&package_name=zero_promo&product=" +
encode_uri_component("http://currency.object.url"));
In this case, no Javascript callback is provided; you may want to set a callback of your own for the onclose event of dialog_window.
To minimize ineligible users opening the offer, it's recommend that users are only allowed to click on the unit once per load of the client.
An example of a Payer Promotion dialog:

Sample code:
<!-- Simple unit for Payer Promotion (payer_promotion)
Determine visibility of the unit from the above eligibility API -->
<button onclick="payer_promotion();">Payer Promotion</button>
<script>
// On load, the user hasn't clicked on the payer_promotion unit
var has_clicked = false;
var dialog_window;
function payer_promotion() {
if (!has_clicked) {
// If first click, open payer_promotion dialog
var obj = {
method: 'fbpromotion',
display: 'popup',
package_name: 'zero_promo',
product: 'http://currency.object.url'
};
FB.ui(obj, function(){
// call back to your server to see if user's balance changed
});
// Mark unit as clicked by user
has_clicked = true;
} else {
// For subsequent clicks, alert user
alert("Payer Promotion already clicked!");
}
}
</script>
While we have seen highest conversions with in-game implementation, developers can also get the benefits of Payer Promotion in their game by simply integrating with TrialPay offers.
If you have already implemented in-app currency offers, then the Payer Promotion is already available, and prominently displayed to eligible users.
TrialPay has also created a dedicated Payer Promotion-only DealSpot unit that doesn't include any other offers. If you choose to implement this flow, only users who are eligible for the promotion will see the in-game icon promoting the offer; ineligible users won't see anything. If a user clicks that icon, a special Payer Promotion-only offer overlay will be shown on top of your game, and if the offer is completed, the player will receive $3 worth of your in-game currency for free.

First, you should implement support for In-App Currency Orders so that the promotion can be redeemed in your app currency.
Next, implement TrialPay's Payer Promotion-only DealSpot.
To test Payer Promotions, use an account which has been added to the "Payments Testers" list in your app's Payments settings, in the App Dashboard.

Any Payments test user is always eligible to invoke the Payer Promotion flow in your app. They don't need to enter credit card details to complete the flow; the flow always completes successfully.
When we make our payments_status_update request to your credits callback URL, there will be an additional parameter, test_mode=1, which indicates that the value of the request won't be paid out, as it was made in a testing environment.
- The developer should not have the $3 promo balance of credits applied to their account, so there is no cost to Facebook associated with a developer testing the flow