← back to Rentv Adintel

docs/ADVERTISER_DATA_POLICY.md

82 lines

# RENTV Advertiser Intelligence — Data & Source Policy

The privacy, research, and source rules from the master prompt (§6), restated as
**operational policy**. Every rule here is enforced in code, not merely documented —
see `docs/SECURITY_ADVERTISER_VIEWER.md` for the enforcement points and the test suite.

## 1. No LinkedIn scraping — ever

- The generic fetcher hard-blocks `linkedin.com`, `www.linkedin.com`, `m.linkedin.com`,
  and `lnkd.in` (and any subdomain). Enforced in `lib/compliance/fetch-guard.js`
  (`assertFetchAllowed`) and tested in `test/compliance.test.js`.
- We **never** crawl or copy LinkedIn profile or company page content.
- LinkedIn **URLs** may be collected only from: a search-engine API result, a public
  first-party company page, an official event/speaker page, a press release, or a manual
  user entry. For each we store only the URL, the result title/snippet (when licensing
  permits), the discovery query, the discovery date, and a manual-review status.
- Every profile is opened by a human via **Open LinkedIn** / **Search LinkedIn**
  buttons in a normal browser — the app never fetches it.

## 2. No inferred / pattern-generated emails

- We **never** infer or generate an email address from a naming pattern
  (`first.last@domain`, `flast@domain`, etc.). `looksLikePatternEmail()` detects the
  forbidden case so importers and the UI can refuse it.
- A phone or email is stored **only** when it is explicitly published as a business
  contact on a first-party company page, press release, media kit, event page,
  government record, or public professional page — or manually entered by an authorized
  user.

## 3. Explicit-public-only contacts, with evidence

- `assertContactEvidence(contact)` throws unless the contact carries a
  `source_evidence_id` **and** `explicitly_public === true`. No evidence, no storage.
- Every displayed factual field is traceable to an evidence record (source URL, owner,
  title, observed date, retrieved date, access method, parser version, confidence,
  rights/export status).
- We never store home addresses, personal mobile numbers identified as private, dates of
  birth, or sensitive/protected attributes.

## 4. No invented ad spend

- We do **not** estimate a company's ad spend. The opportunity score (§13) ranks RENTV
  **sales opportunity** using activity counts, recency, fit, and evidence quality — never
  invented dollars. The output must never be relabeled an "ad-spend estimate."

## 5. Panelist ≠ sponsor; editorial ≠ advertising

- A verified panelist/speaker is stored as `SPEAKER_OR_PANELIST_ONLY`. It may not be
  promoted to `VERIFIED_CONFERENCE_SPONSOR` / `VERIFIED_ADVERTISER` without separate
  sponsor evidence. Enforced by the classification guard and tested in
  `test/classification.test.js`.
- Editorial coverage is not advertising without a disclosure or a direct record. CoStar
  Group is seeded as `VERIFIED_CONTENT_PARTNER`, not a paid sponsor.

## 6. Suppression, correction, and do-not-contact are honored

- Correction, suppression, and do-not-contact requests are respected in search, exports,
  and outreach preparation. A suppressed or do-not-contact record is filtered out of
  every export.

## 7. Rights-aware exports

- Exports honor suppression, do-not-contact, private notes, and source rights.
  `applyExportRights(rows, kind)` filters out suppressed rows, do-not-contact /
  export-disallowed contacts, private notes, and `INTERNAL_EVIDENCE_ONLY` creative
  assets. Internal-only evidence images never leave the app.

## 8. Only official APIs; no bypassing controls

- Google Analytics, Search Console, Google Ads, Gmail, and search providers are accessed
  only through their official APIs.
- We never bypass authentication, paywalls, CAPTCHAs, robots directives, rate limits, or
  anti-bot controls, and we never scrape proprietary login-gated databases (CoStar,
  LoopNet, ZoomInfo, Apollo, MLS).
- We do not auto-open email click-tracking URLs (that would create false clicks); the
  tracking URL is stored and opened only by a deliberate human action.

## 9. Reversible merges

- Uncertain entities are never silently merged. Merges are reversible with a full
  side-by-side review, evidence, conflicts, and undo (§12).