# Lead File Import Checker (`mambalabs/lead-file-import-checker`) Actor

Check a lead list before a CRM or sequencer import: email syntax, duplicates, free mail, role and disposable addresses, domain DNS and MX, live and parked sites, company name match, and missing fields. Import, review, or reject per row. No mailbox check.

- **URL**: https://apify.com/mambalabs/lead-file-import-checker.md
- **Developed by:** [Mamba Labs](https://apify.com/mambalabs) (community)
- **Categories:** Lead generation, Automation, Integrations
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.70 / 1,000 row checkeds

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

## Lead File Import Checker

Check a lead file before it goes into your CRM or sequencer. Give it rows, a link to a CSV file, or an Apify dataset, and every row comes back with the problems an import would carry: a broken or disposable email address, a duplicate, a role inbox, a free mail address on a B2B list, an email domain that cannot receive mail, a dead or parked company website, a company name that does not match the website, or a missing required field. Each row gets one verdict, `import`, `review`, or `reject`, so you can filter the file and load only what is clean.

This actor does not verify mailboxes. It never connects to a mail server and never sends anything, so it cannot tell whether a specific inbox exists. It checks the address, the lists, the domain's DNS, and the company homepage. To verify mailboxes, run the clean rows through the mailbox verifier you already use, on your own account.

### Features

- **One verdict per row.** `reject` for rows that should stay out, `review` for rows a person should look at, `import` for rows with no issue. The `issues` column lists every reason.
- **Duplicates, the way inboxes see them.** `Jane@Stripe.com` and `jane+news@stripe.com` are one person; so are `j.doe@gmail.com` and `jdoe@gmail.com`. Rows with no email are grouped on domain plus first and last name. The first row in a group is kept and the rest point back to it.
- **Address checks.** Syntax, free mail (119 consumer domains such as gmail.com and outlook.com), role inboxes (98 names such as info, sales, and support), and disposable domains (9,963 from the public CC0 list).
- **Domain checks.** DNS A, AAAA, and MX for the email's domain, so a typo domain or a domain with no mail server is caught before a bounce.
- **Website checks.** One homepage read per company domain, at most 64 KB: live or not, parked or for sale, and whether the company name in your row appears in the homepage title or the names the site gives itself (og:site_name, application-name, og:title). Pages are decoded in their own character set.
- **Any file shape.** Common header names are found on their own (Email, Work Email, Website, Company Name, First Name), or name your columns in `column_map`. Comma, semicolon, tab, and pipe separators are detected.
- **Your original row comes back.** `input_row_json` carries it, and `row_index` keeps the file order.

### Input

| Field | Type | Default | What it does |
|---|---|---|---|
| `rows` | array of objects | | Your rows as JSON. One of `rows`, `csv_url`, or `dataset_id` |
| `csv_url` | string | | A public link to a CSV file with a header row, up to 50 MB |
| `dataset_id` | string | | An Apify dataset from one of your runs |
| `column_map` | object | | Which column holds `email`, `domain`, `company`, `first_name`, `last_name`, and `date` |
| `required_fields` | array | `["email"]` | Fields a row must have, or it is rejected |
| `checks` | array | all | Any of `syntax`, `duplicates`, `free_mail`, `role`, `disposable`, `dns`, `site`, `company_match`, `missing_fields`, `stale` |
| `check_websites` | string, `true` or `false` | `true` | Read company homepages for the site and company name checks |
| `stale_days` | string | | With a `date` column: rows older than this many days get `stale` |
| `max_rows` | string | `5000` | Check at most this many rows, up to 50,000 |
| `max_charge_usd` | string | | Stop before a charge that would pass this amount |

### Output

One row per input row, in file order. Every row has the same columns.

| Field | Type | Meaning |
|---|---|---|
| `row_index` | integer | Position of the row in your file, counting from 1 after blank rows are skipped. Use it to join the results back. |
| `import_verdict` | string | import: no issue found. review: an issue to look at (free mail, role address, parked or unreachable site, company name mismatch, stale, email and domain columns disagree, DNS error). reject: an issue that should keep the row out (bad syntax, disposable address, duplicate, email domain does not exist or has no mail server, missing required field). |
| `issues` | array | Every issue found, as codes: invalid_email_syntax, free_mail_address, role_address, disposable_address, duplicate, email_domain_not_found, email_domain_no_mx, domain_not_found, dns_error, email_domain_differs_from_domain, site_unreachable, site_parked, company_name_mismatch, missing_required_field, stale. |
| `input_email` | string | The email cell from your file, unchanged except for trimming. |
| `input_domain` | string | The domain or website cell from your file. |
| `input_company` | string | The company cell from your file. |
| `input_first_name` | string | The first name cell from your file. |
| `input_last_name` | string | The last name cell from your file. |
| `normalized_email` | string | The address lowercased and trimmed, when its syntax is valid. |
| `normalized_domain` | string | The registrable company domain: from the domain column when given, otherwise from a work email address (a free mail domain such as gmail.com is kept only when nothing else is known). |
| `email_syntax_valid` | boolean | true when the address is well formed, false when it is not, empty when the row has no email. |
| `is_free_mail` | boolean | true for a consumer mailbox domain such as gmail.com or outlook.com. |
| `is_role_address` | boolean | true when the part before @ names a function or a shared inbox (one of 98 role names, such as info, sales, support, and hr), not a person. |
| `is_disposable` | boolean | true when the domain is on the public disposable email list (9,963 domains, CC0, read 2026-10-27). |
| `duplicate_group` | string | The key rows are grouped on: email:\<address without +tag, and without dots for Gmail>, or person:<domain>|<first last> for a row with no valid email. |
| `is_duplicate` | boolean | true for every row after the first one in its group. The first row is false. |
| `duplicate_of_row_index` | integer | The row index of the first row in the group, on a duplicate. |
| `domain_resolves` | boolean | The email address's domain (or the domain column when the row has no email) has a DNS A, AAAA, or MX record. |
| `has_mx` | boolean | The same domain publishes at least one MX record, so it can receive mail. This is not a mailbox check. |
| `mx_host` | string | The highest priority MX host. |
| `site_status` | integer | HTTP status of the company domain's homepage, after redirects. 401, 403, and 429 mean the site refused the check and are not counted as unreachable. Empty when the site did not answer. |
| `site_final_url` | string | The homepage address after redirects. |
| `site_title` | string | The homepage title, up to 300 characters. Empty behind a bot wall. |
| `is_parked` | boolean | true when the homepage is a for sale or parking page. |
| `company_name_match` | string | match or mismatch: the company cell compared with the homepage title and the names the site gives itself (og:site_name, application-name, og:title). unknown: no company cell, no readable homepage, or a page with no Latin letters. A domain that only contains the name does not count as a match. |
| `missing_fields` | array | Required fields that are empty in this row (required_fields, default email). |
| `stale_flag` | boolean | true when the date column is older than stale_days. Empty unless both are set. |
| `input_row_json` | string | Your original row as JSON, up to 5,000 characters, so the output can replace the file. |
| `row_status` | string | ok for a checked row. error only on the single row a refused input writes. |
| `error_reason` | string | dns_error with the resolver error, or input_invalid with the reason on a refused input. |
| `billable_events_json` | string | What this row was billed as, for example {"row-checked":1}. {} means free. |
| `checked_at` | string | When the row was written, UTC. |

Example row:

```json
{
  "row_index": 1,
  "import_verdict": "import",
  "issues": [],
  "input_email": "Jane@Stripe.com",
  "input_domain": "stripe.com",
  "input_company": "Stripe",
  "input_first_name": "Jane",
  "input_last_name": "Doe",
  "normalized_email": "jane@stripe.com",
  "normalized_domain": "stripe.com",
  "email_syntax_valid": true,
  "is_free_mail": false,
  "is_role_address": false,
  "is_disposable": false,
  "duplicate_group": "email:jane@stripe.com",
  "is_duplicate": false,
  "duplicate_of_row_index": null,
  "domain_resolves": true,
  "has_mx": true,
  "mx_host": "aspmx.l.google.com",
  "site_status": 200,
  "site_final_url": "https://stripe.com/",
  "site_title": "Stripe | Financial Infrastructure to Grow Your Revenue",
  "is_parked": false,
  "company_name_match": "match",
  "missing_fields": [],
  "stale_flag": null,
  "input_row_json": "{\"Email\":\"Jane@Stripe.com\",\"Company\":\"Stripe\"}",
  "row_status": "ok",
  "error_reason": null,
  "billable_events_json": "{\"row-checked\":1}",
  "checked_at": "2026-10-28T14:00:00.000Z"
}
```

The run also writes a `RUN_SUMMARY` record with the columns it used, counts per verdict and per issue, blank rows skipped, and rows over `max_rows`.

### What each verdict means

| Verdict | Issues that set it |
|---|---|
| `reject` | `invalid_email_syntax`, `disposable_address`, `duplicate`, `email_domain_not_found`, `email_domain_no_mx`, `missing_required_field` |
| `review` | `free_mail_address`, `role_address`, `site_parked`, `site_unreachable`, `company_name_mismatch`, `stale`, `email_domain_differs_from_domain`, `domain_not_found`, `dns_error` |
| `import` | none |

### Pricing

Pay per event. You pay for checked rows and the run start.

| Event | Free plan | Bronze | Silver | Gold |
|---|---|---|---|---|
| `row-checked`, one row of your file checked | $0.002 | $0.0019 | $0.0018 | $0.0017 |
| `apify-actor-start`, once per run (one per GB of memory; the default 512 MB is one) | $0.001 | $0.001 | $0.001 | $0.001 |

Per 1,000 rows: $2.00 on the free plan, $1.70 on Gold. Every check is included; turning checks off does not change the price.

Free: blank rows, rows over `max_rows`, and the one row a refused input writes. A refused input charges only the run start.

Free plan cap: 1.50 USD of evaluation a month, about 750 checked rows. Any paid Apify plan removes the cap, and it resets on the 1st. The run stops before a charge that passes your maximum charge per run in Apify or your `max_charge_usd`.

Mamba Labs pays the platform costs of your run. No key is needed and no paid lookup service is called.

### Usage examples

**Apify Console or API.** Paste rows, or give a CSV link:

```json
{
  "csv_url": "https://docs.google.com/spreadsheets/d/e/YOUR_SHEET/pub?output=csv",
  "column_map": { "email": "Work Email", "company": "Account" },
  "required_fields": ["email", "company"]
}
```

Read the rows with `GET https://api.apify.com/v2/datasets/{datasetId}/items?format=csv` and filter on `import_verdict`.

**After another actor.** Pass the `defaultDatasetId` of a lead list run as `dataset_id`, and check the list before it reaches your sequencer.

**Clay.** Export the table to CSV or publish it as a link, run the checker on `csv_url`, and import the result back on `row_index`.

**MCP.** The Mamba Labs MCP server `@mambalabsdev/mcp-lead-file-import-checker` exposes the tool `check_lead_file` to Claude and other MCP clients.

### Error handling

| Case | What you get |
|---|---|
| No source, two sources, an unreadable CSV link, a web page instead of a CSV, an empty file, or no email or domain column | One free row, `row_status` `error`, `error_reason` starting `input_invalid:`, and the run ends successfully. Only the run start is charged |
| A blank row | Skipped and not charged; counted in `RUN_SUMMARY` |
| A DNS lookup fails (not a "does not exist" answer) | `dns_error` in `issues`, verdict `review`, the reason in `error_reason` |
| A homepage that refuses the check (HTTP 401, 403, or 429) or shows a bot wall | Not an issue: `site_status` shows the code, `company_name_match` is `unknown` |
| The run nears its timeout | It stops starting rows 90 seconds before the timeout and ends successfully; rerun from the next `row_index` |

### Limitations

- No mailbox verification, by design. In a test on 2026-10-28, Apify's network did not connect to port 25 on any of 4 mail servers, directly or through the Apify proxy, so an SMTP mailbox check cannot run here. A valid address on a domain with an MX record can still bounce.
- Catch all domains are not detected, for the same reason.
- Free mail is flagged for review, not rejected, because some B2B leads (founders, freelancers) use one.
- The company name match reads the homepage title and the site's own name tags only. A page with no Latin letters reads `unknown`. A brand that differs from its legal name (a company listed as "Alphabet" on google.com) reads `mismatch`; check those by hand.
- Files over 50 MB, or over 50,000 rows per run, must be split.
- A date column is read with standard date formats; an unreadable date leaves `stale_flag` empty.

### Mamba Labs actor suite

| Actor | Actor ID |
|---|---|
| [Account Hiring Watch](https://apify.com/mambalabs/account-hiring-watch?fpr=mamba) | `gRAZA5WBi1r6L0gy7` |
| [Agent Accessibility Auditor](https://apify.com/mambalabs/agent-accessibility-auditor?fpr=mamba) | `anxbRv0lKrpQ1pnua` |
| [Agent to Brokerage Resolver](https://apify.com/mambalabs/agent-brokerage-resolver?fpr=mamba) | `ePRRGLxOGyaVHO4dI` |
| [AI Tooling Detector](https://apify.com/mambalabs/ai-tooling-detector?fpr=mamba) | `EwkHhmqiuJgRoVEbE` |
| [B2B Reddit Conversation Monitor](https://apify.com/mambalabs/b2b-reddit-conversation-monitor?fpr=mamba) | `SoDryzzsjmY3SsiyG` |
| [Bluesky Brand Presence Mapper](https://apify.com/mambalabs/bluesky-brand-presence-mapper?fpr=mamba) | `eLpxzP4IuXznlFVND` |
| [Career Change Signal Engine](https://apify.com/mambalabs/career-change-signal-engine?fpr=mamba) | `vX2Yga1a6wGaXaP14` |
| [Company Change Event Feed](https://apify.com/mambalabs/company-change-event-feed?fpr=mamba) | `oX44rS0fkEJ3rXLWe` |
| [Company Contact Details Extractor](https://apify.com/mambalabs/company-contact-details-extractor?fpr=mamba) | `4mMncKaJykiq94grz` |
| [Company Discovery List Builder](https://apify.com/mambalabs/company-discovery-list-builder?fpr=mamba) | `jch0HdaZnpbMqlcGS` |
| [Company Firmographic Enricher](https://apify.com/mambalabs/company-firmographic-enricher?fpr=mamba) | `YlUtLWjfPpqykmB8g` |
| [Company Funding Record](https://apify.com/mambalabs/funding-investor-record?fpr=mamba) | `OFS4Mt1gyYNtGfUbE` |
| [Company Headcount Estimator](https://apify.com/mambalabs/company-headcount-estimator?fpr=mamba) | `aHC4GROnNt6kfZe5r` |
| [Company Identity Resolver](https://apify.com/mambalabs/company-identity-resolver?fpr=mamba) | `lr8fTRAmZCBZmuwwh` |
| [Company Social Presence Mapper](https://apify.com/mambalabs/company-social-presence-mapper?fpr=mamba) | `4k6CCemkgBDz18m2h` |
| [Competitor Price, Stock, and Changelog Monitor](https://apify.com/mambalabs/competitor-price-stock-changelog-monitor?fpr=mamba) | `yxdgCbUQ4PYQWwRNU` |
| [Contact Classifier](https://apify.com/mambalabs/contact-classifier?fpr=mamba) | `0lGSeYJmniXhGANnO` |
| [Contractor License Lookup](https://apify.com/mambalabs/contractor-license-lookup?fpr=mamba) | `WBYK3CPI2kdeq4bP1` |
| [Cookie Consent Audit](https://apify.com/mambalabs/cookie-consent-audit?fpr=mamba) | `TrKyOS0KBoGC35nbr` |
| [Domain Deliverability Checker](https://apify.com/mambalabs/domain-deliverability-checker?fpr=mamba) | `0tVgxI7A6o9jMlxmc` |
| [Domain to LinkedIn URL Resolver](https://apify.com/mambalabs/domain-to-linkedin-url-resolver?fpr=mamba) | `3HtnSaqPHOg1Qg5gx` |
| [Ecommerce Platform Profiler](https://apify.com/mambalabs/ecommerce-platform-profiler?fpr=mamba) | `5G2NeYjBbQTjaTn9L` |
| [Ecommerce Store Discovery](https://apify.com/mambalabs/ecommerce-store-discovery?fpr=mamba) | `PeHu4sLyFvQHXUUrX` |
| [Event Presence Index](https://apify.com/mambalabs/event-presence-index?fpr=mamba) | `WLhMy8fMDgsxdYxv5` |
| [Expert Witness Directory](https://apify.com/mambalabs/expert-witness-directory?fpr=mamba) | `LIpwlgfE3LaQBaXd4` |
| [Funding and Press Signal Scanner](https://apify.com/mambalabs/funding-press-signal-scanner?fpr=mamba) | `FS13X6dhQVgX3XOM6` |
| [GitHub Organization Signal Scanner](https://apify.com/mambalabs/github-organization-signal-scanner?fpr=mamba) | `ahF8RRpv5mzPao5CN` |
| [Google Ads Transparency Monitor](https://apify.com/mambalabs/google-ads-transparency-monitor?fpr=mamba) | `1eOwxhBVxzvOXAm4s` |
| [Government Contract Award Monitor](https://apify.com/mambalabs/public-award-monitor?fpr=mamba) | `zhEtllASykOcx9hJ8` |
| [GTM Hiring Signal Scraper](https://apify.com/mambalabs/gtm-hiring-signal-scraper?fpr=mamba) | `D7O1SA2EqwHGsGr1P` |
| [GTM Signals Aggregator](https://apify.com/mambalabs/b2b-buying-signals-hiring-tech-stack-intent-for-clay?fpr=mamba) | `xKdRfnfFNkdMpFuNs` |
| [ICP Fit Scorer](https://apify.com/mambalabs/icp-account-lead-scoring-fit-scorer-0-100-for-clay?fpr=mamba) | `W161DT8W4kW55dMFh` |
| [Influencer Change Monitor](https://apify.com/mambalabs/creator-change-monitor?fpr=mamba) | `d2VVgahNL6UmcLkhg` |
| [Influencer Finder](https://apify.com/mambalabs/creator-finder?fpr=mamba) | `tpkedmloIIWtXx6sg` |
| [Influencer Lead List Builder](https://apify.com/mambalabs/creator-lead-list-all-in-one?fpr=mamba) | `KnmByszcv135yM30G` |
| [Influencer Profile Scraper](https://apify.com/mambalabs/creator-profile-reader?fpr=mamba) | `EqEnklDVMIcB1V499` |
| [Influencer Talent Agency Lookup](https://apify.com/mambalabs/talent-agency-lookup?fpr=mamba) | `zCuX4Mgyg6JvXgGzd` |
| [Instagram Facebook Brand Presence Mapper](https://apify.com/mambalabs/meta-brand-presence-mapper?fpr=mamba) | `HXh65I0JBjPsunbY8` |
| [Integration and Marketplace Presence Mapper](https://apify.com/mambalabs/integration-marketplace-presence-mapper?fpr=mamba) | `V0guNuvM85Q61f2gj` |
| [Job Board Keyword Signal Scanner](https://apify.com/mambalabs/job-board-keyword-signal-scanner?fpr=mamba) | `4DvqpvhMR74NLcDDY` |
| [Job Change Tracker](https://apify.com/mambalabs/job-change-tracker?fpr=mamba) | `L8UbEmMJC1XYPSZOb` |
| [Job Posting Monitor](https://apify.com/mambalabs/gtm-job-discovery?fpr=mamba) | `QCfICD9kOPiOdj5iI` |
| [Legal Entity Resolver](https://apify.com/mambalabs/legal-entity-resolver?fpr=mamba) | `KHFyPCDIx7CyqULYm` |
| [Link in Bio Scraper and Newsletter Detector](https://apify.com/mambalabs/link-in-bio-newsletter-checker?fpr=mamba) | `OorucdheTIgu7RFzK` |
| [LinkedIn Company Page Mapper](https://apify.com/mambalabs/linkedin-company-presence-mapper?fpr=mamba) | `zOPm6A9JEhUGcIdFW` |
| [LinkedIn Post Tracker](https://apify.com/mambalabs/linkedin-post-engager-capture?fpr=mamba) | `oiGLNPuaf5BRaz9K5` |
| [Local Business Lead Builder](https://apify.com/mambalabs/local-business-lead-builder?fpr=mamba) | `qMN97aoHhsAS5bznV` |
| [Local Rank and Map Pack Tracker](https://apify.com/mambalabs/local-rank-map-pack-tracker?fpr=mamba) | `gv0kyHGDIg8XscclB` |
| [Lookalike Company Finder](https://apify.com/mambalabs/lookalike-company-finder?fpr=mamba) | `e2O426WBAbLLQL4Z2` |
| [Manufacturer and Supplier Finder](https://apify.com/mambalabs/manufacturer-supplier-finder?fpr=mamba) | `Qcsdmd0lUfPzVkonh` |
| [Meta Ad Library Monitor](https://apify.com/mambalabs/meta-ad-library-monitor?fpr=mamba) | `J1GWlSXfSGU3u8Wng` |
| [Mobile Phone Waterfall](https://apify.com/mambalabs/mobile-phone-waterfall-orchestrator?fpr=mamba) | `6OOgPktf7RIa5XCOP` |
| [New Company Registrations Feed](https://apify.com/mambalabs/new-company-registrations-feed?fpr=mamba) | `g2WfZhWvCtc57g2Jo` |
| [New Hire Finder](https://apify.com/mambalabs/new-hire-finder?fpr=mamba) | `cKuc38p4nYHNF3IW8` |
| [Newsletter Sponsor Tracker](https://apify.com/mambalabs/newsletter-sponsor-tracker?fpr=mamba) | `qSwpqxD1TiPZpLQHv` |
| [Open Tender and RFP Finder](https://apify.com/mambalabs/open-tender-rfp-finder?fpr=mamba) | `kPTGz6t6TFoUUyfaO` |
| [Outbound Stack Detector](https://apify.com/mambalabs/outbound-infrastructure-fingerprint?fpr=mamba) | `v43UJC8r7qW7cBSTG` |
| [Page Finder and Extractor](https://apify.com/mambalabs/page-finder-extractor?fpr=mamba) | `TpurgcOZbVnknlaiC` |
| [Partner and Member Directory Extractor](https://apify.com/mambalabs/partner-member-directory-extractor?fpr=mamba) | `ZX0XJPPUvnFJxeC1a` |
| [People Finder & Email Verifier](https://apify.com/mambalabs/people-finder?fpr=mamba) | `LEgloG7tWgQl4o6TD` |
| [Person LinkedIn URL Resolver](https://apify.com/mambalabs/person-linkedin-url-resolver?fpr=mamba) | `ssuyPV8LnEsL8qbnb` |
| [Person Social Footprint Mapper](https://apify.com/mambalabs/person-social-footprint-mapper?fpr=mamba) | `jfQXa2zW9FHCJot9K` |
| [Personal Email to Company Resolver](https://apify.com/mambalabs/personal-email-to-company-resolver?fpr=mamba) | `AefT5Ye6YNPFQwJBf` |
| [Pinterest Brand Presence Mapper](https://apify.com/mambalabs/pinterest-brand-presence-mapper?fpr=mamba) | `d1HvjZfKhgvWsoEwn` |
| [Podcast Guest and Host Finder](https://apify.com/mambalabs/podcast-guest-host-finder?fpr=mamba) | `o2MGSvgbSLeeXOsIo` |
| [Prospect Engine](https://apify.com/mambalabs/b2b-prospect-engine?fpr=mamba) | `q9rT6v64nUJdPexOQ` |
| [Public Feature Board and Roadmap Monitor](https://apify.com/mambalabs/public-feature-board-roadmap-monitor?fpr=mamba) | `rcHF5gj5r2Vqnry35` |
| [Publishing Frequency Tracker](https://apify.com/mambalabs/blog-publishing-frequency?fpr=mamba) | `TbLwaUUATdYb6wp4N` |
| [Reddit Brand Presence Mapper](https://apify.com/mambalabs/reddit-brand-presence-mapper?fpr=mamba) | `pKQZmDaT70SEb54bZ` |
| [Reporting Window Finder](https://apify.com/mambalabs/public-company-reporting-window-finder?fpr=mamba) | `uINxR7a1IW8qUTRUX` |
| [Sequencer Event Poller](https://apify.com/mambalabs/sequencer-event-poller?fpr=mamba) | `S6s8Rjd61tGdrMRk4` |
| [Sequencer Lead Push](https://apify.com/mambalabs/clay-to-instantly-smartlead-push?fpr=mamba) | `0Jv27VeWM5tSZQs9x` |
| [Team Page People Extractor](https://apify.com/mambalabs/team-page-people-extractor?fpr=mamba) | `j8a9zX0k4mNbvDbWK` |
| [Tech Stack Signal Detector](https://apify.com/mambalabs/gtm-tech-stack-signal-scraper?fpr=mamba) | `qyd7nNyqFPelQViBx` |
| [TikTok Brand Presence Mapper](https://apify.com/mambalabs/tiktok-brand-presence-mapper?fpr=mamba) | `fco8FvoJcSafbeyd1` |
| [Trustpilot Reputation Enricher](https://apify.com/mambalabs/review-platform-reputation-enricher?fpr=mamba) | `3lIqfCt61j4hqE1xz` |
| [VC and Accelerator Portfolio List Builder](https://apify.com/mambalabs/vc-accelerator-portfolio-list-builder?fpr=mamba) | `chH8hrfuoqqolW06m` |
| [WCAG Accessibility Audit](https://apify.com/mambalabs/wcag-accessibility-audit?fpr=mamba) | `P3jBj3FRghKEhX52z` |
| [Website Phrase and Business Model Classifier](https://apify.com/mambalabs/website-phrase-business-model-classifier?fpr=mamba) | `CBuZ9k7sRwBeiKiCS` |
| [Website Traffic Rank Estimator](https://apify.com/mambalabs/website-traffic-rank-estimator?fpr=mamba) | `GnOFUzlNVIoXgeJjH` |
| [Work Email Waterfall](https://apify.com/mambalabs/email-waterfall-orchestrator?fpr=mamba) | `OT6xqTFThC0Rjf7Zj` |
| [Workplace Program Detector](https://apify.com/mambalabs/workplace-program-detector?fpr=mamba) | `Li6pPDhqbdzFz3h7G` |
| [X Brand Presence Mapper](https://apify.com/mambalabs/x-brand-presence-mapper?fpr=mamba) | `oLOgadhHUkNAyDA3w` |
| [YouTube Channel Stats Extractor](https://apify.com/mambalabs/youtube-channel-transcript-extractor?fpr=mamba) | `6hSpD3kd2s2IQ4VSs` |

MCP servers for the suite are published under the npm scope [@mambalabsdev](https://www.npmjs.com/org/mambalabsdev).

Built by [Mamba Labs](https://apify.com/mambalabs).

# Actor input Schema

## `rows` (type: `array`):

Your lead rows as a JSON array of objects, one object per lead, with any column names. Up to 50,000 rows. Give rows, csv_url, or dataset_id, one of them.

## `csv_url` (type: `string`):

A public link to a CSV file with a header row, up to 50 MB. Comma, semicolon, tab, and pipe separators are detected. For a Google Sheet use File, Share, Publish to web, CSV.

## `dataset_id` (type: `string`):

An Apify dataset ID from one of your runs, for example the output of a lead list actor.

## `column_map` (type: `object`):

Optional. Which of your columns holds each field, for example {"email": "Work Email", "company": "Account", "domain": "Website", "first_name": "First", "last_name": "Last", "date": "Last Activity"}. Without it the actor reads common header names (Email, Email Address, Work Email, Domain, Website, Company, Company Name, First Name, Last Name).

## `required_fields` (type: `array`):

Fields a row must have, or it is rejected with missing_required_field. Any of email, domain, company, first_name, last_name. Default: email.

## `checks` (type: `array`):

Which checks to run. Default: all of syntax, duplicates, free_mail, role, disposable, dns, site, company_match, missing_fields, stale. Every checked row costs the same.

## `check_websites` (type: `string`):

On by default: one homepage read per company domain (64 KB at most) for the live, parked, and company name checks. Off: those checks are skipped and the run is faster. The price is the same.

## `stale_days` (type: `string`):

Optional. With a date column named in column_map, rows whose date is older than this many days get the stale issue.

## `max_rows` (type: `string`):

Check at most this many rows, from the top of the file. Default 5000, at most 50000. Rows over the limit are not checked and not charged; the status message says how many.

## `max_charge_usd` (type: `string`):

Optional. The run stops before any charge that would take it past this amount and delivers every row already charged. Leave empty to rely only on the maximum cost per run you set in Apify, which the actor also honors.

## `source_tag` (type: `string`):

Internal attribution tag for saved tasks. Leave empty.

## Actor input object example

```json
{
  "rows": [
    {
      "Email": "jane@stripe.com",
      "Company": "Stripe",
      "First Name": "Jane",
      "Last Name": "Doe"
    },
    {
      "Email": "Jane@Stripe.com",
      "Company": "Stripe",
      "First Name": "Jane",
      "Last Name": "Doe"
    },
    {
      "Email": "info@gong.io",
      "Company": "Gong"
    },
    {
      "Email": "bob.smith@gmail.com",
      "Company": "Acme Plumbing"
    },
    {
      "Email": "test@mailinator.com",
      "Company": "Test"
    }
  ],
  "required_fields": [
    "email"
  ],
  "check_websites": "true"
}
```

# Actor output Schema

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

No description

## `run_summary` (type: `string`):

No description

# 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 = {
    "rows": [
        {
            "Email": "jane@stripe.com",
            "Company": "Stripe",
            "First Name": "Jane",
            "Last Name": "Doe"
        },
        {
            "Email": "Jane@Stripe.com",
            "Company": "Stripe",
            "First Name": "Jane",
            "Last Name": "Doe"
        },
        {
            "Email": "info@gong.io",
            "Company": "Gong"
        },
        {
            "Email": "bob.smith@gmail.com",
            "Company": "Acme Plumbing"
        },
        {
            "Email": "test@mailinator.com",
            "Company": "Test"
        }
    ],
    "required_fields": [
        "email"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("mambalabs/lead-file-import-checker").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 = {
    "rows": [
        {
            "Email": "jane@stripe.com",
            "Company": "Stripe",
            "First Name": "Jane",
            "Last Name": "Doe",
        },
        {
            "Email": "Jane@Stripe.com",
            "Company": "Stripe",
            "First Name": "Jane",
            "Last Name": "Doe",
        },
        {
            "Email": "info@gong.io",
            "Company": "Gong",
        },
        {
            "Email": "bob.smith@gmail.com",
            "Company": "Acme Plumbing",
        },
        {
            "Email": "test@mailinator.com",
            "Company": "Test",
        },
    ],
    "required_fields": ["email"],
}

# Run the Actor and wait for it to finish
run = client.actor("mambalabs/lead-file-import-checker").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 '{
  "rows": [
    {
      "Email": "jane@stripe.com",
      "Company": "Stripe",
      "First Name": "Jane",
      "Last Name": "Doe"
    },
    {
      "Email": "Jane@Stripe.com",
      "Company": "Stripe",
      "First Name": "Jane",
      "Last Name": "Doe"
    },
    {
      "Email": "info@gong.io",
      "Company": "Gong"
    },
    {
      "Email": "bob.smith@gmail.com",
      "Company": "Acme Plumbing"
    },
    {
      "Email": "test@mailinator.com",
      "Company": "Test"
    }
  ],
  "required_fields": [
    "email"
  ]
}' |
apify call mambalabs/lead-file-import-checker --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,mambalabs/lead-file-import-checker"
        }
    }
}
```

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/RwlGVXTf46LqZdUgt/builds/uDHPJsaxlgzziHfFp/openapi.json
