# App Store & Google Play Listing Policy Checker (`ultimatemc/app-store-listing-policy-checker`) Actor

Check App Store and Google Play listings for metadata policy problems before you submit. For app developers, ASO agencies and AI listing tools. Flags ranking and price claims in titles, competitor names, keyword stuffing, emoji, caps and length limits, with severity per store, policy link and fix.

- **URL**: https://apify.com/ultimatemc/app-store-listing-policy-checker.md
- **Developed by:** [Ultimate Foresight Inc](https://apify.com/ultimatemc) (community)
- **Categories:** Developer tools, Marketing, SEO tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $20.00 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

**App Store & Google Play Listing Policy Checker** scans your app's **name, subtitle, keywords, short and full description, promotional text and What's New** for **metadata that gets apps rejected or listings suspended**: ranking and price claims in the title, competitor and trademark names, other platforms in App Store text, keyword stuffing, emoji and ALL CAPS, unattributed testimonials and over-length fields. Each issue comes with its severity **on the App Store and on Google Play separately**, the exact words, a link to the public guideline and a plain-English fix. Click **Start** with the prefilled example to see a result in a few seconds.

> **A pre-check, not a review decision.** This is a fixed, rule-based text checker written from Apple's App Review Guidelines (section 2.3, checked after the October 2026 update) and Google Play's Metadata policy. A flag means "review this"; a clean result does **not** guarantee approval. Screenshots, icons, app behavior and reviewer judgment also matter. Not affiliated with Apple or Google.

### What does App Store & Google Play Listing Policy Checker do?

- ✅ Runs **25+ metadata checks**, each with its own Apple and Google severity and guideline link
- ✅ **Ranking and award claims** in titles: "#1", "Best", "Top", "App of the Year", "Editor's Choice"
- ✅ **Price and promotion** in the title, icon text or short description: "FREE", "50% off", "Sale" (with traps avoided: "gluten-free", "garage sale", "sales CRM", and promo text on Apple, where sales are allowed)
- ✅ **Other apps, brands and trademarks** in keywords and titles (Apple rejects these in the keyword field), "Instagram alternative", "better than Snapchat", and a curated list of 100 well-known app names; your own brand is never flagged
- ✅ **Other platforms in App Store text**: Android, Google Play, APK (Apple guideline 2.3.10)
- ✅ **Formatting**: emoji, repeated symbols ("!!!"), ALL CAPS words, HTML tags, repeated words in the title, long keyword lists in the description, unattributed user testimonials, calls to action like "Download now"
- ✅ **Apple keyword field hygiene**: 100-byte limit, spaces after commas, duplicates, plurals, words already in your app name, category words like "app"
- ✅ **Length limits** for every field (Apple: name and subtitle 30, keywords 100 bytes, promo text 170, description 4,000; Google: title 30, short description 80, full description 4,000)
- ✅ Returns `riskLevel`, `riskByStore`, `categoriesFlagged`, `fieldLengths`, and per issue `ruleId`, `severity`, `field`, `quote`, `context`, per-store `policyUrl` and `rewriteHint`

### Who is it for?

- 📱 **Indie developers and app studios** about to submit an update
- 📈 **ASO agencies and consultants** auditing many client listings
- 🤖 **AI listing and ASO tools** that generate titles and descriptions and need a policy gate
- 🌍 **Teams publishing on both stores** (the stores treat the same words differently: "Android" is fine on Google Play, a rejection risk on Apple)

### How to check an app listing before you submit

1. Click **Try for free** or **Start**. The input is prefilled with two example listings.
2. Replace them with your own in **App listings** (any of `name`, `subtitle`, `keywords`, `promotionalText`, `description`, `shortDescription`, `whatsNew`).
3. Add your own brand and product names in **Your brand terms** so they aren't flagged.
4. Click **Start**. Each listing becomes one row in the results table.
5. Download the results or fetch them through the API.

### Input example

This is the prefilled input:

```json
{
  "apps": [
    {
      "id": "photo-app",
      "store": [
        "apple",
        "google"
      ],
      "name": "#1 Best FREE Photo Editor!!! 📸",
      "subtitle": "Better than Snapchat filters",
      "keywords": "photo, editor,photos,instagram,app,filter,filters,android",
      "shortDescription": "Download now - 50% off Pro today only",
      "description": "Top rated photo editor.\n\"Best app I ever used!\" - Happy user\nShare your edits straight to Instagram and TikTok."
    },
    {
      "id": "budget-app",
      "store": [
        "apple",
        "google"
      ],
      "name": "Budget Planner: Money Tracker",
      "subtitle": "Expenses, bills and savings",
      "keywords": "expense,bills,savings goal,debt payoff,paycheck",
      "promotionalText": "Spring sale: Premium is 40% off until April 30.",
      "shortDescription": "Track spending, plan bills and reach savings goals.",
      "description": "Track spending, plan bills and set savings goals. Export reports to Excel. Sync across your devices."
    }
  ]
}
```

From an App Store or Google Play scraper's dataset (common fields such as `title`, `trackName`, `summary` and `releaseNotes` are detected automatically):

```json
{
  "datasetId": "YOUR_APP_SCRAPER_DATASET_ID",
  "stores": [
    "apple"
  ],
  "brandTerms": [
    "Acme",
    "Acme Pro"
  ],
  "fieldMap": {
    "name": "appTitle"
  }
}
```

### Output example

Real output from the prefilled input above (run on 2026-10-21, America/Chicago). The risky photo app had **16 issues**; here they are at a glance:

| Severity | Field | Quote | Rule |
|---|---|---|---|
| high | keywords | `instagram` | competitor_or_trademark |
| high | keywords | `android` | other_platform_mention |
| high | name | `#1` | ranking_claim |
| high | name | `FREE` | price_promo_in_headline |
| high | name | `📸` | emoji_or_emoticon |
| high | name | `!!!` | repeated_special_characters |
| high | subtitle | `Snapchat` | competitor_or_trademark |
| medium | description | `"Best app I ever used!" - Happy user` | unattributed_testimonial |
| medium | shortDescription | `Download now` | call_to_action |
| low | description | `Best app` | ranking_claim |
| low | description | `Top rated` | ranking_claim |
| low | keywords | `spaces after commas` | keyword_spaces |
| low | keywords | `editor, photo` | keyword_repeats_name |
| low | keywords | `app, photo` | keyword_category_words |
| low | keywords | `filters, photos` | keyword_plurals |
| low | shortDescription | `50% off` | price_promo_in_headline |

The photo app row, trimmed to 4 of its 16 issues, then the clean budget app in full:

```json
[
  {
    "appId": "photo-app",
    "name": "#1 Best FREE Photo Editor!!! 📸",
    "storesChecked": [
      "apple",
      "google"
    ],
    "riskLevel": "high",
    "riskByStore": {
      "apple": "high",
      "google": "high"
    },
    "issueCount": 16,
    "categoriesFlagged": [
      "Formatting (emoji, symbols, caps)",
      "Keyword field (App Store)",
      "Misleading or irrelevant metadata",
      "Other apps, brands & trademarks",
      "Other platforms & app stores",
      "Price & promotion in metadata",
      "Ranking, award & performance claims"
    ],
    "issues": [
      {
        "ruleId": "competitor_or_trademark",
        "category": "Other apps, brands & trademarks",
        "severity": "high",
        "field": "keywords",
        "quote": "instagram",
        "context": "photo, editor,photos,instagram,app,filter,filters,android",
        "stores": [
          {
            "store": "apple",
            "severity": "high",
            "policyUrl": "https://developer.apple.com/app-store/review/guidelines/#2.3.7"
          }
        ],
        "rewriteHint": "Apple doesn't allow names of other apps or companies in keywords (App Store Connect reference, guideline 2.3.7)."
      },
      {
        "ruleId": "ranking_claim",
        "category": "Ranking, award & performance claims",
        "severity": "high",
        "field": "name",
        "quote": "#1",
        "context": "#1 Best FREE Photo Editor!!! 📸",
        "stores": [
          {
            "store": "apple",
            "severity": "medium",
            "policyUrl": "https://developer.apple.com/app-store/product-page/"
          },
          {
            "store": "google",
            "severity": "high",
            "policyUrl": "https://support.google.com/googleplay/android-developer/answer/9898842"
          }
        ],
        "rewriteHint": "Store ranking, award and 'best/#1/top' claims aren't allowed in the title, icon or developer name on Google Play, and Apple asks for no unverifiable claims in names and subtitles. Describe what the app does instead ('Budget planner with bank sync'). In the description, only keep claims you can attribute ('Apple Design Award 2024 finalist')."
      },
      {
        "ruleId": "competitor_or_trademark",
        "category": "Other apps, brands & trademarks",
        "severity": "high",
        "field": "subtitle",
        "quote": "Snapchat",
        "context": "Better than Snapchat filters",
        "stores": [
          {
            "store": "apple",
            "severity": "high",
            "policyUrl": "https://developer.apple.com/app-store/review/guidelines/#2.3.7"
          }
        ],
        "rewriteHint": "Comparing yourself to named apps or brands in the listing ('better than X', 'X alternative') is flagged by both stores; Google lists brand comparisons as a metadata violation."
      },
      {
        "ruleId": "unattributed_testimonial",
        "category": "Misleading or irrelevant metadata",
        "severity": "medium",
        "field": "description",
        "quote": "\"Best app I ever used!\" - Happy user",
        "context": "Top rated photo editor. \"Best app I ever used!\" - Happy user Share your edits straight to Instagram and T...",
        "stores": [
          {
            "store": "apple",
            "severity": "low",
            "policyUrl": "https://developer.apple.com/app-store/review/guidelines/#2.3"
          },
          {
            "store": "google",
            "severity": "medium",
            "policyUrl": "https://support.google.com/googleplay/android-developer/answer/9898842"
          }
        ],
        "rewriteHint": "Google Play doesn't allow unattributed or anonymous user testimonials in the description. Remove them, or attribute press quotes to the publication."
      }
    ],
    "fieldLengths": {
      "name": {
        "length": 30,
        "unit": "characters",
        "limits": {
          "apple": 30,
          "google": 30
        }
      },
      "subtitle": {
        "length": 28,
        "unit": "characters",
        "limits": {
          "apple": 30
        }
      },
      "keywords": {
        "length": 57,
        "unit": "bytes",
        "limits": {
          "apple": 100
        }
      },
      "description": {
        "length": 111,
        "unit": "characters",
        "limits": {
          "apple": 4000,
          "google": 4000
        }
      },
      "shortDescription": {
        "length": 37,
        "unit": "characters",
        "limits": {
          "google": 80
        }
      }
    },
    "disclaimer": "Automated text pre-check based on Apple's App Store Review Guidelines (2.3 Accurate Metadata) and Google Play's Metadata policy. Flags are possible issues, not App Review decisions; a clean result does not guarantee approval. Icons, screenshots, previews and the app itself are also reviewed. Not affiliated with Apple or Google."
  },
  {
    "appId": "budget-app",
    "name": "Budget Planner: Money Tracker",
    "storesChecked": [
      "apple",
      "google"
    ],
    "riskLevel": "none found",
    "riskByStore": {
      "apple": "none found",
      "google": "none found"
    },
    "issueCount": 0,
    "categoriesFlagged": [],
    "issues": [],
    "fieldLengths": {
      "name": {
        "length": 29,
        "unit": "characters",
        "limits": {
          "apple": 30,
          "google": 30
        }
      },
      "subtitle": {
        "length": 27,
        "unit": "characters",
        "limits": {
          "apple": 30
        }
      },
      "keywords": {
        "length": 47,
        "unit": "bytes",
        "limits": {
          "apple": 100
        }
      },
      "promotionalText": {
        "length": 47,
        "unit": "characters",
        "limits": {
          "apple": 170
        }
      },
      "description": {
        "length": 100,
        "unit": "characters",
        "limits": {
          "apple": 4000,
          "google": 4000
        }
      },
      "shortDescription": {
        "length": 51,
        "unit": "characters",
        "limits": {
          "google": 80
        }
      }
    },
    "disclaimer": "Automated text pre-check based on Apple's App Store Review Guidelines (2.3 Accurate Metadata) and Google Play's Metadata policy. Flags are possible issues, not App Review decisions; a clean result does not guarantee approval. Icons, screenshots, previews and the app itself are also reviewed. Not affiliated with Apple or Google."
  }
]
```

The budget app's "Spring sale: Premium is 40% off" is **not** flagged because it is in Apple promotional text, where sales are allowed, and "Export reports to Excel" is an integration, not a competitor claim.

**Severity:** `high` = commonly rejected or removed (ranking claims and emoji in titles, competitor names in Apple keywords). `medium` = depends on context or likely to draw a reviewer comment. `low` = a weak signal or an ASO hygiene tip. `riskLevel` is the highest severity found.

### How much does it cost to check app listings?

This Actor uses **pay-per-event** pricing:

- **$0.02 per app listing** (one result row per listing, both stores included)
- a tiny Actor start fee of **$0.00005** per run
- plus the small Apify **platform usage** of the run, paid by you. For the prefilled 2-listing example this was about **$0.0001** (256 MB, under 4 seconds).

So **50 listings cost about $1.00**. Apify lets you set a maximum cost per run.

### Use it through the API, integrations or AI agents

- **API:** `POST https://api.apify.com/v2/acts/ultimatemc~app-store-listing-policy-checker/run-sync-get-dataset-items` with your Apify token and the input JSON as the body. Client libraries for JavaScript and Python are on the **API** tab.
- **AI agents (MCP):** add `https://mcp.apify.com?tools=ultimatemc/app-store-listing-policy-checker` to Claude, Cursor, ChatGPT or any MCP client, so your agent can check generated listing text before you paste it into App Store Connect or Play Console. See [Apify MCP server](https://docs.apify.com/mcp).
- **Chain it after a scraper:** pass an app scraper's `datasetId` to audit competitor or client listings in bulk.
- **Automation:** connect webhooks, Make, Zapier, n8n or Google Sheets from Apify Console.

### FAQ

#### Does a clean result guarantee approval?

No. It means none of the rules matched your text. Apple and Google also review screenshots, icons, previews, app behavior and context.

#### Can I mention integrations like "Export to Excel" or "Share to Instagram"?

Usually yes, and the checker allows them in descriptions. It flags other app names in titles, subtitles and Apple keywords, and comparison wording like "better than" or "alternative to".

#### My own brand is flagged. What do I do?

Add it to **Your brand terms**. It is then skipped in the competitor and ALL CAPS checks.

#### Does it use AI?

No. It's rule-based (keywords, patterns and limits), so results are repeatable and every flag links to a guideline. No text is sent to any outside service.

#### Which languages are supported?

English text. Length limits apply to any language.

### Limitations

- Text only: it doesn't see screenshots, icons, previews or the app itself, and doesn't check age ratings, privacy labels or in-app behavior.
- English, keyword-based. The app-name list is curated, not complete, so a competitor name that isn't on the list won't be flagged.
- Rules are our paraphrase of public guidelines checked on 2026-10-21; Apple and Google update them, so confirm on the linked pages.

### Policy sources

Rules are paraphrased from these public pages (checked 2026-10-21; Apple updated section 2.3 on 2026-10-16):

- [Apple App Review Guidelines, 2.3 Accurate Metadata](https://developer.apple.com/app-store/review/guidelines/#accurate-metadata)
- [App Store Connect: platform version information and limits](https://developer.apple.com/help/app-store-connect/reference/platform-version-information)
- [Google Play Metadata policy](https://support.google.com/googleplay/android-developer/answer/9898842), [Impersonation](https://support.google.com/googleplay/android-developer/answer/9888374) and [Deceptive Behavior](https://support.google.com/googleplay/android-developer/answer/9888077)
- [Google Play store listing setup and limits](https://support.google.com/googleplay/android-developer/answer/9859152)

### Data and privacy

The checker makes no network calls (except reading your own dataset when you give one). Listing text is processed only during the run and saved only to your own Apify dataset.

### Other tools by Ultimate Foresight

- [Ad Copy Policy Checker for Meta, Google & TikTok](https://apify.com/ultimatemc/ad-copy-policy-checker): checks ad text against Facebook, Instagram, Google Ads and TikTok ad policies before you submit.
- [H-1B Visa Sponsor Checker & Score for Job Listings](https://apify.com/ultimatemc/h1b-visa-sponsor-score): adds Department of Labor H-1B sponsorship history and a 0-100 score to company names or job listings.
- [Chain vs Independent Labeler for Google Maps Leads](https://apify.com/ultimatemc/chain-vs-independent-labeler): labels local businesses as chain, franchise or independent.
- [YouTube Monetization Checker for Scripts & Titles](https://apify.com/ultimatemc/youtube-script-monetization-checker): pre-checks titles, descriptions and scripts for wording that leads to limited or no ads.
- [Etsy & eBay Listing Policy & Banned Item Checker](https://apify.com/ultimatemc/etsy-ebay-listing-policy-checker): pre-checks marketplace listings for prohibited items, counterfeit wording and off-platform contact.
- [Job Scam Detector & Trust Score for Job Postings](https://apify.com/ultimatemc/job-posting-trust-score): scores job postings 0-100 for scam and ghost-job signals.
- [SAM.gov Amendment & Opportunity Change Tracker](https://apify.com/ultimatemc/sam-gov-opportunity-change-detector): shows what changed between versions of a SAM.gov notice: deadlines, set-asides, NAICS and attachments.
- [Product Recall Checker for Brands, UPCs & Products](https://apify.com/ultimatemc/product-recall-matcher): matches your brands, products, UPCs or model numbers against CPSC, FDA and NHTSA recalls.

Found a false positive or a missed phrase? Open an issue on the **Issues** tab with the listing text, and we'll review the rule.

# Actor input Schema

## `apps` (type: `array`):

One object per app listing. Fields: "id", "store" ("apple", "google" or both as a list), "name" (app name / title), "subtitle", "keywords" (App Store keyword field, comma-separated), "promotionalText", "description", "shortDescription" (Google Play), "whatsNew", "developerName". All fields are optional; fill in what you have. The prefill has two example listings; replace them with your own.

## `stores` (type: `array`):

Which store rules to apply when a listing doesn't name its store.

## `brandTerms` (type: `array`):

Your own brand and product names, so they aren't flagged as another company's name or as ALL CAPS (for example "YNAB" or "Lightroom").

## `appleKidsCategory` (type: `boolean`):

Apple reserves 'For Kids' / 'For Children' wording for apps in the Kids category. Turn on to skip that check.

## `datasetId` (type: `string`):

Apify dataset with app items, for example the output of an App Store or Google Play scraper. Fields like title/trackName, subtitle, description, summary, releaseNotes and developer are detected automatically; override with Field map.

## `fieldMap` (type: `object`):

Override dataset field names, e.g. {"name": "appTitle", "shortDescription": "tagline"}.

## `maxItems` (type: `integer`):

Maximum number of app listings to check in this run.

## Actor input object example

```json
{
  "apps": [
    {
      "id": "photo-app",
      "store": [
        "apple",
        "google"
      ],
      "name": "#1 Best FREE Photo Editor!!! 📸",
      "subtitle": "Better than Snapchat filters",
      "keywords": "photo, editor,photos,instagram,app,filter,filters,android",
      "shortDescription": "Download now - 50% off Pro today only",
      "description": "Top rated photo editor.\n\"Best app I ever used!\" - Happy user\nShare your edits straight to Instagram and TikTok."
    },
    {
      "id": "budget-app",
      "store": [
        "apple",
        "google"
      ],
      "name": "Budget Planner: Money Tracker",
      "subtitle": "Expenses, bills and savings",
      "keywords": "expense,bills,savings goal,debt payoff,paycheck",
      "promotionalText": "Spring sale: Premium is 40% off until April 30.",
      "shortDescription": "Track spending, plan bills and reach savings goals.",
      "description": "Track spending, plan bills and set savings goals. Export reports to Excel. Sync across your devices."
    }
  ],
  "stores": [
    "apple",
    "google"
  ],
  "appleKidsCategory": false,
  "maxItems": 1000
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "apps": [
        {
            "id": "photo-app",
            "store": [
                "apple",
                "google"
            ],
            "name": "#1 Best FREE Photo Editor!!! 📸",
            "subtitle": "Better than Snapchat filters",
            "keywords": "photo, editor,photos,instagram,app,filter,filters,android",
            "shortDescription": "Download now - 50% off Pro today only",
            "description": "Top rated photo editor.\n\"Best app I ever used!\" - Happy user\nShare your edits straight to Instagram and TikTok."
        },
        {
            "id": "budget-app",
            "store": [
                "apple",
                "google"
            ],
            "name": "Budget Planner: Money Tracker",
            "subtitle": "Expenses, bills and savings",
            "keywords": "expense,bills,savings goal,debt payoff,paycheck",
            "promotionalText": "Spring sale: Premium is 40% off until April 30.",
            "shortDescription": "Track spending, plan bills and reach savings goals.",
            "description": "Track spending, plan bills and set savings goals. Export reports to Excel. Sync across your devices."
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("ultimatemc/app-store-listing-policy-checker").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "apps": [
        {
            "id": "photo-app",
            "store": [
                "apple",
                "google",
            ],
            "name": "#1 Best FREE Photo Editor!!! 📸",
            "subtitle": "Better than Snapchat filters",
            "keywords": "photo, editor,photos,instagram,app,filter,filters,android",
            "shortDescription": "Download now - 50% off Pro today only",
            "description": """Top rated photo editor.
\"Best app I ever used!\" - Happy user
Share your edits straight to Instagram and TikTok.""",
        },
        {
            "id": "budget-app",
            "store": [
                "apple",
                "google",
            ],
            "name": "Budget Planner: Money Tracker",
            "subtitle": "Expenses, bills and savings",
            "keywords": "expense,bills,savings goal,debt payoff,paycheck",
            "promotionalText": "Spring sale: Premium is 40% off until April 30.",
            "shortDescription": "Track spending, plan bills and reach savings goals.",
            "description": "Track spending, plan bills and set savings goals. Export reports to Excel. Sync across your devices.",
        },
    ] }

# Run the Actor and wait for it to finish
run = client.actor("ultimatemc/app-store-listing-policy-checker").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "apps": [
    {
      "id": "photo-app",
      "store": [
        "apple",
        "google"
      ],
      "name": "#1 Best FREE Photo Editor!!! 📸",
      "subtitle": "Better than Snapchat filters",
      "keywords": "photo, editor,photos,instagram,app,filter,filters,android",
      "shortDescription": "Download now - 50% off Pro today only",
      "description": "Top rated photo editor.\\n\\"Best app I ever used!\\" - Happy user\\nShare your edits straight to Instagram and TikTok."
    },
    {
      "id": "budget-app",
      "store": [
        "apple",
        "google"
      ],
      "name": "Budget Planner: Money Tracker",
      "subtitle": "Expenses, bills and savings",
      "keywords": "expense,bills,savings goal,debt payoff,paycheck",
      "promotionalText": "Spring sale: Premium is 40% off until April 30.",
      "shortDescription": "Track spending, plan bills and reach savings goals.",
      "description": "Track spending, plan bills and set savings goals. Export reports to Excel. Sync across your devices."
    }
  ]
}' |
apify call ultimatemc/app-store-listing-policy-checker --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,ultimatemc/app-store-listing-policy-checker"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/0NyY4NkcsGSAQu5aD/builds/dpg7KY3ZoXheDhEdC/openapi.json
