---
title: "Discussion on \"How to Build a B2B Contact List from Company Websites Responsibly\" | Hashnode"
description: "Discussion on \"How to Build a B2B Contact List from Company Websites Responsibly\". robots.txt and Crawl-delay, contact-page discovery, E.164 phone normalisation (Taiwan formats included), LINE links, de-duplication and GDPR/PDPA, with a runnable Python example."
url: "https://hashnode.com/posts/how-to-build-a-b2b-contact-list-from-company-websites-responsibly/6ad3339e7b0d9a1e1b7566ee"
---

[Feed](https://hashnode.com/feed) /

Discussion

# [How to Build a B2B Contact List from Company Websites Responsibly](https://hsinghsien-chen.hashnode.dev/how-to-build-a-b2b-contact-list-from-company-websites-responsibly?utm_source=hashnode&utm_medium=feed)

robots.txt and Crawl-delay, contact-page discovery, E.164 phone normalisation (Taiwan formats included), LINE links, de-duplication and GDPR/PDPA, with a runnable Python example.

Oct 17 · 11 min read · hsinghsien-chen.hashnode.dev  
Read the article

-   [#python](https://hashnode.com/tag/python)
-   [#web-scraping](https://hashnode.com/tag/web-scraping)
-   [#lead-generation](https://hashnode.com/tag/lead-generation)
-   [#gdpr](https://hashnode.com/tag/gdpr)

## Written by

[Raspberry Rondel](https://hashnode.com/@hsinghsien-chen)

@hsinghsien-chen

  
[View profile](https://hashnode.com/@hsinghsien-chen)

## Responses 1

Markdown supported · ⌘↵ to post

[OnlineProxy](https://hashnode.com/@onlineproxyio)

[Oct 18](https://hashnode.com/posts/how-to-build-a-b2b-contact-list-from-company-websites-responsibly/6ad3339e7b0d9a1e1b7566ee/comment/6ad4ec2c6ce00dfc4fbfaf3b)

i read through the code without running it and the main flow works. but a few parts are not quite good. if robots.txt can't be reached because of a DNS error, a refused connection or a timeout, the script crashes and the whole batch stops. phones are read from text lines rather than tel links, so the code and sections 3 and 4 don't quite match, and the label check can pick up a label from a neighbouring block. honouring the declared charset would help with japanese and older taiwanese sites where full width digits break under UTF-8. storing the base number and extension as separate fields would also fix the duplicate switchboard in the demo output
