# HubSpot Marketplace Email Scraper (`leads-scraper/hubspot-marketplace-email-scraper`) Actor

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

- **URL**: https://apify.com/leads-scraper/hubspot-marketplace-email-scraper.md
- **Developed by:** [Leads Scraper](https://apify.com/leads-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

### HubSpot Marketplace Email Scraper

The **HubSpot Marketplace Email Scraper** builds a deduplicated contact list of HubSpot app partners, solutions partners and inbound agencies from Google's public index of `ecosystem.hubspot.com` and `hubspot.com`.
It targets partner recruitment, integration partnerships, agency sourcing and competitive research — a B2B ecosystem motion, not consumer prospecting.
No login, no HubSpot API, no browser automation: publicly indexed search results only.

Set your expectations on two numbers before you run it.
In our measured test runs the HubSpot Marketplace Email Scraper attached an account identity to **9 of 10** sampled rows, but resolved a usable profile URL on only about **3 in 10**.
So you should plan on getting the partner name, the listing title, a description snippet and the email — and often no clickable marketplace link.

That gap is worth understanding rather than working around. HubSpot's ecosystem spreads across
app listings, solutions-directory profiles and marketing pages, and Google frequently prints a
partner or app name without a slug the parser can turn into a canonical URL.

The email and the identity are the valuable parts; the link is a convenience. Say it plainly:
the HubSpot Marketplace Email Scraper is a contact-discovery tool first and a link-building
tool second.

#### Who the HubSpot Marketplace Email Scraper is for

Alliance and partner teams recruiting app partners, SaaS vendors sourcing implementation agencies, agencies looking for subcontractors, and analysts mapping the HubSpot partner landscape.
A hubspot app partner email published on a marketplace listing exists to receive support and partnership enquiries, which is exactly the kind of message you should be sending.
CRM-wide programmes usually run this next to the [Salesforce AppExchange Email Scraper](https://apify.com/leads-scraper/salesforce-appexchange-email-scraper) to cover both ecosystems in one sweep.

### What the HubSpot Marketplace Email Scraper actually does

The HubSpot Marketplace Email Scraper does **not** sign into HubSpot, call any HubSpot API, or open the marketplace in a browser.
It builds Google queries with the `site:` operator against `ecosystem.hubspot.com` and `hubspot.com`, fetches result pages through the Apify **GOOGLE_SERP** proxy with `aiohttp`, and parses each result block.
There is no headless browser, no JavaScript rendering, no authentication and no cookies.

Result blocks are located structurally — locate the `<h3>` title, then take the smallest surrounding block — rather than relying on Google's CSS class names.
A domain-filtered regex extracts addresses from that block text, results are deduplicated globally, and every lead is pushed to the Apify dataset as it is found.
A whole-page fallback parser keeps emails flowing if Google's markup shifts, degrading detail rather than output.

That makes the HubSpot Marketplace Email Scraper a **publicly indexed contact discovery** tool for the HubSpot partner ecosystem.
It reads what partners chose to publish. Nothing gated, nothing private.

### Key features of the HubSpot Marketplace Email Scraper

| Feature | What it means for your HubSpot partner contact list |
|---|---|
| Dual-domain `site:` targeting | Queries cover `ecosystem.hubspot.com` and `hubspot.com`, catching both app listings and partner pages |
| Query expansion | Base, quoted and `intitle:` phrasings plus one variant per query modifier, per keyword x domain pair |
| Ecosystem-tuned modifiers | Defaults are `email`, `contact`, `support`, `developer`, `publisher` — the words partner listings use |
| Domain filtering | Only addresses ending in your `customDomains` values are kept; leading `@` optional |
| Global deduplication | One row per address per run, however many pages mention it |
| Obfuscation handling | Reads `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` cannot 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 |
| Async concurrency | An `asyncio` worker pool runs queries in parallel with a shared stop signal on `maxEmails` |
| Retries and backoff | Up to 3 attempts per page, exponential backoff, a fresh proxy session per request |
| Block detection | CAPTCHA, "unusual traffic" and consent pages are detected and retried, not treated as empty |
| Failed-query requeue | Blocked or failed queries get one more attempt at the end of the run |
| Resumable state | Key-value store state keyed by an input hash, saved on `PERSIST_STATE`, `MIGRATING` and `ABORTING` |
| Fallback parser | Whole-page extraction when Google's layout changes |
| Run summary | Logs pages fetched, blocked pages, retries and emails per page |

### How the HubSpot Marketplace Email Scraper works, step by step

1. Reads input: keywords, location, email domains and run limits.
2. Builds Google queries such as `site:ecosystem.hubspot.com hubspot app agency partner "@gmail.com"`.
3. Fetches Google result pages asynchronously through the Apify GOOGLE_SERP proxy.
4. Locates each organic result block structurally and reads its visible text.
5. Applies the domain filter, junk filter and soft-wrap repair to every candidate address.
6. Deduplicates globally and streams each new lead into the dataset immediately.

Base queries run before expanded ones, so the strongest HubSpot Marketplace Email Scraper rows arrive first.
Stopping a run early therefore keeps your best matches rather than a random slice of the expansion set.
The shared stop signal halts all workers as soon as `maxEmails` is reached.

### Input reference for the HubSpot Marketplace Email Scraper

| Field | Type | Default | Meaning |
|---|---|---|---|
| `keywords` | array (required) | `["hubspot app", "agency partner"]` | Search terms describing the partners you want |
| `location` | string | `""` | Optional location phrase added to every query |
| `customDomains` | array | `["@gmail.com","@yahoo.com"]` | Only emails on these domains are kept; `@` 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 x domain 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` | Parallel queries |

#### Example input for the HubSpot Marketplace Email Scraper

```json
{
  "keywords": [
    "hubspot integration app",
    "hubspot solutions partner agency",
    "inbound marketing agency hubspot"
  ],
  "location": "Boston",
  "customDomains": ["@gmail.com", "@outlook.com"],
  "maxEmails": 350,
  "countryCode": "US",
  "expandQueries": true,
  "queryModifiers": ["email", "contact", "support", "developer", "publisher"],
  "maxPagesPerQuery": 30,
  "maxConcurrency": 5
}
```

Use the words the ecosystem uses about itself: "solutions partner", "app partner", "integration", "onboarding", a specific hub such as "Sales Hub".
The HubSpot Marketplace Email Scraper matches indexed page text, not HubSpot's internal partner tier taxonomy.

### Output reference: what the HubSpot Marketplace Email Scraper returns

Every dataset item carries all 14 fields, including the ones that are empty or `null`.

| 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 account URL when a handle is known; otherwise empty |
| `url` | Direct platform link when exposed, else the profile URL |
| `description` | Listing 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 |
| `foundAt` | ISO 8601 UTC timestamp |

#### Example output from the HubSpot Marketplace Email Scraper

```json
[
  {
    "network": "HubSpot Marketplace",
    "keyword": "hubspot integration app",
    "query": "site:ecosystem.hubspot.com hubspot integration app \"@gmail.com\"",
    "title": "Pipeline Sync - HubSpot App Marketplace",
    "accountName": "Pipeline Sync",
    "fullName": "Pipeline Sync",
    "username": "pipeline-sync",
    "profileUrl": "https://ecosystem.hubspot.com/marketplace/apps/pipeline-sync",
    "url": "https://ecosystem.hubspot.com/marketplace/apps/pipeline-sync",
    "description": "Two-way deal sync for Sales Hub. Partner contact: pipelinesync.team@gmail.com",
    "email": "pipelinesync.team@gmail.com",
    "emailDomain": "@gmail.com",
    "possiblyTruncated": false,
    "foundAt": "2026-08-31T12:40:11Z"
  },
  {
    "network": "HubSpot Marketplace",
    "keyword": "hubspot solutions partner agency",
    "query": "site:hubspot.com hubspot solutions partner agency contact \"@outlook.com\"",
    "title": "Harbourline Inbound - HubSpot Solutions Partner",
    "accountName": "Harbourline Inbound",
    "fullName": "Harbourline Inbound",
    "username": null,
    "profileUrl": "",
    "url": "https://www.hubspot.com/partners",
    "description": "Diamond-tier inbound agency. New business: harbourline.partners@outlook.com or...",
    "email": "harbourline.partners@outlook.com",
    "emailDomain": "@outlook.com",
    "possiblyTruncated": true,
    "foundAt": "2026-08-31T12:41:52Z"
  }
]
```

The second row is the typical solutions-partner shape: a real agency name and a working email, with `username: null` and an empty `profileUrl`.
It also carries `possiblyTruncated: true`, meaning Google's ellipsis sat beside the address — verify before sending.
Roughly seven in ten HubSpot Marketplace Email Scraper rows will look closer to this than to the first one, so build your workflow around `email` plus `accountName` rather than around the link.

### Use cases for the HubSpot Marketplace Email Scraper

| Use case | How the HubSpot Marketplace Email Scraper supports it |
|---|---|
| App partner recruitment | Find app publishers in adjacent categories and open a co-marketing or bundling conversation |
| Agency and reseller sourcing | Build a hubspot solutions partner contact list for delivery work you need subcontracted |
| Integration partnerships | Spot apps whose customers overlap with yours and propose a two-way integration |
| Technology partner programmes | Recruit developers who already build on an open CRM platform onto yours |
| Competitive and market research | Map who lists in a category, with a contact route for interviews and surveys |
| Vendor evaluation | Collect direct enquiry addresses for apps you are shortlisting |
| Event and community recruiting | Invite active partners to a webinar, roundtable or beta programme |
| Regional channel building | Combine `location` and `countryCode` to find agencies in a specific market |

These are B2B partner contacts, not consumer leads.
Reference the specific app or the agency's stated specialism and the HubSpot Marketplace Email Scraper output behaves like a partner pipeline instead of cold outbound.

### Tuning the HubSpot Marketplace Email Scraper for better yield

Broaden `customDomains` first, and add corporate domains.
HubSpot's ecosystem is heavily agency-driven, so plenty of listings publish `@agencyname.com` addresses that the default free-mailbox filter would miss entirely.

Keep `expandQueries` on. Google caps a single query at roughly 300 results, and expansion is how the HubSpot Marketplace Email Scraper reaches past that ceiling.
Add ecosystem vocabulary to `queryModifiers` — `partner`, `agency`, `onboarding`, `integration`, `enquiries` — to open new query surface.

Lean on `location` and `countryCode`, because agency selection is regional and HubSpot partner pages often name a city.
Raise `maxConcurrency` on paid plans; resumable state means a migrated or aborted run resumes rather than restarting from zero.
Because many app partners also list elsewhere, the [Zapier App Directory Email Scraper](https://apify.com/leads-scraper/zapier-app-directory-email-scraper) and the [Slack App Directory Email Scraper](https://apify.com/leads-scraper/slack-app-directory-email-scraper) often surface the same vendors with a different contact address.

### Expected results and honest limitations of the HubSpot Marketplace Email Scraper

- **Profile URL coverage is low.** In our sample the HubSpot Marketplace Email Scraper resolved a profile URL on only about 3 rows in 10, even though 9 in 10 carried an account identity. Expect `username: null` and `profileUrl: ""` on most rows.
- The Actor only finds partners whose email is **publicly visible in Google's index**. Listings that route contact through a form will not appear.
- Google caps a single query at roughly 300 results. Query expansion mitigates that; it does not remove it.
- `username` and `profileUrl` are populated only when Google's result exposes a handle. Rows without one still carry `accountName` and `fullName` — a Google limitation, not a bug.
- `possiblyTruncated: true` means Google's snippet ellipsis touched the address. Verify those rows before sending.
- The Actor requires the Apify **GOOGLE_SERP** proxy and cannot run without Apify proxy credentials.
- Free Apify plans are capped at **100 emails per run**; paid plans are uncapped.
- Results vary with keywords, domains, country and location. No volume is guaranteed.

The HubSpot Marketplace Email Scraper is not affiliated with, endorsed by or supported by HubSpot.
It reads public Google search results only.

### Legal and ethical use of HubSpot Marketplace Email Scraper output

The Actor collects public data; how you contact people is on you.
A published partner enquiry address does not by itself create a lawful basis for bulk marketing under GDPR, CAN-SPAM or CASL — establish yours before sending.
Identify yourself, keep the message specific to the partner's listing, and honour opt-outs immediately.

### FAQ about the HubSpot Marketplace Email Scraper

#### Why are so many `profileUrl` values from the HubSpot Marketplace Email Scraper empty?

Because Google frequently prints a partner or app name without a slug the parser can turn into a canonical link. In our sample the HubSpot Marketplace Email Scraper resolved a profile URL on roughly 3 rows in 10, while 9 in 10 still carried a usable identity plus the email.

#### Does the HubSpot Marketplace Email Scraper log into HubSpot or use its API?

No. It never authenticates, never opens the marketplace and never touches a HubSpot API. It reads publicly indexed Google search results only.

#### Where do the emails the HubSpot Marketplace Email Scraper returns come from?

From the visible text of Google result blocks — titles, snippets and site labels — for pages on `ecosystem.hubspot.com` and `hubspot.com`.

#### Can the HubSpot Marketplace Email Scraper find app partners and agency partners in one run?

Yes. Put both kinds of terms in `keywords`, such as `hubspot integration app` and `hubspot solutions partner agency`. The `keyword` field on each row records which query produced the lead.

#### How many emails can one HubSpot Marketplace Email Scraper run return?

`maxEmails` accepts 1 to 10000. Free Apify plans stop at 100 emails per run; paid plans are uncapped. Actual yield depends on your keywords and domain filter.

#### What does `possiblyTruncated` mean in HubSpot Marketplace Email Scraper output?

Google cut the snippet with an ellipsis right at the email, so the address may be incomplete. Treat those rows as needing verification.

#### Can I schedule the HubSpot Marketplace Email Scraper?

Yes. Apify Schedules can re-run it on a cadence. Deduplication is per run, so diff each dataset against your CRM to catch newly published hubspot agency partner leads.

#### Can the HubSpot Marketplace Email Scraper target agency domains?

Yes, and you should. Put `@agencyname.com` or any corporate domain into `customDomains`; boundary-correct matching prevents false positives such as `@gmail.company`.

#### Do I need a proxy to run the HubSpot Marketplace Email Scraper?

Yes. It runs on the Apify GOOGLE_SERP proxy and will not work without Apify proxy credentials.

#### Is a HubSpot Marketplace Email Scraper run resumable?

Yes. State is persisted in the key-value store keyed by a hash of your input and saved on Apify's `PERSIST_STATE`, `MIGRATING` and `ABORTING` events.

#### Why did my HubSpot Marketplace Email Scraper run return fewer results than expected?

Usually a narrow domain filter or generic keywords. Broaden `customDomains` with corporate domains, add ecosystem terms to `queryModifiers`, and keep `expandQueries` enabled.

#### Are these consumer contacts?

No. They are app publishers, integration partners and inbound agencies who published a business contact address. Frame outreach as partnership, not consumer prospecting.

#### How do I export HubSpot Marketplace Email Scraper results?

Through the standard Apify dataset export: JSON, CSV, Excel, XML or the Apify API.

### Related Actors

| Actor | What it collects |
|---|---|
| [HubSpot Marketplace Email and Phone Number Scraper](https://apify.com/neuro-scraper/hubspot-marketplace-email-and-phone-number-scraper) | Emails and phone numbers from HubSpot Marketplace |
| [HubSpot Marketplace Phone Number Scraper](https://apify.com/neuro-scraper/hubspot-marketplace-phone-number-scraper) | Public phone numbers from HubSpot Marketplace |
| [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 |
| [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 |
| [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 |

### Leave a review

If the HubSpot Marketplace 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 HubSpot Marketplace Email Scraper? Email **neurodata.apify@gmail.com**.

# Actor input Schema

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

Search terms describing the HubSpot Marketplace 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 HubSpot Marketplace.

## `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": [
    "hubspot app",
    "agency partner"
  ],
  "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 HubSpot Marketplace 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": [
        "hubspot app",
        "agency partner"
    ],
    "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("leads-scraper/hubspot-marketplace-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": [
        "hubspot app",
        "agency partner",
    ],
    "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("leads-scraper/hubspot-marketplace-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": [
    "hubspot app",
    "agency partner"
  ],
  "location": "",
  "customDomains": [
    "@gmail.com",
    "@yahoo.com"
  ],
  "countryCode": "",
  "queryModifiers": [
    "email",
    "contact",
    "support",
    "developer",
    "publisher"
  ]
}' |
apify call leads-scraper/hubspot-marketplace-email-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,leads-scraper/hubspot-marketplace-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/EtWBcsV4TaknCk5Jz/builds/SBSi31aDV9T1yCtye/openapi.json
