Home Use-Case Tutorials Build a B2B Email Outreach List from Scratch

Build a B2B Email Outreach List from Scratch

Last updated on Apr 29, 2026

Build a B2B Email Outreach List from Scratch

This tutorial covers building a targeted B2B email list from a company name list, with no LinkedIn URLs as starting input. You will go from company names to contactable leads ready for outreach.


Before you begin

  • Connect these integrations in Settings > Integrations:
    • Apify (for LinkedIn scraping)
    • BetterEnrich or Apollo (for email finding)
    • Hunter.io or Findymail (as fallbacks)

What you will build

A two-table workflow:

  • Table 1 - Company to contacts: scrape decision-maker profiles from each company.
  • Table 2 - Contacts to emails: find email for each LinkedIn URL found in Table 1.

Step 1: Build the company-to-contacts table

Create the table

  1. Click New Table and name it Company Employee Scrape.
  2. Add a column called Company LinkedIn URL (the LinkedIn company page URL, e.g. https://linkedin.com/company/acme).
  3. Import your company list as a CSV or paste company page URLs.

Add the scraping action

  1. Click Add Column.
  2. Select Action Column.
  3. Search for and select Scrape LinkedIn Company Employees (Apify).
  4. Map the Company LinkedIn URL column to the input.
  5. Configure filters:
    • Set Job Title Keywords to your target function: "sales", "marketing", "growth", "revenue".
    • Set Location if targeting a specific geography.
  6. Click Save.
  7. Click Run All Rows.

This action costs 8 credits per row. Each row produces multiple employee results.


Step 2: Extract LinkedIn profile URLs

After the scrape completes, your table will have columns for each employee's name and LinkedIn profile URL. Export this table as a CSV or copy the LinkedIn URL column for use in the next table.

If you are using Workbooks, add the second table in the same Workbook and use a cross-table reference for the LinkedIn URL column.


Step 3: Build the email enrichment table

  1. Click New Table and name it Contact Email Enrichment.
  2. Import the LinkedIn profile URLs from Step 2 as the first column.

Add work email finding

  1. Click Add Column and select an Action Column.
  2. Select Find Work Email by LinkedIn URL (BetterEnrich).
  3. Map LinkedIn URL to the input.
  4. Select Email as the output.
  5. Click Save.

This action costs 2 credits per row.

Add a fallback email source

  1. Add another Action Column.
  2. Select Find Email using LinkedIn URL (Apollo).
  3. Map LinkedIn URL to the input.
  4. Select Email as output.
  5. Click Save.

This action costs 2 credits per row.

Add a combined email formula

  1. Click Add Column and select Formula Column.
  2. Enter: IF(betterenrich_email != "", betterenrich_email, apollo_email)
  3. Name it Final Email.

Step 4: Run and filter

  1. Click Run All Rows on the email enrichment table.
  2. After completion, filter the table: show only rows where Final Email is not empty.
  3. Export as CSV or push to your sequencing tool.

What to expect

Building this workflow with 50 target companies:

  • Employee scrape: typically returns 100-500 contacts depending on company size and filter settings
  • Email enrichment: typically 50-70% of those contacts will have a work email found

Troubleshooting

The Apify scrape returns employees from companies I did not include. Verify all company URLs are LinkedIn company page URLs, not personal profile URLs. Company URLs follow the pattern linkedin.com/company/name, not linkedin.com/in/name.

Job title filter returns no results. Some job titles on LinkedIn do not match common keywords. Try broader terms like "sales" instead of "account executive". You can also leave the filter empty and filter by job title in TexAu after the scrape returns results.

Email hit rate is below expectations. Company size and industry affect coverage. Mid-market SaaS companies typically have higher email coverage than small agencies or local businesses. Add FullEnrich or Prospeo as additional fallback columns to increase overall reach.