# Docker Hub Email Scraper (`neuro-scraper/docker-hub-email-scraper`) Actor

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

- **URL**: https://apify.com/neuro-scraper/docker-hub-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

### Docker Hub Email Scraper — public contact emails for container image publishers

The **Docker Hub Email Scraper** turns the publicly indexed corner of the world's largest container registry into a clean, deduplicated contact list. It finds image maintainers, publisher organisations and DevOps teams who have printed an email address on a page Google has already crawled.

Container publishing is a public act. Maintainers put a support address in the repository overview, organisations list a contact on their publisher page, and image documentation frequently names the person who answers issues. The Docker Hub Email Scraper reads exactly that published text.

The Docker Hub Email Scraper collects exactly those addresses — nothing hidden, nothing private, nothing behind a login. In our own measured runs this Actor recovered account identity on 9 out of 9 rows, which makes it one of the strongest sources in the whole Developer & Technology family.

#### What the Docker Hub Email Scraper actually does

The Actor builds Google searches using the `site:` operator against `hub.docker.com` and `docker.com`, fetches the result pages through the Apify **GOOGLE_SERP** proxy, and extracts email addresses from the visible title and snippet text of each result block.

It does **not** log into Docker Hub, call the Docker Hub API, or open the Docker Hub website. There is no browser, no JavaScript rendering, no authentication and no cookies anywhere in the pipeline.

Everything the Docker Hub Email Scraper returns already sits in Google's public index. That is a deliberate design choice — it keeps the Docker Hub Email Scraper light, cheap to run and honest about its source.

#### Why a container registry is a good prospecting surface

Docker Hub publishers are self-selecting technical buyers. Someone maintaining a public image is running infrastructure, cares about supply-chain security, and is a plausible customer for CI/CD, registry, scanning, observability or cloud-cost tooling.

Publisher and organisation pages on Docker Hub often carry a support address in plain text, which is why identity coverage here is unusually good. You typically get an account handle, a display name and a working profile link alongside the email.

That combination — a real handle plus a real address — is what separates a usable Docker Hub Email Scraper lead list from a pile of anonymous strings.

### Key features of the Docker Hub Email Scraper

Every feature below is implemented in the Docker Hub Email Scraper's code. Nothing is aspirational.

| Feature | What it means for your Docker Hub email extraction |
|---|---|
| Google `site:` targeting | Queries are scoped to `hub.docker.com` and `docker.com`, so results stay on the container registry |
| Query expansion | Each keyword × domain pair is searched as a base query, a quoted query, an `intitle:` query and one variant per modifier |
| Domain filtering | Only emails ending in your `customDomains` list are kept |
| Global deduplication | An address is emitted once per run, across every query and every page |
| Email normalisation | 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 of another email in the same result block |
| Structural parsing | Locates the `<h3>` title then the smallest surrounding block — it does not depend on Google's CSS class names |
| Whole-page fallback parser | 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 silently counted as empty |
| Retries with backoff | Up to 3 attempts per page, exponential backoff, a fresh proxy session per request |
| Failed-query requeue | Blocked or failed queries are re-queued once at the end of the run |
| Async concurrency | An `asyncio` worker pool with a shared stop signal on `maxEmails` |
| Resumable state | State is kept in the key-value store, keyed by a hash of the input, and saved on `PERSIST_STATE`, `MIGRATING` and `ABORTING` |
| Immediate dataset push | Each lead lands in the dataset as it is found, so you can watch results stream in |
| Run summary | Logs pages fetched, blocked pages, retries and emails per page |

### How the Docker Hub Email Scraper works, step by step

1. It reads your input: keywords, optional location, email domains and limits.
2. It composes Google queries such as `site:hub.docker.com OR site:docker.com nginx maintainer "@gmail.com"`.
3. It fetches each result page through the Apify GOOGLE_SERP proxy using `aiohttp`, asynchronously.
4. It parses each result block structurally, isolating the title and its snippet.
5. It applies a domain-filtered regex to the block text and normalises every candidate address.
6. It deduplicates globally and pushes each lead straight to the Apify dataset.

Base queries run first, so the highest-signal results arrive before the long tail of expanded phrasings. If you set a low `maxEmails`, you still get the best matches.

The Docker Hub Email Scraper stops as soon as your email quota is filled. There is no wasted page fetching once the target is reached.

### Input reference for the Docker Hub Email Scraper

All nine fields below are the complete input surface of the Docker Hub Email Scraper. Defaults are taken verbatim from the Actor's input schema.

| Field | Type | Default | Meaning |
|---|---|---|---|
| `keywords` | array (required) | `["image", "maintainer"]` | Search terms: niche, job title, industry, stack |
| `location` | string | `""` | Optional location phrase added to every query |
| `customDomains` | array | `["@gmail.com","@yahoo.com"]` | Only emails on these domains are kept; the `@` is optional |
| `maxEmails` | integer 1–10000 | `20` | Stop after this many unique emails |
| `countryCode` | string | `""` | Two-letter country for the search proxy (US, GB, DE…) |
| `expandQueries` | boolean | `true` | Search each keyword × domain in several phrasings |
| `queryModifiers` | array | `["email","contact","maintainer","author","support"]` | Extra words combined with each keyword when expansion is on |
| `maxPagesPerQuery` | integer 1–50 | `30` | Page cap per query |
| `maxConcurrency` | integer 1–20 | `5` | Parallel queries |

The default `queryModifiers` are tuned for a container registry: `maintainer` and `author` map directly to how Docker image documentation labels its owner.

#### Example input for the Docker Hub Email Scraper

```json
{
  "keywords": ["kubernetes operator", "postgres image", "ci runner"],
  "location": "Berlin",
  "customDomains": ["@gmail.com", "@protonmail.com"],
  "maxEmails": 300,
  "countryCode": "DE",
  "expandQueries": true,
  "queryModifiers": ["email", "contact", "maintainer", "author", "support"],
  "maxPagesPerQuery": 30,
  "maxConcurrency": 5
}
```

Swap `customDomains` for corporate domains such as `["@acme.io"]` when you are hunting a specific vendor's team. Leave the consumer defaults in place for independent maintainers.

### Output reference for the Docker Hub Email Scraper

Every dataset item carries all fourteen fields, always in the same shape.

| Field | Meaning |
|---|---|
| `network` | Platform name — `Docker Hub` |
| `keyword` | The keyword that produced the lead |
| `query` | The exact Google query used |
| `title` | Raw result title |
| `accountName` | Account label Google prints (handle or display name) |
| `fullName` | Display name parsed from a profile-style title; empty for documentation snippets |
| `username` | URL-safe handle when Docker Hub exposes one; otherwise `null` |
| `profileUrl` | Canonical account URL when a handle is known; otherwise empty |
| `url` | Direct Docker Hub link when exposed, else the profile URL |
| `description` | Bio or overview snippet, 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 from the Docker Hub Email Scraper

```json
{
  "network": "Docker Hub",
  "keyword": "kubernetes operator",
  "query": "site:hub.docker.com OR site:docker.com kubernetes operator maintainer \"@gmail.com\"",
  "title": "marcuslind (Marcus Lind) - Docker Hub",
  "accountName": "marcuslind",
  "fullName": "Marcus Lind",
  "username": "marcuslind",
  "profileUrl": "https://hub.docker.com/u/marcuslind",
  "url": "https://hub.docker.com/u/marcuslind",
  "description": "Operator images for Postgres and Redis clusters. Issues and support: marcus.lind.dev@gmail.com",
  "email": "marcus.lind.dev@gmail.com",
  "emailDomain": "@gmail.com",
  "possiblyTruncated": false,
  "foundAt": "2026-08-31T09:14:07Z"
}
```

Because `profileUrl` follows the `https://hub.docker.com/u/{username}` shape, a populated `username` always gives you a link you can open and verify by hand before any outreach.

### Use cases for the Docker Hub Email Scraper

| Use case | How the Docker Hub Email Scraper helps |
|---|---|
| DevOps tooling sales | Reach maintainers already running the stack your product plugs into |
| Container security outreach | Find publishers of base images who care about scanning and SBOMs |
| Open-source sponsorship | Identify maintainers of images your company depends on |
| Technical recruiting | Source infrastructure engineers by the technology they publish |
| Partner and integration discovery | Locate vendors shipping official images in your ecosystem |
| Developer-relations campaigns | Build a beta or early-access list of hands-on practitioners |
| Market research | Map who is publishing in a niche and how they present support |
| CRM enrichment | Attach a public contact address to accounts you already track |

For adjacent developer audiences, pair this run with the [GitHub Email Scraper](https://apify.com/leads-scraper/github-email-scraper) or the **npm Email Scraper** — the same maintainer often appears on all three registries.

### Tuning the Docker Hub Email Scraper for better yield

Start narrow. Two or three precise keywords such as `redis image`, `helm chart` or `arm64 build` give the Docker Hub Email Scraper more to work with than a single generic term, because Google caps any one query at roughly 300 results.

Keep `expandQueries` on. Expansion is the mechanism that works around that cap, generating base, quoted, `intitle:` and modifier variants for every keyword and domain pair.

Raise `maxConcurrency` cautiously. Five parallel queries is a good default; pushing higher increases the share of pages that come back blocked and retried.

Use `countryCode` when your prospects cluster in one market, and combine it with the `location` field for a geographic slice of the registry. Two well-aimed Docker Hub Email Scraper runs usually beat one sprawling one.

### Honest limitations of the Docker Hub Email Scraper

- The Docker Hub Email Scraper only finds accounts whose email is **publicly visible in Google's index**. A maintainer who never printed an address will never appear.
- Google caps a single query at roughly 300 results. Query expansion exists precisely to work around this, but it is not an unlimited window.
- `possiblyTruncated: true` means Google's snippet ellipsis touched the address. Verify those rows before sending anything.
- The Docker Hub Email Scraper requires the Apify **GOOGLE_SERP** proxy and cannot run without Apify proxy credentials.
- `username` and `profileUrl` are only populated when a handle appears in Google's result. Where Google shows only a display name, you still get `accountName` and `fullName` but an empty handle. This is a Google limitation, not a bug.
- Free Apify plans are capped at 100 emails per run. Paid plans are uncapped.
- Results from the Docker Hub Email Scraper vary with keywords, domains and location. No volume is guaranteed.

### Frequently asked questions about the Docker Hub Email Scraper

#### Does the Docker Hub Email Scraper log into Docker Hub?

No. The Docker Hub Email Scraper never logs in, never calls the Docker Hub API and never opens the Docker Hub website. All data comes from publicly indexed Google search results.

#### Where do the emails come from?

The Docker Hub Email Scraper reads the titles, snippets and site labels that Google prints for pages on `hub.docker.com` and `docker.com` — overview text, publisher pages and organisation listings.

#### Is the Docker Hub Email Scraper affiliated with Docker?

No. The Docker Hub Email Scraper is an independent Actor. It is not supported, endorsed or affiliated with Docker in any way.

#### Why is `username` sometimes empty?

The Docker Hub Email Scraper parses a handle only when Google's result exposes one in a URL path or a profile-style title. When Google prints just a display name, the row keeps `accountName` and `fullName` and leaves `username` as `null` and `profileUrl` empty.

#### Why is Docker Hub's identity coverage so good?

Publisher and organisation pages are handle-based (`hub.docker.com/u/<name>`), so Google's result usually contains the handle directly in the URL. That maps cleanly onto the `username` and `profileUrl` the Docker Hub Email Scraper returns.

#### How many emails will one Docker Hub Email Scraper run return?

It depends entirely on your keywords and domains. Free Apify plans stop at 100 emails per run; paid plans are uncapped up to your `maxEmails` value.

#### What does `possiblyTruncated` mean?

Google shortens long snippets with an ellipsis. If that ellipsis touched the address, the flag is set to `true` so you can verify or discard that row.

#### Can the Docker Hub Email Scraper filter for corporate domains instead of Gmail?

Yes. Put any domains you like into `customDomains` — with or without the leading `@`. Only emails ending in one of them are kept.

#### Does the Docker Hub Email Scraper survive a migration mid-run?

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

#### What happens if Google changes its HTML?

The Docker Hub Email Scraper parses structurally rather than by CSS class name, and a whole-page fallback parser takes over if the layout shifts. Worst case you get emails without account details, not an empty dataset.

#### Does `countryCode` matter for the Docker Hub Email Scraper?

Less than for localised app stores, but it still changes which regional results Google returns. Combine it with `location` when targeting a specific market.

#### Can I export the results from the Docker Hub Email Scraper?

Yes. The dataset exports to CSV, JSON, Excel and the Apify API like any other Actor dataset.

### Related Actors

| Actor | What it collects |
|---|---|
| [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 |
| [Docker Hub Phone Number Scraper](https://apify.com/neuro-scraper/docker-hub-phone-number-scraper) | Public phone numbers from Docker Hub |
| [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 |
| [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 |
| [Microsoft AppSource Email Scraper](https://apify.com/neuro-scraper/microsoft-appsource-email-scraper) | Public contact emails from Microsoft AppSource |
| [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 |
| [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 |
| [Google Play Email and Phone Number Scraper](https://apify.com/leads-scraper/google-play-email-and-phone-number-scraper) | Emails and phone numbers from Google Play |

### Leave a review

If the Docker Hub 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, a bug report, or a custom build of the Docker Hub Email Scraper? Email **neurodata.apify@gmail.com** and we will get back to you.

# Actor input Schema

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

Search terms describing the Docker Hub 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 Docker Hub.

## `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": [
    "image",
    "maintainer"
  ],
  "location": "",
  "customDomains": [
    "@gmail.com",
    "@yahoo.com"
  ],
  "maxEmails": 20,
  "countryCode": "",
  "expandQueries": true,
  "queryModifiers": [
    "email",
    "contact",
    "maintainer",
    "author",
    "support"
  ],
  "maxPagesPerQuery": 30,
  "maxConcurrency": 5
}
```

# Actor output Schema

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

Records produced by Docker Hub 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": [
        "image",
        "maintainer"
    ],
    "location": "",
    "customDomains": [
        "@gmail.com",
        "@yahoo.com"
    ],
    "countryCode": "",
    "queryModifiers": [
        "email",
        "contact",
        "maintainer",
        "author",
        "support"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("neuro-scraper/docker-hub-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": [
        "image",
        "maintainer",
    ],
    "location": "",
    "customDomains": [
        "@gmail.com",
        "@yahoo.com",
    ],
    "countryCode": "",
    "queryModifiers": [
        "email",
        "contact",
        "maintainer",
        "author",
        "support",
    ],
}

# Run the Actor and wait for it to finish
run = client.actor("neuro-scraper/docker-hub-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": [
    "image",
    "maintainer"
  ],
  "location": "",
  "customDomains": [
    "@gmail.com",
    "@yahoo.com"
  ],
  "countryCode": "",
  "queryModifiers": [
    "email",
    "contact",
    "maintainer",
    "author",
    "support"
  ]
}' |
apify call neuro-scraper/docker-hub-email-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,neuro-scraper/docker-hub-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/3ad5Z6Q9ZAvtuTneZ/builds/k3Apx8lb9SQC8pwTk/openapi.json
