Zonaprop already does the hardest part of this job for you: it labels private owners separately from agencies. That label — seller_type — is the field that decides whether a phone number in your dataset is a published business contact or an individual's personal data, and those are not the same thing in any jurisdiction.
The label Zonaprop already applies
Argentine listings distinguish an inmobiliaria from a dueño directo — an agency from a direct owner — and the portal renders that distinction itself. The Actor carries it through as seller_type rather than inferring it from the publisher name, which is the kind of inference that quietly misclassifies a one-person agency as an individual and vice versa.
Why the label decides more than segmentation
As a market signal the split is already useful: the two segments price differently and respond differently. But the reason it is load-bearing is that the two carry different obligations.
A phone number an agency publishes is a business contact, published so customers will call it. A phone number an individual publishes to sell their apartment is personal data about that individual, published for one specific purpose — and “it was on a public page” is not a lawful basis for building a database of it.
Agency numbers
Always returned. This is the least contentious category of scraped contact data there is: a commercial entity publishing a contact channel in order to receive commercial contact.
Collecting is still not the same as using — rules on unsolicited commercial contact apply wherever you and the recipient are. But nothing about the collection needs special justification.
Private owners' numbers, and the default
Withheld unless you set includePrivateSellerPhone: true, and the input field says why. That is a deliberate design choice with the same shape as the one in the coches.net Actor — except that there the field is refused outright, and here it is an opt-in.
The difference is scale and traceability. On coches.net roughly 107,000 private sellers make the GDPR Article 14 information duty impossible for anyone to discharge. On a targeted Zonaprop run — one neighbourhood, one operation — the population is small enough that a lawful basis and a notification are conceivable for somebody who actually has one. So the decision is left to the user, marked as carrying a privacy consequence, rather than made silently in either direction.
`partial_phone` is not a phone number
This field causes confusion, so plainly: partial_phone is the five-digit fragment Zonaprop itself renders on the public listing page to any visitor. It covers the area code plus three digits.
The last five digits — the part that identifies the line — are never included, in any configuration. It is useful for de-duplicating publishers across listings without holding anybody's number, and it is useless for calling anybody, which is the point.
The Argentine framework, briefly
Argentina has had a data protection law since 2000 — Ley 25.326 — supervised by the Agencia de Acceso a la Información Pública. Like the GDPR it works on the basis that personal data needs a lawful basis and a purpose, and like the GDPR it does not treat public visibility as consent.
Practical guidance
- Split on
seller_typebefore anything else. Almost every analysis reads differently by segment. - Leave the private-phone flag off unless you can say why it is on. The default is the answer for the overwhelming majority of uses.
- Use
partial_phonefor de-duplication, which is what it is good for. - Have a removal route. This project has one: data removal.



