# Failory Email Scraper (`neuro-scraper/failory-email-scraper`) Actor

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

- **URL**: https://apify.com/neuro-scraper/failory-email-scraper.md
- **Developed by:** [Neuro Scraper](https://apify.com/neuro-scraper) (community)
- **Security:** Limited permissions
- **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

### What the Failory Email Scraper does

The Failory Email Scraper collects public contact emails from publicly indexed Failory pages and returns them as structured lead rows.
Failory is an editorial site rather than a company directory, so rows usually identify an article or interview and carry a founder contact - that framing matters before you read anything else here.
Failory publishes founder interviews, startup post-mortems and indie hacker case studies, and those pieces routinely name the founder and their address.

In a measured sample the Failory Email Scraper matched 8 result blocks, resolved account identity on 8, produced 8 profile URLs and returned 7 unique emails.
For a site of its size that is a strong hit rate, and the people behind those rows are unusually candid founders who agreed to be interviewed in public.
Yields still vary with keywords, domains and country, and no volume is guaranteed.

The Actor never logs into Failory, never opens the site and never uses any Failory API.
It builds Google `site:failory.com` queries from your keywords, fetches result pages through the Apify GOOGLE_SERP proxy, and extracts emails from the titles and snippets Google already publishes.
There is no browser, no JavaScript rendering, no authentication and no cookies.

#### What an editorial source means for your rows

Because Failory is editorial, `accountName`, `fullName` and `profileUrl` usually describe an article or an interview subject rather than a company listing.
The `description` field will often read like a story summary, and the email in it belongs to the founder being profiled.
The Failory Email Scraper does not change that - it surfaces it clearly so you know what you are writing to.

#### Who the Failory Email Scraper is for

Venture and angel investors use the Failory Email Scraper to reach founders who have publicly reflected on what worked and what did not.
Accelerator and incubator programme managers use it to find second-time founders, who are often the strongest cohort applicants.
Startup-service vendors - banking, legal, cloud credits, recruiting - use it to reach indie hackers and solo founders building their next thing.

Journalists, podcasters and researchers use it to contact founders who have already shown willingness to talk on the record.
B2B founders selling to small teams use it as a cold outreach list of people running lean businesses.
Everyone in these rows published a contact address alongside a public interview, precisely because they wanted to be reachable.

### Key features of the Failory Email Scraper

The Failory Email Scraper runs the same engine as every Actor in this family; what changes is which features matter most against an editorial source.
Here it is query expansion and email normalisation that do the heavy lifting, because addresses are embedded in prose rather than in structured profile fields.

| Feature | What it means in practice |
|---|---|
| Google-indexed extraction | Reads `site:failory.com` result blocks through the Apify GOOGLE_SERP proxy - no login, no browser, no cookies |
| Editorial-aware output | Rows carry the article or interview identity plus the founder's published address |
| Domain-filtered emails | Only addresses on your `customDomains` list are kept |
| Query expansion | Base, quoted and `intitle:` phrasings plus one variant per query modifier, because Google caps a single query at roughly 300 results |
| Global deduplication | Every email is unique across all queries and all pages in a run |
| Email normalisation | Handles `name [at] domain [dot] com`, `name (at) domain`, `name @ domain.com`, `domain .com`, zero-width characters and the full-width `＠` |
| Junk filtering | 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 block parsing | Finds the `<h3>` title and the smallest surrounding block instead of relying on Google's CSS class names |
| Whole-page fallback | If Google's markup changes, a run degrades to emails without account details rather than to nothing |
| Block detection | CAPTCHA, "unusual traffic" and consent pages are detected and retried, not counted as empty |
| Retries and re-queue | 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 | Progress is stored in the key-value store keyed by an input hash and saved on `PERSIST_STATE`, `MIGRATING` and `ABORTING` |
| Async concurrency | An `asyncio` worker pool with a shared stop signal on `maxEmails` |

### How the Failory Email Scraper works

The Failory Email Scraper runs six steps on every execution, and none of them touch the Failory website itself.
The pipeline is async Python over `aiohttp` against Google.

1. It reads your input: keywords, location, email domains and limits.
2. It builds Google queries with the `site:` operator against `failory.com`, for example `site:failory.com indie hacker "@gmail.com"`.
3. It fetches Google result pages through the Apify GOOGLE_SERP proxy.
4. It parses each result block structurally by locating the `<h3>` title and the smallest surrounding block.
5. It extracts emails from the block text with a domain-filtered regex.
6. It deduplicates globally and pushes each lead straight to the Apify dataset.

Base queries run first, so the most relevant results land before the expanded variants.
The run summary logs pages fetched, blocked pages, retries and emails per page, which tells you whether a thin run was a keyword problem or a rate problem.

### Input fields for the Failory Email Scraper

| Field | Type | Default | Meaning |
|---|---|---|---|
| `keywords` | array (required) | `["startup founder", "indie hacker"]` | Search terms describing the accounts 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 `@` 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","partnerships","sales"]` | 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 |

Note the defaults: the Failory Email Scraper ships with `startup founder` and `indie hacker`, because those are the words its editorial pages actually use.

```json
{
  "keywords": ["indie hacker", "startup founder", "solo founder"],
  "customDomains": ["@gmail.com", "@outlook.com"],
  "maxEmails": 150,
  "location": "",
  "countryCode": "",
  "expandQueries": true,
  "queryModifiers": ["email", "contact", "press", "partnerships", "sales"],
  "maxPagesPerQuery": 30,
  "maxConcurrency": 5
}
```

### Output fields the Failory Email Scraper returns

Every dataset item the Failory Email Scraper writes carries all fourteen fields below - no optional extras, no hidden columns.

| 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 snippet, cleaned of labels and engagement counters |
| `email` | Lower-cased email address |
| `emailDomain` | The matched domain |
| `possiblyTruncated` | `true` when Google's snippet ellipsis touched the email |
| `foundAt` | ISO 8601 UTC timestamp |

A typical row from the Failory Email Scraper - note that the identity is an interview page, not a company profile:

```json
{
  "network": "Failory",
  "keyword": "indie hacker",
  "query": "site:failory.com indie hacker \"@gmail.com\"",
  "title": "How Ivo Bakker Built and Sold a $40k/yr Micro-SaaS - Failory",
  "accountName": "Ivo Bakker",
  "fullName": "Ivo Bakker",
  "username": "ivo-bakker-interview",
  "profileUrl": "https://www.failory.com/ivo-bakker-interview",
  "url": "https://www.failory.com/ivo-bakker-interview",
  "description": "Interview with Ivo Bakker on building a micro-SaaS solo and selling it. Reach him at ivo.bakker.builds@gmail.com",
  "email": "ivo.bakker.builds@gmail.com",
  "emailDomain": "@gmail.com",
  "possiblyTruncated": false,
  "foundAt": "2026-02-11T15:08:12Z"
}
```

### Use cases for the Failory Email Scraper

| Audience | How they use the Failory Email Scraper |
|---|---|
| Angel and pre-seed investors | Reach second-time and reflective founders directly |
| Accelerator programme managers | Recruit founders who have already shipped and learned |
| Cloud, banking and legal vendors | Reach indie hackers and solo founders starting again |
| Recruiters | Find operators with hands-on early-stage experience |
| Journalists and podcasters | Contact founders who talk publicly about failure |
| Researchers and analysts | Build an interview list on startup outcomes |
| B2B SaaS founders | Reach lean teams that buy tools quickly |
| Communities and newsletters | Invite candid founders to contribute |

### Example runs with the Failory Email Scraper

An interview-focused run, which plays to the strengths of the Failory Email Scraper:

```json
{
  "keywords": ["interview", "indie hacker", "startup founder"],
  "customDomains": ["@gmail.com", "@yahoo.com"],
  "maxEmails": 200,
  "expandQueries": true
}
```

A post-mortem run, pointing the Failory Email Scraper at founders writing about what went wrong:

```json
{
  "keywords": ["startup failure", "shut down", "post mortem"],
  "customDomains": ["@gmail.com"],
  "maxEmails": 100,
  "expandQueries": true
}
```

A narrow run with expansion off, when you want the Failory Email Scraper to match one literal phrase:

```json
{
  "keywords": ["micro saas"],
  "customDomains": ["@gmail.com"],
  "expandQueries": false,
  "maxEmails": 40,
  "maxConcurrency": 3
}
```

### Tips to get more from the Failory Email Scraper

Use editorial vocabulary, not directory vocabulary. `interview`, `post mortem`, `shut down`, `indie hacker` and `solo founder` all match how Failory actually writes.
Words like `company profile` or `directory` will match very little here.

Keep `expandQueries` on for discovery, because Google caps a single query at roughly 300 results and expansion is the only way past that.
The `contact` and `email` modifiers pull hardest on this site, since interviews commonly end with a way to reach the founder.

Leave `location` empty unless you have a specific reason to use it. Failory is not organised geographically, so a location phrase mostly narrows your results without improving them.
Widen `customDomains` instead - indie founders overwhelmingly publish personal addresses.

### Limitations of the Failory Email Scraper

Failory is an editorial site rather than a company directory, so rows usually identify an article or interview and carry a founder contact.
Plan your outreach around that: you are writing to a person who was profiled, not to a company inbox, and the Failory Email Scraper labels the row accordingly.

The Actor only finds accounts whose email is publicly visible in Google's index, and Failory is a smaller site than the big directories, so absolute volume is bounded by how much it has published.
Google caps a single query at roughly 300 results, which is why query expansion exists and defaults to on.

`possiblyTruncated: true` means Google's snippet ellipsis touched the address, so verify those rows before sending.
`username` and `profileUrl` are only populated when Google's result exposes a handle; where Google prints only a display name those fields stay empty while `accountName` and `fullName` are filled in, which is a Google limitation and 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, and no volume is guaranteed.

### Responsible use and GDPR

Founders profiled on Failory come from all over the world, the EU included, so treat every address the Failory Email Scraper returns as personal data.
Have a lawful basis for your outreach, identify yourself clearly, explain why you are writing, honour opt-outs immediately and keep your list current.
This is general responsible-use guidance, not legal advice - check your own obligations before running a campaign.

### FAQ about the Failory Email Scraper

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

In a measured sample it matched 8 blocks, resolved 8 identities, produced 8 profile URLs and returned 7 unique emails - a strong hit rate, but on a smaller site than F6S or EU-Startups.
Your own numbers depend on keywords, domains and `maxEmails`, and no volume is guaranteed.

#### Does the Failory Email Scraper return company records or articles?

Articles. Failory is an editorial site rather than a company directory, so rows usually identify an article or interview and carry a founder contact.

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

No. It never logs in, never opens the Failory website and never uses a Failory API. It reads publicly indexed Google results only.

#### Where do the emails the Failory Email Scraper returns come from?

From the titles, snippets and site labels Google already publishes for `failory.com` pages. Nothing private is accessed.

#### Which keywords work best?

Editorial ones. Try `interview`, `post mortem`, `shut down`, `indie hacker` and `solo founder` rather than directory-style phrases, and let the Failory Email Scraper expand each of them.

#### Can the Failory Email Scraper filter to company domains instead of `@gmail.com`?

Yes. Put any domains you want in `customDomains`, with or without the leading `@`.
Boundary-correct matching means `@gmail.com` will not accidentally match `@gmail.company`.

#### Should I set a location?

Usually not. Failory is not organised by geography, so `location` tends to narrow results without improving relevance.

#### Why are some `username` and `profileUrl` fields empty?

Google sometimes prints only a display name, and with no handle exposed there is no canonical profile URL. The rest of the row is still complete.

#### What does `possiblyTruncated` mean?

It flags a row where Google's snippet ellipsis touched the email, so the address may be cut short. Verify before sending.

#### Does the Failory Email Scraper need a proxy?

Yes. It requires the Apify GOOGLE_SERP proxy and will not run without Apify proxy credentials.

#### Is there a free-plan limit on the Failory Email Scraper?

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

#### Does the Failory Email Scraper return duplicates?

No. Deduplication is global across every query and page in a run, so each address appears once.

#### Can I resume an interrupted run of the Failory Email Scraper?

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

#### What should I combine it with?

Pair the Failory Email Scraper with the [F6S Email Scraper](https://apify.com/leads-scraper/f6s-email-scraper) and the [BetaList Email Scraper](https://apify.com/leads-scraper/betalist-email-scraper) for directory volume, then deduplicate across datasets.

### Related Actors

The Failory Email Scraper is one of twenty Actors in the Software, SaaS and Startup family, all running the same engine against a different platform.
For directory-style volume start with the [F6S Email Scraper](https://apify.com/leads-scraper/f6s-email-scraper); for pre-launch products use the [BetaList Email Scraper](https://apify.com/leads-scraper/betalist-email-scraper); for the other editorially driven source in this set, the [EU-Startups Email Scraper](https://apify.com/neuro-scraper/eu-startups-email-scraper) is the closest match.

| Actor | What it collects |
|---|---|
| [Failory Email and Phone Number Scraper](https://apify.com/neuro-scraper/failory-email-and-phone-number-scraper) | Emails and phone numbers from Failory |
| [Failory Phone Number Scraper](https://apify.com/neuro-scraper/failory-phone-number-scraper) | Public phone numbers from Failory |
| [AlternativeTo Email Scraper](https://apify.com/leads-scraper/alternativeto-email-scraper) | Public contact emails from AlternativeTo |
| [BetaList Email Scraper](https://apify.com/leads-scraper/betalist-email-scraper) | Public contact emails from BetaList |
| [BuiltWith Email Scraper](https://apify.com/leads-scraper/builtwith-email-scraper) | Public contact emails from BuiltWith |
| [CB Insights Email Scraper](https://apify.com/neuro-scraper/cb-insights-email-scraper) | Public contact emails from CB Insights |
| [Dealroom Email Scraper](https://apify.com/leads-scraper/dealroom-email-scraper) | Public contact emails from Dealroom |
| [EU-Startups Email Scraper](https://apify.com/neuro-scraper/eu-startups-email-scraper) | Public contact emails from EU-Startups |
| [F6S Email Scraper](https://apify.com/leads-scraper/f6s-email-scraper) | Public contact emails from F6S |
| [Product Hunt Email Scraper](https://apify.com/leads-scraper/product-hunt-email-scraper) | Public contact emails from Product Hunt |
| [SaaSHub Email Scraper](https://apify.com/neuro-scraper/saashub-email-scraper) | Public contact emails from SaaSHub |
| [SaaSworthy Email Scraper](https://apify.com/neuro-scraper/saasworthy-email-scraper) | Public contact emails from SaaSworthy |
| [Software Advice Email Scraper](https://apify.com/leads-scraper/software-advice-email-scraper) | Public contact emails from Software Advice |
| [SourceForge Companies Email Scraper](https://apify.com/leads-scraper/sourceforge-companies-email-scraper) | Public contact emails from SourceForge |
| [Tracxn Email Scraper](https://apify.com/leads-scraper/tracxn-email-scraper) | Public contact emails from Tracxn |
| [Wappalyzer Email Scraper](https://apify.com/leads-scraper/wappalyzer-email-scraper) | Public contact emails from Wappalyzer |
| [Wellfound Startup Email Scraper](https://apify.com/leads-scraper/wellfound-startup-email-scraper) | Public contact emails from Wellfound |
| [AlternativeTo Email and Phone Number Scraper](https://apify.com/neuro-scraper/alternativeto-email-and-phone-number-scraper) | Emails and phone numbers from AlternativeTo |
| [BetaList Email and Phone Number Scraper](https://apify.com/neuro-scraper/betalist-email-and-phone-number-scraper) | Emails and phone numbers from BetaList |
| [CB Insights Email and Phone Number Scraper](https://apify.com/neuro-scraper/cb-insights-email-and-phone-number-scraper) | Emails and phone numbers from CB Insights |
| [Dealroom Email and Phone Number Scraper](https://apify.com/leads-scraper/dealroom-email-and-phone-number-scraper) | Emails and phone numbers from Dealroom |
| [EU-Startups Email and Phone Number Scraper](https://apify.com/neuro-scraper/eu-startups-email-and-phone-number-scraper) | Emails and phone numbers from EU-Startups |
| [F6S Email and Phone Number Scraper](https://apify.com/neuro-scraper/f6s-email-and-phone-number-scraper) | Emails and phone numbers from F6S |
| [Product Hunt Email and Phone Number Scraper](https://apify.com/leads-scraper/product-hunt-email-and-phone-number-scraper) | Emails and phone numbers from Product Hunt |
| [SaaSHub Email and Phone Number Scraper](https://apify.com/neuro-scraper/saashub-email-and-phone-number-scraper) | Emails and phone numbers from SaaSHub |
| [SaaSworthy Email and Phone Number Scraper](https://apify.com/neuro-scraper/saasworthy-email-and-phone-number-scraper) | Emails and phone numbers from SaaSworthy |
| [Software Advice Email and Phone Number Scraper](https://apify.com/neuro-scraper/software-advice-email-and-phone-number-scraper) | Emails and phone numbers from Software Advice |
| [SourceForge Email and Phone Number Scraper](https://apify.com/neuro-scraper/sourceforge-companies-email-and-phone-number-scraper) | Emails and phone numbers from SourceForge |
| [Wappalyzer Email and Phone Number Scraper](https://apify.com/leads-scraper/wappalyzer-email-and-phone-number-scraper) | Emails and phone numbers from Wappalyzer |
| [Wellfound Email and Phone Number Scraper](https://apify.com/leads-scraper/wellfound-startup-email-and-phone-number-scraper) | Emails and phone numbers from Wellfound |
| [AlternativeTo Phone Number Scraper](https://apify.com/neuro-scraper/alternativeto-phone-number-scraper) | Public phone numbers from AlternativeTo |
| [BetaList Phone Number Scraper](https://apify.com/neuro-scraper/betalist-phone-number-scraper) | Public phone numbers from BetaList |
| [CB Insights Phone Number Scraper](https://apify.com/neuro-scraper/cb-insights-phone-number-scraper) | Public phone numbers from CB Insights |
| [Dealroom Phone Number Scraper](https://apify.com/leads-scraper/dealroom-phone-number-scraper) | Public phone numbers from Dealroom |
| [EU-Startups Phone Number Scraper](https://apify.com/neuro-scraper/eu-startups-phone-number-scraper) | Public phone numbers from EU-Startups |
| [F6S Phone Number Scraper](https://apify.com/neuro-scraper/f6s-phone-number-scraper) | Public phone numbers from F6S |
| [Product Hunt Phone Number Scraper](https://apify.com/leads-scraper/product-hunt-phone-number-scraper) | Public phone numbers from Product Hunt |
| [SaaSHub Phone Number Scraper](https://apify.com/neuro-scraper/saashub-phone-number-scraper) | Public phone numbers from SaaSHub |
| [SaaSworthy Phone Number Scraper](https://apify.com/neuro-scraper/saasworthy-phone-number-scraper) | Public phone numbers from SaaSworthy |
| [Software Advice Phone Number Scraper](https://apify.com/neuro-scraper/software-advice-phone-number-scraper) | Public phone numbers from Software Advice |
| [SourceForge Phone Number Scraper](https://apify.com/neuro-scraper/sourceforge-companies-phone-number-scraper) | Public phone numbers from SourceForge |
| [Wappalyzer Phone Number Scraper](https://apify.com/leads-scraper/wappalyzer-phone-number-scraper) | Public phone numbers from Wappalyzer |

### Leave a review

If the Failory 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 Failory Email Scraper, a thin run you want reviewed, or a custom build? Email neurodata.apify@gmail.com with the keywords and domains you used.

# Actor input Schema

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

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

## `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": [
    "startup founder",
    "indie hacker"
  ],
  "location": "",
  "customDomains": [
    "@gmail.com",
    "@yahoo.com"
  ],
  "maxEmails": 20,
  "countryCode": "",
  "expandQueries": true,
  "queryModifiers": [
    "email",
    "contact",
    "press",
    "partnerships",
    "sales"
  ],
  "maxPagesPerQuery": 30,
  "maxConcurrency": 5
}
```

# Actor output Schema

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

Records produced by Failory 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": [
        "startup founder",
        "indie hacker"
    ],
    "location": "",
    "customDomains": [
        "@gmail.com",
        "@yahoo.com"
    ],
    "countryCode": "",
    "queryModifiers": [
        "email",
        "contact",
        "press",
        "partnerships",
        "sales"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("neuro-scraper/failory-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": [
        "startup founder",
        "indie hacker",
    ],
    "location": "",
    "customDomains": [
        "@gmail.com",
        "@yahoo.com",
    ],
    "countryCode": "",
    "queryModifiers": [
        "email",
        "contact",
        "press",
        "partnerships",
        "sales",
    ],
}

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

```

## MCP server setup

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