← all guides

Personal data in a scrape you did not plan for

Most scrapers that end up holding personal data didn’t set out to collect it. Someone built a pipeline to pull product listings, or job postings, or forum threads, and somewhere in that dataset sits a seller’s phone number, a poster’s real name, or a reviewer’s home address. Nobody wrote a line of code that said “get people’s contact details.” The data just came along for the ride, because that’s how most public web pages are built: content and personal information sit on the same page, often in the same paragraph.

This is the part of scraping that gets the least attention in setup guides, which tend to focus on proxies, headers, and getting past a 403. It deserves more attention than it gets, because the rules around personal data don’t care whether you meant to collect it. They care what you did with it once you had it.

Where personal data actually shows up

If you run scrapers at any scale, you’ve seen this pattern. A few common ones:

Marketplace and classifieds scraping. Product data is the target, but seller profiles often include a name, a phone number, sometimes a rough location. Some platforms display this by design, so buyers can contact sellers directly.

Forum and review scraping. Usernames often aren’t real names, but a meaningful share of them are, or are close enough to identify someone (first name plus last initial, a handle that matches their LinkedIn). Post history combined with a location or employer mentioned in-thread can be enough to identify a specific person.

Job board scraping. Postings frequently include a named hiring manager, a direct email, or a phone extension buried in the description text.

Business directory and B2B scraping. These sites are built around the assumption that a “business” listing carries no personal data. In practice a huge share of small business listings are a sole proprietor’s name, home address, and personal mobile number with a business label attached.

PDF and document scraping. Invoices, resumes, and public filings often carry metadata (author name, email) that never shows up in the rendered text, only in the file’s internal structure.

In every one of these, the operator’s actual goal was something else: prices, listings, threads, job data, filings. The personal data is incidental. That’s exactly why it gets missed. Nobody reviews a schema for a field they never asked to collect.

What counts as personal data is broader than most operators assume

A name and an email are the obvious cases. The broader legal definition, across most frameworks (GDPR in the EU, PDPA in Singapore, CCPA/CPRA in California), is closer to: any information that can identify a specific living person, directly or in combination with other data you hold.

That last part matters for scraping specifically. A username alone might not identify anyone. A username plus a city plus a job title, scraped from three different pages and joined in your database, often does. Scrapers are good at exactly this kind of combination, because the whole point of a pipeline is to merge fields from different sources into one clean row. The merge is what turns four harmless fragments into an identifiable profile.

IP addresses, device IDs, and precise geolocation are treated as personal data under most of these frameworks too, which is worth knowing if your scraper logs the target’s response metadata alongside the content, not just the content itself.

Proxies change your footprint, not your obligations

It’s worth being direct about this because it’s a common assumption: running requests through residential or mobile proxies changes how a target site sees your traffic. It does nothing to change what data protection law expects from the data you end up holding. A proxy rotates the IP a request comes from. It has no bearing on whether the response you got back contains someone’s phone number, or on what you’re allowed to do with that response afterward.

Scale is the actual multiplier here, and proxies are usually what makes scale possible. A script pulling forum threads by hand at ten pages a day is unlikely to accumulate a meaningful amount of personal data before someone notices and reconsiders. A rotating proxy pool running that same script across a million pages a day will build a very large incidental dataset very fast, without anyone reviewing it as it grows. The infrastructure that lets you scrape cleanly and reliably at scale is the same infrastructure that lets a personal-data problem grow unnoticed at scale. That’s not an argument against proxies. It’s an argument for treating data handling as part of the pipeline design, not an afterthought you deal with if someone complains.

What the rules actually ask of a scraper

Stripped of legal language, the recurring principles across GDPR, PDPA, and CCPA come down to a few practical things:

Purpose limitation. Collect what you need for the stated purpose, not everything a page happens to contain. If your goal is product prices, a seller’s personal phone number is not part of that purpose, even if it was on the same page.

Data minimization. If a field isn’t needed downstream, don’t store it. This is the single easiest control to apply to a scraper: filter fields before they hit the database, not after.

A lawful basis for processing. Most jurisdictions require some basis for handling personal data at all, even data that was publicly visible. “It was on a public page” is not, by itself, a basis under GDPR or PDPA. This surprises people who assume public equals free to use for any purpose.

Respecting individual rights. If you do hold personal data, people generally have a right to ask what you have on them and to request deletion. That’s very hard to honor if you don’t know your own dataset contains personal fields in the first place.

Site terms and robots.txt as a separate layer. A site’s terms of service and its robots.txt sit outside privacy law, yet they are often the first line that gets crossed, and courts in several jurisdictions have leaned on them when personal data scraping disputes reach litigation. Checking what a site’s terms actually say about automated collection is a normal part of scoping a scrape, not a formality.

None of this means scraping public data is off limits. It means personal data carries a higher bar than the rest of the dataset, and that bar exists whether or not the scraper’s author thought about it.

Designing for the data you didn’t ask for

A few things that hold up well in practice, from having run scrapers that pull from messy real-world sources:

Define the schema before the scrape runs, and drop anything outside it at parse time, not at analysis time. If “seller name” and “seller phone” aren’t in the schema, they never get written to disk.

Treat free text fields as a risk, not a convenience. A review body or a forum post can contain a name, an email, or a phone number typed inline, even if there’s no dedicated field for it. A basic pattern check (email regex, phone format) run over text fields before storage catches a meaningful share of this.

Log what you scrape, not just how you scraped it. If a dataset later turns out to contain personal data you didn’t intend to collect, you need to know which run produced it and how far it propagated, so you can actually delete it rather than guess.

Keep retention short for anything with incidental personal data risk. A dataset refreshed weekly for price tracking doesn’t need six-month-old snapshots sitting around with last month’s seller contact details still in them.

When you find personal data already in a dataset

This happens to almost everyone running scrapers at scale eventually. The reasonable response isn’t panic, it’s cleanup: identify the fields, strip or delete them, check whether the dataset needs to be regenerated with a tighter schema, and adjust the parser so it doesn’t happen again. It’s a much smaller problem caught early than caught after the dataset has been merged into three other systems and shared with a team that doesn’t know its origin.

Scraping at scale is infrastructure work: proxies, rotation, parsing, storage. Personal data handling is part of that infrastructure, not a separate legal question bolted on afterward. The pipelines that hold up over time are the ones that decide what they’re collecting before the first request goes out, not after the dataset is a problem.

More on running proxy-based scraping cleanly, and honest looks at the tools involved, is on the home page.

Get new guides and videos first — join the Telegram channel.

proxies
Need proxies that survive the block wall?

Singapore Mobile Proxy runs real 4G/5G mobile IPs on rotating SIMs — the carrier-grade addresses most of these targets still trust.

see plans →
read on
More scraping guides

The rest of the field manual: target-site playbooks, library walkthroughs, provider reviews, and anti-bot troubleshooting.

browse all guides →