# Shopify App Store Scraper (`parseforge/shopify-app-store-scraper`) Actor

Pull Shopify apps with name, developer, rating, review count, category, description, screenshots, and icon. Discover via sitemap with 30,000+ apps indexed. Filter by keyword to narrow the results. Export to JSON, CSV, or Excel for ecommerce ecosystem research and competitive analysis.

- **URL**: https://apify.com/parseforge/shopify-app-store-scraper.md
- **Developed by:** [ParseForge](https://apify.com/parseforge) (community)
- **Categories:** E-commerce, Business, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $8.25 / 1,000 items

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

![ParseForge Banner](https://github.com/ParseForge/apify-assets/blob/ad35ccc13ddd068b9d6cba33f323962e39aed5b2/banner.jpg?raw=true)

## 🛍️ Shopify App Store Scraper

> 🚀 **Pull Shopify apps with name, developer, rating, and screenshots.** Discover apps via sitemap, filter by keyword. No login, no API key.

> 🕒 **Last updated:** 2026-05-01 · **📊 10 fields** per app · **🛍️ 30,000+ apps indexed** · **⭐ ratings + reviews included** · **🆓 sitemap-based discovery**

The **Shopify App Store Scraper** discovers apps via the public Shopify App Store sitemap and returns name, developer, category, rating, review count, description, icon, and CDN-hosted screenshots per app. Filter by keyword to narrow the results to a specific app type like SEO, email, shipping, or reviews.

Shopify powers more than 4 million stores worldwide and the App Store hosts 30,000+ apps across SEO, marketing, fulfillment, store design, customer service, and more. This Actor exposes the full app catalog as structured data for ecosystem research, competitive analysis, or building your own app discovery layer.

| 🎯 Target Audience | 💡 Primary Use Cases |
|---|---|
| Shopify app developers, ecommerce consultants, ecosystem researchers, founders | Competitive research, market sizing, app discovery, ecosystem mapping |

---

### 📋 What the Shopify App Store Scraper does

Three filtering workflows in a single run:

- 📑 **Sitemap discovery.** Walks the public `apps.shopify.com/sitemap.xml` covering 30,000+ apps.
- 🔍 **Keyword filter.** Substring match on app slug to narrow by category or type.
- ⚡ **Parallel fetch.** Up to 5 concurrent app-page fetches with retry to keep total run time low.

Each row reports the app icon URL, app name, slug, app store URL, developer, category from JSON-LD, average rating, review count, og:description, up to 12 screenshot URLs, and a scrape timestamp.

> 💡 **Why it matters:** the Shopify App Store is the world's largest commerce-app ecosystem and a real revenue surface. App developers benchmark themselves against competitors. Consultants research which categories are saturated. Researchers map the ecosystem for VC and strategy work. The official store has no bulk export, so this Actor is the cleanest way to get structured app metadata.

---

### 🎬 Full Demo

_🚧 Coming soon: a 3-minute walkthrough showing how to go from sign-up to a downloaded dataset._

---

### ⚙️ Input

<table>
<thead>
<tr><th>Input</th><th>Type</th><th>Default</th><th>Behavior</th></tr>
</thead>
<tbody>
<tr><td><code>maxItems</code></td><td>integer</td><td><code>10</code></td><td>Apps to return. Free plan caps at 10, paid plan at 1,000,000.</td></tr>
<tr><td><code>keywordFilter</code></td><td>string</td><td>empty</td><td>Substring filter on app slug. Examples: <code>seo</code>, <code>email</code>, <code>shipping</code>, <code>review</code>.</td></tr>
<tr><td><code>appSlugs</code></td><td>array</td><td>empty</td><td>Specific app slugs to fetch. When provided, sitemap discovery is skipped.</td></tr>
</tbody>
</table>

**Example: 100 SEO-related Shopify apps.**

```json
{
    "maxItems": 100,
    "keywordFilter": "seo"
}
````

**Example: lookup specific app slugs only.**

```json
{
    "maxItems": 5,
    "appSlugs": ["seo-king", "smart-seo", "tinyimg"]
}
```

> ⚠️ **Good to Know:** Shopify's sitemap occasionally returns thin responses to scrapers; the Actor retries up to four times with backoff. Many sitemap entries are not Shopify apps (some are docs or partners). The Actor over-fetches by 3x and returns only valid `SoftwareApplication` records, so 100 returned apps may require fetching 200-300 sitemap URLs.

***

### 📊 Output

Each app record contains **10 fields**. Download as CSV, Excel, JSON, or XML.

#### 🧾 Schema

| Field | Type | Example |
|---|---|---|
| 🖼️ `iconUrl` | string | null | `"https://cdn.shopify.com/app-store/listing_images/.../icon.png"` |
| 📰 `appName` | string | `"SEO King"` |
| 🔖 `slug` | string | `"seo-king"` |
| 🔗 `url` | string | `"https://apps.shopify.com/seo-king"` |
| 👤 `developer` | string | null | `"Engage Apps"` |
| 🗂️ `category` | string | null | `"DeveloperApplication"` |
| ⭐ `rating` | number | null | `4.8` |
| 💬 `ratingCount` | integer | null | `502` |
| 📝 `description` | string | null | `"Boost organic traffic with on-page SEO..."` |
| 📷 `screenshots` | array | `["https://cdn.shopify.com/app-store/...screen-1.png", ...]` |
| 🕒 `scrapedAt` | ISO 8601 | `"2026-05-01T01:55:30.000Z"` |

#### 📦 Sample records

<details>
<summary><strong>⭐ Top-rated SEO app with 500+ reviews</strong></summary>

```json
{
    "iconUrl": "https://cdn.shopify.com/app-store/listing_images/abc/icon/CLCXvdGn0YcDEAE=.png",
    "appName": "SEO King",
    "slug": "seo-king",
    "url": "https://apps.shopify.com/seo-king",
    "developer": "Engage Apps",
    "category": "DeveloperApplication",
    "rating": 4.8,
    "ratingCount": 502,
    "description": "Boost organic traffic with on-page SEO optimization, image alt tags, and schema markup."
}
```

</details>

<details>
<summary><strong>📈 Image-optimization app with screenshots</strong></summary>

```json
{
    "iconUrl": "https://cdn.shopify.com/app-store/listing_images/.../icon.png",
    "appName": "TinyIMG SEO Image Optimizer",
    "slug": "tinyimg",
    "url": "https://apps.shopify.com/tinyimg",
    "developer": "TinyIMG",
    "category": "DeveloperApplication",
    "rating": 4.9,
    "ratingCount": 13420,
    "screenshots": [
        "https://cdn.shopify.com/app-store/listing_images/.../screen-1.png",
        "https://cdn.shopify.com/app-store/listing_images/.../screen-2.png"
    ]
}
```

</details>

<details>
<summary><strong>🆕 Newer app with low review count</strong></summary>

```json
{
    "iconUrl": "https://cdn.shopify.com/app-store/listing_images/.../newapp.png",
    "appName": "SEO Booster Mini",
    "slug": "seo-booster-mini",
    "url": "https://apps.shopify.com/seo-booster-mini",
    "developer": "Indie Tools Co.",
    "rating": 4.2,
    "ratingCount": 14
}
```

</details>

***

### ✨ Why choose this Actor

| | Capability |
|---|---|
| 🆓 | **No login.** Reads the public Shopify App Store sitemap and per-app HTML. |
| 🛍️ | **30,000+ apps.** Full catalog discoverable via sitemap. |
| ⭐ | **Ratings included.** Average rating and total review count per app. |
| 📷 | **Screenshots.** Up to 12 CDN-hosted screenshot URLs per app. |
| 🔍 | **Keyword filter.** Substring match on slug for category narrowing. |
| ⚡ | **Parallel fetch.** Concurrent requests with retry on rate limits. |
| 🚀 | **Sub-2-minute runs.** Typical 80-app pulls finish in 90 to 120 seconds. |

> 📊 In a single 110-second run the Actor returned 80 SEO-related Shopify apps with full ratings and screenshots.

***

### 📈 How it compares to alternatives

| Approach | Cost | Coverage | Refresh | Filters | Setup |
|---|---|---|---|---|---|
| Manual App Store browsing | Free | One app at a time | Live | Built-in | Hours |
| Paid commerce-data subscriptions | $$$ subscription | Aggregated | Daily | Built-in | Account setup |
| Generic web scrapers | $$ subscription | Brittle CSS | Daily | None | Engineer hours |
| **⭐ Shopify App Store Scraper** *(this Actor)* | Pay-per-event | Full catalog | Live | Keyword filter | None |

Same sitemap and per-app JSON-LD Shopify exposes for search engines, packaged as structured records.

***

### 🚀 How to use

1. 🆓 **Create a free Apify account.** [Sign up here](https://console.apify.com/sign-up?fpr=vmoqkp) and get $5 in free credit.
2. 🔍 **Open the Actor.** Search for "Shopify App Store" in the Apify Store.
3. ⚙️ **Pick filters.** Optional keyword filter or list of app slugs.
4. ▶️ **Click Start.** A 100-app run typically completes in 90 to 120 seconds.
5. 📥 **Download.** Export as CSV, Excel, JSON, or XML.

> ⏱️ Total time from sign-up to first dataset: under five minutes.

***

### 💼 Business use cases

<table>
<tr>
<td width="50%">

#### 🛍️ App developers

- Benchmark your app's rating against direct competitors
- Identify under-served sub-categories
- Mine top-app descriptions for positioning ideas
- Track new app launches in your space

</td>
<td width="50%">

#### 📊 Ecommerce consultants

- Curate app stacks for clients by category
- Compare ratings before recommending an app
- Build proposals citing specific apps
- Track which apps a vertical favors

</td>
</tr>
<tr>
<td width="50%">

#### 💼 Ecosystem researchers

- Map app categories for VC analysis
- Track new entrant velocity by month
- Build heat maps of saturated vs underserved spaces
- Identify acquisition targets by rating + review count

</td>
<td width="50%">

#### 📰 Content & SEO

- Publish "best Shopify apps for X" roundups with real data
- Cite specific apps by slug in articles
- Build interactive app-finder microsites
- Power affiliate dashboards with up-to-date metadata

</td>
</tr>
</table>

***

### 🌟 Beyond business use cases

Data like this powers more than commercial workflows. The same structured records support research, education, civic projects, and personal initiatives.

<table>
<tr>
<td width="50%">

#### 🎓 Research and academia

- Empirical datasets for papers, thesis work, and coursework
- Longitudinal studies tracking changes across snapshots
- Reproducible research with cited, versioned data pulls
- Classroom exercises on data analysis and ethical scraping

</td>
<td width="50%">

#### 🎨 Personal and creative

- Side projects, portfolio demos, and indie app launches
- Data visualizations, dashboards, and infographics
- Content research for bloggers, YouTubers, and podcasters
- Hobbyist collections and personal trackers

</td>
</tr>
<tr>
<td width="50%">

#### 🤝 Non-profit and civic

- Transparency reporting and accountability projects
- Advocacy campaigns backed by public-interest data
- Community-run databases for local issues
- Investigative journalism on public records

</td>
<td width="50%">

#### 🧪 Experimentation

- Prototype AI and machine-learning pipelines with real data
- Validate product-market hypotheses before engineering spend
- Train small domain-specific models on niche corpora
- Test dashboard concepts with live input

</td>
</tr>
</table>

***

### 🔌 Automating Shopify App Store Scraper

Run this Actor on a schedule, from your codebase, or inside another tool:

- **Node.js** SDK: see [Apify JavaScript client](https://docs.apify.com/api/client/js/) for programmatic runs.
- **Python** SDK: see [Apify Python client](https://docs.apify.com/api/client/python/) for the same flow in Python.
- **HTTP API**: see [Apify API docs](https://docs.apify.com/api/v2) for raw REST integration.

Schedule weekly runs from the Apify Console to refresh app rating data. Pipe results into Google Sheets, S3, BigQuery, or your own webhook with the built-in [integrations](https://docs.apify.com/platform/integrations).

***

### ❓ Frequently Asked Questions

<details>
<summary><strong>📑 How does the keyword filter work?</strong></summary>

Substring match on the app slug, case-insensitive. `seo` returns apps whose slug contains `seo`. Leave empty for the full catalog.

</details>

<details>
<summary><strong>💰 Does it return pricing?</strong></summary>

Pricing tiers live in a JS-hydrated component on each app page that does not appear in the static HTML. Pricing is not part of v1; contact us if you need a browser-rendered version.

</details>

<details>
<summary><strong>📅 Does it return last-updated date?</strong></summary>

The sitemap exposes `<lastmod>` per app. Per-app last-updated within Shopify's UI is JS-rendered and not part of v1.

</details>

<details>
<summary><strong>🔠 What is the category field?</strong></summary>

Shopify uses schema.org `applicationCategory` in their JSON-LD. Most apps return `DeveloperApplication`. Future versions may expose Shopify's own category taxonomy.

</details>

<details>
<summary><strong>📷 How many screenshots are returned?</strong></summary>

Up to 12 screenshot URLs per app, all pointing to Shopify's CDN. Smaller apps may have fewer screenshots.

</details>

<details>
<summary><strong>📦 Why does my run return ~80 of 100 requested?</strong></summary>

The sitemap mixes app pages with non-app pages. The Actor over-fetches and only counts valid `SoftwareApplication` records. The remainder were docs, partner pages, or removed apps.

</details>

<details>
<summary><strong>🛡️ Are there rate limits?</strong></summary>

Cloudflare protects the App Store; the Actor uses concurrency 5 with retry on 429/503 to stay within polite limits.

</details>

<details>
<summary><strong>💼 Can I use this for commercial work?</strong></summary>

Yes. The Actor reads only the public sitemap and per-app HTML Shopify exposes for search engines. Always honor each app developer's terms when republishing content.

</details>

<details>
<summary><strong>💳 Do I need a paid Apify plan?</strong></summary>

The free plan returns up to 10 apps per run. Paid plans return up to 1,000,000.

</details>

<details>
<summary><strong>⚠️ What if a run returns very few apps?</strong></summary>

The keyword filter may be too narrow. Try fewer characters or no filter at all. [Open a contact form](https://tally.so/r/BzdKgA) and include the run URL if you suspect a bug.

</details>

<details>
<summary><strong>🔁 How fresh is the data?</strong></summary>

Live. Each run hits the sitemap and each app page at run time.

</details>

<details>
<summary><strong>⚖️ Is this legal?</strong></summary>

Yes. The Actor reads only what Shopify publicly serves to search engines and any browser visitor.

</details>

***

### 🔌 Integrate with any app

- [**Make**](https://apify.com/integrations/make) - drop run results into 1,800+ apps.
- [**Zapier**](https://apify.com/integrations/zapier) - trigger automations off completed runs.
- [**Slack**](https://apify.com/integrations/slack) - post run summaries to a channel.
- [**Google Sheets**](https://apify.com/integrations/google-sheets) - sync each run into a spreadsheet.
- [**Webhooks**](https://docs.apify.com/platform/integrations/webhooks) - notify your own services on run finish.
- [**Airbyte**](https://apify.com/integrations/airbyte) - load runs into Snowflake, BigQuery, or Postgres.

***

### 🔗 Recommended Actors

- [**🧩 Chrome Web Store Scraper**](https://apify.com/parseforge/chrome-web-store-scraper) - browser-extension equivalent of the Shopify App Store.
- [**🅱️ Bing Search Scraper**](https://apify.com/parseforge/bing-search-scraper) - check current rank for app pages.
- [**🦆 DuckDuckGo Search Scraper**](https://apify.com/parseforge/duckduckgo-search-scraper) - alternative SERP signal alongside Shopify data.
- [**🕰️ Wayback Machine CDX Scraper**](https://apify.com/parseforge/wayback-cdx-scraper) - audit historical app page versions.
- [**📚 Wikipedia Pageviews Scraper**](https://apify.com/parseforge/wikipedia-pageviews-scraper) - cross-reference brand mentions for app developers.

> 💡 **Pro Tip:** browse the complete [ParseForge collection](https://apify.com/parseforge) for more pre-built scrapers and data tools.

***

**🆘 Need Help?** [**Open our contact form**](https://tally.so/r/BzdKgA) and we'll route the question to the right person.

***

> Shopify and Shopify App Store are registered trademarks of Shopify Inc. This Actor is not affiliated with or endorsed by Shopify. It reads only the public sitemap and JSON-LD every Shopify App Store listing exposes for search engines.

# Actor input Schema

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

Free users: Limited to 10 items (preview). Paid users: Optional, max 1,000,000.

## `keywordFilter` (type: `string`):

Only return apps whose slug contains this substring. Examples: seo, email, shipping, review.

## `appSlugs` (type: `array`):

Specific app slugs to fetch directly (the part after apps.shopify.com/). When provided, sitemap discovery is skipped.

## Actor input object example

```json
{
  "maxItems": 10,
  "keywordFilter": "seo"
}
```

# 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 = {
    "maxItems": 10,
    "keywordFilter": "seo"
};

// Run the Actor and wait for it to finish
const run = await client.actor("parseforge/shopify-app-store-scraper").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 = {
    "maxItems": 10,
    "keywordFilter": "seo",
}

# Run the Actor and wait for it to finish
run = client.actor("parseforge/shopify-app-store-scraper").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 '{
  "maxItems": 10,
  "keywordFilter": "seo"
}' |
apify call parseforge/shopify-app-store-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Shopify App Store Scraper",
        "description": "Pull Shopify apps with name, developer, rating, review count, category, description, screenshots, and icon. Discover via sitemap with 30,000+ apps indexed. Filter by keyword to narrow the results. Export to JSON, CSV, or Excel for ecommerce ecosystem research and competitive analysis.",
        "version": "1.0",
        "x-build-id": "TOJtPeSdtsBEjBISR"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/parseforge~shopify-app-store-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-parseforge-shopify-app-store-scraper",
                "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/parseforge~shopify-app-store-scraper/runs": {
            "post": {
                "operationId": "runs-sync-parseforge-shopify-app-store-scraper",
                "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/parseforge~shopify-app-store-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-parseforge-shopify-app-store-scraper",
                "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",
                "properties": {
                    "maxItems": {
                        "title": "Max Items",
                        "minimum": 1,
                        "maximum": 1000000,
                        "type": "integer",
                        "description": "Free users: Limited to 10 items (preview). Paid users: Optional, max 1,000,000."
                    },
                    "keywordFilter": {
                        "title": "Keyword filter (optional)",
                        "type": "string",
                        "description": "Only return apps whose slug contains this substring. Examples: seo, email, shipping, review."
                    },
                    "appSlugs": {
                        "title": "App slugs (optional)",
                        "type": "array",
                        "description": "Specific app slugs to fetch directly (the part after apps.shopify.com/). When provided, sitemap discovery is skipped.",
                        "items": {
                            "type": "string"
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
