# Shopify App Developer Leads Scraper (`automation-lab/shopify-app-developer-leads-scraper`) Actor

Discover Shopify apps and export deduplicated developer leads with public support emails, app portfolios, pricing, ratings, categories, and resource links.

- **URL**: https://apify.com/automation-lab/shopify-app-developer-leads-scraper.md
- **Developed by:** [Stas Persiianenko](https://apify.com/automation-lab) (community)
- **Categories:** Lead generation, E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

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/docs.md):

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

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.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/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

## Shopify App Developer Leads Scraper

Turn public Shopify App Store profiles into clean, deduplicated developer leads.

This Apify Actor accepts exact app URLs, Shopify category pages, or keyword discovery through Shopify's public English app sitemap. It extracts app portfolios, public support contacts, pricing, ratings, review counts, categories, features, compatibility, and developer resource links without requiring a Shopify account.

Instead of returning many disconnected app rows, the default output groups apps by developer. Sales, partnerships, market research, and investment teams get one CRM-friendly lead row per developer plus a nested `apps` portfolio.

### What does Shopify App Developer Leads Scraper do?

The Actor discovers public Shopify App Store listings and creates developer-level records.

It can:

- 🔗 scrape one or many exact Shopify app URLs;
- 🔎 find app URLs by matching keywords against the public English app sitemap;
- 🗂️ discover visible apps from supplied Shopify category pages;
- 📧 extract the public developer support email exposed by Shopify;
- 🧩 group multiple matched apps from the same developer into one row;
- 💳 collect pricing summaries and structured plans;
- ⭐ collect ratings, review counts, categories, and features;
- 🌐 return privacy, FAQ, documentation, tutorial, pricing, company, and changelog links;
- 🛡️ optionally inspect only the explicitly linked developer website for visible business emails.

The Actor uses lightweight HTTP extraction. No browser, login, private Shopify API, or paid data provider is required.

### Who is it for?

#### Shopify agencies and consultants

Build a partner list of app vendors serving a category, then prioritize companies by app count, ratings, reviews, features, and compatibility.

#### SaaS sales and partnership teams

Find public developer contacts for integration outreach, co-marketing, reseller programs, and technology partnerships.

#### App developers and product teams

Monitor competitor portfolios, pricing models, category placement, feature positioning, and public traction signals.

#### Investors and ecosystem analysts

Create repeatable snapshots of Shopify app developers and their matched product portfolios for market mapping and diligence.

#### Data and RevOps teams

Export deduplicated rows to CSV, Google Sheets, Airtable, HubSpot, Salesforce, or a warehouse without manually reconciling developer names.

### Why use this Shopify app developer lead extractor?

A generic app catalog often produces several rows for the same company. That creates duplicate outreach, inconsistent enrichment, and extra CRM cleanup.

This Actor is developer-first:

- one developer row by default;
- a complete nested app portfolio for every matched developer;
- flat `appNames`, `appHandles`, and `appCount` columns for spreadsheets;
- source URLs and discovery labels for auditability;
- bounded enrichment that does not wander across unrelated domains;
- fail-closed validation for invalid or empty discovery inputs.

You can disable developer deduplication when you need one lead-shaped record per app.

### What Shopify App Store data can I extract?

| Field | Description |
|---|---|
| `developerName` | Public developer or partner name |
| `developerHandle` | Shopify partner page handle when available |
| `developerUrl` | Shopify App Store developer page |
| `supportEmail` | Public support email exposed on the app profile |
| `companyUrl` | Website explicitly linked from the developer section |
| `privacyPolicyUrl` | Public privacy policy link |
| `documentationUrl` | App documentation link |
| `faqUrl` | FAQ link when listed |
| `tutorialUrl` | Tutorial or learning resource link |
| `pricingUrl` | External pricing link when listed |
| `changelogUrl` | Developer changelog link when listed |
| `websiteEmails` | Visible emails from bounded website enrichment |
| `appCount` | Number of matched apps grouped into the lead |
| `appNames` | Flat list of matched app names |
| `appHandles` | Flat list of Shopify app URL handles |
| `apps` | Full nested app details |
| `sourceUrls` | Shopify source pages used |
| `discoverySources` | Direct, category, or sitemap keyword provenance |
| `scrapedAt` | ISO timestamp of extraction |

Each nested app includes its name, handle, URL, description, icon, pricing plans, rating, review count, Built for Shopify status, categories, features, languages, and Works with integrations.

### How to scrape Shopify app developer leads

1. Open the Actor input page.
2. Add direct Shopify app URLs, category URLs, or search terms.
3. Set a small `maxApps` while testing your targeting.
4. Keep **Deduplicate by developer** enabled for prospecting.
5. Enable website enrichment only when you need additional visible business emails.
6. Click **Start**.
7. Open the **Developer leads** dataset view.
8. Export the data or connect it to your workflow.

A first run with one or two direct URLs usually provides the clearest preview of the output.

### Input options

#### Shopify app URLs

Use canonical English detail URLs such as:

```text
https://apps.shopify.com/klaviyo-email-marketing
https://apps.shopify.com/judgeme
````

Tracking parameters are removed during normalization. Non-Shopify domains and category, collection, login, partner, or search paths are not treated as app pages.

#### App handle keywords

Search terms are matched against handles from Shopify's public English app sitemap. Every word must occur in the handle.

For example, `email marketing` can match a handle containing both `email` and `marketing`. This is deterministic URL discovery, not semantic full-text search.

#### Category URLs

Supply public `https://apps.shopify.com/categories/...` pages. The Actor extracts only normalized Shopify app detail links visible in their server-rendered HTML.

#### Limits and deduplication

`maxApps` limits the number of source app pages inspected, not the number of developer rows. If ten apps belong to six developers, deduplication can produce six rows.

### Input example

```json
{
  "startUrls": [
    { "url": "https://apps.shopify.com/klaviyo-email-marketing" },
    { "url": "https://apps.shopify.com/judgeme" }
  ],
  "maxApps": 2,
  "deduplicateByDeveloper": true,
  "enrichDeveloperWebsite": false
}
```

Keyword discovery example:

```json
{
  "searchTerms": ["email marketing"],
  "maxApps": 25,
  "deduplicateByDeveloper": true
}
```

### Output example

```json
{
  "developerName": "Klaviyo",
  "developerHandle": "klaviyo",
  "developerUrl": "https://apps.shopify.com/partners/klaviyo",
  "supportEmail": "support@klaviyo.com",
  "companyUrl": "https://developers.klaviyo.com/en",
  "privacyPolicyUrl": "https://www.klaviyo.com/privacy",
  "pricingUrl": "https://www.klaviyo.com/pricing",
  "websiteEmails": ["support@klaviyo.com"],
  "appCount": 1,
  "appNames": ["Klaviyo: Email Marketing & SMS"],
  "appHandles": ["klaviyo-email-marketing"],
  "apps": [
    {
      "appName": "Klaviyo: Email Marketing & SMS",
      "appHandle": "klaviyo-email-marketing",
      "rating": 4.7,
      "reviewCount": 2889,
      "builtForShopify": false,
      "categories": ["Email marketing", "SMS marketing"]
    }
  ],
  "sourceUrls": ["https://apps.shopify.com/klaviyo-email-marketing"],
  "discoverySources": ["direct URL"],
  "scrapedAt": "2026-07-20T00:00:00.000Z"
}
```

Live values change as developers update their listings.

### Developer deduplication explained

The default deduplication key uses the strongest stable public identifier available:

1. Shopify developer handle;
2. linked company domain;
3. public support email;
4. normalized developer name.

All matched apps for the same key are placed in the `apps` array. The first app's common developer resources become the flat lead fields.

Set `deduplicateByDeveloper` to `false` when app-level separation matters more than CRM cleanliness.

### Optional public website contact enrichment

When `enrichDeveloperWebsite` is enabled, the Actor visits only the external URL labeled **Website** in Shopify's developer section.

The enrichment is intentionally bounded:

- one page per developer;
- no search engine queries;
- no broad site crawl;
- no login or gated content;
- no unrelated guessed domains;
- only visible email-like strings are collected.

The Shopify support email remains available even when enrichment is disabled or the external site cannot be fetched.

### How much does it cost to scrape Shopify app developer leads?

This Actor uses pay-per-event pricing:

- a **$0.005** one-time run start event;
- one `lead` event for each developer row saved.

| Apify tier | Price per developer lead |
|---|---:|
| Free | $0.00020958 |
| Bronze | $0.00018224 |
| Silver | $0.00014215 |
| Gold | $0.00010934 |
| Platinum | $0.000072896 |
| Diamond | $0.000051027 |

Developer deduplication means several source apps can result in one billed lead. Failed or skipped source pages are not billed as leads.

Prices were derived from a representative 10-app sitemap workflow. The exact tiered prices shown on the Apify Actor page are authoritative. Set `maxApps` to a small number for your first test and use Apify's maximum total charge protection when appropriate.

### Tips for better Shopify app prospect lists

- Start with precise direct URLs when validating a target account list.
- Use short handle keywords such as `subscription`, `email marketing`, or `reviews`.
- Remember that keyword matching is based on URL handles, not descriptions.
- Combine direct URLs and discovery routes in one run when needed.
- Keep deduplication enabled before importing into a CRM.
- Use app ratings and review counts as prioritization signals, not guarantees of company size.
- Inspect `discoverySources` to understand why a developer entered the result set.
- Schedule recurring runs to track public listing changes over time.

### Export formats

Apify datasets can be exported as:

- JSON;
- CSV;
- Excel;
- XML;
- RSS;
- JSONL.

CSV exports expose the flat lead columns. Use JSON or JSONL when you need the full nested `apps` portfolios and structured pricing plans.

### Integrations and automation workflows

#### Google Sheets and Airtable

Schedule a run and append fresh developer leads to a research table. Use `developerHandle` as a stable matching key.

#### HubSpot and Salesforce

Map `developerName`, `supportEmail`, and `companyUrl` to company/contact records. Store `appNames` and `sourceUrls` as research context.

#### Make and Zapier

Trigger downstream outreach, enrichment, or review steps when the dataset receives a new developer key.

#### Slack and email alerts

Compare recurring snapshots and notify a channel when a developer launches a matched app or changes public pricing.

#### Data warehouses

Send JSONL output to BigQuery, Snowflake, or PostgreSQL. Keep nested app data for portfolio analysis and flatten it downstream when required.

### Use with the Apify API in JavaScript

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

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/shopify-app-developer-leads-scraper').call({
  searchTerms: ['email marketing'],
  maxApps: 25,
  deduplicateByDeveloper: true,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

### Use with the Apify API in Python

```python
from apify_client import ApifyClient
import os

client = ApifyClient(os.environ['APIFY_TOKEN'])
run = client.actor('automation-lab/shopify-app-developer-leads-scraper').call(run_input={
    'startUrls': [{'url': 'https://apps.shopify.com/klaviyo-email-marketing'}],
    'maxApps': 1,
})
items = client.dataset(run['defaultDatasetId']).list_items().items
print(items)
```

### Use with the Apify API and cURL

```bash
curl -X POST \
  "https://api.apify.com/v2/acts/automation-lab~shopify-app-developer-leads-scraper/runs?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"searchTerms":["email marketing"],"maxApps":10,"deduplicateByDeveloper":true}'
```

Retrieve dataset items after the run succeeds:

```bash
curl "https://api.apify.com/v2/datasets/DATASET_ID/items?format=json&clean=true&token=$APIFY_TOKEN"
```

### Use as an MCP tool

Connect Apify Actors to Claude and other MCP clients through Apify's MCP server.

MCP endpoint:

```text
https://mcp.apify.com?tools=automation-lab/shopify-app-developer-leads-scraper
```

Example prompts:

- “Find Shopify email marketing app developers and return public support contacts.”
- “Extract these five Shopify app profiles and group them by developer.”
- “Build a developer prospect list from this Shopify App Store category URL.”
- “Compare ratings, review counts, and pricing across the matched developer portfolios.”

#### Claude Code setup

```bash
claude mcp add --transport http shopify-app-developer-leads "https://mcp.apify.com?tools=automation-lab/shopify-app-developer-leads-scraper"
```

#### Claude Desktop setup

Add this remote server through an HTTP-capable MCP bridge or the current Desktop remote-server settings:

```json
{
  "mcpServers": {
    "shopify-app-developer-leads": {
      "url": "https://mcp.apify.com?tools=automation-lab/shopify-app-developer-leads-scraper"
    }
  }
}
```

#### Cursor setup

Use the same `mcpServers` JSON in Cursor's MCP settings and authenticate with your Apify account when prompted.

#### VS Code setup

Add the same HTTP endpoint through VS Code's MCP server configuration, then select the `automation-lab/shopify-app-developer-leads-scraper` tool.

### Scheduling and monitoring

Use Apify schedules for weekly or monthly ecosystem refreshes.

A practical monitoring workflow is:

1. run the same input on a schedule;
2. export results to a named table or warehouse;
3. match records by `developerHandle`;
4. compare app handles, ratings, review counts, and pricing;
5. alert only on meaningful changes.

The Actor returns a current public snapshot. It does not maintain historical state inside the run.

### Data quality and limitations

- Shopify controls the source HTML and can change its markup.
- Public support emails and external resources vary by developer.
- Sitemap keyword discovery matches handles, not descriptions or semantic meaning.
- Category pages return only app links currently visible in their SSR HTML.
- Built for Shopify status is detected from public page text.
- External developer websites may block requests or contain no visible email.
- Ratings, reviews, prices, and app descriptions can change after extraction.
- The Actor does not scrape app reviews in v1.
- The Actor does not infer private personal contact details.

Total extraction failure causes a failed run rather than an empty successful dataset.

### Proxy behavior

Direct HTTP is the default because Shopify's public app pages and sitemap are anonymously accessible.

You can provide `proxyConfiguration`. A configured proxy is used as fallback when Shopify returns HTTP 403 or 429. This avoids unnecessary proxy bandwidth on normal runs.

For most inputs, start without a proxy. Add one only when your location or repeated workload receives blocking responses.

### Is scraping Shopify App Store data legal?

This Actor extracts information publicly displayed on Shopify App Store pages.

You are responsible for:

- complying with applicable laws and Shopify's terms;
- choosing a reasonable request volume;
- respecting privacy, marketing, and anti-spam rules;
- having a lawful basis for storing and using contact data;
- honoring opt-outs and suppression lists;
- not using the output for harassment or deceptive outreach.

Public availability does not remove your compliance obligations. This documentation is not legal advice.

### Troubleshooting

#### The run says no Shopify app URLs matched

Check that direct URLs use `apps.shopify.com` and point to a one-segment app detail path. For keyword discovery, remember every word must occur in the URL handle.

#### I received fewer rows than `maxApps`

`maxApps` limits app pages. With deduplication enabled, several apps from one developer become one output row. Check `appCount` and the nested `apps` array.

#### A support email or resource link is missing

The developer may not publish that field on the current Shopify profile. The Actor does not guess private contacts.

#### Website enrichment returned no new emails

The linked page may render contacts with JavaScript, protect them, or contain none. The base Shopify lead is still retained.

#### The source returned 403 or 429

Reduce request volume and configure Apify Proxy. The Actor retries transient errors and can use the configured proxy as fallback.

### Frequently asked questions

#### Does this Actor require a Shopify login?

No. It uses public app pages and the public English app sitemap.

#### Can it discover every Shopify app?

The public sitemap exposes a large catalog, but `maxApps` intentionally bounds each run. Use focused keywords or direct lists and split larger workflows responsibly.

#### Does it scrape reviews?

No. It captures the aggregate rating and review count shown on the app profile. Review text is a separate entity and outside this developer-lead product.

#### Can I get one row per app?

Yes. Set `deduplicateByDeveloper` to `false`.

#### Does enrichment crawl the whole company website?

No. It fetches one explicitly linked public website page per developer.

#### Can I use the results in a CRM?

Yes. The flat developer fields are designed for exports, while nested app details preserve research context.

### Related Automation Lab actors

Explore related tools from Automation Lab when you need a different Shopify workflow:

- [Shopify Store Scraper](https://apify.com/automation-lab/shopify-store-scraper) for merchant storefront data;
- [Shopify Product Scraper](https://apify.com/automation-lab/shopify-product-scraper) for store product catalogs;
- [Website Email Extractor](https://apify.com/automation-lab/website-email-extractor) for broader authorized domain contact extraction.

Choose this Actor when the target is the **Shopify App Store developer ecosystem**, not merchant stores or product listings.

### Support

For reproducible support, include:

- the run URL or run ID;
- a redacted copy of the input;
- one example Shopify app URL;
- the expected field or developer;
- the relevant log message.

Do not post private tokens or confidential CRM data in public support requests.

# Actor input Schema

## `startUrls` (type: `array`):

Direct English Shopify App Store detail URLs. You can combine these with category URLs and keyword discovery.

## `searchTerms` (type: `array`):

Discover matching apps from Shopify's public English app sitemap. Every word must occur in the app URL handle, for example ‘email marketing’.

## `categoryUrls` (type: `array`):

Public apps.shopify.com/categories/... pages from which app detail links will be discovered.

## `maxApps` (type: `integer`):

Upper limit across all discovery routes. Developer deduplication can produce fewer lead rows than this number.

## `deduplicateByDeveloper` (type: `boolean`):

Group multiple apps from the same Shopify developer into one lead row with an apps array.

## `enrichDeveloperWebsite` (type: `boolean`):

Optionally fetch only the explicitly linked public developer website and collect visible business email addresses. One page per developer; no broad crawling.

## `proxyConfiguration` (type: `object`):

Optional Apify Proxy settings. Direct HTTP is used by default; a configured proxy is used as fallback on 403/429 responses.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://apps.shopify.com/klaviyo-email-marketing"
    },
    {
      "url": "https://apps.shopify.com/judgeme"
    }
  ],
  "searchTerms": [
    "email marketing"
  ],
  "maxApps": 10,
  "deduplicateByDeveloper": true,
  "enrichDeveloperWebsite": false
}
```

# Actor output Schema

## `overview` (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 = {
    "startUrls": [
        {
            "url": "https://apps.shopify.com/klaviyo-email-marketing"
        },
        {
            "url": "https://apps.shopify.com/judgeme"
        }
    ],
    "searchTerms": [
        "email marketing"
    ],
    "maxApps": 10,
    "deduplicateByDeveloper": true,
    "enrichDeveloperWebsite": false
};

// Run the Actor and wait for it to finish
const run = await client.actor("automation-lab/shopify-app-developer-leads-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 = {
    "startUrls": [
        { "url": "https://apps.shopify.com/klaviyo-email-marketing" },
        { "url": "https://apps.shopify.com/judgeme" },
    ],
    "searchTerms": ["email marketing"],
    "maxApps": 10,
    "deduplicateByDeveloper": True,
    "enrichDeveloperWebsite": False,
}

# Run the Actor and wait for it to finish
run = client.actor("automation-lab/shopify-app-developer-leads-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 '{
  "startUrls": [
    {
      "url": "https://apps.shopify.com/klaviyo-email-marketing"
    },
    {
      "url": "https://apps.shopify.com/judgeme"
    }
  ],
  "searchTerms": [
    "email marketing"
  ],
  "maxApps": 10,
  "deduplicateByDeveloper": true,
  "enrichDeveloperWebsite": false
}' |
apify call automation-lab/shopify-app-developer-leads-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Shopify App Developer Leads Scraper",
        "description": "Discover Shopify apps and export deduplicated developer leads with public support emails, app portfolios, pricing, ratings, categories, and resource links.",
        "version": "0.1",
        "x-build-id": "HJCBf6P9ws5KI5r1Z"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/automation-lab~shopify-app-developer-leads-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-automation-lab-shopify-app-developer-leads-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/automation-lab~shopify-app-developer-leads-scraper/runs": {
            "post": {
                "operationId": "runs-sync-automation-lab-shopify-app-developer-leads-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/automation-lab~shopify-app-developer-leads-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-automation-lab-shopify-app-developer-leads-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": {
                    "startUrls": {
                        "title": "🔗 Shopify app URLs",
                        "type": "array",
                        "description": "Direct English Shopify App Store detail URLs. You can combine these with category URLs and keyword discovery.",
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "searchTerms": {
                        "title": "🔎 App handle keywords",
                        "type": "array",
                        "description": "Discover matching apps from Shopify's public English app sitemap. Every word must occur in the app URL handle, for example ‘email marketing’.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "categoryUrls": {
                        "title": "🗂️ Shopify category URLs",
                        "type": "array",
                        "description": "Public apps.shopify.com/categories/... pages from which app detail links will be discovered.",
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "maxApps": {
                        "title": "Maximum apps to inspect",
                        "minimum": 1,
                        "maximum": 500,
                        "type": "integer",
                        "description": "Upper limit across all discovery routes. Developer deduplication can produce fewer lead rows than this number.",
                        "default": 10
                    },
                    "deduplicateByDeveloper": {
                        "title": "Deduplicate by developer",
                        "type": "boolean",
                        "description": "Group multiple apps from the same Shopify developer into one lead row with an apps array.",
                        "default": true
                    },
                    "enrichDeveloperWebsite": {
                        "title": "Inspect linked developer website",
                        "type": "boolean",
                        "description": "Optionally fetch only the explicitly linked public developer website and collect visible business email addresses. One page per developer; no broad crawling.",
                        "default": false
                    },
                    "proxyConfiguration": {
                        "title": "🌐 Proxy configuration",
                        "type": "object",
                        "description": "Optional Apify Proxy settings. Direct HTTP is used by default; a configured proxy is used as fallback on 403/429 responses."
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
