---
title: Earning Money by Adding Ads within the World
slug: world-sdk-guide/earning-money-by-adding-ads-within-the-world
docTags: 
createdAt: 2024-09-02T08:34:13.134Z
---

You can add advertisements within ZEPETO World.

You can place two types of ads in ZEPETO World: Interstitial Ads and Immersive Ads. Immersive Ads appear on digital billboards within the world.

:::hint{type="danger"}
- Ads display only on mobile environments. Use QR mobile testing instead of Unity Editor Scene Play for accurate previews.
- This feature requires ZEPETO APP version 3.37.000 or higher.
- For Ad key issuance and revenue inquiries, contact the ZEPETO staff.
:::



## Installation of ZEPETO.Advertisement Package

1\) Open Package Manager by clicking the Window → Package Manager button.

2\) Click the Advanced button in the top right of the Package Manager window, then select Advanced Project Settings.

![](https://api.archbee.com/api/optimize/fCt3n1oCa8rgNJ8fw9I2N-qBt70gzc7bM2qTpq8MtyT-20240904-102413.png)

3\) In the Package Manager section of Project Settings, click the (+) button at the bottom right of Scope.

4\) In the new input field, type 'media' and click Apply.

![](https://api.archbee.com/api/optimize/fCt3n1oCa8rgNJ8fw9I2N-e72nA5Gg2tWfxBSGZw0EI-20240904-102413.png)

5\) In your Unity Project folder > packages, open `manifest.json` and add the following content.

```json
"dependencies": {
  ...
    "media.advertisement": "0.1.1"
  ...
 }
```

6\) Then install the ZEPETO.Advertisement package from the Package Manager.



## Applying Interstitial Ads

### Writing the Script

```typescript
import { Button } from 'UnityEngine.UI';
import { AdShowResult, WorldAdvertisement } from 'ZEPETO.Advertisement.General';
import { ZepetoScriptBehaviour } from 'ZEPETO.Script'

const AD_KEY: string = "Monetize_Template";

export default class AdvertisementSample extends ZepetoScriptBehaviour {
    public button: Button;

    Start() {
        this.button.onClick.AddListener(() => {
            this.ShowAd();
        });
    }

    ShowAd() {
        WorldAdvertisement.Show(
            AD_KEY,
            result => this.OnAdShowResult(result)
        );
    }

    OnAdShowResult(result: AdShowResult) {

        if (result == AdShowResult.Finished) {
            console.log("Ad show successful; Finished.");
            return;
        }

        let failMessage: string;
        switch (result) {
            case AdShowResult.Failed:
                failMessage = "Failed";
                break;
            case AdShowResult.Skipped:
                failMessage = "Skipped";
                break;
            case AdShowResult.NotReady:
                failMessage = "NotReady";
                break;
            default:
                failMessage = "Unknown result";
                break;
        }
        console.log(`Ad show failed; ${failMessage}.`);

    }
}
```

| **AdShowResult (enum)** | **Value** | **Description**              |
| ----------------------- | --------- | ---------------------------- |
| Failed                  | 0         | Ad SDK Initialization Failed |
| Skipped                 | 1         | Ad Skipped                   |
| Finished                | 2         | Ad Viewing Completed         |
| NotReady                | 3         | Ad Not Ready                 |



:::hint{type="success"}
**👍 AD\_KEY**

- **Default Ad Key**: **Monetize\_Template**
:::

:::hint{type="danger"}
**❗️ Caution**
When calling the WorldAdvertisement.Show function, pass the callback as a closure for the second argument to prevent crashes on iOS.

- Instead of writing like this:

```typescript
ShowAd() {
    WorldAdvertisement.Show(
        AD_KEY,
        this.OnAdShowResult
    );
}
```

- Write like this:

```typescript
ShowAd() {
    WorldAdvertisement.Show(
        AD_KEY,
        result => this.OnAdShowResult(result)
    );
}
```
:::



Run the QR mobile test to ensure the Ad displays correctly.

::Image[]{src="https://api.archbee.com/api/optimize/xv-TGeWVTX2GDZMFGOf1Y/57dsysgN_i6P3YqL1rwLX_image.png" size="60" width="2258" height="1070" position="center" caption="Android" showCaption="true"}

::Image[]{src="https://api.archbee.com/api/optimize/fCt3n1oCa8rgNJ8fw9I2N-NfngZofmgQl5drxr0U4oS-20240904-102414.png" size="60" width="2436" height="1125" position="center" caption="iOS" showCaption="true"}



## Monetizing with In-World Ads

### I want to know how to earn ad revenue in ZEPETO!

In ZEPETO, you can insert ads into your own world to generate revenue.

- Ad revenue is paid based on the number of ad views from users.
- Revenue is credited as **ZEM** on the payout date and can be withdrawn as cash through the Withdrawal menu on ZEPETO Studio. (Cannot be used as currency within the app.)



### Ad Revenue Payout Schedule

Ad revenue is paid out quarterly.

| **Quarter** | **Date**   |
| ----------- | ---------- |
| Q1          | April 15   |
| Q2          | July 15    |
| Q3          | October 15 |
| Q4          | January 15 |

:::hint{type="success"}
**Note**
If the payment date is a holiday, it will be paid on the next business day.
:::



### Want to earn ad revenue?

**Step 1: Meet one of the following eligibility conditions:**

- You’ve published a world with over 20,000 UVs
- You’ve won a prize in a world contest or event
- You’ve released 2 or more high-quality Build It Plug-in worlds in one month

**Step 2: Submit the application form below to request an internal review.**

:::CtaButton{label="Submit Google Form" externalHref="https://docs.google.com/forms/d/e/1FAIpQLSfmwgRJROAbI-RqkRWDj4I_79JovYVxtFRPhlsQOleYfo78CA/viewform" openInNewTab="true"}

:::

**Step 3: If you pass the internal review, we will issue your personal ad key, and you’ll begin receiving quarterly ad revenue payments.**



### I want to withdraw my ad revenue.

Follow the steps in the video below to withdraw your ZEM earnings!

::embed[]{url="https://youtu.be/LcjscVm1AeY"}

