B2B Lead Qualifier - Score & Rank Company Leads
Score and rank B2B leads 0-100 by crawling company websites. Analyzes 30+ signals across contact reachability, business legitimacy, online presence, website quality, and team transparency. No AI keys needed.
Maintenance Pulse
95/100Cost Estimate
How many results do you need?
Pricing
Pay Per Event model. You only pay for what you use.
| Event | Description | Price |
|---|---|---|
| lead-qualified | Charged per lead qualified. Includes multi-page domain analysis, tech stack detection, contact extraction, and A-F lead scoring across 10+ factors. | $0.15 |
Example: 100 events = $15.00 · 1,000 events = $150.00
Documentation
B2B lead qualification is the first task sales teams cut when under pressure and the last task that should be cut. This actor crawls company websites, evaluates 30+ observable signals across five weighted categories, and assigns every domain a score from 0-100 with a letter grade (A through F). In a 100-lead list, it separates the 20 worth calling from the 80 worth archiving.
The actor works standalone or as the final step in a pipeline with Website Contact Scraper and Email Pattern Finder. No AI API keys, no enrichment subscriptions — pure HTML analysis with deterministic, reproducible results. Score hundreds of B2B leads in a single run for less than a dollar.
What data does B2B Lead Qualifier extract?
| Data Point | Source | Example |
|---|---|---|
| 📊 Quality score | Computed from all signals | 82 |
| 🅰 Letter grade | Score threshold mapping | B |
| 📧 Emails found | mailto links + body text regex | [email protected] |
| 📞 Phone numbers | tel: links + contact area patterns | +1 (415) 882-3410 |
| 👤 Named contacts | Schema.org Person, team cards, heading heuristics | Sarah Chen, Marcus Webb |
| 🔗 Social profiles | LinkedIn, Twitter/X, Facebook, Instagram, YouTube | linkedin.com/company/pinnacle-industries |
| 🏢 Physical address | <address> tag, footer, location elements | 180 Sansome Street, San Francisco |
| 💻 CMS detected | meta generator + HTML patterns | WordPress |
| 🛠 Tech stack | Script src + inline HTML patterns | hubspot, google-analytics, intercom |
| 📋 Score breakdown | Points per category (5 categories) | contactReachability: 22, businessLegitimacy: 25 |
| 🔍 Signal list | Every detected signal with point value | hasPersonalEmail (+8), hasLinkedIn (+4) |
| 📄 Pages scraped | Count of pages crawled for the domain | 5 |
Why use B2B Lead Qualifier?
Manually reviewing 200 prospect websites to decide which ones deserve a sales call takes 6-8 hours. It produces inconsistent results because different reps apply different criteria. And it generates no audit trail — you cannot explain to a manager why a lead was passed over.
This actor automates the qualification step with a transparent, repeatable scoring system. Every signal that contributes to the score appears in the output, so you can see exactly why a lead received a B instead of an A. Process 200 leads in under 30 minutes. Set a minimum score filter to export only the leads worth pursuing. Import the scored dataset directly into your CRM.
- Scheduling — run qualification on new lead batches daily or weekly to keep pipeline scores current
- API access — trigger scoring runs from Python, JavaScript, or any HTTP client when new leads enter your system
- Proxy rotation — crawl at scale without IP blocks using Apify's built-in proxy infrastructure
- Monitoring — receive Slack or email alerts when qualification runs complete or fail
- Integrations — push scored leads directly to HubSpot, Zapier, Make, Google Sheets, or webhooks
Features
- 0-100 scoring system with letter grades A (90+), B (75-89), C (60-74), D (40-59), F (0-39) — deterministic and reproducible
- 30+ scoring signals across five weighted categories: Contact Reachability (max 30), Business Legitimacy (max 25), Online Presence (max 20), Website Quality (max 15), Team Transparency (max 10)
- Contact extraction — emails (mailto links + body regex, filters 10 junk patterns), phones (tel: links + formatted numbers in contact areas and footers), physical addresses (strict regex requiring number + street name + street type)
- Social media detection — LinkedIn, Twitter/X, Facebook, Instagram, YouTube extracted from all page links
- Tech stack detection — 19 tools across 4 categories: analytics (Google Analytics, Segment, Mixpanel, Hotjar, Plausible), marketing automation (HubSpot, Marketo, Pardot, Mailchimp, Klaviyo), chat (Intercom, Drift, Crisp, Tawk, Zendesk, Freshdesk), e-commerce (Stripe, PayPal, Shopify)
- CMS detection — 9 platforms (WordPress, Drupal, Joomla, Squarespace, Wix, Shopify, Webflow, Ghost, Hugo) via meta generator and HTML patterns
- Team contact extraction — three strategies: Schema.org Person markup, team card CSS selectors (10 selector variants), heading-paragraph heuristics using 26 job title keywords
- Decision-maker detection — flags leads with C-level, founder, president, or owner titles for prioritized outreach
- Priority page discovery — crawls pages in order: contact → about → team → pricing → blog → testimonials → legal → careers
- Minimum score filter — set a threshold and only output leads above it; dead domains and parked pages are automatically excluded
- Pipeline mode — accepts pre-scraped emails, phones, contacts, and social links from Website Contact Scraper and Email Pattern Finder to boost scoring accuracy
- Budget controls — pay-per-event pricing with spending limit enforcement; the actor stops when your budget is reached
- No external APIs required — zero enrichment fees, no AI model costs, no third-party subscriptions
Use cases for B2B lead scoring
Sales prospecting and outreach prioritization
SDRs and BDRs receive lead lists with hundreds of domains. Without qualification, they spend equal time on dead domains and warm prospects. Score every domain in the list, set minScore to 60, and surface only the Grade B and above leads for immediate outreach. Grade D and F leads go to a nurture queue or are discarded entirely.
Marketing agency lead generation
Agencies building prospect databases for clients need to deliver lists that convert. Run B2B Lead Qualifier on raw scraped domain lists to remove parked sites, placeholder pages, and businesses with no web presence. Deliver scored, filtered lists with documented quality rationale for each lead.
CRM enrichment and pipeline hygiene
Export existing CRM contacts as a domain list, run qualification, and import scores back as custom fields. Identify stale or low-quality contacts in your pipeline. Sales managers can sort deals by lead score to prioritize their team's time on the highest-signal opportunities.
Lead list cleaning and validation
Purchased lead lists frequently contain 20-40% low-quality entries: expired domains, parked pages, spam fronts, and single-page sites with no contact information. Set minScore to 40 and the actor automatically filters out anything that scores below a D, saving your team from wasted outreach effort.
Competitive benchmarking and market research
Score competitor websites against your own scoring criteria to understand their web presence quality. Track scores over time using Apify's scheduling to detect when competitors invest in or neglect their web presence. Identify gaps in the market where lower-scoring competitors present opportunities.
Agency client reporting
Provide clients with data-backed lead quality assessments. The transparent signal breakdown — showing exactly which signals a company does or does not have — explains every score in plain terms a client can understand and act on.
How to score B2B leads with this actor
- Enter your company domains — paste one domain per line into the "Company Domains" field. You can paste full URLs (https://example.com) or bare domains (example.com); the actor normalizes both formats.
- Set your quality threshold — set "Minimum score to include" to 40-60 to automatically exclude parked domains and dead websites from your output.
- Run the actor — click "Start" and wait. Processing 50 domains at 5 pages each typically takes 3-5 minutes.
- Download your results — export scored leads as JSON, CSV, or Excel from the Dataset tab and import directly into your CRM.
Input parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
domains | string[] | Yes | — | Company domains to analyze. Accepts full URLs or bare domains. One scored result per domain. |
pipelineData | object[] | No | — | Pre-scraped data from Website Contact Scraper or Email Pattern Finder. Each item requires domain; optional fields: emails, phones, contacts, socialLinks, pattern, confidence. |
maxPagesPerDomain | integer | No | 5 | Pages to crawl per website (1-15). Higher values produce more complete signals at proportionally higher cost. |
minScore | integer | No | 0 | Exclude leads scoring below this threshold. Set to 40 to remove dead domains, 60 to surface only strong leads. |
proxyConfiguration | object | No | Apify Proxy | Proxy settings for crawling. Apify Proxy is prefilled and recommended for batches over 20 domains. |
Input examples
Score a batch of prospects with quality filter:
{
"domains": ["pinnacleind.com", "horizonlogix.com", "betaconsulting.io"],
"maxPagesPerDomain": 5,
"minScore": 40
}
Pipeline mode with pre-scraped contact data:
{
"domains": ["pinnacleind.com"],
"pipelineData": [
{
"domain": "pinnacleind.com",
"emails": ["[email protected]", "[email protected]"],
"phones": ["+1-415-882-3410"],
"contacts": [{"name": "David Park", "title": "CEO"}],
"socialLinks": {"linkedin": "https://linkedin.com/company/pinnacle-industries"}
}
],
"maxPagesPerDomain": 5,
"minScore": 0
}
Deep scan — maximum signal coverage:
{
"domains": ["pinnacleind.com"],
"maxPagesPerDomain": 15,
"minScore": 0
}
Input tips
- Start with 5 pages per domain — covers homepage, contact, about, team, and pricing in most cases, which accounts for 80-90% of discoverable signals.
- Set minScore to 40-60 for lead list cleaning. Scores below 40 typically indicate parked domains, under-construction sites, or placeholder pages with no actionable content.
- Use pipeline mode for maximum accuracy — passing data from Website Contact Scraper adds pre-discovered emails and contacts to the scoring, which can add 5-12 points to a lead's score.
- Batch all domains in a single run — processing 100 domains in one run is faster and more cost-efficient than 100 separate single-domain runs.
- Enable proxy for batches over 20 domains — Apify Proxy (prefilled by default) prevents IP-based rate limiting on large qualification runs.
Output example
{
"domain": "pinnacleind.com",
"url": "https://pinnacleind.com",
"score": 82,
"grade": "B",
"scoreBreakdown": {
"contactReachability": 22,
"businessLegitimacy": 25,
"onlinePresence": 17,
"websiteQuality": 13,
"teamTransparency": 5
},
"signals": [
{"signal": "hasPersonalEmail", "category": "contactReachability", "points": 8, "detail": "Found: [email protected]"},
{"signal": "hasPhoneNumber", "category": "contactReachability", "points": 5, "detail": "Found: +1 (415) 882-3410"},
{"signal": "hasPhysicalAddress", "category": "contactReachability", "points": 4, "detail": "180 Sansome Street, San Francisco"},
{"signal": "hasContactPage", "category": "contactReachability", "points": 3, "detail": "Contact page link found"},
{"signal": "hasLinkedInCompany", "category": "contactReachability", "points": 4, "detail": "https://linkedin.com/company/pinnacle-industries"},
{"signal": "hasPrivacyPolicy", "category": "businessLegitimacy", "points": 3, "detail": "Privacy policy link found"},
{"signal": "hasSSL", "category": "businessLegitimacy", "points": 3, "detail": "HTTPS active"},
{"signal": "hasCopyrightCurrent", "category": "businessLegitimacy", "points": 3, "detail": "Copyright 2025"},
{"signal": "hasAboutPage", "category": "businessLegitimacy", "points": 3, "detail": "About page link found"},
{"signal": "hasStructuredData", "category": "businessLegitimacy", "points": 3, "detail": "2 JSON-LD, 0 microdata"},
{"signal": "hasMultipleNavPages", "category": "businessLegitimacy", "points": 3, "detail": "8 navigation links"},
{"signal": "hasContentDepth", "category": "businessLegitimacy", "points": 3, "detail": "~640 words on page"},
{"signal": "hasFavicon", "category": "businessLegitimacy", "points": 2, "detail": "Favicon present"},
{"signal": "hasSocialMedia", "category": "onlinePresence", "points": 3, "detail": "3 platform(s): linkedin, twitter, facebook"},
{"signal": "hasTestimonials", "category": "onlinePresence", "points": 3, "detail": "Testimonials or client references found"},
{"signal": "hasAnalytics", "category": "onlinePresence", "points": 2, "detail": "google-analytics"},
{"signal": "hasMarketingTools", "category": "onlinePresence", "points": 3, "detail": "hubspot"},
{"signal": "hasPricingPage", "category": "onlinePresence", "points": 2, "detail": "Pricing page link found"},
{"signal": "hasMetaDescription", "category": "websiteQuality", "points": 2, "detail": "Industrial supply and logistics solutions for..."},
{"signal": "hasOpenGraph", "category": "websiteQuality", "points": 2, "detail": "5 OG tags"},
{"signal": "hasViewport", "category": "websiteQuality", "points": 2, "detail": "Mobile viewport configured"},
{"signal": "hasProperTitle", "category": "websiteQuality", "points": 2, "detail": "Pinnacle Industries — Supply Chain Solutions"},
{"signal": "hasH1", "category": "websiteQuality", "points": 1, "detail": "H1 heading present"},
{"signal": "hasImages", "category": "websiteQuality", "points": 1, "detail": "14 images"},
{"signal": "hasNavigation", "category": "websiteQuality", "points": 2, "detail": "7 nav links"},
{"signal": "hasTeamPage", "category": "teamTransparency", "points": 3, "detail": "Team page link found"},
{"signal": "hasNamedContacts", "category": "teamTransparency", "points": 2, "detail": "2 contact(s): David Park, Sarah Chen"}
],
"extractedData": {
"emails": ["[email protected]", "[email protected]"],
"phones": ["+1 (415) 882-3410"],
"contactNames": ["David Park", "Sarah Chen"],
"socialLinks": {"linkedin": "https://linkedin.com/company/pinnacle-industries", "twitter": "https://twitter.com/pinnacleind", "facebook": "https://facebook.com/pinnacleind"},
"address": "180 Sansome Street, San Francisco",
"cmsDetected": "WordPress",
"techSignals": ["google-analytics", "hubspot", "intercom"]
},
"pagesScraped": 5,
"qualifiedAt": "2026-03-19T10:44:00.000Z"
}
Output fields
| Field | Type | Description |
|---|---|---|
domain | string | Company domain analyzed |
url | string | Normalized URL used for crawling |
score | number | Total quality score (0-100) |
grade | string | Letter grade: A (90+), B (75-89), C (60-74), D (40-59), F (0-39) |
scoreBreakdown.contactReachability | number | Points earned in contact reachability (max 30) |
scoreBreakdown.businessLegitimacy | number | Points earned in business legitimacy (max 25) |
scoreBreakdown.onlinePresence | number | Points earned in online presence (max 20) |
scoreBreakdown.websiteQuality | number | Points earned in website quality (max 15) |
scoreBreakdown.teamTransparency | number | Points earned in team transparency (max 10) |
signals | array | Every signal detected, with signal name, category, points, and detail |
extractedData.emails | string[] | All non-junk emails found across crawled pages |
extractedData.phones | string[] | Phone numbers found via tel: links and contact area patterns |
extractedData.contactNames | string[] | Named individuals extracted from team pages and Schema.org markup |
extractedData.socialLinks | object | Social media profile URLs by platform key |
extractedData.address | string | null | Physical street address if found |
extractedData.cmsDetected | string | null | CMS platform identified (e.g., WordPress, Webflow) |
extractedData.techSignals | string[] | Technology tools detected in page source |
pagesScraped | number | Total pages crawled for this domain |
qualifiedAt | string | ISO 8601 timestamp of when scoring completed |
How much does it cost to score B2B leads?
B2B Lead Qualifier uses pay-per-event pricing — you pay $0.15 per qualified lead. Platform compute costs are included.
| Scenario | Leads scored | Cost per lead | Total cost |
|---|---|---|---|
| Quick test | 1 | $0.15 | $0.15 |
| Small batch | 10 | $0.15 | $1.50 |
| Medium batch | 50 | $0.15 | $7.50 |
| Large batch | 200 | $0.15 | $30.00 |
| Enterprise | 1,000 | $0.15 | $150.00 |
You can set a maximum spending limit per run to control costs. The actor stops when your budget is reached, so you never exceed what you intended to spend.
Compare this to Clay at $149-720/month or Apollo at $49-119/month — with B2B Lead Qualifier, most teams spend $5-30/month with no subscription commitment and full transparency into every scored signal.
Apify's free tier includes $5 of monthly platform credits, which covers approximately 33 scored leads at no cost.
Score B2B leads using the API
Python
from apify_client import ApifyClient
client = ApifyClient("YOUR_API_TOKEN")
run = client.actor("ryanclinton/b2b-lead-qualifier").call(run_input={
"domains": ["pinnacleind.com", "horizonlogix.com", "betaconsulting.io"],
"maxPagesPerDomain": 5,
"minScore": 40,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(f"{item['domain']}: {item['score']}/100 ({item['grade']})")
emails = item["extractedData"]["emails"]
print(f" Emails: {', '.join(emails) if emails else 'none'}")
print(f" Top signal: {item['signals'][0]['signal']} (+{item['signals'][0]['points']})")
JavaScript
import { ApifyClient } from "apify-client";
const client = new ApifyClient({ token: "YOUR_API_TOKEN" });
const run = await client.actor("ryanclinton/b2b-lead-qualifier").call({
domains: ["pinnacleind.com", "horizonlogix.com", "betaconsulting.io"],
maxPagesPerDomain: 5,
minScore: 40,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
for (const item of items) {
console.log(`${item.domain}: ${item.score}/100 (${item.grade})`);
console.log(` Contacts: ${item.extractedData.contactNames.join(", ") || "none"}`);
console.log(` Emails: ${item.extractedData.emails.join(", ") || "none"}`);
}
cURL
# Start the actor run
curl -X POST "https://api.apify.com/v2/acts/ryanclinton~b2b-lead-qualifier/runs?token=YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"domains": ["pinnacleind.com", "horizonlogix.com"],
"maxPagesPerDomain": 5,
"minScore": 40
}'
# Fetch results (replace DATASET_ID from the run response)
curl "https://api.apify.com/v2/datasets/DATASET_ID/items?token=YOUR_API_TOKEN&format=json"
How B2B Lead Qualifier works
Phase 1: Input normalization and pipeline loading
Each input domain is normalized — strips https://, www., paths, and ports — so https://www.acme.com/products and acme.com both map to acme.com. If pipelineData is provided, pre-scraped emails, phones, contacts, and social links are loaded into the domain's data store before crawling begins. This means contacts discovered by Website Contact Scraper count toward scoring signals from page one.
Phase 2: Prioritized page discovery and crawling
A CheerioCrawler instance runs with 10 concurrent connections, a rate limit of 120 requests/minute, 30-second timeout per request, and 2 automatic retries. For each domain, the crawler starts at the homepage and scans all <a> links for qualifying page keywords: contact, about, team, pricing, blog, clients, testimonials, privacy, terms, services, careers, and additional variants. Pages are sorted by priority (contact pages first, careers pages last) and the top N are enqueued up to maxPagesPerDomain. Only same-domain pages are crawled.
Phase 3: Five-category signal extraction
On every crawled page, the actor runs five extraction passes in parallel using Cheerio selectors:
- Contact Reachability (max 30 pts) — personal emails from mailto links and body regex (filtered against 8 junk patterns), generic role emails as fallback, phone numbers from tel: links and formatted patterns in footer/contact areas, physical addresses via strict regex requiring a street type word, contact page links, LinkedIn profiles, and decision-maker title matching against CEO/CTO/CFO/COO/Founder/President/Owner.
- Business Legitimacy (max 25 pts) — privacy policy and terms of service links, current copyright year (2024+), about page, JSON-LD and microdata counts, navigation link depth, word count over 200, favicon, and confirmed HTTPS.
- Online Presence (max 20 pts) — social platform count (1pt per platform, max 5), blog/news links, testimonial/client reference text patterns, analytics tools, marketing automation tools, chat widgets, and pricing page.
- Website Quality (max 15 pts) — meta description length, Open Graph tag count, mobile viewport, page title quality, H1 presence, Schema.org Organization/LocalBusiness/Corporation in JSON-LD, image count, and navigation element structure.
- Team Transparency (max 10 pts) — team page link, named contacts (up to 4 points, 1pt each) discovered via Schema.org Person markup, 10 team card CSS selector variants, and a heading-paragraph heuristic matching 26 job title keywords, plus contacts with identified job titles.
Signal detection uses a first-detection-wins deduplication strategy: once a signal fires, subsequent pages cannot double-count it.
Phase 4: Score assembly and output
Category sub-scores are capped at their category maximum, then summed to a total score (0-100). The grade thresholds are: A >= 90, B >= 75, C >= 60, D >= 40, F < 40. Leads below minScore are logged and excluded from the dataset. In pay-per-event mode, a charge event fires before each lead is pushed to the dataset; if the user's spending limit is reached, the run stops cleanly.
Tips for best results
-
Run Website Contact Scraper first for A-grade leads. Passing pre-scraped email and contact data via
pipelineDatacan add 8-15 points to a domain's score, pushing borderline B leads to A and surfacing contacts the qualifier's crawl might miss on JavaScript-heavy pages. -
Use minScore 40 for list cleaning, 60 for prioritization. A score below 40 almost always indicates a parked domain, under-construction page, or site with no meaningful content. A score above 60 confirms at least a basic functional business presence with some contact signals.
-
Set maxPagesPerDomain to 3 for large batches over 500 domains. Three pages (homepage + contact + about) captures the majority of scoring signals in most cases and cuts processing time and cost by 40%.
-
Export to CSV and sort by score descending before CRM import. Salesforce, HubSpot, and most CRMs accept CSV uploads. Sort the file by
scorecolumn before importing so your reps see Grade A leads at the top of every view. -
Schedule weekly runs on your active prospect list. Company websites change. A lead that scored D six months ago may have invested in their web presence since then. Weekly re-scoring keeps pipeline quality data current.
-
Check
cmsDetectedfor agency lead generation. WordPress-based businesses are strong targets for digital agency services. Filter your output bycmsDetected: WordPressto build targeted agency prospect lists. -
Combine tech signals with score for intent-based filtering. A lead with
hubspotintechSignalsis already using marketing automation — they understand the category. Filter forscore > 60ANDtechSignals contains hubspotfor warm SaaS or marketing tool prospects.
Combine with other Apify actors
| Actor | How to combine |
|---|---|
| Website Contact Scraper | Run first to extract emails, phones, and contacts, then pass as pipelineData for maximum scoring accuracy |
| Email Pattern Finder | Detect company email naming conventions and pass the pattern and confidence score via pipelineData |
| B2B Lead Gen Suite | Orchestrates Website Contact Scraper + Email Pattern Finder + Lead Qualifier in a single automated pipeline |
| Bulk Email Verifier | Verify extracted emails via MX + SMTP before adding them to your outreach sequences |
| HubSpot Lead Pusher | Push Grade A and B leads directly into HubSpot as contacts or deals after scoring |
| Waterfall Contact Enrichment | Run enrichment on Grade B+ leads to fill in missing contact data from 10 enrichment sources |
| Website Tech Stack Detector | Get comprehensive tech stack analysis (100+ tools) beyond the 17 tools the qualifier detects |
Limitations
- No JavaScript rendering — the actor uses CheerioCrawler for static HTML parsing. Single-page applications (React, Angular, Vue) that load content via JavaScript will produce fewer signals and lower scores than their actual quality warrants. For JS-heavy sites, use Website Contact Scraper Pro upstream to extract contacts before scoring.
- No third-party data — scoring is based entirely on what is visible in the website's HTML. Revenue, employee headcount, funding data, and LinkedIn company size are not included. Use Company Deep Research for those data points.
- Same-domain crawling only — the actor does not follow links to external domains. A company whose team page is hosted on a separate subdomain or third-party platform will not have those pages crawled.
- Address detection is strict — requires a number, street name, and full street type word (street, avenue, boulevard, etc.). Abbreviated addresses (123 Main St.) may not be detected.
- Deterministic but not complete — scores reflect what is detectable in HTML. A company may have excellent offline presence while their website scores poorly. Use the score as a filter, not a final verdict.
- No authentication — only publicly accessible pages are crawled. Gated content, password-protected sections, and robots.txt-blocked pages are excluded.
- Tech detection covers 17 tools — analytics, marketing, chat, and e-commerce categories only. Use Website Tech Stack Detector for broader coverage (100+ technologies).
- CMS detection covers 9 platforms — WordPress, Drupal, Joomla, Squarespace, Wix, Shopify, Webflow, Ghost, and Hugo via meta generator and HTML patterns. Custom or obscure CMS platforms return null.
Integrations
- Zapier — route scored leads into CRMs, email sequences, or Slack notifications when qualification runs complete
- Make — build automated workflows that trigger on new leads, score them, and route Grade A results to specific sales reps
- Google Sheets — export scored lead tables for team review, pipeline planning, or client delivery
- Apify API — trigger scoring runs programmatically when new domains enter your system via webhook or database trigger
- Webhooks — receive a POST notification with run results when qualification completes, for downstream pipeline automation
- LangChain / LlamaIndex — feed the structured signal output into AI agent workflows for natural language lead analysis and research summarization
Troubleshooting
-
Low scores for companies you know are legitimate — the most common cause is a JavaScript-heavy website. If a site's contact information only appears after client-side rendering, the static crawler will not see it. Run Website Contact Scraper first and pass the results as
pipelineDatato inject known contacts into the scoring. -
Run takes longer than expected on large batches — each domain crawls up to
maxPagesPerDomainpages. For 500+ domain batches, reducemaxPagesPerDomainto 3. Contact, about, and team pages capture the majority of scoreable signals in three pages for most business websites. -
Some domains receive a score of 0 — domains that return no response (DNS failure, HTTP 4xx/5xx, SSL error) create a minimal data record with no signals detected. The actor still outputs them with score 0 and grade F so the full domain list is preserved. Set
minScoreto 1 to exclude truly unreachable domains from your export. -
Emails not appearing in output despite visible on website — the email regex requires the
@symbol and a valid TLD. Obfuscated emails (where@is replaced with[at]or similar) will not be detected. The actor also filters noreply, test, and image-filename false positives.
Responsible use
- This actor only accesses publicly visible web pages.
- Respect website terms of service and
robots.txtdirectives. - Comply with GDPR, CAN-SPAM, and other applicable data protection laws when using extracted contact data for outreach.
- Do not use scoring results to discriminate against businesses based on protected characteristics.
- For guidance on web scraping legality, see Apify's guide.
FAQ
How many B2B leads can I score in one run? There is no hard cap. The actor processes each domain sequentially through the scoring pipeline. Practical limits are run timeout (60 minutes default) and your spending limit. At 5 pages per domain and 10 concurrent connections, a 200-domain batch typically completes in 15-20 minutes.
How is B2B Lead Qualifier different from Website Contact Scraper? Website Contact Scraper extracts contact information: emails, phones, social links. B2B Lead Qualifier evaluates lead quality across 30+ signals and produces a scored ranking. They are designed to work together: scrape contacts first, then score and rank. The B2B Lead Gen Suite orchestrates both actors automatically.
How accurate is the B2B lead scoring? The scoring is objective and deterministic — based entirely on observable HTML signals. A company with a phone number, privacy policy, LinkedIn profile, and team page will consistently score higher than one without. The full signal list in the output lets you verify exactly why any lead received its grade. Scores are reproducible: running the same domain twice on the same day will return the same score.
Can I score leads from a purchased list or CRM export?
Yes. Export your domain column, paste it into the domains input, run the actor, then import the scored results back using the domain field as a join key. Score and grade map directly to custom CRM fields.
Does B2B lead scoring require any API keys or paid external services? No. The actor works entirely by crawling and parsing HTML. No AI model calls, no enrichment APIs, no third-party data subscriptions. The only cost is Apify's pay-per-event charge of $0.15 per scored lead.
How is this different from Clay or Apollo for lead qualification? Clay and Apollo offer broad contact databases with enrichment. B2B Lead Qualifier scores any domain you provide — including niche or local businesses not in large databases. It is fully transparent about why each lead scored as it did, and it costs $0.15 per lead versus $49-720/month subscriptions. The two approaches are complementary: use databases for discovery, use this actor to qualify and rank what you find.
What does a Grade A lead look like in practice? A Grade A lead (90+) typically has: a personal email address (not just info@ or contact@), a phone number, a physical address, a LinkedIn company page, 3+ social media platforms, a team page with named contacts and job titles, privacy policy and terms of service pages, structured data markup, analytics tools, and a marketing automation platform. These signals together indicate an active, reachable business.
Can I filter out parked domains and placeholder sites automatically?
Yes. Set minScore to 40. Parked domains, under-construction pages, and single-page placeholder sites almost always score below 40 because they lack contact information, navigation structure, content, and business legitimacy signals.
Is it legal to scrape company websites for lead scoring? Scraping publicly accessible business websites for commercial research is generally considered lawful in most jurisdictions, as established in the hiQ Labs v. LinkedIn case and similar rulings. You should comply with each site's terms of service and robots.txt. When using extracted contact data for outreach, comply with CAN-SPAM, GDPR, and other applicable laws. See Apify's web scraping legality guide for a detailed breakdown.
Can I schedule B2B lead qualification to run automatically? Yes. Apify's built-in scheduler lets you run the actor on a daily, weekly, or custom cron schedule. This is useful for continuously qualifying new leads that enter your pipeline or for re-scoring your existing prospect list to detect changes in web presence over time.
What happens if a website blocks the crawler? The actor retries failed requests up to 2 times with automatic delay. If still unreachable, the domain receives a score of 0 and grade F with no signals. Apify Proxy (enabled by default) rotates IPs to minimize blocking. For aggressive rate-limiting sites, increasing the proxy tier in the proxy configuration will improve reachability.
Can I use the signal output to build custom scoring logic?
Yes. The signals array in every result contains every detected signal with its signal name, category, points, and detail text. You can import the JSON output and apply your own weighting logic — for example, up-weighting hasPersonalEmail for cold email campaigns or down-weighting hasBlog if content marketing is not relevant to your qualification criteria.
Help us improve
If you encounter issues, you can help us debug faster by enabling run sharing in your Apify account:
- Go to Account Settings > Privacy
- Enable Share runs with public Actor creators
This lets us see your run details when something goes wrong, so we can fix issues faster. Your data is only visible to the actor developer, not publicly.
Support
Found a bug or have a feature request? Open an issue in the Issues tab on this actor's page. For custom scoring models, enterprise integrations, or pipeline automation consulting, reach out through the Apify platform.
How it works
Configure
Set your parameters in the Apify Console or pass them via API.
Run
Click Start, trigger via API, webhook, or set up a schedule.
Get results
Download as JSON, CSV, or Excel. Integrate with 1,000+ apps.
Use cases
Sales Teams
Build targeted lead lists with verified contact data.
Marketing
Research competitors and identify outreach opportunities.
Data Teams
Automate data collection pipelines with scheduled runs.
Developers
Integrate via REST API or use as an MCP tool in AI workflows.
Related actors
Website Contact Scraper
Extract emails, phone numbers, team members, and social media links from any business website. Feed it URLs from Google Maps or your CRM and get structured contact data back. Fast HTTP requests, no browser — scrapes 1,000 sites for ~$0.50.
Email Pattern Finder
Discover the email format used by any company. Enter a domain like stripe.com and detect patterns like [email protected]. Then generate email addresses for any name. Combine with Website Contact Scraper to turn company websites into complete email lists.
Waterfall Contact Enrichment
Find business emails, phones, and social profiles from a name + company domain. Cascades through MX validation, website scraping, pattern detection, and SMTP verification. Free Clay alternative.
Google Maps Lead Enricher
Search Google Maps for businesses, then automatically enrich each result with emails, phone numbers, named contacts, social links, email patterns, and lead quality scores (0-100) through a 4-step pipeline.
Ready to try B2B Lead Qualifier - Score & Rank Company Leads?
Start for free on Apify. No credit card required.
Open on Apify Store