SyncGTM now works inside Claude and ChatGPT. Learn more
All GTM agents

Scrape Emails From Website

/scrape-emails-from-website

Crawls a company website and returns every published email address — contact, about, team, support and legal pages included — for 0.5 credits per site.

Download Skillscrape-emails-from-website.zip · free

Overview

scrape-emails-from-website calls the SyncGTM MCP `scrape_emails_from_website` tool to crawl a company site and return every email address published on it. It reads page text, `mailto:` links and embedded markup across the homepage plus contact, about, team, support and legal pages. It is the fallback for accounts where you have a domain but no LinkedIn URL, so expect shared inboxes like info@ and sales@ rather than a named person's address.

What it does

  1. 1

    Takes one input — `url`, either a full website URL or a bare domain like acme.com. That is the only parameter the tool accepts

  2. 2

    Crawls the homepage plus contact, about, team, support and legal pages, pulling addresses from page text, `mailto:` links and embedded markup

  3. 3

    Returns a flat `emails` array under the site's `url` — mostly generic inboxes such as info@, sales@ and support@

  4. 4

    Always starts the crawl at the site root: a deep link like acme.com/pricing/enterprise is reduced to acme.com, so you cannot target one page

  5. 5

    Returns addresses only — no names, job titles, phone numbers or LinkedIn URLs attached to them

  6. 6

    Costs 0.5 credits per call, billed per site and not per address found; an empty result is normal on sites that use a contact form

How to use it

  1. 1

    Download the skill file — it saves as scrape-emails-from-website.zip.

  2. 2

    In Claude, open Settings → Capabilities → Skills and upload the .zip (or unzip the scrape-emails-from-website/ folder into .claude/skills/ for Claude Code).

  3. 3

    Connect the SyncGTM MCP server using the setup guide for your client — browser sign-in, no API key needed.

  4. 4

    Type /scrape-emails-from-website and paste a domain or a column of domains. Strip https:// and any path first, since the crawl starts at the site root either way.

  5. 5

    The one thing worth tuning is verification, which is a separate tool rather than a setting: add 'verify every address and drop anything undeliverable' to chain verify_email at 0.3 credits per address.

Use cases

No-LinkedIn fallback

Recover the rows where find_work_email came back empty because the lead has no LinkedIn URL. Scrape their company site for any address that gets you into the account.

Bulk domain enrichment

Turn a conference exhibitor list, partner directory or CSV of domains into a contact-route column at 0.5 credits per site.

Local business outreach

Pull published inboxes off clinic, agency and contractor sites sourced from Google Maps, where LinkedIn coverage is thin and the site is the only contact channel.

Account routing inbox

Find whichever monitored inbox an account publishes — support@, accounts@, hello@ — so renewal and escalation mail lands in a shared mailbox instead of one rep's.

GTM workflow examples

Rescue the no-LinkedIn tail of a list build

  1. 1Run `check_credits` (free) to price the run before you commit to it
  2. 2Run `find_work_email` (1 credit each) on every lead that has a LinkedIn URL and set aside the rows it returns nothing for
  3. 3Call `scrape_emails_from_website` (0.5 credits) on the company domain for each leftover row to pull published inboxes
  4. 4Call `find_people_within_company` (1.5 credits) on the domains that returned zero addresses to get a named person you can look up properly
  5. 5Run `verify_email` (0.3 credits per address) on every scraped address, drop the undeliverable ones, and tag each surviving row Named or Generic

Outcome: A CSV where every account has a Contact Route column — named address, generic inbox, or no route — plus a coverage count showing how many rows the scrape recovered.

Trade show exhibitor list into a qualified outbound file

  1. 1Run `enrich_organization` (2 credits) on each exhibitor domain to get industry, employee count and funding, then cut anything outside ICP
  2. 2Call `scrape_emails_from_website` (0.5 credits) on the surviving domains to collect published inboxes
  3. 3Call `scrape_phones_from_website` (0.5 credits) on the domains that returned no address so those accounts still have a switchboard number
  4. 4Run `verify_email` (0.3 credits per address) on every scraped address, drop the undeliverable ones and mark each row Generic or Named
  5. 5Call `find_people_within_company` (1.5 credits) on the ICP matches still without an address, to get a name worth a `find_work_email` lookup

Outcome: A ranked exhibitor sheet with firmographics, a verified email or a published phone number for each qualified account, and a named shortlist for the accounts the crawl missed.

Local vertical prospecting off Google Maps

  1. 1Run `google_maps_listings` (2 credits per call, whatever max_results you set) for the business type and city, then drop every listing with no website
  2. 2Call `scrape_emails_from_website` (0.5 credits) on each remaining site, working down by review count so the budget goes to businesses worth contacting
  3. 3Call `scrape_phones_from_website` (0.5 credits) on the sites that published no address
  4. 4Run `verify_email` (0.3 credits per address) on every address you intend to email — role inboxes included, since on local sites they are most of what you get — and drop the undeliverable ones

Outcome: A one-row-per-business call sheet with the Maps listing, review count, a verified email or a published phone number, and an honest count of the sites that publish neither.

Prompts

Paste any of these into Claude once the skill is installed and the SyncGTM MCP is connected.

Scrape emails from acme.com and label each address as generic or named.
Scrape emails from these 25 domains — one row per domain with every address found. Do not guess or pattern-generate any address, and leave the row blank when the site publishes none.
Run check_credits first, then quote me the total credit spend for scraping emails from the 40 domains below and wait for my go-ahead before you run them.
For the 30 leads below where find_work_email returned nothing, scrape emails from their company website instead, mark those rows as generic, then verify each address with verify_email and drop anything undeliverable.
Scrape emails and phones from these 20 dental clinic websites and give me one row per clinic with a Contact Route column: named address, generic inbox, phone only, or none.

Best practices

  • Expect generic inboxes. Label every info@, sales@ or support@ result as generic so it never lands in a sequence written to a named person.

  • Pass the bare domain and dedupe to root domains before a batch. A deep link is reduced to the site root before crawling, so acme.com/pricing crawls exactly the same pages as acme.com — and acme.com, www.acme.com and acme.com/contact are one site billed three times.

  • Add 'do not guess email patterns' to every batch prompt. A fabricated first.last@company.com is indistinguishable from a scraped result and bounces like a fake.

  • Reach for find_work_email first whenever you have a LinkedIn URL — 1 credit for a named address beats 0.5 credits for a shared inbox.

  • Treat an empty result as a normal outcome, not a failure. Many sites publish only a contact form: fall back to scrape_phones_from_website for a switchboard number or find_people_within_company for a named person.

  • Verify separately before you send. Published addresses go stale, and verify_email costs 0.3 credits per address on top of the 0.5 you spent on the crawl.

Complementary skills

Explore more

Ready to run /scrape-emails-from-website on your own data?