Paste company domains or pick a Google Maps scraper's Dataset. Get one contact record per company with public emails, phones, social profiles, MX status and the page where each email was found.
2026-10-15: Read websites from a scraper's Dataset
Features
Pick the Dataset of a Google Maps, directory or lead scraper run in Source Dataset, and each website in it becomes one contact row. Website field in Dataset names the column: website by default, website_url for our Google Maps B2B Leads Scraper, and dot paths such as company.website work.
Connect the Actor to a scraper in Integrations with "datasetId": "{{resource.defaultDatasetId}}", and it runs on each finished scrape. The payload object an integration adds is accepted. An integration input without datasetId fails with that instruction instead of enriching the sample websites saved in the input.
Places without a website are skipped and not charged. RUN_SUMMARY reports datasetRowsRead, datasetRowsWithoutWebsite and, when more than 2,000 rows remain, the nextDatasetOffset to start the next run from.
Improvements
A selected Dataset takes priority over pasted websites, and RUN_SUMMARY.sourceNote says so. Pasting domains works as before.
A Dataset that cannot be read, or that has no column with the given name, fails the run before any site is visited or charged per domain, instead of returning an empty result.
2026-10-06: Fewer false failures
Fixes
When the Actor itself fails on a domain, the row now says INTERNAL_ERROR instead of DOWNLOAD_FAILED, so a site is not blamed for our problem. The domain is not charged, and RUN_SUMMARY counts these rows in internalErrors.
If every domain the run reached ends INTERNAL_ERROR, the run fails with a message asking for an Issue, instead of succeeding with a list of apparent download failures.
When Apify moves or restarts a run, it now continues where it stopped. Domains already in the Dataset are kept and are not visited or charged again. Before, the restarted run failed with DELIVERY_UNCERTAIN.
2026-09-26: More reliable requests and spending checks
Fixes
Spending checks and billing receipts use the effective event prices supplied for your run, including discounts and zero-priced events.
Compressed HTTP responses are limited while they are decoded, so a small compressed download cannot expand past the response limit in memory.
Runs without a spending ceiling no longer fail while calculating the number of affordable results.
2026-09-23: One contact record per domain
Features
Paste company domains or website URLs. Each registrable domain becomes one Dataset row with public emails, phone numbers, social profiles, a contact form URL when one is published, and the page where each email was found.
HAS_MX means the email domain publishes mail servers. It does not mean the mailbox exists. NO_CONTACTS means the pages loaded and nothing public was found. BLOCKED and DOWNLOAD_FAILED mean the site was not inspected, and those rows are not charged.
If a homepage redirects to a different registrable domain, the row keeps the domain you submitted and reads only that landing page, after that host's robots.txt allows it. When that landing page is disallowed, the row is BLOCKED and is not charged. A link that leaves the domain is skipped. If the bare domain does not serve a page, the www host is tried unless that host's robots.txt disallows it. A subdomain link uses that subdomain's own robots.txt: a disallow skips that page, lists it in robotsSkipped, and leaves the rest of the domain as SUCCESS or NO_CONTACTS. A GitHub link to an organization is kept, including github.com/orgs/<name>. A link to a repository is not. If Apify Proxy is turned on and cannot be created, the run continues over a direct connection and says so, instead of failing before any page is read. When a proxy is on and the first address from the DNS check does not connect, the next public address from that same check is tried. When a site publishes more than 25 emails, the row keeps same-domain addresses first, with info and sales ahead of other local parts. The overview lists the email, phone and social fields, not only the primary email.
Set maxTotalChargeUsd before an API or agent run. At the default 512 MB, leave at least $0.01 plus $0.002 for each domain you expect to inspect. The event price includes platform usage. Duplicates, invalid addresses, blocked sites and download failures are not charged. A run that has no NO_CONTACTS row does not describe that status.
fingerprint is set only for SUCCESS and NO_CONTACTS rows, so a week in which a site could not be read never looks like a change in its contacts. A run stops starting new domains two minutes before its timeout: the inspected rows stay in the Dataset and the rest are NOT_INSPECTED and not charged, instead of the whole run timing out.
This is the first version, so there is no previous input to migrate.