B2B Buyer Lead Extractor
Pricing
from $8.00 / 1,000 leads
B2B Buyer Lead Extractor
Find B2B buyer leads from SaaS review sites. Extract decision-maker contacts, company data, and tech stack signals for sales outreach.
Pricing
from $8.00 / 1,000 leads
Rating
0.0
(0)
Developer
George Kioko
Maintained by CommunityActor stats
1
Bookmarked
15
Total users
1
Monthly active users
17 days ago
Last modified
Categories
Security
Limited permissionsShare
No login. No seat license. No guessing who buys. Lead databases tell you who might buy software like yours. A competitor's customer page tells you who already did. You pay $0.01 per company row and only the start fee for a page that yields no companies.
B2B Buyer Lead Extractor is an Apify Actor that reads competitor customer pages, case study pages and testimonial pages, pulls out the companies named on them, infers each company's website domain and returns a deduplicated lead list as a dataset and a CSV file. It is built for SaaS founders, SDR teams and growth agencies doing competitor customer scraping and account based prospecting, who want proof that a company already pays for a tool like theirs before they write the first email.
Pricing
| Event | Price | You pay when |
|---|---|---|
| Lead | $0.01 | one company row is written to the dataset |
| AI analysis | $0.00005 | one lead is enriched with AI, only when aiEnabled is true |
| Actor start | $0.00005 | a run starts, once per GB of memory, minimum one |
$10.00 per 1,000 leads. A run over two customer pages that returns 150 companies costs $1.50 plus the start fee. A page that yields no companies costs only the start fee. AI enrichment calls OpenAI with your own key, so OpenAI bills that usage, not this Actor.
What you get
| Field | Meaning |
|---|---|
companyName | Company name read from a logo alt text, a link or a case study card |
domain | Website domain when a link gives it away, or inferred from the name when domainResolutionEnabled is on |
domainConfidence | exact, inferred or missing |
extractionConfidence | 0 to 1 score for how clearly the page named the company |
extractionContext | Where the name came from, such as img_alt or case_study_link |
sourceUrl | The page the company was found on |
techStackHints | Stripe, HubSpot, Intercom and similar tools seen on the company homepage when enrichmentLevel is full |
summary, priority_score, icp_fit, decision_maker_personas, pain_hypothesis, outreach_angle | Filled only when aiEnabled is true |
processedAt | Timestamp of the run |
Start here
- Put one or more customer, case study or testimonial pages in
urls. - Run the Actor.
- Download the dataset as JSON or CSV. When
outputFormatincludes CSV the Actor also savesOUTPUT.csvto the key value store.
{"urls": ["https://www.notion.com/customers", "https://vercel.com/customers"],"maxLeadsPerUrl": 100,"deduplication": true,"domainResolutionEnabled": true,"enrichmentLevel": "basic","outputFormat": "both"}
Input
| Field | Type | Default | What it does |
|---|---|---|---|
urls | array | required | Customer, case study or testimonial pages to read |
maxLeadsPerUrl | integer | 100 | Cap on companies taken from one page |
deduplication | boolean | true | Collapse duplicates by domain, then by company name |
followCaseStudyLinks | boolean | false | Also open internal case study detail pages one level down |
maxCaseStudyLinksPerUrl | integer | 30 | Cap on case study links followed per page |
domainResolutionEnabled | boolean | true | Infer missing domains from the company name and page context |
domainResolutionConcurrency | integer | 6 | Parallel domain checks |
maxDomainCandidatesPerLead | integer | 6 | Candidate domains tested per company with no link |
enrichmentLevel | string | basic | basic extracts only, full also fetches each homepage for tech stack hints |
complianceMode | string | strict_public_only | strict_public_only stays on public pages, lenient may follow external links |
targetRegion | string | US | Region used for the AI tone |
aiEnabled | boolean | false | Add AI summary, score and outreach fields |
openaiApiKey | string | none | Required when aiEnabled is true |
openaiModel | string | gpt-4o-mini | OpenAI model for the AI fields |
outputFormat | string | both | json, csv or both |
proxyConfiguration | object | Apify Proxy | Proxy settings |
Output
One dataset item per company. This row came from a run over the Notion customers page on 2026-10-17 with AI off.
{"companyName": "Clay","domain": "clay.com","industry": "","companySizeEstimate": "","hqLocation": "","hqCountry": "","regionBlock": "US","techStackHints": [],"linkedinUrl": null,"summary": "","saas_buyer_reason": "","priority_score": null,"icp_fit": "","decision_maker_personas": [],"pain_hypothesis": "","outreach_angle": "","sourceUrl": "https://www.notion.com/customers","processedAt": "2026-10-17T06:27:54.294Z","extractionContext": "case_study_link+domain_inferred","extractionConfidence": 0.72,"domainConfidence": "inferred"}
What is NOT returned
- No contact names, emails or phone numbers. Pair the domains with the Company Enrichment API or the LinkedIn Company Employees Scraper for people.
- Inferred domains are best effort. A row marked
inferredwas matched from the company name and should be checked before outreach, and a row markedmissinghad no usable link on the page. - Logo grids with no links and pages drawn only by JavaScript yield fewer companies. Turn on
followCaseStudyLinksto read the detail pages too. - Revenue, headcount and funding are not collected. The AI fields are estimates written by the model you pay for.
Use from Claude, ChatGPT and any MCP agent
Add the Actor as an MCP tool and ask your agent for the customers of any competitor.
https://mcp.apify.com/?tools=george.the.developer/saas-buyer-extractor
From Node with the Apify client.
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });const run = await client.actor('george.the.developer/saas-buyer-extractor').call({urls: ['https://www.notion.com/customers'],outputFormat: 'json',});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items.map((lead) => [lead.companyName, lead.domain, lead.domainConfidence]));
Use cases
- SaaS founders list every company on three competitors' customer pages and get a warm target account list in minutes.
- SDR teams feed the CSV into Clay or Apollo and enrich the domains with decision makers.
- Agencies prove category demand to a client with a deduplicated buyer list across the whole competitive set.
- Investors map who buys from a portfolio company's rivals.
FAQ
How much does a run cost?
$0.01 per company row plus a start fee of $0.00005 per GB of memory. A run that returns 150 companies costs $1.50. AI analysis adds $0.00005 per lead on top of the OpenAI usage on your own key.
Does it need my OpenAI key?
Only when aiEnabled is true. Without AI the Actor still extracts names, domains and confidence scores.
Why does a row have domainConfidence set to inferred?
The page named the company without linking to its site, so the domain was matched from the name. Treat it as a strong guess and verify it before outreach.
Can it read any customer page?
It reads the HTML the page serves. Pages that draw their logo wall with JavaScript after load may yield fewer rows. Case study detail pages usually name the customer in plain HTML, so followCaseStudyLinks helps there.
Is this compliant?
The Actor reads public marketing pages and collects company names and domains only. It does not collect personal data.