# iOS IAP Review Submission Mapper (`gladsome_mailbox/ios-iap-review-submission-mapper`) Actor

Turn one predefined iOS IAP submission issue into official Apple guidance, evidence checks, blockers, and conditional reply points. Structured selections only; no rejection text, credentials, account access, or approval guarantees. English by default; Korean guidance is optional.

- **URL**: https://apify.com/gladsome\_mailbox/ios-iap-review-submission-mapper.md
- **Developed by:** [caitlyn](https://apify.com/gladsome_mailbox) (community)
- **Categories:**
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$19.00 / structured ios iap submission map

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## iOS IAP Review Submission Mapper

Get a structured English-by-default resubmission checklist for one specific problem: an in-app purchase or subscription was not included with the app-version review submission.

The result separates what you reported from what still needs evidence, then maps the issue to official Apple guidance, verification steps, blockers, and conditional English Review reply points. Choose full English output or Korean guidance with English reply skeletons. It is not a free-text classifier and does not read App Store Connect.

**Price: US$19 for one successfully stored structured map.** Platform usage is included. Starting another run can produce another charge.

### Use this Actor when

- the App Review issue is specifically that an IAP or subscription was not included with the app-version submission;
- you want a deterministic checklist rather than pasting a rejection message into a general-purpose model;
- you can verify the final App Store Connect state yourself before resubmitting.

Do not run it for purchase-button failures, subscription-disclosure issues, other review guidelines, or a request for approval prediction.

### Supported input

The Actor accepts predefined selections only:

- `platform`: `ios`
- `appType`: `iap` or `subscription`
- `issueType`: `iap-not-in-review-submission`
- optional `outputLanguage`: `en` or `ko`; omitted input defaults to English
- optional predefined `deviceFamily`
- optional predefined `checkedActions`

Unknown fields and values are rejected with one generic error. Do not enter rejection text, names, email addresses, app or product identifiers, submission identifiers, URLs, paths, tokens, or arbitrary notes.

Dummy input: `examples/dummy_input.json`

Valid JSON example:

```json
{
  "platform": "ios",
  "appType": "iap",
  "issueType": "iap-not-in-review-submission",
  "outputLanguage": "en",
  "deviceFamily": "not provided"
}
```

### Result

The Actor stores one result item in the run's default dataset. The result contains:

- Apple App Review Guideline 2.1(b) and the official IAP submission procedure
- facts separated from unverified hypotheses
- actions and evidence for metadata, review screenshots, version linkage, agreements/tax/banking, and sandbox lookup
- one explicit status for every predefined check
- conditional reply skeletons that require supporting evidence before any completion statement
- blockers that prevent a truthful completion claim

Safe enum selections are deliberately reflected in the result and marked with `selectionValuesReflected: true`. User-reported checks remain unverified.

The default `en` result returns the complete narrative and Markdown report in English. Selecting `ko` preserves Korean guidance while keeping App Review reply skeletons in English. Machine-readable field names, enum values, and status codes stay stable in both modes.

Example of the result structure:

```json
{
  "privacy": "structured-no-free-text",
  "outputLanguage": "en",
  "semanticReviewRequired": true,
  "checkStatuses": [
    {
      "code": "iap-metadata-complete",
      "status": "not-provided-not-evidence-of-nonperformance"
    }
  ],
  "issues": [
    {
      "classification": "apple-2.1b-iap-submission",
      "guideline": "2.1(b)",
      "actions": ["..."],
      "evidence": ["..."],
      "blockers": ["..."]
    }
  ]
}
```

### Pricing

The Actor requests the custom `analysis-report` event only when it writes the structured result to the default dataset. Rejected input and generation failures before that write do not call the charge event. The event is configured as one-time per run, so an in-run retry cannot charge it twice. A separate run can trigger a separate US$19 charge.

### Privacy and storage

- The Actor accepts no arbitrary text fields and does not log input values.
- Results use `privacy: structured-no-free-text` and `inputEchoed: false`.
- Apify may retain Actor input, run records, logs, and storage under its platform and account-plan policies. This Actor does not promise no-store behavior.
- A run or an Actor issue attachment can broaden access. Inspect a run before sharing it.
- The Actor needs no Apple account credentials or App Store Connect access.

### Limitations

- Supports only the user-selected issue “IAP was not included with the app-version review submission.”
- Does not classify rejection messages, inspect an account, verify a completed fix, submit an app, guarantee approval, or provide legal advice.
- Official policy and procedures must be checked again on the resubmission date.
- The public Store CTA may use generic wording; confirm the adjacent US$19 event price before starting a run.

### Local test

The tests use Python's standard library and do not call Apify or the network:

```sh
python -m unittest discover -s tests -v
```

The regression tests verify the narrow input/output, safety, and billing-call contract. They are not evidence of App Store resolution or approval.

The deployed entry point requires the package pinned in `requirements.txt` and runs `python -m src` through `Dockerfile`.

# Actor input Schema

## `platform` (type: `string`):

This candidate supports iOS only.

## `appType` (type: `string`):

Choose the applicable App Store paid-flow type.

## `issueType` (type: `string`):

This Actor supports only an IAP item missing from the app-version review submission.

## `outputLanguage` (type: `string`):

Choose English for the complete report or Korean guidance with English App Review reply skeletons.

## `deviceFamily` (type: `string`):

Optional predefined context only; device identifiers are never accepted.

## `checkedActions` (type: `array`):

Optional predefined checks. Selections are user-reported and never independent proof; unselected checks mean status not provided, not non-performance.

## Actor input object example

```json
{
  "platform": "ios",
  "appType": "iap",
  "issueType": "iap-not-in-review-submission",
  "outputLanguage": "en",
  "deviceFamily": "not provided",
  "checkedActions": [
    "iap-metadata-complete",
    "review-screenshot-added"
  ]
}
```

# Actor output Schema

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

Default dataset items containing the structured report, evidence requirements, blockers, and conditional reply points.

# 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 = {
    "appType": "iap",
    "issueType": "iap-not-in-review-submission",
    "outputLanguage": "en",
    "checkedActions": [
        "iap-metadata-complete",
        "review-screenshot-added"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("gladsome_mailbox/ios-iap-review-submission-mapper").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 = {
    "appType": "iap",
    "issueType": "iap-not-in-review-submission",
    "outputLanguage": "en",
    "checkedActions": [
        "iap-metadata-complete",
        "review-screenshot-added",
    ],
}

# Run the Actor and wait for it to finish
run = client.actor("gladsome_mailbox/ios-iap-review-submission-mapper").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 '{
  "appType": "iap",
  "issueType": "iap-not-in-review-submission",
  "outputLanguage": "en",
  "checkedActions": [
    "iap-metadata-complete",
    "review-screenshot-added"
  ]
}' |
apify call gladsome_mailbox/ios-iap-review-submission-mapper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,gladsome_mailbox/ios-iap-review-submission-mapper"
        }
    }
}

```

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/Jl7EsKth2btW9xud8/builds/vaHF9eeG1elx0QV3b/openapi.json
