To find B2B leads at specific companies, enter their website domains and your target job titles in the B2B Leads Finder on Apify. Start with a small result limit, review the returned roles and employers, then export the Dataset as CSV. Save the search input so you can request the next batch consistently.
The Actor searches stored professional records using company and person filters. You can use the Apify input form without code or ask an MCP-connected agent to prepare and run the search. An Apollo subscription is not required for this independent search workflow.
Step 1. Prepare company domains and role names
Use bare company domains in company_websites, such as github.com. Remove the protocol, www and page paths. Keep the original company name and domain in your source sheet, and review parent-company and subsidiary domains separately.
Choose role variants that fit your brief. For operations leadership, you might start with Head of Operations and Operations Director. Keep related but unsuitable functions, such as sales operations, in mind when reviewing the returned titles.
Write down the intended country, seniority and company-size range, but start with only the filters you need. Adding several restrictive filters at once makes an empty first search harder to diagnose.
Step 2. Run a small company-and-title search
Open the B2B Leads Finder on Apify, click Try for free and sign in if prompted. Open its editable Input form in Apify Console.
- Set Total Results to 25.
- Add your target roles under the person titles field.
- Enter the confirmed bare domains under the company domain field.
- Set Email Status explicitly to
allfor a broad first review. - Keep Include Emails enabled if you want available email fields in the output.
- Leave Include Phone Numbers off unless a phone is required for every result.
- Review pricing, set a run spending limit and click Start.
The public input reference explains the filters. The image shows the company-domain and contact controls; your actual values go into the Console form.

JSON template for the first 25 results
Replace the two illustrative domains with your actual target companies. The explicit email setting makes the intended search reproducible.
{
"company_websites": [
"YOUR_FIRST_COMPANY.com",
"YOUR_SECOND_COMPANY.com"
],
"job_titles": [
"Head of Operations",
"Operations Director"
],
"max_results": 25,
"email_status": "all",
"include_emails": true,
"include_phones": false
}The publisher also offers Leads Scraper with the same current filter shape. Choose one Actor and keep it fixed when continuing a segment. If comparing listings, use the same input and review the results and charges for each.
Understand the filters that change your audience
Title variants broaden the role search, while additional filter groups narrow the segment. Inspect the actual returned job title: a text-based role search can include titles that need a human fit decision.
| Field | How to use it |
|---|---|
job_titles | Role names or deliberate title variants. |
job_title_seniority | Supported levels such as director, vp or cxo. |
person_location_country | The person’s country. |
company_location_country | The company’s location criterion. |
employee_size | Accepted ranges such as 51-200 or 201-500. |
industries, industry_keywords | Additional industry context when needed. |
business_model | Supported values such as b2b or saas. |
Select values from the current form rather than inventing labels. For example, this Actor uses cxo for a seniority choice. Another provider’s similar-looking field may use a different value.
A remote employee and the employer’s headquarters can be in different countries. Choose the person location, company location or both according to the brief. Keep the chosen interpretation with your search log.
Choose email and phone requirements deliberately
include_emails controls email output. Set email_status explicitly to all, verified or likely according to your intended filtering. More restrictive email choices can remove otherwise relevant people.
Those email labels describe stored-data filtering. The Actor does not perform live SMTP verification during the search. Review the returned contact and use a separate deliverability check when needed.
include_phones: true requires an available mobile phone number. It can reduce the number of qualifying profiles. Leave it false during the broad first segment test, then enable it if a phone-ready list is your actual requirement.
Step 3. Review the first Dataset
Open the completed run’s Dataset and inspect a sample before accepting the whole file. Compare the returned employer, company domain, role and profile identity with the source brief.
- Keep the stable
idandlinkedin_urlwhen returned. - Review the person’s name and
job_title. - Retain the available company name and website fields.
- Keep
work_email, available email arrays andmobile_phoneaccording to your requested output. - Record accepted, rejected and uncertain matches in a working review sheet.
For example, a regional operations director may fit your brief, while a sales operations manager may not. A similarly named employer can also be the wrong company. Use rejection reasons such as wrong function, wrong employer and employer unclear.
The records may contain older employment or contact data. Keep identity and current-role review separate from whether a contact field is populated. A larger row count is useful only when the rows satisfy your target segment.
Step 4. Download CSV and retain the search history
Choose CSV from the Dataset export action. Keep an original copy with the Actor name, run ID, Dataset ID, date and exact input. Use JSON too when you need nested arrays that are awkward in a spreadsheet.
Keep stable IDs and phone values as text. Deduplicate the working list by the stable record ID, using verified profile URLs when needed for cross-source reconciliation. Preserve the company-and-role brief beside the accepted list.
Count distinct accepted people, companies represented and profiles with each usable contact type. A company with no accepted result needs its own review; it should not disappear from the target-company report.
Request the next batch with the saved cursor
Open PAGINATION in the run’s default key-value store. Copy next_start_after_id into start_after_id for the next run, keeping the Actor, segment filters and contact requirements fixed.
- Save the first run’s input, output and pagination record.
- Copy its returned continuation value exactly.
- Reuse the same search input with that
start_after_id. - Set a separate approved budget for the new run.
- Check that the new cursor advances and compare IDs before appending.
The cursor tracks the last delivered profile, including a batch stopped by its output budget. Check the record and run evidence before concluding the segment is exhausted. If no new rows are saved or the cursor repeats, stop automatic continuation and inspect the cause.
Page-based pagination and explicit offsets are also supported. Page 2 skips the first result-limit-sized block, so changing the limit can change the skipped range. Use one continuation method consistently; cursor pagination is preferable for large exports. A changed segment starts with its own cursor history.
Diagnose a small or empty segment before widening it
Check one company and one role at a time. Confirm the domain, try a deliberate title variant and review location, seniority and contact requirements. A parent brand and subsidiary may be represented under different employer domains.
The maximum requested output is 100,000 per run. Source matches, budgets and account allowances can lower the result. The current Finder documentation describes a 500-exported-profile monthly allowance on the Apify Free plan, using the published event pricing. Review QUOTA, ERROR and the run log when present.
Keep partial output and its stop reason. A source-company report should distinguish no accepted match from a search that stopped before completing its intended work.
Run a B2B segment with your agent through Apify MCP
Connect your MCP-compatible agent to https://mcp.apify.com and authorize Apify using the MCP setup guide. Give it the domain list and a clear role brief.
Use x_guru/b2b-leads-finder.
Company domains: [MY_BARE_DOMAINS]
Target roles: [MY_TITLE_VARIANTS]
Approved event-charge cap USD: [AMOUNT]
Inspect the current input schema.
Start with max_results=25.
Set email_status="all" explicitly,
include_emails=true and
include_phones=false for the pilot.
Apply the approved cap through
callOptions.maxTotalChargeUsd.
Wait for completion and read every
Dataset page. Preserve stable IDs,
profile URLs, employer and title fields,
and available requested contacts.
Save raw output, a review CSV and the
exact search input. Report companies
represented, accepted roles and conflicts.
Read PAGINATION and save its cursor,
but wait before starting another run.
Include quota or error evidence and
the run ID and Dataset ID.The agent uses call-actor to start, get-actor-run to wait and get-dataset-items for output pages. Ask it to keep each cursor bound to the input that produced it.
For an existing Apollo list, follow the Apollo export and API comparison. For known profiles, use the LinkedIn email or phone workflows. For another integration route, see the Dievio Lead Generation API and the Apify export guide.



