Business Spreadsheet Enricher: Emails, Phones & Websites
Pricing
from $1.00 / 1,000 enriched companies
Business Spreadsheet Enricher: Emails, Phones & Websites
Enrich CSV and Excel company lists with public business emails, phone numbers, verified websites, addresses, social profiles, and source evidence. Directly scrapes official company websites—no enrichment API or subscription required.
Pricing
from $1.00 / 1,000 enriched companies
Rating
0.0
(0)
Developer
Inus Grobler
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Turn a CSV or Excel company list into an evidence-backed business contact dataset. This business data enrichment and company contact scraper finds official websites, then collects public emails, phone numbers, named contacts, addresses, company descriptions, published industries, and social profiles.
No contact database, enrichment provider, search API, subscription, or generated email pattern is used. Every collected value comes directly from a public company website and includes source URLs.
Quick start
- Open the Input tab.
- Upload a CSV/XLSX file, or enter a few companies manually.
- Click Start.
- Download
ENRICHED.xlsxorENRICHED.csvfrom the Output tab.
For the fastest and most accurate results, include a website column. If you only have company names, add city and country where possible to improve matching.
What you can do
- Complete missing fields in CRM and prospecting spreadsheets.
- Verify company websites before outreach.
- Collect public sales, support, careers, press, and staff contact routes.
- Preserve the original rows while appending enrichment columns.
- Download the completed file as XLSX or CSV.
- Review confidence scores and source evidence before importing results.
Use cases
- CRM cleanup: append official domains and published contact routes before account assignment.
- Sales operations: enrich conference, partner, and target-account spreadsheets in bulk.
- Lead research: collect evidence-linked public company details without buying an enrichment API subscription.
- Market mapping: standardize company websites, locations, industries, and social profiles for analysis.
- Data quality review: separate verified, ambiguous, unavailable, and blocked rows before import.
Input
Choose one input method:
- Upload a
.csvor.xlsxfile in Upload a CSV or Excel file. - Enter a short JSON list in Or enter companies manually.
Each row must contain either a company name or a website. Company name, city, region, country, company number, and website columns are detected automatically. Use Column mapping when your spreadsheet uses custom headers.
The simplest spreadsheet looks like this:
companyName,website,city,countryApify,https://apify.com,Prague,CZMozilla,https://www.mozilla.org,,US
Important settings:
| Setting | What it does | Default |
|---|---|---|
| Business details to collect | Select emails, phones, contacts, address, description, industry, and social profiles. | All details |
| Companies to process | Limits the number of spreadsheet rows processed. | 1 |
| Pages per company | Controls how many useful pages are checked on each website. | 5 |
| Total request budget | Prevents unexpectedly large or expensive runs. | 10 |
| JavaScript rendering | Optional browser fallback for JavaScript-only sites. | Off |
Example:
{"companies": [{"companyName": "Apify","website": "https://apify.com"}]}
The Actor never overwrites a non-empty input cell. It fills or appends enrichment columns and keeps rows in their original order.
Output
Every input row produces a dataset record with:
- match status and confidence;
- verified official website and domain;
- public emails and phone numbers;
- named contacts exactly as published by the company;
- address, description, and published industry;
- LinkedIn, Facebook, Instagram, X, YouTube, TikTok, and GitHub links;
- source URLs and field-level evidence;
- warnings or errors when a site cannot be accessed safely.
The run also provides:
ENRICHED.xlsx— completed Excel workbook;ENRICHED.csv— completed CSV export;RUN_SUMMARY.json— sanitized processing and quality totals.
Example dataset item:
{"rowNumber": 2,"status": "enriched","matchStatus": "provided_domain_accessible","matchConfidence": 1,"inputCompanyName": "Apify","officialWebsite": "https://apify.com/","domain": "apify.com","emails": ["support@apify.com"],"phones": [],"address": "Na Příkopě 959/27, Prague, 11000, CZ","sourceUrls": ["https://apify.com/", "https://apify.com/about"],"warnings": [],"errors": []}
Result statuses
enriched: verified company with one or more requested fields.partial: verified website, but limited enrichment was available.needs_review: plausible candidates existed but confidence was insufficient.not_found: no suitable official website was found.blocked: robots rules or access controls prevented collection.invalid_input: the row lacked a usable company name and website.
The Actor deliberately abstains when a match is ambiguous. This protects your spreadsheet from confident-looking but incorrect company data.
Direct-scraping methodology
Unknown websites are discovered from public HTML search results and verified against company name and location evidence. A website supplied in the input is treated as customer-provided and checked for public accessibility, not independently proven to belong to the named company. The Actor then visits a bounded number of same-site About, Contact, Team, Legal, and Imprint pages. It respects robots rules and does not bypass CAPTCHAs, login walls, paywalls, or access controls.
Named contacts are returned only when visibly published by the company. The Actor does not infer employee details, generate email patterns, or scrape private profiles.
Placeholder addresses, monitoring ingestion tokens, escaped markup fragments, and example-form values are excluded from email output. Social fields contain profile or company-page URLs rather than individual posts, videos, embeds, repositories, or issue forms. To keep spreadsheet cells reviewable, phone output is limited to the first ten distinct published numbers per company and reports a truncation warning when more were found.
Cost controls
Runs are economical by default: direct HTTP scraping is used, JavaScript browser rendering is off, concurrency is 2, and one row is processed for a cheap first-run sample. Raise the row and request limits together for larger lists. The 1024 MB default completed the measured 10-row workload faster and with fewer compute units than the memory-constrained 512 MB configuration.
Every run also has independent hard ceilings:
- Total request budget counts robots checks, discovery requests, redirects, and website pages across the whole run. The default is 10 for the one-company trial. The measured 10-company test used 43 requests, so set about 50 requests when trying a similar batch.
- Maximum browser renders limits the more expensive browser fallback. The default is 0; browser use requires explicitly selecting Automatic fallback and raising this limit.
- Maximum processing time stops new network work after 10 minutes by default.
- Memory-aware concurrency limits 512 MB runs to one company at a time and 1024 MB HTTP-only runs to four at once. This prevents transient memory spikes while allowing the default tier to finish bulk work efficiently.
- Apify's Actor timeout remains a final 15-minute platform-level backstop.
When a ceiling is reached, completed data is retained and remaining affected rows are returned as partial results with a budget warning. RUN_SUMMARY.json reports the requested and effective concurrency, allocated memory, configured request and browser limits, actual usage, and deadline.
On pay-per-event runs, the Actor also checks the customer's Apify spending limit before starting each new unique company. It stops cleanly when the remaining event budget is exhausted, retains already completed output, and reports customer_charge_limit_reached in RUN_SUMMARY.json. Only successfully enriched unique companies emit the enriched-company event; duplicates and unsuccessful rows remain free.
For the lowest and most predictable usage cost, supply known company websites, keep JavaScript rendering disabled, test a small sample first, and increase limits only when the sample output justifies it.
Python example
import osfrom apify_client import ApifyClientclient = ApifyClient(os.environ["APIFY_TOKEN"])actor = client.actor("thescrapelab/business-spreadsheet-enricher")run = actor.call(run_input={"companies": [{"companyName": "Apify","website": "https://apify.com",}]})dataset = client.dataset(run["defaultDatasetId"])for item in dataset.iterate_items():print(item["officialWebsite"], item["emails"], item["sourceUrls"])
Pricing
The introductory price is $1 per 1,000 successfully enriched unique companies ($0.001 each), plus Apify platform usage. There is no subscription or monthly minimum.
You are not charged the enrichment event for duplicate rows, blocked pages, invalid input, low-confidence matches, or companies where no useful public details are found. Apify's small standard Actor-start event may also apply once per run.
The low launch price is intended to make real spreadsheet trials inexpensive. Pricing may be reviewed later as reliability, coverage, and operating evidence grow; any active price change follows Apify's customer-notice rules.
Responsible use and limitations
Use public contact information responsibly and follow applicable privacy, marketing, and communications laws. A public email address is not automatic consent to send unsolicited messages.
Website designs, robots policies, blocking controls, and published data change over time. Some JavaScript-heavy or protected sites may return partial or blocked results. Domain discovery is best effort; supplying a known website produces the most reliable and economical runs. Review needs_review rows instead of treating candidate domains as verified matches.
Support
If a run produces unexpected output, open the Actor's Issues tab and include the run URL plus a short description of the affected row. Do not include private spreadsheet data in a public issue.