AI Company Lead Enrichment & Sales Intelligence
Pricing
from $6.00 / 1,000 enriched leads
AI Company Lead Enrichment & Sales Intelligence
Find company websites, social profiles, contact pages, emails, recent news, lead scores, sales angles, and outreach templates from company names or domains.
Pricing
from $6.00 / 1,000 enriched leads
Rating
0.0
(0)
Developer
Yusuf Barış
Maintained by CommunityActor stats
0
Bookmarked
4
Total users
2
Monthly active users
3 days ago
Last modified
Categories
Share
Turn company names, websites, or CSV lists into sales-ready B2B lead profiles. This Actor finds company websites, social media profiles, contact pages, public emails, recent news, website signals, lead scores, sales angles, and outreach templates in structured JSON.
It is built for lead generation, CRM enrichment, outbound sales, agency prospecting, market research, and AI / MCP workflows.
What does this Actor do?
This Actor researches each company input and returns one structured dataset item per company. The result is designed for Apify datasets, API usage, automations, and AI agents that need predictable field names, confidence scores, warnings, and source URLs.
You can use it with:
- Company names only
- Websites or domains
- Company name + website pairs
- Public CSV URLs
For best speed and accuracy, provide the company website when available.
Features
- Find official company websites from names or domains
- Find public social profiles: LinkedIn, Instagram, Facebook, X, YouTube, TikTok
- Find contact pages, about pages, demo pages, sales pages, and contact paths
- Extract public business emails and phone-like contact signals
- Find recent company news and announcements
- Detect website signals: pricing, careers, blog, docs, demo CTA, contact form
- Detect basic website stack signals: Shopify, WordPress, HubSpot
- Calculate a rule-based lead score from
0to100 - Generate pain points and sales angles from public company signals
- Generate cold email and LinkedIn outreach templates using your own offer details
- Support English and Turkish outreach templates
- Optionally rewrite outreach with your own OpenRouter API key and selected model
- Return confidence, completeness, warnings, sources, and charge metadata
Use cases
- B2B lead enrichment
- Sales intelligence
- Cold email personalization
- CRM enrichment
- Agency prospecting
- Market research
- Competitor research
- Finding companies with weak website or contact signals
- Enriching CSV company lists
- AI agent and Apify MCP workflows
Input
Use the Apify input form or JSON input. In the form, add companies under Companies, then fill optional enrichment and outreach settings.
At least one of companies or csvUrl should be provided.
| Field | Type | Required | Description |
|---|---|---|---|
companies | array | No | Company list to enrich. Each item can include companyName, website, and country. |
companies[].companyName | string | No | Company name to research. Example: Ahrefs. |
companies[].website | string | No | Company website or domain. Example: https://ahrefs.com. |
companies[].country | string | No | Optional country or market context. Example: United States. |
csvUrl | string | No | Public CSV URL with companyName, website, and country columns. |
maxCompanies | integer | No | Maximum unique companies to process. Default: 100. Hard cap: 5000. |
findSocialProfiles | boolean | No | Find public LinkedIn, Instagram, Facebook, X, YouTube, and TikTok profiles. Default: true. |
findContactPages | boolean | No | Find contact, about, demo, sales, and similar pages. Default: true. |
findEmails | boolean | No | Extract public emails from crawled website pages. Default: true. |
findRecentNews | boolean | No | Search for recent company news and announcements. Default: true. |
generateOutreach | boolean | No | Generate cold email and LinkedIn message templates. Default: true. |
senderName | string | No | Sender name used in the email signature. If empty, {{senderName}} stays as a placeholder. |
senderCompany | string | No | Your company or agency name used in outreach copy. |
offerDescription | string | No | What you sell or offer. If empty, outreach keeps {{yourOffer}} as a placeholder. |
targetPainPoint | string | No | The specific problem your offer solves. If empty, the Actor uses detected company signals only as context. |
callToAction | string | No | Optional custom CTA. Example: Would it make sense to send a quick example? |
language | string | No | Outreach language: en or tr. Default: en. |
maxPagesPerCompany | integer | No | Max website pages to crawl per company. Default: 5. Hard cap: 10. |
maxNewsPerCompany | integer | No | Max news results per company. Default: 3. Hard cap: 10. |
maxSerpQueriesPerCompany | integer | No | Max search queries per company. Default: 2. Hard cap: 5. |
maxRunTimeMinutes | integer | No | Soft run time safety limit inside the Actor. Default: 720. Apify Run options timeout must also allow longer runs. |
maxConcurrency | integer | No | Maximum companies enriched in parallel. Default: 5. Hard cap: 10. Higher values are faster but may use more platform resources. |
costSafetyMode | boolean | No | Keeps strict search, crawl, and AI limits enabled. Default: true. |
skipIfNoWebsiteOrSocialFound | boolean | No | Return an uncharged skipped item if no usable source is found. Default: true. |
generateAiOutreach | boolean | No | Rewrite outreach using OpenRouter with your own key. Default: false. |
openRouterApiKey | string | No | Optional secret OpenRouter API key for AI-written outreach. Leave empty for rule-based outreach. |
openRouterModel | string | No | OpenRouter model ID used for AI outreach. Default: openai/gpt-4o-mini. |
proxyConfiguration | object | No | Apify proxy settings. Used when needed for search providers or blocked websites. |
Outreach profile
The Actor does not know what you sell unless you provide offerDescription.
For example, if you enter:
{"senderName": "Yusuf Baris","senderCompany": "Fabri-Lab","offerDescription": "erp yazilimlari","language": "en"}
The English outreach copy normalizes common Turkish offer terms and uses:
ERP software
If offerDescription is empty, outreach will contain {{yourOffer}} instead of inventing your business.
Example input
{"companies": [{"companyName": "Ahrefs","website": "https://ahrefs.com","country": "United States"},{"companyName": "Lemlist","country": "France"},{"website": "https://www.apify.com"}],"maxCompanies": 100,"findSocialProfiles": true,"findContactPages": true,"findEmails": true,"findRecentNews": true,"generateOutreach": true,"senderName": "Yusuf Baris","senderCompany": "Fabri-Lab","offerDescription": "erp yazilimlari","targetPainPoint": "manual operations and disconnected business processes","callToAction": "Would it make sense to send a quick example?","language": "en","maxPagesPerCompany": 5,"maxNewsPerCompany": 3,"maxSerpQueriesPerCompany": 2,"generateAiOutreach": false,"proxyConfiguration": {"useApifyProxy": true}}
Output
Each company produces one dataset item.
Successful results include:
| Field | Type | Description |
|---|---|---|
input | object | Original company input supplied by the user. |
company.name | string | Normalized company name. |
company.website | string | Official company website URL when found. |
company.domain | string | Normalized domain. |
company.description | string | Extractive description from public website content. |
company.industry | string | Rule-based industry guess when enough signals are available. |
company.country | string | Country from input, if provided. |
company.foundedYear | integer | Founded year if detected from public text. |
company.employeeRange | string | Employee range if available. |
socialProfiles.linkedin | string | Public LinkedIn company profile URL. |
socialProfiles.instagram | string | Public Instagram profile URL. |
socialProfiles.facebook | string | Public Facebook profile URL. |
socialProfiles.x | string | Public X / Twitter profile URL. |
socialProfiles.youtube | string | Public YouTube profile URL. |
socialProfiles.tiktok | string | Public TikTok profile URL. |
contact.contactPages | array | Public contact, demo, sales, about, or related pages. |
contact.emails | array | Public emails extracted from crawled pages. |
contact.phones | array | Phone-like public contact signals. |
contact.address | string | Address signal when detected. |
recentNews | array | Recent news or announcement results useful as outreach triggers. |
websiteSignals | object | Website signals such as pricing, careers, blog, docs, demo CTA, contact form, Shopify, WordPress, HubSpot. |
salesIntelligence.leadScore | integer | Rule-based score from 0 to 100. |
salesIntelligence.leadScoreLabel | string | low, medium, or high. |
salesIntelligence.painPoints | array | Sales-relevant signals inferred from public data. |
salesIntelligence.salesAngles | array | Suggested outreach angles. |
salesIntelligence.personalizedIcebreaker | string | Short personalization line. |
salesIntelligence.coldEmailSubject | string | Suggested cold email subject. |
salesIntelligence.coldEmail | string | Company-level cold email template. |
salesIntelligence.linkedinMessage | string | Company-level LinkedIn message template. |
quality.confidence | number | Confidence score from 0 to 1. |
quality.dataCompleteness | number | Completeness score from 0 to 1. |
quality.sourcesFound | integer | Number of source URLs found. |
quality.warnings | array | Data gaps or extraction warnings. |
sources | array | Source URLs and how they were found. |
metadata.scrapedAt | string | ISO timestamp for the enrichment. |
metadata.charged | boolean | Whether the result was charged. |
metadata.chargeEvent | string | Charge event name when charged. |
Skipped results include:
| Field | Type | Description |
|---|---|---|
status | string | skipped. |
reason | string | Why the item was skipped. |
charged | boolean | Always false for skipped items. |
Example output
{"input": {"companyName": "Ahrefs","website": "https://ahrefs.com","country": "United States"},"company": {"name": "Ahrefs","website": "https://ahrefs.com","domain": "ahrefs.com","description": "Ahrefs provides SEO tools for marketers, agencies, and businesses.","industry": "SEO Software","country": "United States","foundedYear": null,"employeeRange": null},"socialProfiles": {"linkedin": "https://www.linkedin.com/company/ahrefs","instagram": null,"facebook": null,"x": "https://x.com/ahrefs","youtube": "https://www.youtube.com/@AhrefsCom","tiktok": null},"contact": {"contactPages": ["https://ahrefs.com/contact"],"emails": [],"phones": [],"address": null},"recentNews": [{"title": "Ahrefs launches a new product update","url": "https://example.com/news/ahrefs","source": "example.com","publishedAt": "2026-05-10","snippet": "Ahrefs announced a new product update for marketers."}],"websiteSignals": {"hasPricingPage": true,"hasCareersPage": true,"hasBlog": true,"hasDocs": true,"hasDemoCta": false,"hasContactForm": true,"usesShopify": false,"usesWordPress": false,"usesHubSpot": false},"salesIntelligence": {"leadScore": 86,"leadScoreLabel": "high","painPoints": ["Active hiring suggests growth and operational scaling needs","Recent news can be used as a timely outreach trigger"],"salesAngles": ["Mention recent company news as an outreach trigger","Hiring activity suggests growth. Offer tools that save time or support scaling"],"personalizedIcebreaker": "Saw Ahrefs recently in the news: Ahrefs launches a new product update.","coldEmailSubject": "Quick idea for Ahrefs","coldEmail": "Hi {{firstName}},\n\nSaw Ahrefs recently in the news: Ahrefs launches a new product update.\n\nQuick context from Fabri-Lab: ERP software. Based on their hiring signal, this may be relevant for manual operations and disconnected business processes.\n\nWould it make sense to send a quick example?\n\nBest,\nYusuf Baris","linkedinMessage": "Hi {{firstName}}, noticed Ahrefs and Ahrefs launches a new product update. I had a quick idea related to ERP software."},"quality": {"confidence": 0.91,"dataCompleteness": 0.82,"sourcesFound": 7,"warnings": []},"sources": [{"type": "website","url": "https://ahrefs.com","foundBy": "input","confidence": 1}],"metadata": {"scrapedAt": "2026-05-18T12:00:00.000Z","charged": true,"chargeEvent": "enriched_company"}}
Example skipped output:
{"input": {"companyName": "Unknown XYZ"},"status": "skipped","reason": "No official website, social profile, contact page, or usable source found.","charged": false,"metadata": {"scrapedAt": "2026-05-18T12:00:00.000Z","charged": false,"chargeEvent": null}}
How to use
- Add companies in the input form, or provide a public CSV URL.
- Keep website URLs when you have them. This improves accuracy and reduces search work.
- Select which enrichment signals to find: social profiles, contact pages, emails, and recent news.
- If you want outreach templates, fill the
Outreach profilefields. - Keep cost safety limits enabled unless you need deeper research.
- Run the Actor.
- Export the dataset as JSON, CSV, Excel, XML, RSS, HTML, or use it through the Apify API.
Pricing
Launch price: $6 / 1,000 successfully enriched companies.
You are charged only for successful enriched company profiles. Empty, invalid, duplicate, skipped, or limit-skipped companies are not charged. If one enrichment step times out but the Actor can still return a usable company profile, the result may be charged and the missing step is listed in quality.warnings.
If you set a maximum run cost in Apify Run options, the platform can stop the run once that budget is reached. For example, with $0.006 per successful company, a $0.45 max cost stops at about 75 charged results.
| Event | Price | Charged when |
|---|---|---|
enriched_company | $0.006 | A usable enriched company profile is pushed to the dataset. |
Cost safety
Default limits are intentionally conservative:
{"maxSerpQueriesPerCompany": 2,"maxPagesPerCompany": 5,"maxNewsPerCompany": 3,"maxConcurrency": 5,"generateAiOutreach": false,"costSafetyMode": true}
Hard caps:
maxSerpQueriesPerCompany:5maxPagesPerCompany:10maxNewsPerCompany:10maxCompanies:5000maxConcurrency:10
How lead score is calculated
The lead score is rule-based and capped from 0 to 100.
Positive signals:
- Website found
- Contact page found
- Public email found
- LinkedIn company page found
- Other social profile found
- Recent news found
- Pricing, demo, or contact CTA found
- Careers or hiring signal found
- B2B keywords found
- Strong description or industry confidence
Negative signals:
- Website not found
- Only social media found
- Contact path missing
- Low confidence
- Duplicate-like result
Labels:
0-39:low40-69:medium70-100:high
MCP and AI agent usage
This Actor is designed for AI agents and MCP workflows. It returns structured JSON with field descriptions, confidence scores, warnings, and source URLs so agents can use the result in lead generation, research, CRM enrichment, sales automation, and outbound workflows.
High-value dataset fields:
company.namecompany.websitecompany.descriptioncompany.industrysocialProfiles.linkedincontact.emailscontact.contactPagessalesIntelligence.leadScoresalesIntelligence.leadScoreLabelsalesIntelligence.salesAnglessalesIntelligence.coldEmailquality.confidencesources
Configuration
Optional environment variables:
| Variable | Description |
|---|---|
SERP_ACTOR_ID | Override the default SERP Actor. Default: apify/google-search-scraper. |
AI outreach uses OpenRouter only. Add openRouterApiKey, enable generateAiOutreach, and select openRouterModel in the Actor input. If no OpenRouter key is provided, the Actor uses rule-based outreach.
Limitations
- This Actor only uses public web pages and public search results.
- It does not scrape private LinkedIn profiles.
- It does not log into LinkedIn, Instagram, Facebook, X, or private websites.
- It does not guarantee emails because many companies do not publish public email addresses.
- Some websites may block HTTP crawling or expose limited public content.
- Social profile matching can be less accurate for ambiguous company names.
- Results can vary by country, language, search provider, and public source availability.
- Outreach templates are company-level templates, not person-level emails.
- Replace
{{firstName}},{{senderName}}, and{{yourOffer}}in your CRM or outreach tool if you leave those fields empty. - Optional AI outreach requires your own API key.
FAQ
Can I use only company names?
Yes. Website is optional. For best speed and accuracy, provide the company website when available.
Can I upload a CSV?
Yes. Use csvUrl with a public CSV containing companyName, website, and country columns.
Does this Actor scrape private LinkedIn profiles?
No. It only uses public search results and public web pages.
Does it guarantee emails?
No. It extracts public emails when they are available on crawled pages.
Am I charged for failed results?
No. Empty, invalid, duplicate, skipped, and limit-skipped companies are not charged. Partial successful profiles can be charged when they include usable company data.
What does the cold email say?
The Actor uses company signals for personalization and combines them with your offerDescription. If offerDescription is empty, the email keeps {{yourOffer}} instead of inventing your business.
Can I export the data?
Yes. Apify datasets can be exported as JSON, CSV, Excel, XML, RSS, HTML, or consumed through the Apify API.
Can I use proxies?
Yes. proxyConfiguration is supported.
Support
If you have questions, feature requests, or find a bug, use the Issues tab on the Apify Actor page.