Website Crawler – Whole-Site Text, Emails & Contacts avatar

Website Crawler – Whole-Site Text, Emails & Contacts

Pricing

from $0.80 / 1,000 results

Go to Apify Store
Website Crawler – Whole-Site Text, Emails & Contacts

Website Crawler – Whole-Site Text, Emails & Contacts

Give it a website, get every page as clean Markdown plus the contacts found on each: emails, social profiles, WhatsApp, contact page, tech stack. Follows internal links and the sitemap, respects robots.txt, capped by pages and depth. Fast HTTP crawl, no browser, flat price per page.

Pricing

from $0.80 / 1,000 results

Rating

0.0

(0)

Developer

Umaid Ali

Umaid Ali

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Categories

Share

Give it a website. Get back every page as clean Markdown, and on every page the business contacts it holds: emails, Facebook / Instagram / LinkedIn / X / YouTube / TikTok, WhatsApp, contact page, tech stack.

  • 🕸️ Follows the site itself – internal links plus the sitemap, so pages that the homepage never links to are found too. Same host only (subdomains optional).
  • 🤝 Polite by default – honours robots.txt, one site at a time, capped by pages and depth, a few parallel fetches. No hammering.
  • No browser – plain HTTP, hundreds of pages a minute, a fraction of the price of browser-based crawlers.
  • 🧾 Honest statusesok, thin (client-side rendered), parked, http_error, not_html, unreachable, blocked, refused. Every URL comes back with one.
  • 💵 Flat price per page. Nothing else.

🎯 What can you do with it?

  • Feed a RAG / LLM pipeline with a whole documentation site or knowledge base.
  • Find every contact point a business publishes across its site, not just the homepage.
  • Audit a site – thin pages, broken links (http_error), parked domains, tech stack.
  • Monitor content – schedule it weekly and diff the dataset.

Pair with Website Email & Contact Scraper + Page Content Extractor when you already have the exact URLs, and with the Google Maps actors to go from "dentists in Lisbon" to every clinic's full website.


▶️ How to use it

  1. Paste the homepage(s) into Websites to crawl.
  2. Set Max pages per site and Max link depth (defaults: 50 and 3).
  3. Optionally restrict with Only crawl URLs containing (e.g. /docs/) or Skip URLs containing (e.g. /tag/).
  4. Run. Download JSON / CSV / Excel, or push to your pipeline via the API.

⚙️ Input

FieldTypeDefaultNotes
startUrlslistSite homepages, up to 50 per run
maxPagesPerSiteinteger501–2,000
maxDepthinteger30 = start page only
includeSubdomainsbooleanfalseFollow blog.example.com etc.
includeUrlPatternsstring[]Keep only URLs containing one of these
excludeUrlPatternsstring[]Skip URLs containing any of these
useSitemapbooleantrueSeed from sitemap.xml
respectRobotsbooleantrueSkip disallowed paths
outputFormatmarkdown / textmarkdown
maxCharsinteger50,000Cut and marked truncated
includeContactsbooleantrueEmails, socials, WhatsApp, contact page, tech stack
includeLinksbooleanfalseOutgoing links per page (up to 500)
concurrencyinteger5Parallel fetches per site (1–10)

🧾 Output

One row per page – the same fields as the single-page extractor plus where it sits in the site:

{
"site": "acme.example",
"url": "https://acme.example/services/repair",
"depth": 2,
"found_on": "https://acme.example/services",
"status": "ok",
"http_status": 200,
"title": "Widget repair – Acme",
"description": "Same-day widget repair since 1999.",
"language": "en",
"headings": ["Widget repair", "Pricing"],
"content": "# Widget repair\n\nSame-day repair…",
"word_count": 512,
"truncated": false,
"emails": ["repairs@acme.example"],
"socials": {"instagram": "https://www.instagram.com/acme"},
"whatsapp": "+971501234567",
"contact_form_url": "https://acme.example/contact",
"tech_stack": ["wordpress", "google-analytics"],
"fetched_at": "2026-09-06T12:00:00+00:00"
}

🛡️ What it deliberately does not do

  • No personal data. Only role-based business mailboxes (info@, sales@…); person-named mailboxes are dropped. Nothing is collected from social profiles.
  • No JavaScript rendering. Client-side apps come back thin rather than faked.
  • No bypassing. A challenge or block is reported as blocked and we back off; robots.txt is honoured; private addresses are refused.
  • No cross-site wandering. Only the site you gave (and its subdomains if you ask).

❓ FAQ

How many pages will it find? Everything reachable by links within the depth limit, plus the sitemap, up to your page cap. depth and found_on show how each page was reached.

Can I crawl only a section? Yes – includeUrlPatterns: ["/docs/"].

Why is a page thin? Fewer than ~40 words of server-rendered text – usually a React/Vue app. Contacts may still be found in its HTML.


🧑‍💻 Support

Issues tab, or hello@locomint.io. Part of the Locomint local business data toolkit.