# Blogger Email Scraper (`neuro-scraper/blogger-email-scraper`) Actor

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

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

### Blogger Email Scraper - build a blogger outreach list from publicly indexed Blogspot pages

The Blogger Email Scraper turns Google's public index of Blogger and Blogspot pages into a clean, deduplicated list of blog owners with contact emails.
It is built for the people who spend their week hunting for one thing: a real inbox behind a real blog.
If you run blogger outreach, digital PR, guest posting or link building, this is the prospecting step you keep repeating by hand.

Bloggers publish contact addresses on purpose. A "contact me", "work with me" or "submissions" line exists because the author wants pitches, review requests and sponsorship offers to arrive.
The Blogger Email Scraper simply collects what those authors already chose to make public and indexable.
Think of the Blogger Email Scraper as a blogger contact finder that reads Google instead of reading a thousand "about" pages by hand.

In our measured live runs, this Actor was one of the two strongest performers in the whole Content, Media, Research and Entertainment category.
A single run returned 10 result blocks, 10 with usable identity data, 10 resolvable profile URLs and 10 unique emails.

#### Why the Blogger Email Scraper resolves profile URLs so reliably

Blogger gives every blog its own subdomain, such as `janesblog.blogspot.com`.
That subdomain **is** the handle, so the Blogger Email Scraper can recover it from the Google result and populate `username` as `janesblog` and `profileUrl` as `https://janesblog.blogspot.com/`.
This is why blog owner contact rows from this Actor almost always come with a working link, unlike platforms where Google prints only a display name.

### Key features of the Blogger Email Scraper

| Feature | What it means for your outreach |
|---|---|
| Google `site:` targeting | Every query is scoped to `blogspot.com` and `blogger.com`, so you get Blogger results, not the open web |
| Query expansion | Base, quoted and `intitle:` variants plus one variant per query modifier; base queries run first |
| Query modifiers | Defaults are `email`, `contact`, `press`, `booking`, `submissions` - tuned for niche blog discovery |
| Domain filtering | Only emails on your `customDomains` list are kept, so you can target `@gmail.com` freelancers or a corporate domain |
| Global deduplication | One unique email per run, across every query and every Google page |
| Obfuscated 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` never matches 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 block parsing | Locates the `<h3>` title then the smallest surrounding block, instead of relying on Google 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 counted as empty |
| Retries and re-queueing | Up to 3 attempts per page with exponential backoff and a fresh proxy session; failed queries are re-queued once at the end |
| Resumable state | Run state is stored in the key-value store keyed by an input hash, and saves fire on `PERSIST_STATE`, `MIGRATING` and `ABORTING` |
| Concurrency | An `asyncio` worker pool with a shared stop signal on `maxEmails` |
| Streaming output | Each lead is pushed to the dataset immediately, so you can export mid-run |

### How the Blogger Email Scraper works

The Blogger Email Scraper never logs into Blogger, never calls a Blogger API and never opens a Blogspot page in a browser.
There is no JavaScript rendering, no authentication and no cookies anywhere in the pipeline.

The whole process is a disciplined Google search harvest:

1. It reads your input: keywords, location, email domains and limits.
2. It builds Google queries with the `site:` operator, for example `site:blogspot.com food blogger "@gmail.com" "Austin"`.
3. It fetches Google result pages through the **Apify GOOGLE_SERP proxy** using async `aiohttp` requests.
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 regular expression.
6. It deduplicates globally and pushes every lead straight into the Apify dataset.

Everything the Blogger Email Scraper returns therefore comes from publicly indexed search results: titles, snippets and site labels.
That is the honest boundary of this tool, and it is also why it is fast and lightweight.
The same pipeline powers the [WordPress Blog Email Scraper](https://apify.com/leads-scraper/wordpress-blog-email-scraper), so blogger outreach lists from both platforms merge cleanly into one CSV.

### Input fields for the Blogger Email Scraper

| Field | Type | Default | Meaning |
|---|---|---|---|
| `keywords` | array (required) | `["blogger", "niche blog"]` | Search terms describing the blogs 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 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 pair in several phrasings |
| `queryModifiers` | array | `["email","contact","press","booking","submissions"]` | 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 Blogger Email Scraper

```json
{
  "keywords": ["food blogger", "recipe blog", "niche blog"],
  "location": "Austin",
  "customDomains": ["@gmail.com", "@yahoo.com"],
  "maxEmails": 120,
  "countryCode": "US",
  "expandQueries": true,
  "queryModifiers": ["email", "contact", "press", "booking", "submissions"],
  "maxPagesPerQuery": 30,
  "maxConcurrency": 5
}
```

Start narrow. Two or three tight keywords plus a location almost always beat ten vague ones, because Google caps a single query at roughly 300 results.
Every field above is the complete input surface of the Blogger Email Scraper; there are no hidden switches.

### Output fields from the Blogger Email Scraper

Every dataset item produced by the Blogger Email Scraper carries all fourteen fields below.

| 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 post captions |
| `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` | Bio or caption snippet, cleaned of labels and engagement counters |
| `email` | Lower-cased email address |
| `emailDomain` | The matched domain, for example `@gmail.com` |
| `possiblyTruncated` | `true` when Google's snippet ellipsis touched the email |
| `foundAt` | ISO 8601 UTC timestamp |

#### Example output from the Blogger Email Scraper

```json
[
  {
    "network": "Blogger",
    "keyword": "food blogger",
    "query": "site:blogspot.com food blogger \"@gmail.com\" \"Austin\"",
    "title": "Urban Plant Diary - seasonal recipes from Austin",
    "accountName": "urbanplantdiary",
    "fullName": "Urban Plant Diary",
    "username": "urbanplantdiary",
    "profileUrl": "https://urbanplantdiary.blogspot.com/",
    "url": "https://urbanplantdiary.blogspot.com/p/contact.html",
    "description": "Seasonal recipes and market notes. Sponsorships and review requests: urbanplantdiary@gmail.com",
    "email": "urbanplantdiary@gmail.com",
    "emailDomain": "@gmail.com",
    "possiblyTruncated": false,
    "foundAt": "2026-08-31T09:14:02.117Z"
  },
  {
    "network": "Blogger",
    "keyword": "recipe blog",
    "query": "site:blogspot.com intitle:\"recipe blog\" \"@yahoo.com\"",
    "title": "Slow Kitchen Notes",
    "accountName": "slowkitchennotes",
    "fullName": "Slow Kitchen Notes",
    "username": "slowkitchennotes",
    "profileUrl": "https://slowkitchennotes.blogspot.com/",
    "url": "https://slowkitchennotes.blogspot.com/",
    "description": "Home cooking, one pot at a time. Guest post submissions to slowkitchen...",
    "email": "slowkitchennotes@yahoo.com",
    "emailDomain": "@yahoo.com",
    "possiblyTruncated": true,
    "foundAt": "2026-08-31T09:14:26.802Z"
  }
]
```

Note the second row: `possiblyTruncated` is `true`, so verify that address before you send anything to it.
The Blogger Email Scraper writes rows to the dataset as it finds them, so you can export to CSV, JSON or Excel while the run is still going.

### Use cases for the Blogger Email Scraper

| Audience | How they use the Blogger Email Scraper |
|---|---|
| Blogger outreach and digital PR teams | Build a media list of niche blog owners who accept pitches and review requests |
| Guest posting and link building agencies | Find blogs in a vertical whose owners publish a submissions address |
| Ad networks and sponsorship teams | Source independent publishers for display, affiliate or sponsored-post inventory |
| Brand and product marketers | Reach recipe, travel, parenting or hobby bloggers for seeding campaigns |
| Content marketplaces | Recruit writers who already run their own Blogspot publication |
| Event and conference organisers | Invite subject-matter bloggers to speak or cover an event |
| Market researchers | Map who publishes on a topic in a given country and how to contact them |

Agencies typically run the Blogger Email Scraper once per client vertical, then repeat the same keyword set on **SlideShare** and [Scribd](https://apify.com/leads-scraper/scribd-email-scraper) to widen the same campaign.
Podcast and audio teams usually pair it with the [iTunes Podcast Host Email Scraper](https://apify.com/leads-scraper/itunes-podcast-host-email-scraper).

### What results to expect from the Blogger Email Scraper

Blogger is one of the highest-yielding platforms in this family, and the Blogger Email Scraper benefits directly from that.
Our measured live run produced 10 result blocks, 10 rows with identity data, 10 profile URLs and 10 unique emails.
That density comes from the subdomain structure: when the blog address is the handle, account details resolve cleanly.

Volume still depends on your keywords, your `customDomains` list and your location.
No tool can guarantee a number, because the Blogger Email Scraper can only find what Google has already indexed.

### Tips for better Blogger Email Scraper runs

Use specific niche language with the Blogger Email Scraper. "Sourdough blog" and "vanlife blog" beat "blog" by a wide margin.
Add `@outlook.com`, `@hotmail.com` or a country domain to `customDomains` when free-mail results dry up.

Leave `expandQueries` on. It is the built-in answer to Google's per-query result ceiling, and it is where the Blogger Email Scraper gets most of its reach.
Raise `maxEmails` before you raise `maxConcurrency`; more parallel queries mainly increases the chance of being rate limited.

### Limitations of the Blogger Email Scraper

We would rather you know these up front than discover them in a run.

- The Blogger Email Scraper only finds blogs whose email is **publicly visible in Google's index**. Nothing private, nothing gated.
- Blogs that moved to a **custom domain** fall outside the `site:blogspot.com` and `site:blogger.com` scope, so they will not appear.
- Google caps a single query at roughly 300 results, which is exactly why query expansion exists.
- `possiblyTruncated: true` means Google's snippet ellipsis may have cut the address; verify before sending.
- `username` and `profileUrl` are only populated when a handle is exposed in the result. On Blogger this is usually the subdomain, but rows built from post captions can still arrive with an empty handle. That is a Google limitation, not a bug.
- 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 and location. No volume is guaranteed.

### Responsible outreach

Bloggers publish a contact address so that relevant people can reach them, and that is the only use we recommend.
Send a specific, relevant pitch, honour opt-outs immediately, and respect GDPR and your local marketing rules.
The Blogger Email Scraper is a research tool, not a bulk mailing list.

### Related Actors

The Blogger Email Scraper is part of the Content, Media, Research and Entertainment family. Every Actor below runs the same engine against a different platform.

| Actor | What it collects |
|---|---|
| [Blogger Email and Phone Number Scraper](https://apify.com/neuro-scraper/blogger-email-and-phone-number-scraper) | Emails and phone numbers from Blogger |
| [Blogger Phone Number Scraper](https://apify.com/neuro-scraper/blogger-phone-number-scraper) | Public phone numbers from Blogger |
| [ArtStation Email Scraper](https://apify.com/neuro-scraper/artstation-email-scraper) | Public contact emails from ArtStation |
| [arXiv Email Scraper](https://apify.com/leads-scraper/arxiv-email-scraper) | Public contact emails from arXiv |
| [Crunchyroll Email Scraper](https://apify.com/neuro-scraper/crunchyroll-email-scraper) | Public contact emails from Crunchyroll |
| [Digg Email Scraper](https://apify.com/neuro-scraper/digg-email-scraper) | Public contact emails from Digg |
| [Flipboard Email Scraper](https://apify.com/neuro-scraper/flipboard-email-scraper) | Public contact emails from Flipboard |
| [iHeartRadio Email Scraper](https://apify.com/neuro-scraper/iheartradio-email-scraper) | Public contact emails from iHeartRadio |
| [IMDb Email Scraper](https://apify.com/leads-scraper/imdb-email-scraper) | Public contact emails from IMDb |
| [Internet Archive Email Scraper](https://apify.com/neuro-scraper/internet-archive-email-scraper) | Public contact emails from Internet Archive |
| [iTunes Podcast Host Email Scraper](https://apify.com/leads-scraper/itunes-podcast-host-email-scraper) | Public contact emails from Apple Podcasts |
| [Netflix Shows Email Scraper](https://apify.com/neuro-scraper/netflix-shows-email-scraper) | Public contact emails from Netflix |
| [Rotten Tomatoes Email Scraper](https://apify.com/neuro-scraper/rotten-tomatoes-email-scraper) | Public contact emails from Rotten Tomatoes |
| [Scribd Email Scraper](https://apify.com/leads-scraper/scribd-email-scraper) | Public contact emails from Scribd |
| [Spotify Email Scraper](https://apify.com/leads-scraper/spotify-email-scraper) | Public contact emails from Spotify |
| [Spotify Playlist Email Scraper](https://apify.com/leads-scraper/spotify-playlist-email-scraper) | Public contact emails from Spotify |
| [TuneIn Email Scraper](https://apify.com/neuro-scraper/tunein-email-scraper) | Public contact emails from TuneIn |
| [Wikipedia Contact Email Scraper](https://apify.com/neuro-scraper/wikipedia-contact-email-scraper) | Public contact emails from Wikipedia |
| [WordPress Blog Email Scraper](https://apify.com/leads-scraper/wordpress-blog-email-scraper) | Public contact emails from WordPress.com |
| [ArtStation Email and Phone Number Scraper](https://apify.com/neuro-scraper/artstation-email-and-phone-number-scraper) | Emails and phone numbers from ArtStation |
| [arXiv Email and Phone Number Scraper](https://apify.com/neuro-scraper/arxiv-email-and-phone-number-scraper) | Emails and phone numbers from arXiv |
| [Crunchyroll Email and Phone Number Scraper](https://apify.com/neuro-scraper/crunchyroll-email-and-phone-number-scraper) | Emails and phone numbers from Crunchyroll |
| [Digg Email and Phone Number Scraper](https://apify.com/neuro-scraper/digg-email-and-phone-number-scraper) | Emails and phone numbers from Digg |
| [Flipboard Email and Phone Number Scraper](https://apify.com/neuro-scraper/flipboard-email-and-phone-number-scraper) | Emails and phone numbers from Flipboard |
| [iHeartRadio Email and Phone Number Scraper](https://apify.com/neuro-scraper/iheartradio-email-and-phone-number-scraper) | Emails and phone numbers from iHeartRadio |
| [IMDb Email and Phone Number Scraper](https://apify.com/neuro-scraper/imdb-email-and-phone-number-scraper) | Emails and phone numbers from IMDb |
| [Internet Archive Email and Phone Number Scraper](https://apify.com/neuro-scraper/internet-archive-email-and-phone-number-scraper) | Emails and phone numbers from Internet Archive |
| [Apple Podcasts Email and Phone Number Scraper](https://apify.com/neuro-scraper/itunes-podcast-host-email-and-phone-number-scraper) | Emails and phone numbers from Apple Podcasts |
| [Netflix Email and Phone Number Scraper](https://apify.com/neuro-scraper/netflix-shows-email-and-phone-number-scraper) | Emails and phone numbers from Netflix |
| [Rotten Tomatoes Email and Phone Number Scraper](https://apify.com/neuro-scraper/rotten-tomatoes-email-and-phone-number-scraper) | Emails and phone numbers from Rotten Tomatoes |
| [Scribd Email and Phone Number Scraper](https://apify.com/neuro-scraper/scribd-email-and-phone-number-scraper) | Emails and phone numbers from Scribd |
| [Spotify Email and Phone Number Scraper](https://apify.com/neuro-scraper/spotify-email-and-phone-number-scraper) | Emails and phone numbers from Spotify |
| [Spotify Email and Phone Number Scraper](https://apify.com/neuro-scraper/spotify-playlist-email-and-phone-number-scraper) | Emails and phone numbers from Spotify |
| [TuneIn Email and Phone Number Scraper](https://apify.com/neuro-scraper/tunein-email-and-phone-number-scraper) | Emails and phone numbers from TuneIn |
| [Wikipedia Email and Phone Number Scraper](https://apify.com/neuro-scraper/wikipedia-contact-email-and-phone-number-scraper) | Emails and phone numbers from Wikipedia |
| [ArtStation Phone Number Scraper](https://apify.com/neuro-scraper/artstation-phone-number-scraper) | Public phone numbers from ArtStation |
| [arXiv Phone Number Scraper](https://apify.com/neuro-scraper/arxiv-phone-number-scraper) | Public phone numbers from arXiv |
| [Crunchyroll Phone Number Scraper](https://apify.com/neuro-scraper/crunchyroll-phone-number-scraper) | Public phone numbers from Crunchyroll |
| [Digg Phone Number Scraper](https://apify.com/neuro-scraper/digg-phone-number-scraper) | Public phone numbers from Digg |
| [Flipboard Phone Number Scraper](https://apify.com/neuro-scraper/flipboard-phone-number-scraper) | Public phone numbers from Flipboard |
| [iHeartRadio Phone Number Scraper](https://apify.com/neuro-scraper/iheartradio-phone-number-scraper) | Public phone numbers from iHeartRadio |
| [IMDb Phone Number Scraper](https://apify.com/neuro-scraper/imdb-phone-number-scraper) | Public phone numbers from IMDb |

### FAQ about the Blogger Email Scraper

#### How many results should I expect from the Blogger Email Scraper?

Our measured live run returned 10 blocks, 10 identity rows, 10 profile URLs and 10 unique emails, making Blogger one of the two strongest platforms in this category.
Your numbers will differ with keywords, domains and location, and no volume is guaranteed.

#### Does the Blogger Email Scraper log into Blogger?

No. It never logs in, never uses a Blogger API and never opens a Blogspot page. Every field comes from publicly indexed Google results.

#### Why are Blogger profile URLs so reliable here?

Because each blog lives on its own `*.blogspot.com` subdomain, and the Blogger Email Scraper recovers that subdomain as the `username`, then builds `https://{username}.blogspot.com/`.

#### Will the Blogger Email Scraper find blogs on custom domains?

No. Queries are scoped with `site:blogspot.com` and `site:blogger.com`, so a blog that moved to its own domain is out of scope.

#### Can I target a specific country?

Yes. Set `countryCode` to a two-letter code such as `US`, `GB` or `DE`, and optionally add a `location` phrase to every query.

#### Which email domains can the Blogger Email Scraper collect?

Any domain you list in `customDomains`. The default is `@gmail.com` and `@yahoo.com`, and the leading `@` is optional.

#### What does `possiblyTruncated` mean?

Google's snippet ellipsis touched the address, so it may be incomplete. Treat those rows as needing verification.

#### Does the Blogger Email Scraper handle obfuscated addresses?

Yes. It normalises `name [at] domain [dot] com`, `name (at) domain`, `name @ domain.com`, `domain .com`, zero-width characters and the full-width `＠` sign.

#### Are there duplicates in the dataset?

No. Deduplication is global across every query and every page of a run.

#### What happens if a run is interrupted?

State is saved in the key-value store keyed by an input hash, with saves on `PERSIST_STATE`, `MIGRATING` and `ABORTING`, so a resumed run picks up rather than restarting.

#### Do I need Apify proxy access?

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

#### Is there a free-plan limit?

Free Apify plans are capped at 100 emails per run. Paid plans are uncapped.

### Leave a review

If the Blogger 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 about the Blogger Email Scraper, feature requests or a custom build? Email **neurodata.apify@gmail.com** and we will help.

# Actor input Schema

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

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

## `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": [
    "blogger",
    "niche blog"
  ],
  "location": "",
  "customDomains": [
    "@gmail.com",
    "@yahoo.com"
  ],
  "maxEmails": 20,
  "countryCode": "",
  "expandQueries": true,
  "queryModifiers": [
    "email",
    "contact",
    "press",
    "booking",
    "submissions"
  ],
  "maxPagesPerQuery": 30,
  "maxConcurrency": 5
}
```

# Actor output Schema

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

Records produced by Blogger 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": [
        "blogger",
        "niche blog"
    ],
    "location": "",
    "customDomains": [
        "@gmail.com",
        "@yahoo.com"
    ],
    "countryCode": "",
    "queryModifiers": [
        "email",
        "contact",
        "press",
        "booking",
        "submissions"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("neuro-scraper/blogger-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": [
        "blogger",
        "niche blog",
    ],
    "location": "",
    "customDomains": [
        "@gmail.com",
        "@yahoo.com",
    ],
    "countryCode": "",
    "queryModifiers": [
        "email",
        "contact",
        "press",
        "booking",
        "submissions",
    ],
}

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

```

## MCP server setup

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