# Microsoft AppSource Email Scraper (`neuro-scraper/microsoft-appsource-email-scraper`) Actor

Microsoft AppSource Email Scraper SD - Microsoft AppSource Email Scraper is a lead generation tool that extracts leads with public contact emails, account names and profile URLs from Microsoft AppSource results by keyword, location and email domain - Microsoft AppSource email extractor.

- **URL**: https://apify.com/neuro-scraper/microsoft-appsource-email-scraper.md
- **Developed by:** [Neuro Scraper](https://apify.com/neuro-scraper) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.49 / 1,000 results

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

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

## What's an Apify Actor?

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

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

## How to integrate an Actor?

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

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

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

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

# README

### Microsoft AppSource Email Scraper — publisher contacts from the Microsoft business app marketplace

The **Microsoft AppSource Email Scraper** collects publicly indexed contact emails for software publishers listed on Microsoft AppSource and Azure Marketplace.
It turns a handful of keywords into a clean, deduplicated dataset of publisher emails, account names and listing URLs.
Everything it returns already sits in Google's public index — nothing is unlocked, logged into, or pulled from a private API.

AppSource is a B2B catalogue, not a consumer store.
Publishers put support, sales and partnership addresses on their listings on purpose, because that is how Microsoft customers and resellers are supposed to reach them.
That makes the Microsoft AppSource Email Scraper a natural fit for ISV partner sourcing, integration partnerships and channel research.

If you have ever tried to build a Microsoft partner email list by hand, you know the problem: thousands of offers, no export button, and contact details scattered across listing pages.
The Microsoft AppSource Email Scraper automates the search side of that job so you can spend your time on the outreach instead.
Run it from the Apify console, from the API, or on a schedule, and the Microsoft AppSource Email Scraper writes straight into an Apify dataset.

#### What the Microsoft AppSource Email Scraper actually does

The Microsoft AppSource Email Scraper is a Google SERP harvester with a hard domain filter.
It builds `site:appsource.microsoft.com` and `site:azuremarketplace.microsoft.com` queries around your keywords, reads the result pages, and pulls email addresses out of the titles and snippets.

It does **not** log into Microsoft AppSource, use the AppSource or Azure Marketplace API, or open the marketplace website in a browser.
There is no JavaScript rendering, no authentication and no cookies — only publicly indexed search results.

#### Who this Microsoft AppSource email extractor is built for

Partner managers use the Microsoft AppSource Email Scraper to build an ISV recruitment pipeline for a Microsoft 365, Dynamics 365 or Azure ecosystem play.
Integration teams use it to find AppSource publisher contacts before proposing a technical partnership.

Agencies and consultancies source business app vendors for client implementations.
Analysts point the Microsoft AppSource Email Scraper at a category to run competitive and market research across the Microsoft business app marketplace.

Teams chasing the wider Microsoft developer ecosystem often pair it with the [GitHub Email Scraper](https://apify.com/leads-scraper/github-email-scraper) for open-source maintainers, or the [Zapier App Directory Email Scraper](https://apify.com/leads-scraper/zapier-app-directory-email-scraper) for automation vendors who integrate with the same stack.

### Key features of the Microsoft AppSource Email Scraper

Everything below is behaviour the Microsoft AppSource Email Scraper actually implements — no roadmap items, no marketing filler.

| Feature | What it means in practice |
|---|---|
| Google `site:` targeting | Every query is scoped to `appsource.microsoft.com` and `azuremarketplace.microsoft.com`, so results stay inside the Microsoft marketplace |
| Query expansion | Each keyword × domain pair is searched as a base query, a quoted query, an `intitle:` query, and one variant per query modifier |
| Domain-filtered extraction | Only emails ending in the domains you list are kept, so you control the shape of the output |
| Global deduplication | Every email is unique across the whole run, no matter how many queries surfaced it |
| Obfuscation handling | Understands `name [at] domain [dot] com`, `name (at) domain`, `name @ domain.com`, `domain .com`, zero-width characters and the full-width `＠` |
| Junk filter | Rejects placeholders such as `email@`, `yourname@`, `test@`, `xxx@` and single-character locals |
| Boundary-correct matching | `@gmail.com` will not match inside `@gmail.company` or `@gmail.com.br` |
| Soft-wrap repair | Drops a hit that is only the tail end of another email in the same result block |
| Structural parsing | Locates the `<h3>` title and the smallest surrounding block instead of relying on Google's CSS class names |
| Whole-page fallback | If Google's markup changes, the run degrades to "emails without account details" rather than "no emails" |
| Block detection | CAPTCHA, "unusual traffic" and consent pages are detected and retried, not counted as empty |
| Retries and backoff | Up to 3 attempts per page with exponential backoff and a fresh proxy session per request |
| Requeue pass | Blocked or failed queries are re-queued once at the end of the run |
| Resumable state | Progress is stored in the key-value store, keyed by a hash of the input, and saved on `PERSIST_STATE`, `MIGRATING` and `ABORTING` |
| Concurrency control | An `asyncio` worker pool with a shared stop signal on `maxEmails` |
| Run summary | Logs pages fetched, blocked pages, retries and emails per page |

### How the Microsoft AppSource Email Scraper works

The pipeline is short and deliberately transparent.

1. The Microsoft AppSource Email Scraper reads your input: keywords, location, email domains and limits.
2. It builds Google queries with the `site:` operator against the AppSource and Azure Marketplace domains, for example `site:appsource.microsoft.com microsoft partner "@gmail.com"`.
3. It fetches Google result pages through the Apify **GOOGLE_SERP** proxy using async `aiohttp`.
4. It parses each result block structurally, finding the `<h3>` title and the smallest block around it.
5. It extracts emails from the block text with a domain-filtered regex.
6. It deduplicates globally and pushes each lead to the Apify dataset immediately.

Because results are pushed as they are found, you can watch the dataset fill up while the Microsoft AppSource Email Scraper is still working.
If the run is migrated or aborted, resumable state means the next start does not begin from zero.

#### Why query expansion matters on a marketplace domain

Google caps any single query at roughly 300 results.
A marketplace like AppSource has far more listings than that, so one query can never see the whole catalogue.

Query expansion is how the Microsoft AppSource Email Scraper works around the cap.
It rewrites each keyword into several phrasings and combines it with each query modifier, so many small queries collectively reach further than one broad query ever could.

### Input settings for the Microsoft AppSource Email Scraper

Nine fields control the whole run. Only `keywords` is required; the Microsoft AppSource Email Scraper ships with sensible defaults for everything else.

| Field | Type | Default | Meaning |
|---|---|---|---|
| `keywords` | array (required) | `["microsoft partner", "business app"]` | Search terms describing the publishers you want (niche, job title, industry) |
| `location` | string | `""` | Optional location phrase added to every query |
| `customDomains` | array | `["@gmail.com","@yahoo.com"]` | Only emails on these domains are kept; the leading `@` is optional |
| `maxEmails` | integer 1–10000 | `20` | Stop once this many unique emails have been collected |
| `countryCode` | string | `""` | Two-letter country code for the search proxy (US, GB, DE...) |
| `expandQueries` | boolean | `true` | Search each keyword × domain pair in several phrasings |
| `queryModifiers` | array | `["email","contact","support","developer","publisher"]` | Extra words combined with each keyword when expansion is on |
| `maxPagesPerQuery` | integer 1–50 | `30` | Page cap per query |
| `maxConcurrency` | integer 1–20 | `5` | How many queries run in parallel |

#### Example input for a Microsoft partner email list

```json
{
  "keywords": ["microsoft partner", "dynamics 365 app", "power platform isv"],
  "location": "United Kingdom",
  "customDomains": ["@gmail.com", "@outlook.com"],
  "maxEmails": 400,
  "countryCode": "GB",
  "expandQueries": true,
  "queryModifiers": ["email", "contact", "support", "developer", "publisher"],
  "maxPagesPerQuery": 30,
  "maxConcurrency": 5
}
```

Start narrow. Two or three precise keywords with a low `maxEmails` will tell you very quickly whether a niche is well indexed before you commit to a large run.

### Output fields from the Microsoft AppSource Email Scraper

Every dataset item the Microsoft AppSource Email Scraper produces carries all fourteen fields below.
There are no optional or conditional keys — only conditional values.

| Field | Meaning |
|---|---|
| `network` | Platform name |
| `keyword` | The keyword that produced the lead |
| `query` | The exact Google query used |
| `title` | Raw result title |
| `accountName` | Account label Google prints |
| `fullName` | Display name parsed from a profile-style title; empty for non-profile results |
| `username` | URL-safe handle when the platform exposes one; otherwise `null` |
| `profileUrl` | Canonical listing URL when a handle is known; otherwise empty |
| `url` | Direct platform link when exposed, else the profile URL |
| `description` | Bio or snippet text, cleaned of labels and counters |
| `email` | Lower-cased email address |
| `emailDomain` | The matched domain (e.g. `@gmail.com`) |
| `possiblyTruncated` | `true` when Google's snippet ellipsis touched the email — verify before sending |
| `foundAt` | ISO 8601 UTC timestamp |

#### Example output row

```json
{
  "network": "Microsoft AppSource",
  "keyword": "dynamics 365 app",
  "query": "site:appsource.microsoft.com dynamics 365 app contact \"@gmail.com\"",
  "title": "Northwind Field Service - Microsoft AppSource",
  "accountName": "Northwind Solutions",
  "fullName": "Northwind Solutions",
  "username": "northwindsolutions.field-service",
  "profileUrl": "https://appsource.microsoft.com/en-us/product/northwindsolutions.field-service",
  "url": "https://appsource.microsoft.com/en-us/product/northwindsolutions.field-service",
  "description": "Field service scheduling for Dynamics 365. Partnership enquiries: partners.northwind@gmail.com",
  "email": "partners.northwind@gmail.com",
  "emailDomain": "@gmail.com",
  "possiblyTruncated": false,
  "foundAt": "2025-04-18T09:41:07Z"
}
```

Results from the Microsoft AppSource Email Scraper land in an Apify dataset, so you can export to CSV, JSON, Excel or XML, or pull them through the Apify API into your CRM.

### Use cases for the Microsoft AppSource Email Scraper

Because AppSource is a B2B catalogue, the Microsoft AppSource Email Scraper is aimed at partnership and vendor work rather than consumer prospecting.

| Use case | How the Microsoft AppSource Email Scraper helps |
|---|---|
| ISV partner recruitment | Build a shortlist of AppSource publisher contacts in a product category you want to co-sell into |
| Integration partnerships | Find business app publishers whose offers complement yours and reach the person who handles partnerships |
| Agency and vendor sourcing | Assemble a Microsoft partner email list for an implementation project or an RFP shortlist |
| Competitive research | Map which vendors publish in a category and how they present themselves on the marketplace |
| Channel and reseller programmes | Identify Azure Marketplace publishers who might join a reseller or co-sell motion |
| Market sizing | Sample listings by keyword to understand how crowded a Microsoft business app niche really is |
| Event and community outreach | Source speakers, sponsors or panellists from a specific AppSource segment |
| Data enrichment | Match scraped publisher contacts against an existing account list to fill contact gaps |

#### Practical example: sourcing Dynamics 365 ISVs

Set `keywords` to `["dynamics 365 app", "dynamics 365 isv", "business central app"]`.
Keep `expandQueries` on so each keyword is combined with `email`, `contact`, `support`, `developer` and `publisher`.

Add `@gmail.com` and `@outlook.com` to `customDomains` if you want independent publishers rather than large corporates.
Raise `maxEmails` gradually once the first small Microsoft AppSource Email Scraper run shows the niche is productive.

### Tips for getting more from the Microsoft AppSource Email Scraper

Keep keywords specific to a product category rather than generic.
"power bi visual" will out-perform "software" every time on a Microsoft AppSource email extractor run.

Use `customDomains` as a segmentation control, not just a filter.
Free-mail domains skew towards independent publishers; corporate domains skew towards established vendors.

Set `countryCode` when you need a regional slice of the Microsoft partner ecosystem.
Combine it with `location` for a tighter geographic focus.

Leave `maxConcurrency` near the default unless you have a reason to change it.
Higher concurrency does not make the Microsoft AppSource Email Scraper find more indexed emails; it only spends your proxy budget faster.

Run the Microsoft AppSource Email Scraper on a schedule with the same input.
Google's index changes, so a monthly run keeps a Microsoft partner email list fresh without redoing the research.

Widen coverage sideways rather than deeper.
Running the [Docker Hub Email Scraper](https://apify.com/neuro-scraper/docker-hub-email-scraper) or the [Slack App Directory Email Scraper](https://apify.com/leads-scraper/slack-app-directory-email-scraper) with the same keywords often surfaces the same vendors under a different public identity.

### Limitations of the Microsoft AppSource Email Scraper

These are real and you should plan around them.

- **Publicly indexed emails only.** If a publisher's address is not visible in Google's index, the Microsoft AppSource Email Scraper cannot find it. Contact forms and images are invisible to it.
- **Google's ~300-result cap.** A single query returns roughly 300 results at most. Query expansion exists precisely because of this ceiling.
- **`possiblyTruncated`.** When Google's snippet ellipsis touches an email, the field is set to `true`. Verify those rows before sending anything.
- **`username` and `profileUrl` are conditional.** They are only populated when Google's result exposes a handle. Some rows will have `accountName` and `fullName` but an empty `username` and `profileUrl`. That is a Google limitation, not a bug.
- **Apify GOOGLE_SERP proxy required.** The Microsoft AppSource Email Scraper cannot run without Apify proxy credentials.
- **Free-plan cap.** Free Apify plans are capped at 100 emails per run; paid plans are uncapped.
- **No guaranteed volume.** Results vary with keywords, domains and location, and no volume is guaranteed.

In our own measured testing, a small Microsoft AppSource Email Scraper run returned 7 usable rows out of 7 targeted results — a strong hit rate for a B2B marketplace, but not a promise about your keywords.

### Related Actors

The Microsoft AppSource Email Scraper is part of a family of Developer & Technology email tools that all share the same engine and differ only in the platform they target.

| Actor | What it collects |
|---|---|
| [Microsoft AppSource Email and Phone Number Scraper](https://apify.com/neuro-scraper/microsoft-appsource-email-and-phone-number-scraper) | Emails and phone numbers from Microsoft AppSource |
| [Microsoft AppSource Phone Number Scraper](https://apify.com/neuro-scraper/microsoft-appsource-phone-number-scraper) | Public phone numbers from Microsoft AppSource |
| [App Store Email Scraper](https://apify.com/leads-scraper/app-store-email-scraper) | Public contact emails from App Store |
| [Atlassian Marketplace Email Scraper](https://apify.com/leads-scraper/atlassian-marketplace-email-scraper) | Public contact emails from Atlassian Marketplace |
| [Bitbucket Email Scraper](https://apify.com/neuro-scraper/bitbucket-email-scraper) | Public contact emails from Bitbucket |
| [Chrome Web Store Email Scraper](https://apify.com/leads-scraper/chrome-web-store-email-scraper) | Public contact emails from Chrome Web Store |
| [CodePen Email Scraper](https://apify.com/neuro-scraper/codepen-email-scraper) | Public contact emails from CodePen |
| [Confluence Email Scraper](https://apify.com/neuro-scraper/confluence-email-scraper) | Public contact emails from Confluence |
| [Dev.to Email Scraper](https://apify.com/neuro-scraper/dev-to-email-scraper) | Public contact emails from DEV Community |
| [Docker Hub Email Scraper](https://apify.com/neuro-scraper/docker-hub-email-scraper) | Public contact emails from Docker Hub |
| [Figma Community Email Scraper](https://apify.com/neuro-scraper/figma-community-email-scraper) | Public contact emails from Figma Community |
| [Firefox Add-ons Email Scraper](https://apify.com/neuro-scraper/firefox-add-ons-email-scraper) | Public contact emails from Firefox Add-ons |
| [GitHub Email Scraper](https://apify.com/leads-scraper/github-email-scraper) | Public contact emails from GitHub |
| [GitLab Email Scraper](https://apify.com/neuro-scraper/gitlab-email-scraper) | Public contact emails from GitLab |
| [Google Play Email Scraper](https://apify.com/leads-scraper/google-play-email-scraper) | Public contact emails from Google Play |
| [Hashnode Email Scraper](https://apify.com/neuro-scraper/hashnode-email-scraper) | Public contact emails from Hashnode |
| [HubSpot Marketplace Email Scraper](https://apify.com/leads-scraper/hubspot-marketplace-email-scraper) | Public contact emails from HubSpot Marketplace |
| [Hugging Face Email Scraper](https://apify.com/leads-scraper/hugging-face-email-scraper) | Public contact emails from Hugging Face |
| [Jira Email Scraper](https://apify.com/neuro-scraper/jira-email-scraper) | Public contact emails from Jira |
| [Maven Central Email Scraper](https://apify.com/neuro-scraper/maven-central-email-scraper) | Public contact emails from Maven Central |
| [Salesforce AppExchange Email Scraper](https://apify.com/leads-scraper/salesforce-appexchange-email-scraper) | Public contact emails from Salesforce AppExchange |
| [Shopify App Store Email Scraper](https://apify.com/leads-scraper/shopify-app-store-email-scraper) | Public contact emails from Shopify App Store |
| [Slack App Directory Email Scraper](https://apify.com/leads-scraper/slack-app-directory-email-scraper) | Public contact emails from Slack App Directory |
| [SourceForge Email Scraper](https://apify.com/leads-scraper/sourceforge-email-scraper) | Public contact emails from SourceForge |
| [Stack Overflow Email Scraper](https://apify.com/leads-scraper/stack-overflow-email-scraper) | Public contact emails from Stack Overflow |
| [Unity Asset Store Email Scraper](https://apify.com/leads-scraper/unity-asset-store-email-scraper) | Public contact emails from Unity Asset Store |
| [Unreal Engine Marketplace Email Scraper](https://apify.com/leads-scraper/unreal-engine-marketplace-email-scraper) | Public contact emails from Unreal Engine Marketplace |
| [WordPress Plugin Directory Email Scraper](https://apify.com/neuro-scraper/wordpress-plugin-directory-email-scraper) | Public contact emails from WordPress Plugin Directory |
| [WordPress Theme Directory Email Scraper](https://apify.com/leads-scraper/wordpress-theme-directory-email-scraper) | Public contact emails from WordPress Theme Directory |
| [Zapier App Directory Email Scraper](https://apify.com/leads-scraper/zapier-app-directory-email-scraper) | Public contact emails from Zapier App Directory |
| [App Store Email and Phone Number Scraper](https://apify.com/leads-scraper/app-store-email-and-phone-number-scraper) | Emails and phone numbers from App Store |
| [Atlassian Marketplace Email and Phone Number Scraper](https://apify.com/neuro-scraper/atlassian-marketplace-email-and-phone-number-scraper) | Emails and phone numbers from Atlassian Marketplace |
| [Bitbucket Email and Phone Number Scraper](https://apify.com/neuro-scraper/bitbucket-email-and-phone-number-scraper) | Emails and phone numbers from Bitbucket |
| [Chrome Web Store Email and Phone Number Scraper](https://apify.com/neuro-scraper/chrome-web-store-email-and-phone-number-scraper) | Emails and phone numbers from Chrome Web Store |
| [CodePen Email and Phone Number Scraper](https://apify.com/neuro-scraper/codepen-email-and-phone-number-scraper) | Emails and phone numbers from CodePen |
| [Confluence Email and Phone Number Scraper](https://apify.com/neuro-scraper/confluence-email-and-phone-number-scraper) | Emails and phone numbers from Confluence |
| [DEV Community Email and Phone Number Scraper](https://apify.com/neuro-scraper/dev-to-email-and-phone-number-scraper) | Emails and phone numbers from DEV Community |
| [Docker Hub Email and Phone Number Scraper](https://apify.com/neuro-scraper/docker-hub-email-and-phone-number-scraper) | Emails and phone numbers from Docker Hub |
| [Figma Community Email and Phone Number Scraper](https://apify.com/neuro-scraper/figma-community-email-and-phone-number-scraper) | Emails and phone numbers from Figma Community |
| [Firefox Add-ons Email and Phone Number Scraper](https://apify.com/neuro-scraper/firefox-add-ons-email-and-phone-number-scraper) | Emails and phone numbers from Firefox Add-ons |
| [GitHub Email and Phone Number Scraper](https://apify.com/leads-scraper/github-email-and-phone-number-scraper) | Emails and phone numbers from GitHub |
| [GitLab Email and Phone Number Scraper](https://apify.com/neuro-scraper/gitlab-email-and-phone-number-scraper) | Emails and phone numbers from GitLab |

### FAQ about the Microsoft AppSource Email Scraper

#### Does the Microsoft AppSource Email Scraper use the Microsoft AppSource API?

No. It does not use any Microsoft API, does not log in, and does not open the marketplace website. All data comes from publicly indexed Google search results.

#### Is this Actor affiliated with or endorsed by Microsoft?

No. It is an independent tool that reads public Google search results. It is not officially supported by, affiliated with or endorsed by Microsoft.

#### Why does the Microsoft AppSource Email Scraper leave `username` and `profileUrl` empty on some rows?

Those fields are only filled when Google's result exposes a usable handle. When Google shows only a display name, you still get `accountName` and `fullName`, but no handle. This is a Google limitation, not a bug.

#### What does `possiblyTruncated: true` mean?

Google cut the snippet with an ellipsis right where the email sits, so the address may be incomplete. Treat those rows as leads to verify rather than addresses to mail.

#### How many emails can one Microsoft AppSource Email Scraper run return?

Free Apify plans stop at 100 emails per run. Paid plans are uncapped and bounded by your `maxEmails` value, which ranges from 1 to 10000.

#### Do I need a proxy?

Yes. The Microsoft AppSource Email Scraper requires the Apify GOOGLE_SERP proxy and cannot run without Apify proxy credentials.

#### Why did I get fewer emails than `maxEmails`?

Google caps a single query at roughly 300 results, and only some listings expose an email in the index. Broadening `keywords` and `customDomains` usually helps the Microsoft AppSource Email Scraper more than raising `maxPagesPerQuery`.

#### Should I turn `expandQueries` off?

Usually not. Expansion is the main defence against Google's per-query result cap. Turn it off only when you want a fast, narrow probe of a single phrasing.

#### Does the Microsoft AppSource Email Scraper cover Azure Marketplace as well as AppSource?

Yes. Queries are scoped to both `appsource.microsoft.com` and `azuremarketplace.microsoft.com`, so both catalogues are in scope.

#### Can I restrict results to a country?

Set `countryCode` to a two-letter code for the search proxy, and optionally add a `location` phrase that the Microsoft AppSource Email Scraper appends to every query.

#### Can I resume an interrupted run?

Yes. The Microsoft AppSource Email Scraper stores progress in the key-value store keyed by a hash of your input, and saves on Apify's `PERSIST_STATE`, `MIGRATING` and `ABORTING` events.

#### Is the data compliant to use?

The Actor only collects addresses that are already public in Google's index. You are responsible for how you use them, including GDPR, CAN-SPAM and any other applicable rules in your market.

### Leave a review

If the Microsoft AppSource Email Scraper saved you time, please leave a star rating and a short
review on the Actor page.

Reviews are how other buyers judge whether a tool works, and they tell us which features to
build next.

If something did not work, email <neurodata.apify@gmail.com>
instead - bugs get fixed faster than they get complained about.

### Support

Questions, feature requests or a custom build? Email **neurodata.apify@gmail.com**.

# Actor input Schema

## `keywords` (type: `array`):

Search terms describing the Microsoft AppSource accounts you want (niche, job title, industry).

## `location` (type: `string`):

Optional location phrase added to every query (e.g. "New York").

## `customDomains` (type: `array`):

Only emails ending with one of these domains are collected. With or without the leading @. Each domain is searched separately, so more domains means more results but a longer run - remove some for a faster, narrower search, or add your own (e.g. @company.com).

## `maxEmails` (type: `integer`):

Stop once this many unique emails have been collected.

## `countryCode` (type: `string`):

Two-letter country code for the search proxy (e.g. US, GB, DE). Empty for any.

## `expandQueries` (type: `boolean`):

Search each keyword x domain pair with several phrasings. Recommended - Google caps a single query at ~300 results.

## `queryModifiers` (type: `array`):

Extra words combined with each keyword when Expand queries is on. Tuned for Microsoft AppSource.

## `maxPagesPerQuery` (type: `integer`):

Google rarely returns more than ~30 pages for one query.

## `maxConcurrency` (type: `integer`):

How many queries run in parallel.

## Actor input object example

```json
{
  "keywords": [
    "microsoft partner",
    "business app"
  ],
  "location": "",
  "customDomains": [
    "@gmail.com",
    "@yahoo.com"
  ],
  "maxEmails": 20,
  "countryCode": "",
  "expandQueries": true,
  "queryModifiers": [
    "email",
    "contact",
    "support",
    "developer",
    "publisher"
  ],
  "maxPagesPerQuery": 30,
  "maxConcurrency": 5
}
```

# Actor output Schema

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

Records produced by Microsoft AppSource Email Scraper, stored in the run's default dataset.

# 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 = {
    "keywords": [
        "microsoft partner",
        "business app"
    ],
    "location": "",
    "customDomains": [
        "@gmail.com",
        "@yahoo.com"
    ],
    "countryCode": "",
    "queryModifiers": [
        "email",
        "contact",
        "support",
        "developer",
        "publisher"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("neuro-scraper/microsoft-appsource-email-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 = {
    "keywords": [
        "microsoft partner",
        "business app",
    ],
    "location": "",
    "customDomains": [
        "@gmail.com",
        "@yahoo.com",
    ],
    "countryCode": "",
    "queryModifiers": [
        "email",
        "contact",
        "support",
        "developer",
        "publisher",
    ],
}

# Run the Actor and wait for it to finish
run = client.actor("neuro-scraper/microsoft-appsource-email-scraper").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "keywords": [
    "microsoft partner",
    "business app"
  ],
  "location": "",
  "customDomains": [
    "@gmail.com",
    "@yahoo.com"
  ],
  "countryCode": "",
  "queryModifiers": [
    "email",
    "contact",
    "support",
    "developer",
    "publisher"
  ]
}' |
apify call neuro-scraper/microsoft-appsource-email-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,neuro-scraper/microsoft-appsource-email-scraper"
        }
    }
}
```

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

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/qZL5OQclOc2Aq6qO9/builds/8k2cUfwR1Ipc5Gpm6/openapi.json
