# Callupcontact Email Scraper (`neuro-scraper/callupcontact-email-scraper`) Actor

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

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

### Callupcontact Email Scraper

The Callupcontact Email Scraper collects publicly indexed business emails from CallUpContact listings and turns them into a clean, downloadable dataset.
You give it a few keywords, an optional location and the email domains you care about.
It gives you back deduplicated leads with account names, profile URLs and bio snippets.

CallUpContact is a general local business directory where small companies publish a short profile, a service description and a way to get in touch.
Those profiles are indexed by Google, and a lot of them print a working contact address in the snippet.
The Callupcontact Email Scraper is built to find exactly those snippets at scale.

This Actor does not log in, does not use a CallUpContact API and never opens the directory's own website.
Every record comes from publicly available Google search results: titles, snippets and site labels.
There is no browser, no JavaScript rendering, no authentication and no cookies involved.

In a measured live run, the Callupcontact Email Scraper returned 10 result blocks, 10 identity matches, 10 profile URLs and 10 unique emails.
That places CallUpContact among the strongest sources in this directory category, alongside Bark and Crunchbase.
Yield always depends on your keywords, domains and location, so treat that figure as a reference point rather than a promise.

#### What the Callupcontact Email Scraper is for

Local directories are one of the few places where owner-operated businesses still publish a real inbox.
A plumber, a tutoring service or a small logistics firm will often list a personal Gmail rather than a corporate alias.
That makes CallUpContact useful for anyone building a small business contact list.

Typical users are agencies selling web design or SEO to local firms, B2B suppliers, franchise recruiters and market researchers.
The Callupcontact Email Scraper is also a practical way to enrich an existing CRM segment with directory-sourced addresses.
Because the output is a flat dataset, it drops straight into a spreadsheet or an outreach tool.

### Key features of the Callupcontact Email Scraper

Everything below is behaviour the Callupcontact Email Scraper actually implements, not a wish list.
The same feature set is shared by every Actor in this directory family.

| Feature | What it does |
|---|---|
| Google `site:` targeting | Restricts every query to `callupcontact.com`, so results stay on the directory |
| Query expansion | Runs base, quoted and `intitle:` variants plus one variant per query modifier |
| Domain filtering | Keeps only emails ending in the domains you list, such as `@gmail.com` |
| Global deduplication | One row per unique email address across every query and every page |
| Email normalisation | Understands `name [at] domain [dot] com`, `name (at) domain`, `name @ domain.com`, `domain .com`, zero-width characters and the full-width `＠` sign |
| Junk filter | Rejects placeholders such as `email@`, `yourname@`, `test@`, `xxx@` and single-character locals |
| Boundary-correct matching | `@gmail.com` does not match inside `@gmail.company` or `@gmail.com.br` |
| Soft-wrap repair | Drops a hit that is only the tail of another email found in the same result block |
| Structural block parsing | Locates the `<h3>` title and the smallest surrounding block instead of relying on CSS class names |
| Whole-page fallback parser | If Google's markup changes, the run degrades to emails without account details rather than to nothing |
| Concurrency | An `asyncio` worker pool with a shared stop signal once `maxEmails` is reached |
| Retries and block detection | Up to three attempts per page with exponential backoff; CAPTCHA and consent pages are retried, not counted as empty |
| Re-queue pass | Blocked or failed queries are retried once at the end of the run |
| Resumable state | Run state is stored in the key-value store, keyed by a hash of the input, and saved on `PERSIST_STATE`, `MIGRATING` and `ABORTING` |
| Immediate dataset writes | Every lead is pushed as soon as it is found, so a partial run is still useful |
| Run summary | Logs pages fetched, blocked pages, retries and emails per page |

### How the Callupcontact Email Scraper works

The pipeline is deliberately simple, which is why it is robust.
The Callupcontact Email Scraper reads your input, builds Google queries, fetches result pages and parses them.
Emails are extracted from the text of each block, filtered, deduplicated and pushed to the dataset.

A query looks like `site:callupcontact.com local business "@gmail.com" "Manchester"`.
Pages are fetched through the Apify GOOGLE_SERP proxy using async HTTP, with a fresh proxy session per request.
Each result block is parsed structurally, so a Google layout change does not silently break the run.

#### Query expansion inside the Callupcontact Email Scraper

Google caps a single query at roughly 300 results, so one query is never enough.
Query expansion multiplies each keyword by each email domain and by several phrasings.
Base queries always run first, so the cheapest and most productive searches happen before the long tail.

The CallUpContact defaults for `queryModifiers` are `email`, `contact`, `enquiries`, `owner` and `get a quote`.
Those words mirror the language directory listings actually use when they invite an enquiry.
You can replace them with trade-specific wording such as `call us`, `free estimate` or `family run`.

#### Location targeting in the Callupcontact Email Scraper

`location` is appended to every query as a quoted phrase.
For a general directory like CallUpContact it is a useful narrowing lever when a keyword is too broad.
Running the same keyword set once per city usually beats one enormous national run.

### Input reference for the Callupcontact Email Scraper

The Callupcontact Email Scraper exposes nine input fields and only `keywords` is required.
Defaults below are the ones shipped in the Actor's input schema.

| Field | Type | Default | Meaning |
|---|---|---|---|
| `keywords` | array (required) | `["local business", "services"]` | Search terms describing the accounts you want |
| `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 code for the search proxy (US, GB, DE) |
| `expandQueries` | boolean | `true` | Search each keyword x domain pair in several phrasings |
| `queryModifiers` | array | `["email", "contact", "enquiries", "owner", "get a quote"]` | 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

```json
{
  "keywords": ["plumbing company", "electrician", "removals company"],
  "location": "Manchester",
  "customDomains": ["@gmail.com", "@yahoo.co.uk", "@outlook.com"],
  "maxEmails": 300,
  "countryCode": "GB",
  "expandQueries": true,
  "queryModifiers": ["email", "contact", "enquiries", "owner", "get a quote"],
  "maxPagesPerQuery": 30,
  "maxConcurrency": 5
}
```

#### Tuning the Callupcontact Email Scraper

Narrow keywords beat broad ones.
`mobile car valeting` will out-perform `services` because the directory text is more distinctive.
Three to eight tightly written keywords is a good working range.

Add local free-mail domains when you target a specific country.
`@yahoo.co.uk`, `@outlook.com`, `@hotmail.co.uk` and `@btinternet.com` all appear in UK listings.
Adding a domain multiplies the query count, so raise `maxEmails` at the same time.

### Output reference for the Callupcontact Email Scraper

Every dataset item produced by the Callupcontact Email Scraper carries all fourteen fields below.
Nothing else is written, so the schema is stable across runs and across sibling Actors.

| 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` | Bio or listing snippet, cleaned of labels and 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

```json
[
  {
    "network": "CallUpContact",
    "keyword": "plumbing company",
    "query": "site:callupcontact.com plumbing company \"@gmail.com\" \"Manchester\"",
    "title": "Northgate Plumbing and Heating - Business Profile - CallUpContact",
    "accountName": "Northgate Plumbing and Heating",
    "fullName": "Northgate Plumbing and Heating",
    "username": "northgate-plumbing-heating",
    "profileUrl": "https://www.callupcontact.com/b/businessprofile/northgate-plumbing-heating",
    "url": "https://www.callupcontact.com/b/businessprofile/northgate-plumbing-heating",
    "description": "Emergency plumbing and boiler repairs across Greater Manchester. Enquiries: northgateplumbing@gmail.com",
    "email": "northgateplumbing@gmail.com",
    "emailDomain": "@gmail.com",
    "possiblyTruncated": false,
    "foundAt": "2025-11-04T09:12:33Z"
  },
  {
    "network": "CallUpContact",
    "keyword": "removals company",
    "query": "site:callupcontact.com removals company contact \"@yahoo.co.uk\" \"Manchester\"",
    "title": "Swift Move Removals - Business Profile - CallUpContact",
    "accountName": "Swift Move Removals",
    "fullName": "Swift Move Removals",
    "username": "swift-move-removals",
    "profileUrl": "https://www.callupcontact.com/b/businessprofile/swift-move-removals",
    "url": "https://www.callupcontact.com/b/businessprofile/swift-move-removals",
    "description": "Domestic and office removals, packing and storage. Get a quote: swiftmoveremovals@yahoo.co.uk",
    "email": "swiftmoveremovals@yahoo.co.uk",
    "emailDomain": "@yahoo.co.uk",
    "possiblyTruncated": true,
    "foundAt": "2025-11-04T09:13:58Z"
  }
]
```

The dataset view in the Apify console shows email, account, name, username, profile, keyword, bio snippet and the truncation flag.
Export is available as CSV, JSON, XLSX or via the Apify API.
That makes the Callupcontact Email Scraper easy to wire into an existing pipeline.

### Use cases for the Callupcontact Email Scraper

The Callupcontact Email Scraper suits any workflow that needs owner-level contacts at small local firms.
The table pairs a goal with keywords and domains that tend to work for it.

| Use case | Suggested keywords | Suggested domains |
|---|---|---|
| Selling web design or SEO to local firms | `plumbing company`, `dentist`, `driving school` | `@gmail.com`, `@yahoo.com` |
| B2B supply and wholesale outreach | `catering supplies`, `print shop`, `garden centre` | `@gmail.com`, `@outlook.com` |
| Franchise and territory recruitment | `cleaning services`, `pest control`, `mobile mechanic` | `@gmail.com`, `@hotmail.com` |
| Insurance and finance prospecting | `contractor`, `courier service`, `taxi company` | `@gmail.com`, `@yahoo.co.uk` |
| Market and competitor research | `local business`, `services` | `@gmail.com` |
| CRM enrichment for an existing territory | your existing category list | your existing domain list |
| Recruiting owner-operators for a marketplace | `handyman`, `tutor`, `photographer` | `@gmail.com`, `@outlook.com` |

#### Building a local territory list

Run the Callupcontact Email Scraper once per city with the same keyword set.
Keep `maxEmails` modest per run so you can compare cities fairly.
Merge the datasets afterwards; global deduplication happens inside a run, not across runs.

#### Enriching an existing prospect file with the Callupcontact Email Scraper

Take the categories you already sell to and use them as keywords.
Set `customDomains` to the free-mail providers common in your market.
The `description` field often tells you what the business actually does, which helps with segmentation.

### Practical recipes for the Callupcontact Email Scraper

A UK trades sweep might use `keywords` of `plumber`, `electrician`, `roofer` and `joiner` with `countryCode` set to `GB`.
A US professional services sweep might use `accountant`, `law firm` and `insurance agency` with `countryCode` set to `US`.
In both cases keep `expandQueries` on, because a single query cannot reach past Google's result cap.

If you want the broadest possible net, drop `location`, raise `maxPagesPerQuery` to 30 and raise `maxEmails`.
If you want precision, set a tight `location`, use two or three very specific keywords and lower `maxEmails`.
Both modes use the same code path, so the only real difference is query volume.

### How many results the Callupcontact Email Scraper returns

A measured live run of the Callupcontact Email Scraper produced 10 blocks, 10 identity matches, 10 profile URLs and 10 unique emails.
That is a full-strength result: nearly every block that matched also resolved to a named profile with a handle.
CallUpContact is one of the three best-yielding sources in this category.

Real runs vary with keyword breadth, domain choice, country and how much of the directory Google currently indexes.
Free Apify plans stop at 100 emails per run; paid plans are uncapped.
No specific volume is guaranteed by the Callupcontact Email Scraper or by any Actor in this family.

### Limitations of the Callupcontact Email Scraper

These are real constraints, not disclaimers, and they apply to every run.

- The Callupcontact Email Scraper only finds accounts whose email is publicly visible in Google's index. A business that hides its address behind a contact form will not appear.
- Google caps a single query at roughly 300 results. Query expansion exists to work around that cap, and turning it off will reduce yield sharply.
- `possiblyTruncated: true` means Google's snippet ellipsis touched the email. Verify those addresses before you send anything.
- `username` and `profileUrl` are populated only when Google's result exposes a handle. Some rows will carry `accountName` and `fullName` with an empty handle; that is a Google limitation, not a bug.
- The Callupcontact Email Scraper 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 have no such cap.
- Results vary with keywords, domains and location. No volume is guaranteed.

The Callupcontact Email Scraper is not affiliated with, endorsed by or officially supported by CallUpContact.
It reads public search results only and does not access private data.

### Responsible use, GDPR and CAN-SPAM

Publicly visible does not mean freely usable.
If you contact people in the EU or UK, GDPR expects a lawful basis, a clear identity, a genuine reason for contacting that business and an easy way to object.
CAN-SPAM in the US expects accurate headers, a valid postal address and a working unsubscribe path.

Keep a record of where each address came from; the `query`, `profileUrl` and `foundAt` fields give you that provenance automatically.
Honour opt-outs immediately and suppress them across future runs of the Callupcontact Email Scraper.
This is general information about common obligations and not legal advice; check your own rules before you send.

### FAQ about the Callupcontact Email Scraper

#### Does the Callupcontact Email Scraper log into CallUpContact?

No. It never logs in, never uses a CallUpContact API and never opens the directory's site. All data comes from publicly indexed Google results.

#### How many results should I expect?

A measured live run returned 10 blocks, 10 identity matches, 10 profile URLs and 10 unique emails, which is among the strongest in this category. Your own numbers depend on keywords, domains, country and index coverage, and no volume is guaranteed.

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

The Callupcontact Email Scraper fills those fields only when Google exposes a handle in the result. When it only prints a display name, the row keeps `accountName` and `fullName` and leaves the handle blank.

#### What does `possiblyTruncated` mean?

Google's snippet was cut with an ellipsis right where the email sits, so the address may be incomplete. Treat those rows as needing verification.

#### Can I search domains other than Gmail and Yahoo?

Yes. `customDomains` accepts any list, with or without the leading `@`. Corporate domains work too if they appear in the indexed text.

#### Should I leave query expansion on?

Almost always. Google caps one query at roughly 300 results, so expansion is how the Callupcontact Email Scraper reaches beyond that ceiling.

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

Yes. It runs on the Apify GOOGLE_SERP proxy and cannot operate without Apify proxy credentials.

#### Can I run it on the Apify free plan?

Yes. The Callupcontact Email Scraper is capped at 100 emails per run on free plans, and paid plans remove that cap.

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

State is saved in the key-value store, keyed by a hash of the input, and restored on restart. Leads are also pushed to the dataset as they are found, so a partial run still has value.

#### How do I get more leads from the same keywords?

Give the Callupcontact Email Scraper more email domains, add more `queryModifiers`, raise `maxEmails` and run the same keyword set once per city rather than once nationally.

#### Are the emails verified?

No. The Callupcontact Email Scraper extracts what Google shows and normalises it. Run your own verification before a large send.

#### Which Actor should I use if CallUpContact is thin for my niche?

Try the [Yellow Pages Email Scraper](https://apify.com/leads-scraper/yellow-pages-email-scraper) for volume, the [Manta Email Scraper](https://apify.com/leads-scraper/manta-email-scraper) for US small business coverage, or the [N49 Email Scraper](https://apify.com/neuro-scraper/n49-email-scraper) for Canada.

### Related Actors

Thirty-six sibling Actors cover the rest of the Business and Professional Directories category that the Callupcontact Email Scraper belongs to.
They share the same input schema, output schema and behaviour, so anything you learn here transfers directly.
For home-services trades specifically, the [Bark Email Scraper](https://apify.com/leads-scraper/bark-email-scraper) and [Thumbtack Email Scraper](https://apify.com/leads-scraper/thumbtack-email-scraper) are the closest neighbours; for company intelligence, try the [Crunchbase Email Scraper](https://apify.com/leads-scraper/crunchbase-email-scraper).

| Actor | What it collects |
|---|---|
| [CallUpContact Email and Phone Number Scraper](https://apify.com/neuro-scraper/callupcontact-email-and-phone-number-scraper) | Emails and phone numbers from CallUpContact |
| [CallUpContact Phone Number Scraper](https://apify.com/neuro-scraper/callupcontact-phone-number-scraper) | Public phone numbers from CallUpContact |
| [Angi Email Scraper](https://apify.com/leads-scraper/angi-email-scraper) | Public contact emails from Angi |
| [Bark Email Scraper](https://apify.com/leads-scraper/bark-email-scraper) | Public contact emails from Bark |
| [Better Business Bureau Email Scraper](https://apify.com/leads-scraper/better-business-bureau-email-scraper) | Public contact emails from Better Business Bureau |
| [Bizapedia Email Scraper](https://apify.com/neuro-scraper/bizapedia-email-scraper) | Public contact emails from Bizapedia |
| [Brownbook Email Scraper](https://apify.com/neuro-scraper/brownbook-email-scraper) | Public contact emails from Brownbook |
| [Capterra Email Scraper](https://apify.com/leads-scraper/capterra-email-scraper) | Public contact emails from Capterra |
| [Clutch Email Scraper](https://apify.com/leads-scraper/clutch-email-scraper) | Public contact emails from Clutch |
| [Crunchbase Email Scraper](https://apify.com/leads-scraper/crunchbase-email-scraper) | Public contact emails from Crunchbase |
| [Cybo Email Scraper](https://apify.com/neuro-scraper/cybo-email-scraper) | Public contact emails from Cybo |
| [Cylex Email Scraper](https://apify.com/neuro-scraper/cylex-email-scraper) | Public contact emails from Cylex |
| [EC21 Email Scraper](https://apify.com/neuro-scraper/ec21-email-scraper) | Public contact emails from EC21 |
| [Europages Email Scraper](https://apify.com/leads-scraper/europages-email-scraper) | Public contact emails from Europages |
| [ExportHub Email Scraper](https://apify.com/neuro-scraper/exporthub-email-scraper) | Public contact emails from ExportHub |
| [FindUsLocal Email Scraper](https://apify.com/neuro-scraper/finduslocal-email-scraper) | Public contact emails from FindUsLocal |
| [Foursquare Email Scraper](https://apify.com/neuro-scraper/foursquare-email-scraper) | Public contact emails from Foursquare |
| [Fyple Email Scraper](https://apify.com/neuro-scraper/fyple-email-scraper) | Public contact emails from Fyple |
| [G2 Email Scraper](https://apify.com/neuro-scraper/g2-email-scraper) | Public contact emails from G2 |
| [Hotfrog Email Scraper](https://apify.com/leads-scraper/hotfrog-email-scraper) | Public contact emails from Hotfrog |
| [Houzz Email Scraper](https://apify.com/leads-scraper/houzz-email-scraper) | Public contact emails from Houzz |
| [Infobel Email Scraper](https://apify.com/neuro-scraper/infobel-email-scraper) | Public contact emails from Infobel |
| [Kompass Email Scraper](https://apify.com/leads-scraper/kompass-email-scraper) | Public contact emails from Kompass |
| [Lacartes Email Scraper](https://apify.com/neuro-scraper/lacartes-email-scraper) | Public contact emails from Lacartes |
| [Manta Email Scraper](https://apify.com/leads-scraper/manta-email-scraper) | Public contact emails from Manta |
| [MapQuest Email Scraper](https://apify.com/neuro-scraper/mapquest-email-scraper) | Public contact emails from MapQuest |
| [N49 Email Scraper](https://apify.com/neuro-scraper/n49-email-scraper) | Public contact emails from N49 |
| [Porch Email Scraper](https://apify.com/neuro-scraper/porch-email-scraper) | Public contact emails from Porch |
| [Scoot Email Scraper](https://apify.com/neuro-scraper/scoot-email-scraper) | Public contact emails from Scoot |
| [Thomasnet Email Scraper](https://apify.com/leads-scraper/thomasnet-email-scraper) | Public contact emails from Thomasnet |
| [Thumbtack Email Scraper](https://apify.com/leads-scraper/thumbtack-email-scraper) | Public contact emails from Thumbtack |
| [Touch Local Email Scraper](https://apify.com/leads-scraper/touch-local-email-scraper) | Public contact emails from Touch Local |
| [TradeIndia Email Scraper](https://apify.com/leads-scraper/tradeindia-email-scraper) | Public contact emails from TradeIndia |
| [Trustpilot Email Scraper](https://apify.com/leads-scraper/trustpilot-email-scraper) | Public contact emails from Trustpilot |
| [Tupalo Email Scraper](https://apify.com/leads-scraper/tupalo-email-scraper) | Public contact emails from Tupalo |
| [Yalwa Email Scraper](https://apify.com/leads-scraper/yalwa-email-scraper) | Public contact emails from Yalwa |
| [Yellow Pages Email Scraper](https://apify.com/leads-scraper/yellow-pages-email-scraper) | Public contact emails from Yellow Pages |
| [Angi Email and Phone Number Scraper](https://apify.com/neuro-scraper/angi-email-and-phone-number-scraper) | Emails and phone numbers from Angi |
| [Bark Email and Phone Number Scraper](https://apify.com/neuro-scraper/bark-email-and-phone-number-scraper) | Emails and phone numbers from Bark |
| [Better Business Bureau Email and Phone Number Scraper](https://apify.com/leads-scraper/better-business-bureau-email-and-phone-number-scraper) | Emails and phone numbers from Better Business Bureau |
| [Bizapedia Email and Phone Number Scraper](https://apify.com/neuro-scraper/bizapedia-email-and-phone-number-scraper) | Emails and phone numbers from Bizapedia |
| [Brownbook Email and Phone Number Scraper](https://apify.com/neuro-scraper/brownbook-email-and-phone-number-scraper) | Emails and phone numbers from Brownbook |

### Leave a review

If the Callupcontact 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, bug reports or a custom build request for the Callupcontact Email Scraper: contact neurodata.apify@gmail.com.

# Actor input Schema

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

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

## `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": [
    "local business",
    "services"
  ],
  "location": "",
  "customDomains": [
    "@gmail.com",
    "@yahoo.com"
  ],
  "maxEmails": 20,
  "countryCode": "",
  "expandQueries": true,
  "queryModifiers": [
    "email",
    "contact",
    "enquiries",
    "owner",
    "get a quote"
  ],
  "maxPagesPerQuery": 30,
  "maxConcurrency": 5
}
```

# Actor output Schema

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

Records produced by Callupcontact 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": [
        "local business",
        "services"
    ],
    "location": "",
    "customDomains": [
        "@gmail.com",
        "@yahoo.com"
    ],
    "countryCode": "",
    "queryModifiers": [
        "email",
        "contact",
        "enquiries",
        "owner",
        "get a quote"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("neuro-scraper/callupcontact-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": [
        "local business",
        "services",
    ],
    "location": "",
    "customDomains": [
        "@gmail.com",
        "@yahoo.com",
    ],
    "countryCode": "",
    "queryModifiers": [
        "email",
        "contact",
        "enquiries",
        "owner",
        "get a quote",
    ],
}

# Run the Actor and wait for it to finish
run = client.actor("neuro-scraper/callupcontact-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": [
    "local business",
    "services"
  ],
  "location": "",
  "customDomains": [
    "@gmail.com",
    "@yahoo.com"
  ],
  "countryCode": "",
  "queryModifiers": [
    "email",
    "contact",
    "enquiries",
    "owner",
    "get a quote"
  ]
}' |
apify call neuro-scraper/callupcontact-email-scraper --silent --output-dataset

```

## MCP server setup

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