# App Store Revenue & Download Estimator - MCP Server (`seibs.co/mcp-app-store-revenue-estimator`) Actor

MCP server for app-store-revenue-estimator. AI-agent tools for App Store and Google Play download/revenue estimates, rank history, and publisher rollups. x402 (USDC on Base) and Skyfire agentic-payment ready. For app devs, UA teams, and app investors.

- **URL**: https://apify.com/seibs.co/mcp-app-store-revenue-estimator.md
- **Developed by:** [Seibs.co](https://apify.com/seibs.co) (community)
- **Categories:** MCP servers, Business, Marketing
- **Stats:** 0 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$5.00 / 1,000 mcp tool calls

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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

## App Store Revenue & Download Estimator - MCP Server

> Model Context Protocol (MCP) server wrapper for [app-store-revenue-estimator](https://apify.com/seibs.co/app-store-revenue-estimator). Gives AI agents pay-per-call access to modeled download and revenue bands for iOS and Google Play apps - the Sensor-Tower-style numbers - with a stated confidence level and a plain-English methodology. No API token required when called over x402 / Skyfire.

### What it is

A thin MCP server that exposes the estimation engine as four typed tools an AI agent can call. Each tool runs the upstream `app-store-revenue-estimator` actor and reshapes the result into small, deterministic JSON. The product is the *estimate*: download and revenue bands derived from public signals (chart rank, ratings velocity, Google Play install buckets, price, IAP presence), not raw store metadata. Built for market-research copilots, competitive-intel agents, and analyst dashboards.

Read this honestly: these are order-of-magnitude bands with a stated confidence, not measurements. They tighten when the upstream actor runs on a schedule and accumulates ratings-velocity history. This server is **not affiliated with Apple, Google, or Sensor Tower**.

### Tools

| Tool | What it does |
|---|---|
| `estimate_app` | Modeled download + revenue band for one app (iOS id/URL or Play package/URL), with confidence, methodology, and caveats. |
| `compare_apps` | Estimate 2-10 apps and rank them by download-band midpoint, with a leader/trailer comparison summary. |
| `get_publisher_portfolio` | All of a publisher's apps with per-app estimates plus one combined portfolio band (downloads, revenue, confidence, top app, category mix). |
| `get_top_chart_estimates` | Top N apps of a country's chart (top-free or top-paid) with an estimate attached to each, ranked by chart position. Apple feeds only; top_n cap 50. |

### Run modes

- `list_tools` - emit the tool catalog (free, no charge) including the agentic-payment descriptor.
- `call_tool` - invoke one tool. Requires `tool` + `args`.
- `batch` - invoke up to 10 `{tool, args}` calls in one run.

```json
{
  "mode": "call_tool",
  "tool": "estimate_app",
  "args": { "app": "com.spotify.music", "country": "us" }
}
````

```json
{
  "mode": "call_tool",
  "tool": "compare_apps",
  "args": { "apps": ["310633997", "com.spotify.music"], "country": "us" }
}
```

### What you get

Every tool returns the same MCP envelope: `ok`, `count`, `items`, `summary`, `error`. The `items` carry the upstream `estimate_enrichment` records with the bands preserved verbatim:

- `downloads_band` - `{ low, mid, high, period }` where period is daily, monthly, or lifetime.
- `revenue_band_usd` - estimated GROSS revenue in USD (before the 15-30% store cut and refunds).
- `confidence` - low / medium / high. High means two or more independent signals agree within 3x.
- `methodology` - one human sentence naming which public signals drove the estimate.
- `caveats` - the assumptions behind the number, surfaced so an agent can reason about them.

### Honesty notes (read before you trust a number)

- Estimates are **order-of-magnitude bands with stated confidence**, not the publisher's actual figures.
- Revenue is **gross**. Multiply by roughly 0.7-0.85 for net after the store cut and refunds.
- Estimates **tighten when the upstream runs on a schedule** (estimate\_monitor mode) and builds a ratings-velocity time series; a one-shot call has no history and leans on coarser signals.
- Google Play has no public top-charts feed, so `get_top_chart_estimates` is Apple-only. Play package estimates use the public install bucket and are best-effort.
- Not affiliated with Apple, Google, or Sensor Tower. This tool models public signals; it does not access any private store analytics.

### Agentic payments (x402 + Skyfire)

This server is **x402 (USDC on Base)** and **Skyfire** ready. When the operator enables Apify MCP monetization, an AI agent can pay per tool call with no pre-provisioned API token. The `list_tools` response includes a `payments` descriptor advertising the accepted rails and per-call price. Operators enable rails via environment variables:

| Env | Purpose |
|---|---|
| `X402_ENABLED` | `1` to advertise x402 acceptance |
| `X402_PAY_TO_ADDRESS` | receiving wallet (USDC on Base) |
| `X402_PRICE_USD` | per-call price advertised (default 0.005) |
| `SKYFIRE_ENABLED` | `1` to advertise Skyfire acceptance |
| `SKYFIRE_SELLER_ID` | Skyfire seller identity |

Calls through Apify always bill via standard PPE (`mcp_tool_call` $0.005 + upstream pass-through); x402/Skyfire are the token-less rails layered on top for direct agents.

### Pricing

Flat **$0.005 per MCP tool call**, plus the upstream `app-store-revenue-estimator` PPE pass-through (`app_record` $0.010, `estimate_enrichment` $0.020, `publisher_rollup` $0.030) billed to the same run. `list_tools` is free. A run that returns nothing costs nothing.

### Responsible use / data scope

The upstream actor reads only logged-out, public data: Apple's official free iTunes lookup/search endpoints and marketing RSS top-charts feeds, and the public Google Play app-detail page. No accounts, no cookies, no paywall bypass. You are responsible for lawful use of the outputs and for treating the bands as estimates. See the upstream actor's README for the full data-scope note.

### Related Actors

- [app-store-revenue-estimator](https://apify.com/seibs.co/app-store-revenue-estimator) - the non-MCP actor with full input controls, publisher rollups, top-charts, and estimate\_monitor (the scheduled mode that sharpens estimates over time).
- [reddit-topic-watcher](https://apify.com/seibs.co/reddit-topic-watcher) - track where an app or competitor is being discussed.

### Found this useful?

Leave a quick review: https://apify.com/seibs.co/mcp-app-store-revenue-estimator#reviews

# Actor input Schema

## `mode` (type: `string`):

list\_tools = emit the MCP tool catalog (free). call\_tool = invoke one tool (requires 'tool' + 'args'). batch = invoke a list of {tool, args} calls (max 10).

## `tool` (type: `string`):

Required when mode=call\_tool. One of: estimate\_app, compare\_apps, get\_publisher\_portfolio, get\_top\_chart\_estimates.

## `args` (type: `object`):

Arguments for the selected tool. Example for estimate\_app: {"app": "com.spotify.music", "country": "us"}. Example for compare\_apps: {"apps": \["310633997", "com.spotify.music"]}.

## `calls` (type: `array`):

Required when mode=batch. Each entry is an object with 'tool' and 'args'. Example: \[{"tool": "estimate\_app", "args": {"app": "com.spotify.music"}}, {"tool": "get\_top\_chart\_estimates", "args": {"chart": "top-free", "top\_n": 10}}]. Max 10 calls per run.

## Actor input object example

```json
{
  "mode": "list_tools",
  "tool": "estimate_app",
  "args": {
    "app": "com.spotify.music",
    "country": "us"
  },
  "calls": []
}
```

# 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 = {
    "mode": "list_tools",
    "args": {
        "app": "com.spotify.music",
        "country": "us"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("seibs.co/mcp-app-store-revenue-estimator").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 = {
    "mode": "list_tools",
    "args": {
        "app": "com.spotify.music",
        "country": "us",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("seibs.co/mcp-app-store-revenue-estimator").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "mode": "list_tools",
  "args": {
    "app": "com.spotify.music",
    "country": "us"
  }
}' |
apify call seibs.co/mcp-app-store-revenue-estimator --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=seibs.co/mcp-app-store-revenue-estimator",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "App Store Revenue & Download Estimator - MCP Server",
        "description": "MCP server for app-store-revenue-estimator. AI-agent tools for App Store and Google Play download/revenue estimates, rank history, and publisher rollups. x402 (USDC on Base) and Skyfire agentic-payment ready. For app devs, UA teams, and app investors.",
        "version": "0.1",
        "x-build-id": "lw9EO8ODOq837yzGp"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/seibs.co~mcp-app-store-revenue-estimator/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-seibs.co-mcp-app-store-revenue-estimator",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/seibs.co~mcp-app-store-revenue-estimator/runs": {
            "post": {
                "operationId": "runs-sync-seibs.co-mcp-app-store-revenue-estimator",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/seibs.co~mcp-app-store-revenue-estimator/run-sync": {
            "post": {
                "operationId": "run-sync-seibs.co-mcp-app-store-revenue-estimator",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "mode"
                ],
                "properties": {
                    "mode": {
                        "title": "Mode",
                        "enum": [
                            "list_tools",
                            "call_tool",
                            "batch"
                        ],
                        "type": "string",
                        "description": "list_tools = emit the MCP tool catalog (free). call_tool = invoke one tool (requires 'tool' + 'args'). batch = invoke a list of {tool, args} calls (max 10).",
                        "default": "list_tools"
                    },
                    "tool": {
                        "title": "Tool name",
                        "enum": [
                            "estimate_app",
                            "compare_apps",
                            "get_publisher_portfolio",
                            "get_top_chart_estimates"
                        ],
                        "type": "string",
                        "description": "Required when mode=call_tool. One of: estimate_app, compare_apps, get_publisher_portfolio, get_top_chart_estimates.",
                        "default": "estimate_app"
                    },
                    "args": {
                        "title": "Tool arguments (JSON object)",
                        "type": "object",
                        "description": "Arguments for the selected tool. Example for estimate_app: {\"app\": \"com.spotify.music\", \"country\": \"us\"}. Example for compare_apps: {\"apps\": [\"310633997\", \"com.spotify.music\"]}."
                    },
                    "calls": {
                        "title": "Batch calls",
                        "maxItems": 10,
                        "type": "array",
                        "description": "Required when mode=batch. Each entry is an object with 'tool' and 'args'. Example: [{\"tool\": \"estimate_app\", \"args\": {\"app\": \"com.spotify.music\"}}, {\"tool\": \"get_top_chart_estimates\", \"args\": {\"chart\": \"top-free\", \"top_n\": 10}}]. Max 10 calls per run.",
                        "default": []
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
