# Contact Details Scraper (`vdrmota/contact-info-scraper`) Actor

Email extractor and lead scraper to extract and download emails, phone numbers, Facebook, Twitter, LinkedIn, Instagram, Threads, Snapchat, and Telegram profiles from any website. Extract contact information at scale from lists of URLs and download the data as Excel, CSV, JSON, HTML, and XML.

- **URL**: https://apify.com/vdrmota/contact-info-scraper.md
- **Developed by:** [Vojta Drmota](https://apify.com/vdrmota) (Apify)
- **Categories:** Lead generation, Social media
- **Stats:** 62,323 total users, 2,595 monthly users, 100.0% runs succeeded, 874 bookmarks
- **User rating**: 4.69 out of 5 stars

## Pricing

from $1.05 / 1,000 scraped pages

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
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 is Contact Details Scraper?

Contact Details Scraper can crawl any website and extract the listed contact information for everybody mentioned on the site.

- Extract **any contact details** from a site, such as email address, phone number, and social media accounts
- Also scrapes WhatsApp and Telegram information, as well as Snapchat, Discord, and any other communication type
- Use the **Business Leads Enrichment** add-on to add more detail, such as listed people’s job title, website, and LinkedIn
- Find scraped data in a handy table, or export it in multiple formats like **JSON, CSV, Excel, or HTML**
- Export via SDKs (Python & Node.js), use **API Endpoints**, **webhooks**, or integrate with workflows

### What data can I extract with Contact Details Scraper?

Contact Details Scraper can find contact details on almost any webpage. It will find any of the following:

<table>
<tr>
<td>📧 Email addresses</td>
<td>📞 Phone numbers</td>
<td>💼 LinkedIn profiles</td>
</tr>
<tr>
<td>X (Twitter) handles</td>
<td>📸 Instagram profiles</td>
<td>📘 Facebook profiles/pages</td>
</tr>
<tr>
<td>▶️ YouTube accounts</td>
<td>🎵 TikTok profiles</td>
<td>📌 Pinterest profiles</td>
</tr>
<tr>
<td>🎮 Discord pages</td>
<td>👻 Snapchat profiles</td>
<td>🧵 Threads profiles</td>
</tr>
<tr>
<td>✈️ Telegram profiles/groups</td>
<td>👥 Reddit pages</td>
<td>💬 WhatsApp information</td>
</tr>
</table>

#### 👥 Lead generation

On top of this, Contact Details Scraper can use lead enrichment, which extracts detailed employee information from companies:

- Extract employee profiles, including names, job titles, departments, and contact information
- Filter results by specific departments
- Provide LinkedIn profiles, email addresses, and phone numbers
- Company information such as size, location, and industry

#### 🔍 Social media profiles enrichment

Contact Details Scraper can also enrich discovered social media URLs with detailed profile information. When enabled, this feature will:

- Extract profile data from Facebook, Instagram, YouTube, TikTok, and Twitter URLs
- Create dedicated dataset views for each social media platform for easy access

**Important notes:**

- Social media profile enrichment requires enabling "Merge contacts" mode
- Each enriched social media profile counts as a separate billable event
- Enriched profiles are available in the **Social profiles** output view tab
- Profiles found on [Linktree](https://linktr.ee) pages are enriched too (see [Linktree pages](#-linktree-pages) below)

#### 🌳 Linktree pages

Contact Details Scraper follows [Linktree](https://linktr.ee) link-in-bio pages. When it lands on a `linktr.ee` profile, it reads every link on the page and scrapes those linked sites for contact details.

This works both ways:

- Pass a `linktr.ee` URL directly as a start URL, or
- Let the Actor discover one while crawling another site

In both cases the linked sites are crawled even with **Stay within domain** enabled.

**Important notes:**

- Linked sites are treated as if you had passed them in directly, so the **Maximum link depth** setting still applies to them from the Linktree page onwards
- The Linktree page and each linked page it leads to are billed as scraped pages
- Links to Facebook, Instagram, and TikTok are not crawled directly, but the profile URLs are still captured in the output - enable **Social media profile enrichment** to pull their details

### How to use Contact Details Scraper

Contact Details Scraper is designed with users in mind, even those who have never extracted data from the web before. You use it in just a few steps.

1. [Create](https://console.apify.com/actors/9Sk4JJhEma9vBKqrg/) a free Apify account using your email
2. Open [Contact Details Scraper](https://apify.com/vdrmota/contact-info-scraper)
3. Add one or more sites to scrape
4. Click the “Start” button and wait for the data to be extracted
5. View your data in the UI, or download it in JSON, XML, CSV, Excel, or HTML

Apify also has a video tutorial that will guide you through the process:

https://www.youtube.com/watch?v=GvuT5Zy6xhI

### Input

To get started, just enter the site URL you want to scrape, and set how many pages you want to scrape initially. Then hit “start” and the Actor will get to work.

<a href="https://console.apify.com/actors/9Sk4JJhEma9vBKqrg/">
<img src="https://github.com/apify-projects/actor-readme-images/blob/master/contact-details-scraper-input.png?raw=true" alt="Contact Details Scraper input" style="width:70%;">
</a>

#### Leads enrichment

To use lead enrichment, set the `maximumLeadsEnrichmentRecords` parameter to a number higher than 0 to specify how many employee records to extract per company, and optionally use `leadsEnrichmentDepartments` to filter by specific departments.

To make the most of this function, Apify recommends setting the number of scraped pages as follows:

- For only leads enrichment, set the number of scraped pages to 1.
- For leads enrichment AND contact details scraping, set it to 2 or 3 pages.

##### Email verification

When `verifyLeadsEnrichmentEmails` is enabled, each lead's email address is verified and an `emailVerification` object is added to the lead output. Requires Business leads enrichment to be active.

**Charged (decisive results):**

- `ok` - Valid, deliverable email address
- `invalid` - Invalid or non-existent email address
- `disposable` - Disposable or temporary email address

**Not charged:**

- `catch_all` - The domain accepts all addresses; individual deliverability cannot be confirmed
- `unknown` - Verification result could not be determined
- `error` - Verification encountered a technical error

```json
{
    "email": "james.hill@apify.com",
    "quality": "good",
    "result": "ok",
    "subResult": "accepted_email",
    "free": false,
    "role": false,
    "error": ""
}
```

### Output

The results will be wrapped into a dataset which you can find in the **Storage** tab. Here's an excerpt from the dataset you'd get if you apply the input parameters above:

<a href="https://console.apify.com/actors/9Sk4JJhEma9vBKqrg/">
<img src="https://github.com/apify-projects/actor-readme-images/blob/master/contact-details-scraper-output.png?raw=true" alt="Contact Details Scraper output" style="width:70%;">
</a>

Here is part of that output in JSON:

```json
[
    {
        "originalStartUrl": "https://apify.com",
        "domain": "apify.com",
        "scrapedUrls": ["https://apify.com/contact", "https://apify.com/contact-sales", "https://apify.com/"],
        "leadsEnrichment": [
            {
                "personId": "60c5b4b693b4440001970d6e",
                "firstName": "James",
                "lastName": "Hill",
                "fullName": "James Hill",
                "linkedinProfile": "http://www.linkedin.com/in/jameshill",
                "email": "james.hill@apify.com",
                "mobileNumber": null,
                "jobTitle": "Product Manager",
                "industry": "Information Technology & Services",
                "city": "Prague",
                "state": "Hlavni mesto Praha",
                "country": "Czech Republic",
                "companyId": "5a9d952ba6da98d9a159cdde",
                "companyName": "Apify",
                "companyWebsite": "apify.com",
                "companySize": null,
                "companyLinkedin": "http://www.linkedin.com/company/apifytech",
                "companyCity": null,
                "companyState": "Hlavni mesto Praha",
                "companyCountry": "Czechia",
                "companyPhoneNumber": "+18776761166",
                "headline": "Building a full-stack platform for web scraping and data for AI.",
                "departments": ["product"],
                "seniority": "senior",
                "photoUrl": "https://media.licdn.com/dms/image/D4E03AQGVYzvGHp9zhw/profile-displayphoto-shrink_200_200/0/1688982177437?e=2147483647&v=beta&t=O5O0vOrGxecs-dTwEoEKJGi-AV2QDIY_zZaajyLTshs",
                "twitter": null
            },
            {
                "personId": "59c158d1a6da9873759140ae",
                "firstName": "Michaela",
                "lastName": "Blue",
                "fullName": "Michaela Blue",
                "linkedinProfile": "http://www.linkedin.com/in/michaelablue",
                "email": "michaela.blue@apify.com",
                "mobileNumber": null,
                "jobTitle": "Product Owner",
                "industry": "Information Technology & Services",
                "city": "Prague",
                "state": "Hlavni mesto Praha",
                "country": "Czech Republic",
                "companyId": "5a9d952ba6da98d9a159cdde",
                "companyName": "Apify",
                "companyWebsite": "apify.com",
                "companySize": null,
                "companyLinkedin": "http://www.linkedin.com/company/apifytech",
                "companyCity": null,
                "companyState": "Hlavni mesto Praha",
                "companyCountry": "Czechia",
                "companyPhoneNumber": "+18776761166",
                "headline": "Product Owner",
                "departments": ["product"],
                "seniority": "senior",
                "photoUrl": "https://static.licdn.com/aero-v1/sc/h/9c8pery3andzj6ohjkjp54ma1",
                "twitter": null
            },
            {
                "personId": "57db409fa6da984c106b6227",
                "firstName": "Francis",
                "lastName": "Goodwell",
                "fullName": "Francis Goodwell",
                "linkedinProfile": "http://www.linkedin.com/in/fgoodwell",
                "email": "francis.goodwell@apify.com",
                "mobileNumber": null,
                "jobTitle": "Senior Full Stack Engineer & Team Leader",
                "industry": null,
                "city": "Prague",
                "state": "Hlavni mesto Praha",
                "country": "Czech Republic",
                "companyId": "5a9d952ba6da98d9a159cdde",
                "companyName": "Apify",
                "companyWebsite": "apify.com",
                "companySize": null,
                "companyLinkedin": "http://www.linkedin.com/company/apifytech",
                "companyCity": null,
                "companyState": null,
                "companyCountry": null,
                "companyPhoneNumber": "+18776761166",
                "headline": "Senior full-stack developer & team leader",
                "departments": ["engineering_technical"],
                "seniority": "senior",
                "photoUrl": "https://media.licdn.com/dms/image/v2/D4E03AQEI12nPbyk8VqA/profile-displayphoto-shrink_200_200/profile-displayphoto-shrink_200_200/0/1677444613135?e=2147473647&v=beta&t=uOT8poJjY6ie22fpBbNX2_15KbY2SvesjNpObDCLIkg",
                "twitter": null
            }
        ],
        "emails": ["hello@apify.com"],
        "phones": [],
        "phonesUncertain": ["04788290", "373153700", "035500000000002", "7434378"],
        "linkedIns": ["https://www.linkedin.com/company/apify", "http://linkedin.com/company/apify"],
        "twitters": ["https://x.com/apify"],
        "instagrams": [],
        "facebooks": [],
        "youtubes": ["https://www.youtube.com/apify"],
        "tiktoks": ["https://www.tiktok.com/@apifyoffice", "https://www.tiktok.com/@apifytech"],
        "pinterests": [],
        "discords": ["https://discord.com/invite/jyEM2PRvMU"],
        "snapchats": [],
        "threads": [],
        "telegrams": [],
        "reddits": [],
        "whatsapps": [],
        "facebookProfiles": [],
        "instagramProfiles": [],
        "youtubeProfiles": [
            {
                "startUrl": "https://www.youtube.com/apify",
                "profileName": "Apify",
                "profilePictureURL": "https://yt3.googleusercontent.com/gBQONhVo1W-2YI8tJ-RQLOjYtBksDOayrsj7TiJ1SiKrApfhzjw2fnyYocBuZCb06G7kYP5RRg=s160-c-k-c0x00ffffff-no-rj",
                "location": "Czechia",
                "description": "Welcome to Apify’s official YouTube channel!\n\nApify is a web scraping and automation platform, which lets you automate anything you can do in a web browser 🚀\n\nGather data with pre-built tools we call Actors and further use it to feed generative AI or for lead generation, machine learning, market research, and a myriad of other use cases 🤖\n\nAre you a developer? Build your own Actors and publish them on Apify Store to earn passive income 💸\n\nSubscribe now for tutorials on how to use our Actors, build your own ones, utilize our open-source libraries, or learn about various web scraping technologies 📖",
                "followersCount": 10600,
                "externalProfileURL": "https://www.youtube.com/channel/UCTgwcoeGGKmZ3zzCXN2qo_A",
                "profileURL": "https://www.youtube.com/channel/UCTgwcoeGGKmZ3zzCXN2qo_A",
                "creationDate": "Jan 4, 2017",
                "coverPhoto": "https://yt3.googleusercontent.com/cdKlrmQSWEGXVgZbEr-dVN-W_GwH9ifLidL951d-Ne57qIHDthpZgjqczTKf_kEY7ucTW5wWiYc=w2560-fcrop64=1,00005a57ffffa5a8-k-c0xffffffff-no-nd-rj",
                "accountVerificationStatus": false,
                "socialInputUrl": "https://www.youtube.com/apify",
                "channelTotalVideos": 180,
                "channelTotalViews": 827803,
                "isAgeRestricted": false,
                "id": "UCTgwcoeGGKmZ3zzCXN2qo_A",
                "username": null,
                "followingCount": null,
                "privateProfile": null
            }
        ],
        "tiktokProfiles": [
            {
                "startUrl": "https://www.tiktok.com/@apifyoffice",
                "profileName": "apifyoffice",
                "profilePictureURL": "https://p16-pu-sign-no.tiktokcdn-eu.com/tos-no1a-avt-0068c001-no/3161932a8654b0659fbbd1dca63c640a~tplv-tiktokx-cropcenter:720:720.jpeg?dr=10399&refresh_token=df0295a6&x-expires=1761912000&x-signature=GUlT0p%2Fp6pO15fNbuqVOyTw0svo%3B&t=4d5b0474&ps=13740610&shp=a5d48078&shcp=81f88b70&idc=no1a",
                "description": "🤖 web scraping and AI 🤖\n\ncheck out our open positions at ✨apify.it/jobs✨",
                "username": "apifyoffice",
                "followersCount": 157,
                "externalProfileURL": null,
                "privateProfile": false,
                "socialInputUrl": "https://www.tiktok.com/@apifyoffice",
                "videosCount": 43,
                "tiktokSeller": false,
                "authorId": "7095709566285480965",
                "followingCount": null,
                "profileURL": null,
                "creationDate": null,
                "accountVerificationStatus": null,
                "coverPhoto": null
            },
            {
                "startUrl": "https://www.tiktok.com/@apifytech",
                "profileName": "apifytech",
                "profilePictureURL": "https://p16-pu-sign-no.tiktokcdn-eu.com/tos-no1a-avt-0068c001-no/4b007abaf573cd0169af10350eb3a6c7~tplv-tiktokx-cropcenter:720:720.jpeg?dr=10399&refresh_token=ae8e06a2&x-expires=1761912000&x-signature=SKuzn%2BlQX7VIhrwDACHYKq%2FGzGY%3D&t=4d5b0474&ps=13740610&shp=a5d48078&shcp=81f88b70&idc=no1a",
                "description": "👋 Hi, we’re Apify, and we make the web more programmable.\nMore at @apifyoffice",
                "username": "apifytech",
                "followersCount": 1015,
                "externalProfileURL": "apify.com",
                "privateProfile": false,
                "socialInputUrl": "https://www.tiktok.com/@apifytech",
                "videosCount": 31,
                "tiktokSeller": false,
                "authorId": "7353570794285417504",
                "followingCount": null,
                "profileURL": null,
                "creationDate": null,
                "accountVerificationStatus": null,
                "coverPhoto": null
            }
        ],
        "twitterProfiles": [
            {
                "startUrl": "https://x.com/apify"
            }
        ]
    }
]
```

### Deduplicate and merge contacts

Contact Details Scraper provides the contacts inside one item per scraped URL. This is good for analysis to check where the contact was found but can make it hard to process.

Fortunately, you can use [Contact Details Merge & Deduplicate](https://apify.com/lukaskrivka/contact-details-merge-deduplicate) Actor to merge and deduplicate the contacts. This Actor takes one or more dataset IDs of the Contact Details Scraper and merges and deduplicates all contacts so that each domain is on one row. You can choose if contacts of one type should be in only one column or spread.

### How much will using Contact Details Scraper cost you?

Contact Details Scraper uses the pay-per-event (PPE) pricing model, so you pay for each action you perform. Check the [pricing tab](https://apify.com/vdrmota/contact-info-scraper/pricing) for details

The Free plan includes $5 of prepaid credits. With that, you could start the Actor and scrape around 2,500 pages. If you upgrade to any of Apify's paid plans, you will get a discount, allowing you to scrape even more for the same price. Check out the [Apify pricing page](https://apify.com/pricing) for more details.

Note that lead enrichment carries an extra cost. Significant discounts are available on higher-tier plans. Please see the [Pricing tab](https://apify.com/vdrmota/contact-info-scraper/pricing) for your exact rate based on your subscription.

### Frequently asked questions

#### Can I use Contact Details Scraper to extract emails from Google Maps?

Yes, but for more precise results it's better to use a specialized scraper like [Google Maps Scraper](https://apify.com/compass/crawler-google-places).

#### Can I use integrations with Contact Details Scraper?

You can integrate Contact Details Scraper with almost any cloud service or web app. Apify offers integrations with **Make, Zapier, Slack, Airbyte, GitHub, Google Sheets, Google Drive**, [and plenty more](https://docs.apify.com/integrations).

Alternatively, you could use [webhooks](https://docs.apify.com/integrations/webhooks) to carry out an action whenever an event occurs, such as getting a notification whenever Contact Details Scraper successfully finishes a run.

#### Can I use Contact Details Scraper with the Apify API?

The Apify API gives you programmatic access to the Apify platform. The API is organized around RESTful HTTP endpoints that enable you to manage, schedule, and run Apify Actors. The API also lets you access any datasets, monitor Actor performance, fetch results, create and update versions, and more.

To access the API using Node.js, use the `apify-client` [npm package](https://apify.com/vdrmota/contact-info-scraper/api/javascript). To access the API using Python, use the `apify-client` [PyPI package](https://apify.com/vdrmota/contact-info-scraper/api/python). Check out the [Apify API reference](https://docs.apify.com/api/v2) docs for all the details.

#### Can I use Contact Details Scraper through an MCP server?

With Apify API, you can use almost any Actor in conjunction with an MCP (Model Context Protocol) server. You can connect to the MCP server using clients like Claude Desktop and LibreChat, or even build your own. Read all about how you can [set up Apify Actors with MCP](https://blog.apify.com/how-to-use-mcp/).

For Contact Details Scraper, go to the [MCP tab](https://apify.com/vdrmota/contact-info-scraper/api/mcp) and then go through the following steps:

1. Start a Server-Sent Events (SSE) session to receive a `sessionId`
2. Send API messages using that `sessionId` to trigger the scraper
3. The message starts the Contact Details Scraper with the provided input
4. The response should be: `Accepted`

#### Is it legal to scrape contact details?

Web scraping is legal as long as you don’t scrape private data. However, you should be aware that your results might contain personal data, which is protected by GDPR (General Data Protection Regulation) in the European Union and in other laws from around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers. You can read our blog post on the [legality of web scraping](https://blog.apify.com/is-web-scraping-legal/) for more information.

#### Your feedback

We’re always working on improving the performance of Apify’s Actors. If you have any technical feedback for Contact Details Scraper or found a bug, please create an issue in the [Issues tab](https://apify.com/vdrmota/contact-info-scraper/issues/open).

# Changelog

This Actor's version history is a separate document: https://apify.com/vdrmota/contact-info-scraper/changelog.md

# Actor input Schema

## `startUrls` (type: `array`):

The list of web pages from which the scraper will start crawling.<br><br>You can also pass <a href="https://linktr.ee">Linktree</a> (<code>linktr.ee</code>) link-in-bio pages. The Actor reads every link on the profile and scrapes those linked sites for contact details, even with <b>Stay within domain</b> enabled.

## `maxRequestsPerStartUrl` (type: `integer`):

The maximum number of pages that will be enqueued from each start URL you provide.

## `mergeContacts` (type: `boolean`):

Enable this option to merge all contacts and social media from every page of the same start URL into a single, clean result row.

## `maxDepth` (type: `integer`):

The maximum number of links away from the <b>Start URLs</b> that the Actor will crawl. If <code>0</code>, the scraper will not follow any links. If empty or null, the scraper will follow links to an arbitrary depth.

## `maxRequests` (type: `integer`):

The maximum number of pages the scraper will load. It is always a good idea to limit the number of pages, otherwise the scraper might run infinitely or consume too many resources.

## `sameDomain` (type: `boolean`):

If set, the scraper will only follow links within the same domain as the referring page.<br><br>Links found on a <a href="https://linktr.ee">Linktree</a> (<code>linktr.ee</code>) page are an exception - they are always followed, even when this is enabled.

## `considerChildFrames` (type: `boolean`):

If set, the scraper will also extract contact information from iframes. You might not always want this (e.g. it will include data from online ads).

## `maximumLeadsEnrichmentRecords` (type: `integer`):

Set the maximum number of lead records to scrape per domain found. Default is <code>0</code>, meaning no leads are scraped.<br><br>⚠️ Some fields contain <b>personal data</b>, which is protected by GDPR in the EU and by other regulations worldwide. Only scrape personal data if you have a legitimate reason to do so; if you're unsure, consult an attorney.<br><br>To keep leads relevant, large chains and online platforms (e.g. social media, retail giants, food delivery) are filtered out automatically.

## `leadsEnrichmentDepartments` (type: `array`):

Include only specific departments (e.g. Sales, Marketing, or C-Suite). Only works when the <b>Maximum leads per domain</b> add-on (<code>maximumLeadsEnrichmentRecords</code>) is enabled. Note that some job titles may be miscategorized.

## `verifyLeadsEnrichmentEmails` (type: `boolean`):

When enabled, verifies the email address of each lead extracted during business leads enrichment. Each lead receives an <b>emailVerification</b> object with the verification result and quality assessment.<br><br><b>Charged (decisive results):</b> valid (<code>ok</code>), invalid, and disposable email addresses.<br><b>Not charged:</b> catch-all, unknown, and error results.<br><br>⚠️ This add-on requires business leads enrichment to be enabled.

## `scrapeSocialMediaProfiles` (type: `object`):

Enriched profiles are available in the <b>Social profiles</b> output tab. See the section description above for what data is retrieved and how it's priced.

## `useBrowser` (type: `boolean`):

If set, the scraper will use a browser for crawling the pages.

## `waitUntil` (type: `string`):

Select when a page should be considered loaded so that the Actor can start scraping it. *Only works with the browser.*

## `proxyConfig` (type: `object`):

Proxy servers let you bypass website protections, avoid IP address blocking, and view content for other countries. Try to use a proxy if you are experiencing timeout errors.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://apify.com"
    }
  ],
  "maxRequestsPerStartUrl": 20,
  "mergeContacts": true,
  "maxDepth": 2,
  "maxRequests": 9999999,
  "sameDomain": true,
  "considerChildFrames": true,
  "maximumLeadsEnrichmentRecords": 0,
  "leadsEnrichmentDepartments": [
    "sales",
    "marketing"
  ],
  "verifyLeadsEnrichmentEmails": false,
  "scrapeSocialMediaProfiles": {
    "facebooks": false,
    "instagrams": false,
    "youtubes": false,
    "tiktoks": false,
    "twitters": false
  },
  "useBrowser": false,
  "waitUntil": "domcontentloaded",
  "proxyConfig": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `dataset` (type: `string`):

Dataset containing all scraped data

# 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 = {
    "startUrls": [
        {
            "url": "https://apify.com"
        }
    ],
    "maxRequestsPerStartUrl": 20,
    "mergeContacts": true,
    "maxDepth": 2,
    "maxRequests": 9999999,
    "maximumLeadsEnrichmentRecords": 0,
    "scrapeSocialMediaProfiles": {
        "facebooks": false,
        "instagrams": false,
        "youtubes": false,
        "tiktoks": false,
        "twitters": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("vdrmota/contact-info-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 = {
    "startUrls": [{ "url": "https://apify.com" }],
    "maxRequestsPerStartUrl": 20,
    "mergeContacts": True,
    "maxDepth": 2,
    "maxRequests": 9999999,
    "maximumLeadsEnrichmentRecords": 0,
    "scrapeSocialMediaProfiles": {
        "facebooks": False,
        "instagrams": False,
        "youtubes": False,
        "tiktoks": False,
        "twitters": False,
    },
}

# Run the Actor and wait for it to finish
run = client.actor("vdrmota/contact-info-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 '{
  "startUrls": [
    {
      "url": "https://apify.com"
    }
  ],
  "maxRequestsPerStartUrl": 20,
  "mergeContacts": true,
  "maxDepth": 2,
  "maxRequests": 9999999,
  "maximumLeadsEnrichmentRecords": 0,
  "scrapeSocialMediaProfiles": {
    "facebooks": false,
    "instagrams": false,
    "youtubes": false,
    "tiktoks": false,
    "twitters": false
  }
}' |
apify call vdrmota/contact-info-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,vdrmota/contact-info-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/9Sk4JJhEma9vBKqrg/builds/hPegy9X4X7FMN0lC8/openapi.json
